记一次SQL注入Bypass:UpdateXML报502后的两条绕过思路

前言:

挖洞路上永远不缺"拦路虎"。这次遇到了一个典型的报错注入点,原本以为updatexml一把梭就能出数据,结果迎面撞上502拦截。从Fuzz关键函数到修改Body编码,再到冷门函数替换,记录一下这次完整的Bypass心路历程。

一、背景与初探(撞南墙)

  1. 打开BurpSuite抓包测试,很快确认存在报错注入。原始报错语句大致如下:

xxxx and n.radar_id in(")and n.type in(1')and n.max_level in(1)ORDER BY n.start_time DESC LIMIT 0,10

3.根据报错信息很容易就构造好闭合语句,不需要单引号,注意一下括号的闭合就行

4.使用报错函数updatexml(1,concat(0x7e,(user()),0x7e),1),发现报502状态码

5.Fuzz关键函数1)+and+updat123exml(1,concat(0x7e,(user()),0x7e),1)=(1

绕过思路一

1.修改body编码方式

2.在boundary=后面按下tab键

3.发现不拦截,但是无预期效果回显

可能原因一:poc没有正确执行

可能原因二:关键函数没有起作用,或者被替换

4.通过测试发现,poc能够正常执行,但是user()不能发挥作用

5.使用current_user

绕过思路二

1.使用其他不常见的函数,如GTID_SUBTRACT()

2.需要注意的是,不能使用注释符,得按照sql语句的格式进行闭合才行

三、总结

  • 核心问题复盘:

    1.502不一定是语法错:很可能是WAF的主动拦截(关键词:updatexml、user()),需优先做Fuzz确认黑名单。

    2.协议层绕过值得试:Multipart边界篡改(Tab键、 \t)、编码变换常能绕过低级WAF检测。

    3.函数等价替换是底牌:

    4.查用户:user() → current_user / session_user()

    5.报错函数:updatexml → GTID_SUBSET() / GTID_SUBTRACT()

    6.严谨闭合:Bypass时千万别依赖注释符,老老实实闭合括号和引号最稳

觉得有收获的请关注三垣网安更多技术分享我们将及时推送与你,感谢支持!