那是一个阳光明媚的下午,来到了客户单位测试系统。在我黄金右手的加持下,我发现了一处注入!
哦哟,高危要到手了。于是我习惯性的拿Mysql的语句打了几发,发现没反应,好吧。又换成Sqlserver的语句,也没反应,或许是我不行……那,我就掏出Sqlmap了喔!
于是,在经过了几分钟的梭哈之后,我特么的,梭了个寂寞。
毛都没识别到,然后我换成 ghauri 再次尝试,因为在之前的测试中,有些Sqlmap梭不出来的,它确实梭出来了。
哎,你猜这么着?一下就识别到了这里是有注入的,我以为春天来了,不需要我自己动手的时候,现实给了我沉重的一击。
然后我就把它放在那跑,去测别的漏洞了,嘿……结果二十几分钟过去了,它依然停留在这一步???
没办法了,这个位置肯定是有注入,放过是不可能放过的,这辈子不可能放过的。梭不出来就靠自己,最后通过我的传家宝字典加上BP爆破,嗯,Oracle延时注入。
'/**/and/**/DBMS_PIPE.RECEIVE_MESSAGE('RDS',3)='a
好了,接下来可以直接拿这个语句构造,至于这个语句的意思,简单介绍一下吧。
DBMS_PIPE.RECEIVE_MESSAGE函数,是用于从指定管道来获取内容的,他的格式大致来说是这么个意思:
DBMS_PIPE.RECEIVE_MESSAGE('管道名称',延时时间)
如果设置的管道不存在,会隐藏式的创建对应名称的管道,所以这个Payload一般是这样的,基本都是使用RDS管道:
DBMS_PIPE.RECEIVE_MESSAGE('RDS',3)
但我发现,在一般情况下,大部分使用Oracle的真实系统,如果成功延时的话,其延时时间都会乘以2,也就是说:如果我们设定延时三秒,实际上会延时6秒。
那么,接下来简单修改一下语句,通过decode函数以及DBMS_PIPE.RECEIVE_MESSAGE函数配合来进行判断,再利用BP来爆破获取即可。
decode(condition,value,dbms_pipe.receive_message('RDS',5),0)
意思就是:
decode(语句,值,dbms_pipe.receive_message('RDS',5),0)
'and(select+decode(length(user),7,dbms_pipe.receive_message('RDS',5),0)+from+dual)='1
比如,我设置5秒,实际上响应延时10秒钟后才返回。有时候也会因为本身服务器或网络波动,实际上会再多出一到两秒:
通过上述步骤,可以判断出Oracle数据库用户名为7位长度,接下来修改一下语句。
substr的第二个参数,用来爆破获取对应第几个位置的内容,语句中的 'X',就是用来爆破,获取数据值的位置:
'and(select+decode(substr(user,1,1),'X',dbms_pipe.receive_message('RDS',5),0)+from+dual)='1
文章可能比较垃,我主要想要说明的一个点是:咱们还是不能过度依赖工具。
![黄金右手 | 一次项目中的Oracle注入简单记录 黄金右手 | 一次项目中的Oracle注入简单记录]()
利用本账号所发文章
进行直接或间接的非法行为
均由操作者本人负全责
犀利猪安全及文章对应作者
不为此承担任何责任
文章来自互联网或原创
如有侵权可联系我方进行删除
并诚挚的跟您说声抱歉
原文始发于微信公众号(犀利猪安全):黄金右手 | 一次项目中的Oracle注入简单记录
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
点赞
https://cn-sec.com/archives/2570034.html
复制链接
复制链接
-
左青龙
- 微信扫一扫
-
-
右白虎
- 微信扫一扫
-
评论