Blind SQL Injection 이란?


Blind SQL Injection은 임의의 SQL 구문을 삽입하여 인가되지 않은 데이터를 열람할 수 있는 공격 방법이라는 점에서 일반적인 SQL Injection과 동일하다.


다만 일반적인 SQL Injection의 경우에는 조작된 쿼리를 입력 해 한번에 원하는 데이터를 얻을 수 있지만, Blind SQL Injection은 쿼리 결과에 따른 서버의 참과 거짓 반응을 통해 공격을 수행한다.


즉, 쿼리에 대한 결과가 참일때와 거짓일 때 서버의 반응이 나타나야 하며 이를 구분할 수 있어야 한다.


Blind SQL Injection을 수행하기 위해선 몇 가지 기본적인 함수에 대해 알고 있어야 한다.


1. substr


substr은 문자열을 자를 때 사용하는 함수이며 사용 방법은 아래와 같다.


substr(자를 문자열, 자를 문자의 시작점, 자를 문자 개수)


예를 들어, str = substr("HelloWorld", 1, 3)일 경우, substr함수를 통해 HelloWorld의 1번째 부터 3개의 문자가 str에 저장된다.


즉, str에는 Hel이 저장된다.


만약 str = substr("HelloWorld", 5, 2)일 경우에는 str에는 oW가 저장된다.


2. ascii


ascii 함수는 문자의 아스키 코드 값을 반환해 주는 함수이다.


ascii(아스키 코드로 반환 할 문자)


위와 같은 형태로 사용되며, ascii(a)의 경우 a의 아스키 코드 값인 97이 반환된다.


위의 2 가지 함수를 통해 Blind SQL Injection을 수행할 수 있다.



공격 방법


위에서 언급했듯, Blind SQL Injection은 쿼리 결과에 따른 서버의 반응을 보고 공격을 수행한다.


공격 예시를 보이기 전 몇 가지 상황을 가정하려 한다.


1. table의 이름은 users이다.


2. 속성에는 id와 pw가 있다.


3. 공격자는 테이블 명과 admin의 id는 이미 알고 있다.


4. 서버에서는 로그인에서 자주 사용되는 SELECT * FROM users where id='(입력받은 id)' and pw='(입력받은 pw)';  형태의 쿼리문을 실행한다.


이 때 공격자는 admin의 pw를 알아내기 위한 Blind SQL Injection 공격을 수행하려 한다.


먼저 id는 알고 있으므로, 로그인 창의 ID 입력 부분에는 admin의 id를 입력한다.


id의 뒤에는 pw의 첫 글자를 알아내기 위한 쿼리를 삽입한다.


ascii(substr(select pw from users where id = 'admin', 1, 1))의 쿼리를 사용하면 users 테이블에서 id가 admin인 행의 pw의 첫 글자를 가져와 아스키 코드로 바꾸어 준다.


공격 시에는 이를 활용한다.


즉, ID 입력 칸에 admin' and ascii(substr(select pw from users where id = 'admin', 1, 1)) < 100 -- 을 삽입한다.


위의 쿼리를 삽입함에따라 서버에 전달되는 전체 쿼리는 다음과 같다.


SELECT * FROM users where id='admin' and ascii(substr(select pw from users where id = 'admin', 1, 1)) < 100 -- and pw='(입력받은 pw)'


원래의 쿼리에서는 users 테이블에서 id와 pw를 입력받아 두 값이 동일한 행을 찾아 출력하는 쿼리문이었다.


하지만 공격 쿼리를 삽입한 후에는 id가 admin이고, id가 admin인 행에서 pw의 첫 글자를 아스키 코드로 바꾼 값이 100 이하여야 쿼리문이 동작한다.


뒤의 pw를 입력받아 이를 비교하는 구문은 주석처리 된다.


따라서 만약 pw의 첫 글자가 아스키 코드 값으로 100 이하가 될 경우에는 쿼리문이 실행되고, 아닐 경우에는 쿼리문이 실행되지 않는다.


위와 같은 방법을 반복하면 pw의 첫 글자를 알아낼 수 있으며, 더 나아가 pw의 전문을 알아낼 수 있다.



이것으로 Blind SQL Injection에 대한 기본적인 설명을 마치고, 다음번엔 직접 실습 환경을 구성하고 공격을 실습하려 한다.


Created by ccoma

'WEB > Web Hacking' 카테고리의 다른 글

error based sql injection  (0) 2017.09.18
Drive-By-Download(DBD)공격(실습편)  (0) 2017.05.29
파일 다운로드 취약점  (0) 2017.05.08
CSRF (Cross-site request forgery) 란  (0) 2017.04.28
Drive-By-Download(DBD) 공격(이론편)  (0) 2017.04.24

+ Recent posts