Web Hacking/Information

bit연산 이용한 Blind sql injection 기술

프레딕 2023. 10. 16. 22:53
728x90

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;
....

 

728x90
반응형