blind sql은 비밀번호를 하나하나씩 알아내어 완전한 비밀번호를 찾는 sql injection 기법이다.
예를 들어 admin의 계정이 다음과 같다고 하자.
username : admin
password : P@ssword
그러면 평범한 blind sql injection은 다음과 같이 할 수 있다.
Select * from users where username="admin" and substr(password, 1, 1)="P";
admin계정의 비밀번호 첫자리가 P이니깐 admin계정 정보가 출력될것이다.
반대로 P가 아닌 다른 문자면은 출력이 안될것이다.
이걸 이용해서 첫자리부터 끝자리까지 대입해서 확인하면 full password를 확인할 수 있다.
하지만 이걸 다 대입하기엔 문자에 숫자에 너무 많다. 그래서 방안을 3가지 정도 가져와봤다.
1. 파이썬 자동화 코드 짜기
이건 뭐 너무 당연한 말이다.
먼저 length()함수로 비밀번호 길이 확인 후 반복문으로 문자와 숫자를 다 대입해서 확인해보면 알 수 있다.
2. 이진 탐색
이진 탐색을 이용해 좀 더 빠르게 찾을 수 있다.
아스키에서 출력 가능한 문자 범위는 32~126이므로 먼저 그 중간인 79보다 큰지 확인하고 아니면 32~79 중간 값을 확인하고 하면은 좀 더 수월하게 찾을 수 있을 것이다.
3. Bit 연산
이 글의 핵심 단어이다.
바로 bit연산인데 아스키는 0부터 127범위의 문자를 표현 가능하며 7개의 비트에 표현 가능하다.
예를 들어 A를 bit로 표현하면 1000001이다. 이는, 7개의 자리를 각각 0인지 1인지 확인하면 무슨 문자인지 알 수 있다는 것이다.
즉, 7번만 연산하면 답을 알 수 있다.
Select * from users where username="admin" and substr(bin(ord(password), 1, 1)=1;
Select * from users where username="admin" and substr(bin(ord(password), 2, 1)=1;
Select * from users where username="admin" and substr(bin(ord(password), 3, 1)=1;
....
'Web Hacking > Information' 카테고리의 다른 글
칼리 리눅스를 활용한 실전 모의해킹 (0) | 2023.11.20 |
---|---|
SQL INJECTION 예방책 - prepared statement (0) | 2023.10.28 |
sql injection 주석 사용 주의점 (0) | 2023.10.20 |
php에서 셸 스크립트 언어 사용하기 (0) | 2023.10.10 |
SQL Injection 공격 방법 (논리 연산자 & 주석) (0) | 2023.09.17 |