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
Boolean Based
Bollean Based 인젝션은 참과 거짓만 출력하는 페이지에 공격자가 조작한 쿼리로 인해 데이터베이스 내용을
노출하는 취약점이다. 쿼리는 데이터베이스 내용이 일치하여 웹 페이지에서 참을 출력시킬 때까지 임의의 값을 대입한다.
Blind Injection 공격을 위한 기본 문법
length() : 입력값에 대한 길이를 출력하는 함수

substring() : 문자열을 조건에 따라 출력
ex) select substring(“abcde”, 1, 3);
=> 문자열 “abcde” 에서 첫 번째 글자부터 세 번째 글자까지 출력
