Network

Blind SQL 인젝션

delay_year 2022. 11. 23. 10:58

'Blind SQL' 인젝션은 쿼리의 결과를 참과 거짓으로만 출력하는 페이지에서 사용하는 공격이다.

출력 내용이 참 / 거짓 밖에 없어서 그것을 이용하여 데이터베이스의 내용을 추측하여 쿼리를 조작한다.

 

- 에러 메시지를 통해 직접적으로 정보를 획득하지 않음

- 눈에 보이지 않기 때문에 일일이 하나씩 유추해서 원하는 결과를 얻어야 함

- 공격자가 유추한 데이터를 SQL Query에 대입하여 결과를 참/거짓으로 구분하여 데이터를 획득

 

참/거짓을 구분할 수 있는 서버의 응답이 필요 함


예를 들어

 

여기서 로그인을 하면 결과값(성공,실패)이 반환되는 경우를 의미함

> 성공이냐 실패냐가 명확한 페이지가 공격대상

 

where id='' //id의 값이 빈값으로 이루어진 id가 있는가? 거짓

>앞 조건의 거짓 값을 뒤의 조건을 통해 참으로 만들어서 인젝션 공격

 


앞이 and 연산자이면 무조건 참이여야 한단다  1 = 1

select * from client where name='anjinma' and password='12345'

OR 연산자이면, 앞에 값과 뒤에 값 중 하나라도 참이면 참이므로 참이다. 

select * from client where name='anjinma' and password=' or '1'='1

 

SQL인젝션 공격흐름과 얼핏보면 같지만, blind sql은 참,거짓으로만 출력시킴

Boolean Based 

Bollean Based 인젝션은 참과 거짓만 출력하는 페이지에 공격자가 조작한 쿼리로 인해 데이터베이스 내용을

노출하는 취약점이다. 쿼리는 데이터베이스 내용이 일치하여 웹 페이지에서 참을 출력시킬 때까지 임의의 값을 대입한다.

 

 

 

Blind Injection 공격을 위한 기본 문법

length() : 입력값에 대한 길이를 출력하는 함수
 
substring() : 문자열을 조건에 따라 출력
ex) select substring(“abcde”, 1, 3);   
=> 문자열 “abcde” 에서 첫 번째 글자부터 세 번째 글자까지 출력