1. Blind SQL Injection 개념
쿼리 결과로 나오는 참, 거짓을 이용하여 DB의 정보를 취득하고자 하는 기법이다.
DB가 SQL Injection에 대응되어 있는 경우에 참, 거짓을 구분할 수 있는 SQL문을 이용하여 데이터를 알아내는 기법이다.
2. 특징
숫자 형태의 데이터까지 파악할 수 있다.
프록시 도구를 이용하거나 소스를 수정하여 SQL Injection 대응 체계를 우회할 수 있다.
3. 종류
3-1. 추론 기법에 의한 공격
3-1-1. Time 기반
sleep() 이나 롱 쿼리를 이용하여 시간 지연을 발생시킨다.
3-2-2. Response 기반
기존 쿼리에 다른 구문이 추가되거나 추론값에 의해 아무런 결과를 출력하지 않을 수 있다.
3-2. 외부 대역 채널 공격
사용 가능한 외부 대역 채널을 이용하여 많은 양의 정보를 직접 추출한다.
4. 함수
몇가지 기본적인 함수를 알고 있어야 한다.
4-1. substr
문자열을 자를 때 사용하는 함수이다. 시스템 버전을 알아내야 하는데 예를 들어 MySQL의 메이저 버전을 찾기 위해 사용한다. substring(@@version,1,1) 하면 4인지 5인지 알 수 있게 된다.
4-2. ascii
문자의 아스키 값을 리턴하는 함수이다.
5. 예제
5-1. 소스 코드
[ bbs.php ]
<?php $db = mysql_connect( 'localhost', 'root', '12345' ); mysql_select_db( 'blind', $db ); $sql = "SELECT * FROM bbs WHERE no={$_GET[no]}"; if( $ret ){ print "This is BBS<br>"; while( $row = mysql_fetch_row( $ret ) ) { print "Subject: $row[1] <br>"; print "Content: $row[2] <br>"; } } ?>
5-2. 실행
- http://127.0.0.1/bbs.php?no=10
- http://127.0.0.1/bbs.php?no=10%20test
- -> SELECT * FROM news WHERE no=1 test