Boolean-Based SQL Injection이란
쿼리의 결과를 참과 거짓만 출력하는 페이지에서 사용하는 공격이다
출력 내용이 참과 거짓 밖에 없기 때문에 데이터베이스의 내용을 추측한다.
예를 들어
SELECT * FROM Users WHERE UserID = 1 AND 1=1; <<<<<<참
SELECT * FROM Users WHERE UserID = 1 AND 1=2; <<<<<<거짓
위 두 코드를 보면 첫 번째 쿼리는 1=1이 참이므로 데이터가 반환된다. 그러나
반면에 두 번째 쿼리는 1=2가 거짓이므로 데이터가 반환되지 않는다. 이러한
차이를 이용해 공격자는 데이터베이스 구조를 추측할 수 있다.
Time Based SQL Injection 도 마찬가지로 서버로부터 특정한 응답 대신에
참 혹은 거짓의 응답을 통해서 데이터베이스의 정보를 유추하는 기법이다.
공격자는 시간 지연을 통해 쿼리의 참/거짓 여부를 판단하고 정보를 추출할 수 있다.
예를 들어
SELECT * FROM Users WHERE UserID = 1; <<<<일반적인경우
SELECT * FROM Users WHERE UserID = 1 AND IF(1=1, SLEEP(5), 0); <<참인경우
위 두 코드를 보면 두 번째 쿼리에서는 1=1이 참이므로 SLEEP(5)가 실행되어
데이터베이스가 5초 동안 응답을 지연시킨다.
요약하면
Boolean-Based SQL Injection: 참/거짓 조건을 사용하여 결과를 분석하는 기법.
Time-Based SQL Injection: 데이터베이스의 응답 시간을 측정하여 결과를 추론하는 기법.