实战手记:用Python为SQLMap打造专属Tamper脚本,突破WAF检测
在渗透测试的实战中,遇到部署了WAF(Web应用防火墙)的目标站点是家常便饭。安全狗作为国内广泛使用的WAF之一,其基于规则的特征匹配拦截机制,常常让自动化工具的扫描请求“石沉大海”。直接使用SQLMap的默认Payload,大概率会触发告警并被阻断。这时,定制化的Tamper脚本就成了渗透测试人员手中的“手术刀”,能够精细地修改Payload,使其绕过规则检测,直达目标。这篇文章,我将从一个实战者的角度,分享如何用Python为SQLMap编写高效的Tamper脚本,核心聚焦于绕过安全狗的检测逻辑。整个过程不仅仅是简单的字符串替换,更涉及对WAF拦截原理的理解、Payload变形的策略以及脚本的调试技巧。如果你已经熟悉基础的SQL注入和Python语法,那么这篇文章将带你进入更深的实战层面。
1. 理解对手:安全狗的拦截逻辑与绕过思路
在动手写脚本之前,我们必须先搞清楚安全狗这类WAF是如何工作的。知其然,更要知其所以然,这样才能设计出有效的绕过策略,而不是盲目地尝试。
安全狗的防护核心主要基于特征匹配和行为分析。对于SQL注入,它会维护一个庞大的恶意特征库,当HTTP请求中的参数值匹配到这些特征(如UNION SELECT、' OR 1=1 --等)时,便会触发拦截。这种匹配通常发生在应用层,WAF会解析HTTP请求,检查参数名和参数值。
1.1 常见的WAF检测维度
为了有效绕过,我们需要了解WAF通常从哪些角度检测:
- 关键词检测:最基础的检测方式。直接匹配
SELECT、UNION、AND、OR、--、#、'、"、()等SQL关键字和特殊字符。 - 语法结构检测:检测SQL语句的语法结构是否异常。例如,
UNION后面是否紧跟SELECT,SELECT后面是否包含FROM等。 - 编码与规范化绕过检测:WAF会对输入进行多层解码(如URL解码、HTML实体解码、Unicode解码等),再进行匹配,以防止简单的编码绕过。
- 请求频率与行为异常检测:短时间内大量包含疑似Payload的请求,即使单个请求可能绕过,也会因行为异常被整体封禁。
1.2 针对安全狗的绕过策略
基于以上分析,我们可以制定几种有效的绕过策略,这些策略将是编写Tamper脚本的指导思想:
- 等价替换与混淆:使用SQL语法中功能相同但写法不同的表达。例如,用
&&代替AND,用||代替OR(在某些数据库如MySQL中需注意模式设置),用LIKE代替=。 - 内联注释干扰:这是绕过MySQL环境WAF的经典且有效的方法。在SQL关键字中插入MySQL特有的内联注释
/*!...*/。WAF可能将其视为普通注释而忽略,但MySQL数据库会正常执行其中的内容。例如,/*!50000SELECT*/。 - 空白符变异:使用非常规的空白符,如
%0a(换行)、%0d(回车)、%09(制表符)、/**/(多行注释作为空白)来代替普通的空格。这可以打乱WAF对“词”的边界判断。 - 参数污染与分块传输:更高级的技巧,涉及修改HTTP请求结构本身,如使用
HPP(HTTP参数污染)或Transfer-Encoding: chunked分块编码来干扰WAF的解析。这部分通常需要集成到SQLMap的请求引擎中,而非简单的Tamper脚本。

&spm=1001.2101.3001.5002&articleId=154805131&d=1&t=3&u=fbf9dfde014e45189b26e91951a8747d)
416

被折叠的 条评论
为什么被折叠?



