Miscellaneous

Blind SQL Injection 이란?

다복이·2019년 6월 8일·조회 6,047

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

댓글 0

로그인 후 댓글을 남길 수 있습니다.

아직 댓글이 없습니다.