Blind SQL Injection이란?
AND 연산자를 이용하여 작성된 서브 쿼리가 True이면 결과가 보이고, False이면 결과가 보이지 않아 이를 바탕으로 데이터를 탈취할 수 있는 SQL Injection이다.
실습
Oracle 데이터베이스의 DB 사용자명을 알아내는 것이 이번 실습의 목표이다.
[ Oracle SQL Injection에 사용되는 대표적인 SQL 명령어가 정리되어 있는 사이트 ]
https://pentestmonkey.net/cheat-sheet/sql-injection/oracle-sql-injection-cheat-sheet
Oracle SQL Injection Cheat Sheet | pentestmonkey
Oracle SQL Injection Cheat Sheet Some useful syntax reminders for SQL Injection into Oracle databases… This post is part of a series of SQL Injection Cheat Sheets. In this series, I’ve endevoured to tabulate the data to make it easier to read and to
pentestmonkey.net
Step1. 목표로 하는 데이터의 글자 수 알아내기
LENGTH 명령어를 이용하여 DB User명의 글자수를 알아낸다.
# 글자수의 대략적인 범위를 추정 및 특정하고, 그 안에서 범위의 간격을 좁혀나가도록 해야한다.
# 글자수가 5이상인가? YES
영등포동’ and length((SELECT user FROM dual)) >5--
# 글자수가 10이하인가? YES
영등포동’ and length((SELECT user FROM dual)) <10--
# 위와 같은 과정을 거쳐서 알아낸 최종 DB User의 글자수 = 7
영등포동’ and length((SELECT user FROM dual)) =7--
위와 같이 글자수가 7이냐는 서브쿼리 질문에 검색 결과가 정상적으로 출력된 것을 보아 DB User의 글자수는 7글자라는 것을 알 수 있다.
Step 2. ASCII 함수와 SUBSTR 함수를 이용하여 목표 데이터 내용 알아내기
ASCII 함수와 SUBSTR 함수를 이용하여 user 글자를 한글자씩 Blind SQL Injection을 진행하여 해당 자리의 글자를 알아낸다.
# substr로 dual테이블의 user 데이터를 한글자씩 쪼갠 상태에서,
# 1번째 자리의 글자가 ASCII 코드로 73(I)인지 물어보는 SQL문
영등포동' and ascii(substr((SELECT user FROM dual),1,1)) =73 –
위와 같이 데이터의 첫번째 글자가 I(ASCII 코드로 73)인지 묻는 서브쿼리에 True가 나왔으므로, DB User의 첫번째 글자는 'I'라는 것을 알 수 있다. 같은 방식으로 나머지 2~7번째 글자를 찾은 결과는 아래와 같다.
위와 같은 과정을 통해 알아낸 DB User는 INFOSEC이라는 것을 확인할 수 있다.
+ 추가
Blind SQL Injection은 검색창에서만 가능한 것이 아닌, 사용자의 입력값을 가지고 데이터베이스에서 데이터를 가져와 출력하는 모든 기능을 가지고 있는 페이지에서 일어날 수 있다.
그 예시로 로그인 페이지에서 진행하는 Blind SQL Injection 실습 예시를 살펴보겠다.
위의 실습과 마찬가지로 DB User명을 알아내는 실습으로, SQL 서브쿼리는 위의 실습과 동일하다.
작성한 SQL 서브쿼리의 결과가 False일 경우 | |
![]() |
![]() |
작성한 SQL 서브쿼리의 결과가 True일 경우 | |
![]() |
![]() |
위와 같이 로그인 페이지의 ID 입력창에서 Blind SQL Injection을 실행한 결과 위와 같이 서브쿼리의 결과가 False일 경우에는 로그인 불가 알림창이 뜨고, True인 경우에는 로그인이 성공하게 되는 것을 확인할 수 있다.
그 외에도 URL 파라미터에서 변수명, 입력값에 따라 해당 값을 그대로 데이터베이스의 데이터를 가져오는데 사용하는 경우에도 Blind SQL Injection 뿐만 아니라 다른 SQL Injection으로도 주요 데이터를 탈취할 수 있으니 주의해야 한다.
'정보 보안 > 취약점 분석' 카테고리의 다른 글
CSRF (0) | 2024.08.25 |
---|---|
XSS (0) | 2024.08.25 |
Error-based SQL Injection (0) | 2024.08.19 |
Union SQL Injection (0) | 2024.08.19 |
XSS (0) | 2024.06.27 |