오류 메시지 출력되지 않는 경우 SQL 쿼리 동작으로 DB 구조를 파악하여 공격하는 기법이다.
조건이 참이면 페이지 정상적으로 출력, 거짓인 경우 페이지 출력되지 않는다.
✅ PortSwigger
Blind SQL Injection 문제
The database contains a different table called users, with columns called username and password. You need to exploit the blind SQL injection vulnerability to find out the password of the administrator user.
➡️ 문제에 핵심은 administrator 이라는 user의 password를 알아내어 로그인 하는 것이다 (문제를 잘 읽자)
Cookie: TrackingId=Cyx139z81x7YgTa8;
proxy가 잡은 현재 페이지를 repeater로 보내어 request, response 값을 확인한다.
[SQL 쿼리문이 TRUE인 경우]
[SQL 쿼리문이 FALSE인 경우]
(SELECT 'a' FROM users WHERE username='administrator' AND LENGTH(password)>1)='a
LENGTH(password)>1
을 조작하면 패스워드가 20일떄 false가 나오는 것을 알 수 있으며 password의 길이는 20이다.
intruder로 보내 해당하는 패스워드를 찾아낸다.
(SELECT SUBSTRING(password,1,1) FROM users WHERE username='administrator')='a
-> 활용하여 첫 번째 글자를 찾아냄
-> Burte forcer 공격 보내고 길이 다른 응답을 통해 password 알아낼 수 있음
✅ password -> z1hvpwred13qaahlrytk
좋아요 기능으로 모든 사용자의 프로필 사라지게 하는 공격
comment_id
가 정수로 처리되고 쿼리에서 이스케이프 처리되지 않았음
WAF/filters
가 따옴표를 차단할 때도 유용함