文章总结: 本文分享了两个Oracle数据库SQL注入与WAF绕过的实战案例。核心在于利用Oracle管道符无需布尔值对等闭合的特性识别数据库。案例一通过转换POST请求突破长度限制,利用大量换行脏数据干扰WAF匹配,结合instr函数提取数据。案例二针对严格长度限制,通过Fuzz发现WAF拦截函数名与括号紧邻的特征,利用多行注释穿插绕过,并结合instr索引与除以零错误控制布尔返回,成功规避等号等运算符的拦截。本文提供的脏数据填充与注释分隔技巧具备较高实操价值。 综合评分: 80 文章分类: 渗透测试,WEB安全,实战经验,漏洞分析
Oracle注入waf绕过等思路
原创
夜子 夜子
夜子安全Sec
2026年3月26日 09:26 广西
在小说阅读器读本章
去阅读
郑重声明
本公众号文章源自作者日常积累及授权转载,未经许可严禁转载,转载需联系开白。文中内容仅限学习交流,严禁用于商业及非法用途,涉及网络安全相关未经授权不得测试,违规使用后果自负,与作者及本号无关 。
常规的SQL注入渗透中,我们一般对MySQL数据库以及MSSQL数据库已经熟悉的不能再熟悉了所以说有部分师傅对这种数据库的注入还是有能力可以绕过部分waf,并且每一种数据库的注入的绕过方式也是各有千秋,主要还是这两个数据库大多数网站使用,Oracle一般是比较大型的企业会用这种数据库,其他的数据库的比较冷门,但也要知道如何注入。不过我碰到access数据库套个waf那种基本没招了(老站点可能会用这种数据库)
案例一:
通过一些测绘资产工具收集到一个vue搭建的查小票功能点,发现这个点输入小票数字加单引号没有产生注入,并且也没有任何的功能点,这时候有师傅就跑路了,但是事情还没结束。
可以看到后端做了长度限制,导致我们注入不了
这个时候熊猫头findsomething发力了,给我提出了一个路径,发现路由地址跟前面的小票查询的不一样,估计是之前做的,然后路由地址没删,尝试拼接,并且加入单引号进行判断。老规矩了,单双引号的数据返回,成功判断出该处存在SQL注入。
接着我们就尝试判断数据库,尝试闭合给我返回空白,有waf拦截了,通过数据库的闭合判断可以初步筛掉Mysql,因为需要布尔值的闭合,一般这种条件只有Mssql和Oracle存在。最后利用管道符成功地闭合了。数据库中的管道符意义不同(注意:oracle数据库利用管道符闭合不需要有布尔值的条件闭合,但是and和or需要一个对等值)
Mysql(|| = or) Oracle (|| = 前后拼接) MSSQL (|| = 字符串拼接符)
这里有师傅看见数据包就会问了,为啥前面URL是get请求,而这里的数据包是post请求,这里的后端采用的是request模式,既可以用get请求也能用post请求,所以说我们可以尝试进行一个数据包的形式转换看看能不能成功访问,这边没有强制规则get和post,这让我后续绕过waf得到了一个伏笔。
虽说我们成功地闭合了,那么我们也要思考利用什么函数去绕过他的waf检测,从而拿到数据库信息。常规的ASCII和substr都被限制了,并且连left和right也用不了,好像只要是函数都会给拦截。这个时候我已急哭。
这个waf我直接给它塞一坨的垃圾数据进行干扰,成功地得到了left和right的函数权限利用。但是无法获取判断信息,接着我们利用instr的字符串索引,成功地判断出了第一个的字母,后续再控制分母变量得出全部。
补充:这边之所以转换成post请求,因为他不限制请求长度,理论上是可以无限插入%0a,然而get请求不行,有长度的上限,不能插入过多的脏数据,可能导致waf可以匹配到恶意语句拦截使得不能执行SQL
案例二:
通过服务号的信息收集,获取到了一个登录框
通过xiasql,获取到了两个参数的注入点,根据报错信息一眼顶针,得出ora数据库,对两个参数进行注入,发现两个参数都存在后端的长度限制,第一个限制50字节,第二个限制3字节,所以直接pass掉第二个,这个参数注入不了,插入的SQL长度无法成功执行。
也是如此,先使得SQL闭合,但是利用and和or需要进行一个布尔值的闭合,直接返回504,很明显这边也存在waf或者规则,书接上回我们可以用管道符进行前后连接,也能成功得闭合语句。
然后就是利用函数拿数据,脏数据肯定是不行的,因为后端有长度限制,换位符也算字节占用,所以构造的脏数据长度不支持能够让waf疲惫,当然脏数据不是万能的,有些waf也能阻挡全部的数据进入。
后续再尝试fuzz函数,看看哪种可以成功得出信息,发现很多都用不了。并且恶心的是这个站点还频繁地封我的IP,气的我一会连WiFi,一会插网线,然后再连手机热点,还有我一直修改我的静态IP。
最终通过我坚持不懈的努力成功得绕过了规则限制,估计是利用正则将函数名和括号进行了匹配,两个靠在一起马上挨封IP返回504,通过利用/**/多行注释穿插在函数名和括号的中间从而达到绕过注入,函数可以用了但是我不能获取到一个布尔值,当有等式成立的条件逻辑出现马上也会被拦截,例如在SQL语句中出现了=,<,>以及like等。当然我们也可以通过分母为0控制布尔返回因为管道符不需要等价值,但是当我发现利用ASCII嵌套substr函数就被拦截了,用注释符号混淆也不行。那么单一的函数利用只有instr了,通过字符串索引得出字母顺序的数字,再而控制分母变量造成SQL注入。
各位师傅觉得文章有意思,记得设置为星标哦~
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:夜子安全Sec 夜子 夜子《Oracle注入waf绕过等思路》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论