sqlmap 魔改研究 —— 从流量特征到 WAF 对抗

sqlmap 魔改研究 —— 从流量特征到 WAF 对抗 🔧 sqlmap 魔改研究 —— 从流量特征到 WAF 对抗本文记录了对 sqlmap 进行源码级魔改的完整过程,目标是通过修改流量特征、请求头、payload 混淆等手段,降低被 OWASP ModSecurity CRS 规则集检测到的概率。所有测试均在本地靶场(DVWA)环境下进行,仅用于学习和安全研究。🧠 思路很多人用 sqlmap 跑 SQL 注入,结果一跑就被 WAF 拦得死死的,403 一片。其实 WAF 拦截 sqlmap 不是魔法,靠的是规则匹配——它认识 sqlmap 的"味道":固定的 UA、特定的请求头、可预测的 payload 结构。所以思路也很简单:把 sqlmap 改得不像 sqlmap。改哪里?大概分三层:第一层:身份特征 → UA、版本字符串、Banner 第二层:流量特征 → 请求头、请求间隔、Host 第三层:Payload → 关键字大小写、空格混淆、随机 padding下面一层一层来。🏗️ 环境搭建靶场:DVWA(phpstudy 本地部署,端口 8564)WAF:OWASP ModSecurity CRS(Docker 部署,端口 8080)工具:sqlmap 1.10,Python,Wireshark/小蓝鲨WAF 启动命令(检测模式,只记录不拦截):docker run -d \ --name modsec-waf \ -p 8080:8080 \ -e BACKEND=http://172.30.240.1:8564 \ -e PROXY_SSL=off \ -e PROXY_TIMEOUT=60 \ -e MODSEC_RULE_ENGINE=DetectionOnly \ owasp/modsecurity-crs:nginx流量走向:sqlmap → localhost:8080 → ModSecurity → phpstudy:8564 → DVWA保存日志:docker logs modsec-waf waf_log.txt 21🔍 先看原版的"指纹"用小蓝鲨抓一下原版 sqlmap 的包,过滤条件:http.request ip.dst == 127.0.0.1一眼就能看到问题:User-Agent: sqlmap/1.9.10#pip (https://sqlmap.org)—— 这不就是自报家门吗 🤦Accept: */*—— 正常浏览器不会这么发没有Accept-Language、Accept-Encoding、Referer等正常请求头WAF 看到这个请求,直接触发913100(扫描器 UA 检测)规则,得分 +5,超过阈值直接拦截。📊 原版 WAF 检测基准数据先跑一遍原版 sqlmap,记录 WAF 触发了哪些规则,作为对比基准:sqlmap -u "http://127.0.0.1:8080/vulnerabilities/sqli/?id=1Submit=Submit" \ --cookie="..." --batch --level=3结果:规则ID触发次数描述913100100次UA 含 sqlmap 字样920350100次Host 头是纯数字 IP9