본문 바로가기
정보 보안/취약점 분석

Blind SQL Injection

by little_drops_or_water 2024. 8. 25.

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