文章总结: 本文记录了一次SQLServer数据库排序注入的实战挖掘过程。作者发现参数存在数据类型转换限制无法直接盲注,利用CASEWHEN语句构造特殊Payload,通过除法运算触发数据类型转换报错,成功实现报错注入获取数据库信息。 综合评分: 55 文章分类: 渗透测试,漏洞分析,WEB安全,软文广告
骚口排序注入之:原来你不是盲注,居然是…
原创
犀利猪 犀利猪
犀利猪安全
2026年2月6日 16:17 湖南
免责声明
文章内容仅限授权测试或学习使用请勿进行非法的测试或攻击,利用本账号所发文章进行直接或间接的非法行为,均由操作者本人负全责,犀利猪安全及文章对应作者将不为此承担任何责任。
文章来自互联网或原创,如有侵权可联系我方进行删除,深感抱歉。
01
文章背景
一个月黑风不怎么高,但是飘着毛毛细雨的夜晚,主包在加班,因为客户单位比较敏感,白天怕影响业务。此时差不多快到点了,不然就赶不上最后回家的地铁了。
02
注入出现
是的,主包又来看插件,您猜怎么:
这不又一眼秒了吗,排序注入。好的,让我们来深入判断一下,这是个什么数据库:
一眼顶针,这是SQLServer数据库。为什么呢?因为length()函数,在MySQL、Oracle、PostgreSQL中都是存在的,而在SQLServer里,是len()函数:
事情进行到这里,我本来以为可以直接通过盲的手法出货了,但是我发现我错了:
在渐渐地测试中,我发现判断的取值部分只能是数字,不然直接报语法错误,怀疑这里有什么数据类型转换。而且,我可以确认并没有过滤函数的。
03
排序注入手法
正如我前面所说的,这里会尝试去找列,而且取值判断的内容只能是数字,不然他直接报错列名无效:
其实排序注入,其中一个常用手法就是要用到case when函数,让其固定返回内容,这样我们就可以指定让他返回什么列名,让其order by进行排序:
case when (1=1) then 1 else 0 end
好的,正如我前面所说的,这里铁定有个数据类型转换,而且取值判断部分只能是数字,然后也发现了是有抛出报错信息的:
我们大胆的进行猜测,我们在case when判断语法处构造语句,然后取值判断的内容随便给个数字:
接下来,在后面case when要返回的两个判断结果内容中,使用列名来进行排序。
假如这个时候,返回的结果列名是字符串类型,就有可能触发系统的强制数据类型转换,直接通过类型转换实现报错注入:
1/(case+when(left(db_name(),11111)=1)+then+列名+else+列名+end)
至于判断的列名从哪来,首先你就是可以提取请求包或者响应包里的参数直接来用,再不行就用字典FUZZ参数。
俺娘勒,俺~臻~牛~逼!!
文库账号
血赚价格
HOT
55.8一年,短时间内价格不变
后续只会涨,不会往下跌
登入后在文库同步获取各类资源
内含POC、各类学习报告、学习文档
(
END
)
!扫码添加哦!
联系进群即可,群内可交流技术
没钱吃饭了,大哥给点吧
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:犀利猪安全 犀利猪 犀利猪《骚口排序注入之:原来你不是盲注,居然是…》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论