yehey's 공부 노트 \n ο(=•ω<=)ρ⌒☆

SQL injection 실습3 (Blind) 본문

웹/웹 해킹

SQL injection 실습3 (Blind)

yehey 2020. 9. 30. 19:42
실습환경 DVWA-SQL injection (Blind), kali 리눅스

Blind SQL injection 실습

1을 입력 했을 때
6을 입력 했을 때

이번에는 SQL syntax error가 출력되는 것이 아니라 사용자가 존재하는지 여부만 알려주고 있다.

'를 입력해도 별 다른 에러가 발생하지 않아서 이 폼이 SQL 쿼리문을 사용하는지 사용하지 않는지도 알 수 없다.

그래서 우선 SQL 쿼리문을 사용하는지 사용하지 않는지를 먼저 알아보자

 

항상 참인 쿼리문 입력하기

1' AND 1=1#

이렇게 입력하면 User ID가 1인 사용자뿐만 아니라 1=1이라는 항상 참이 되는 조건이 추가되었기 때문에

id='1'인 사용자도 존재하고 1=1도 참이기 때문에

만약 폼이 SQL 쿼리문을 사용한다면 사용자가 존재한다는 결과가 나올 것이고

SQL 쿼리문을 사용하지 않는다면 1' AND 1=1#을 하나의 문자열로 처리해서 사용자가 존재하지 않는다가 나올 것이다.

사용자가 존재한다는 결과가 나왔으므로 입력 폼이 SQL 쿼리문을 사용한다는 것을 알 수 있다.

 

Blind SQL injection 공격과 SQL injection 공격의 차이

일반적인 SQL injection 공격은 결과를 직접적으로 알아낼 수 있지만 (특정 테이블 결과 출력과 같이)

Blind SQL injection 공격은 명제를 제시하고 참인지 거짓인지(특별한 응답의 발생 여부)를 통해 원하는 정보를 얻어낸다.

그 과정에서 시간은 오래 걸리지만 정보는 얻어낼 수 있다.

(ex. 패스워드를 찾을 때, 패스워드의 첫 번째 값이 a인가? 와 같은 명제를 반복해서 패스워드를 구할 수 있다.)

 

그럼 이제 blind SQL injection 공격을 Time based를 이용해 실행해보자!

Time based? 
시간 지연을 통해 참/거짓을 판단, 시간 지연이 특별한 응답

공격을 원하는 페이지에서 F12를 눌러 Network을 열어주고 입력 폼에 다음 문장을 넣어 실행시켜본다.

1' AND SLEEP(5)#

다음과 같이 응답이 5006ms 정도 걸린 것을 볼 수 있다.

이번에는 존재하지 않는 값을 넣어보자

6' AND SLEEP(5)#

이번에는 응답에 15ms 정도 걸렸다. 

따라서 조건이 참인지 거짓인지 시간 지연을 통해 알 수 있다.

 

Blind SQL injection 공격을 통해 원하는 정보를 얻을 수는 있지만 앞서 말한 것 처럼 시간 소요가 크다.
그래서 Blind SQL injection 공격은 자동화 프로그램을 많이 이용한다. (일반 SQL injection 공격도 자동화 프로그램 사용 가능)
칼리에서는 "sqlmap"이 설치되어 있다.

 

' > 웹 해킹' 카테고리의 다른 글

Reflected XSS 공격 실습  (0) 2020.10.04
Command injection 공격 실습  (0) 2020.10.01
SQL injection 실습2 (ORDER BY & UNION)  (0) 2020.09.30
SQL injection 실습1 (WHERE 구문 우회)  (0) 2020.09.29
Brute Force Attack + DVWA실습  (0) 2020.09.27
Comments