스무고개 게임과 유사한 방식으로 데이터를 알아내는 공격 기법
# 첫 번째 글자 구하기
SELECT * FROM user_table WHERE uid='admin' and substr(upw,1,1)='a'-- ' and upw=''; # False
SELECT * FROM user_table WHERE uid='admin' and substr(upw,1,1)='b'-- ' and upw=''; # True
# 두 번째 글자 구하기
SELECT * FROM user_table WHERE uid='admin' and substr(upw,2,1)='d'-- ' and upw=''; # False
SELECT * FROM user_table WHERE uid='admin' and substr(upw,2,1)='e'-- ' and upw=''; # True
위 코드는 Blind SQL Injection 공격시 사용 할 수 있는 쿼리이다.
해당 함수는 문자열에서 지정한 위치부터 길이까지의 값을 가져온다
substr(string, position, length)
substr('ABCD',1,1)='A'
substr('ABCD',2,2)='BC'
공격 쿼리문의 두 번째 조건을 살펴보면, upw의 첫 번째 값을 아스키 형태로 변환한 값이 'a' 또는 'b'인지 질의한다
질의 결과는 로그인 성공 여부로 참/거짓을 판단할 수 있다.
만약 로그인이 실패할 경우 첫 번째 문자가 'a'가 아님을 의미.
이처럼 쿼리문의 반환 결과를 통해 admin 계정의 비밀번호를 획득할 수 있다.
substr 외에도, 각 DBMS에서 제공하는 내장 함수를 잘 이용하는 것으로 원하는 데이터를 추출할 수 있다.