文章总结: 本文记录了针对阿里云WAF下MSSQL注入点的绕过实战。作者尝试了分块传输、编码混淆、HPP及脏字符等多种常规手段均未成功,最终在协助下完成WAF绕过并获取数据。此外还涉及OrderBy注入类型的测试,核心技术细节未完全公开。 综合评分: 55 文章分类: 渗透测试,WEB安全,云安全,漏洞POC
阿里云waf-bypass-mssql
安全的黑魔法
2026年1月19日 22:07 湖南
编者荐语:
tql 师傅,感谢加白
以下文章来源于阿兰安全 ,作者阿兰_安音
阿兰安全 .
阿兰安全团队专注于攻防演练、代码审计、工具开发和漏洞trick等等,欢迎大家关注
“ 仿佛是下一世,少年微笑着脸。”
声明
由于传播、利用本公众号阿兰安全所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号阿兰安全及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!本公众号文章的内容源自团队,未经许可严禁转载。
前言
这是团队中小伙伴挖到的一个mssql注入,但是存在阿里云waf,经过一番努力和团队中某位师傅的帮助下完成了bypass阿里云waf获取到了user和database
0x01 发现注入点
一个单引号成功的触发了报错信息
两个单引号正常回显
继续深入发现存在阿里云waf
也是花了不少的时间构造了一个payload,证明存在注入点
admin'and%1edatalength('nmsl')not%1ein(0)--
随后也是利用substring获取到了suser_sname()(当前连接到 SQL Server 的登录名)
0x02 fuzz尝试 获取db_name()
0x01 分块传输
利用工具:https://github.com/c0ny1/chunked-coding-converter
这是一款比较不错的sql绕过工具,利用分块传输来绕过waf,这里我们修改获一下payload把suser_sname()换成db_name(),可惜这一次的对手是阿里云waf,不幸GG
0x02 charset编码
参考文章:https://www.t00ls.com/articles-73197.html
不知道师傅们有没有注意到,返回包中的 Content-Type: text/plain; charset=gb2312 我们尝试构造一下 gb2312编码的payload ,同时记得修改请求包中的Content-Type
payload = "admin"
gb2312_bytes = payload.encode('gb2312')
percent_encoded = ''.join(f'%{b:02X}' for b in gb2312_bytes)
print(percent_encoded)
admin –> %61%64%6D%69%6E 发包
跟utf-8编码的返回一致,说明是可行的,那我们来编码一下原payload依然替换成db_name(),不幸还是GG
0x03 iis特性
参考文章:https://cloud.tencent.com/developer/article/1416023
iis支持unicode编码
当然我们还能同时实现 gb2312编码
admin --> 完整unicode编码 --> %u0061%u0064%u006D%u0069%u006E
adm --> gb2312编码 %61%64%6D
in --> unicode编码 %u0069%u006E
admin --> %61%64%6D%u0069%u006E
那么我们在来一个随机任意字符串进行fuzz,但是还是不幸全部GG
0x04 HPP
HPP在实战中也帮助绕过了不少waf,当时尝试了很久最后用HPP绕过了payload如下: 但是本次利用还是不幸GG
id='aNd+casT(1/currenT_User%0aas%0adecimal)>0&ParamList=string&id='--
0x05 脏字符
脏字符这个其实在实战环境中也帮助绕过了不少waf,10w字符不够那就上20w,20w不够就上50w,再不行就100w。这一次就尝试到了50w脏字符,不幸GG
0x06 真实ip
一般来说,大多数云WAF采用CDN架构,用户请求先经过WAF集群再转发至源站。若能获取未被CDN代理的真实服务器IP,直接访问该IP即可绕过WAF, 但是本次的目标就是真实IP访问,不幸GG
0x07 数据包变形
利用工具:yakit
这里就不放截图了,也是不幸GG
0x08 终极奥义
到了这里,安师傅已经有点小崩溃了,突然他想到了什么,打开了微信,点开了某个人的头像并发送了神秘代码,然后就成功绕过了WAF
0x03 绕过waf
根据某位师傅的指点,安师傅立马写好了脚本,获取到了user和db_name() 开心的交洞去了
0x04 order-by注入
这一次安师傅再一次遇到了mssql,不过是order by注入类型的,这一次他还能绕过吗?
测试payload:
user
[user]
/Api/agent/GetPageListSort?pageSize=20&pageIndex=1&orderBy=user
/Api/agent/GetPageListSort?pageSize=20&pageIndex=1&orderBy=[user]
/Api/agent/GetPageListSort?pageSize=20&pageIndex=1&orderBy=user
/Api/agent/GetPageListSort?pageSize=20&pageIndex=1&orderBy=[user]
0x05 获取payload
相关payload的获取,请添加阿兰微信。
考虑到团队成员,这里不会放出所有的payload。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:安全的黑魔法 《阿里云waf-bypass-mssql》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。











评论