Blind SQL injection

devguri·2022년 10월 6일
0
post-thumbnail
post-custom-banner

Blind SQL injection

오류 메시지 출력되지 않는 경우 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 값을 확인하여 sql 쿼리를 조작하라고 했음
  • 현재 cookie를 확인하였더니 TrackinId를 확인할 수 있다.
    Cookie: TrackingId=Cyx139z81x7YgTa8;

2. Repeater 기능 사용

proxy가 잡은 현재 페이지를 repeater로 보내어 request, response 값을 확인한다.

[SQL 쿼리문이 TRUE인 경우]

  • sql 쿼리가 true를 반환하면 Welcome back!을 정상적으로 출력해준다.

[SQL 쿼리문이 FALSE인 경우]

  • |를 출력함

3. SQL 쿼리 조작하기

(SELECT 'a' FROM users WHERE username='administrator' AND LENGTH(password)>1)='a

  • password가 1보다 큰 경우 True 값이기 때문에, Welcome back 메시지 출력함

LENGTH(password)>1 을 조작하면 패스워드가 20일떄 false가 나오는 것을 알 수 있으며 password의 길이는 20이다.

4. 해당 20자리 패스워드를 Intruder 기능으로 찾아내기

intruder로 보내 해당하는 패스워드를 찾아낸다.

(SELECT SUBSTRING(password,1,1) FROM users WHERE username='administrator')='a

-> 활용하여 첫 번째 글자를 찾아냄

-> Burte forcer 공격 보내고 길이 다른 응답을 통해 password 알아낼 수 있음

✅ password -> z1hvpwred13qaahlrytk

Blind sqli 실제 취약점(one day)

Blind sqli

좋아요 기능으로 모든 사용자의 프로필 사라지게 하는 공격

comment_id가 정수로 처리되고 쿼리에서 이스케이프 처리되지 않았음
WAF/filters가 따옴표를 차단할 때도 유용함

profile
Always live diligently
post-custom-banner

0개의 댓글