You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLmap中-u与-r命令的差异及适用场景咨询

为什么SQLmap的-u和-r命令检测注入结果不同?

我来帮你拆解这个问题,核心在于这两个命令处理HTTP请求的逻辑完全不一样,结合你测试Mutillidae的场景,我给你理清楚来龙去脉:

1. 两个命令的核心工作原理差异

sqlmap -u:轻量URL解析,默认极简请求

当你用-u直接指定URL时,SQLmap的处理逻辑很直接:

  • 它会拆分URL里的查询字符串(?后面的部分),把每个键值对当成独立的GET参数。
  • 但它自带一套参数过滤机制:比如像page这种指向页面文件的参数,或者user-info-php-submit-button这种明显是提交按钮的参数,会被它优先降低测试优先级甚至直接跳过。
  • 最关键的是:-u默认只发送最基础的GET请求,不会带上任何额外的HTTP头信息(比如Cookie、Referer、User-Agent这些)——而很多Web应用(尤其是像Mutillidae这种带会话的PHP应用)严重依赖这些头来处理请求。

sqlmap -r:完全复用真实请求,1:1模拟浏览器行为

用-r加载Burp导出的请求文件时,SQLmap会彻底"照搬"整个请求:

  • 它会把请求里所有的参数(不管是GET查询里的,还是POST表单里的)都纳入测试范围,不会随便过滤参数。
  • 它会原封不动地发送所有HTTP头:Cookie、Referer、User-Agent、甚至If-Modified-Since这种看起来不起眼的头,完全模拟你在浏览器里操作的请求环境。
  • 它严格遵循请求文件里的协议版本、请求方法、头字段顺序,和你手动抓包的请求完全一致,不会因为请求格式不对被应用拒绝。

2. 你的案例里,-r比-u多了哪些关键内容?

看你提供的user.request文件,这些内容是-u命令没有的,也是导致检测结果差异的核心:

  • Cookie会话标识:PHPSESSID=cb55bd05e9618af173600ba757e996c1——Mutillidae作为PHP应用,需要用Session Cookie来识别你的会话状态,如果你用-u不带Cookie,应用可能返回空内容或者跳转到非目标页面,SQLmap根本拿不到正确的响应来判断注入。
  • Referer头:指向了同一个请求页面,有些应用会检查Referer来防CSRF,没有这个头的话,请求可能被判定为非法,返回异常响应。
  • 完整的浏览器标识头:User-Agent、Accept、Accept-Language这些头,虽然看似无关,但有些应用会用它们做简单的爬虫检测,缺少这些头的请求会被当成异常请求,SQLmap的测试 payload 根本无法触发正确的注入响应。
  • If-Modified-Since头:这个头会让服务器返回304或者正常内容,-u不带这个头时,响应内容和你手动测试时不一致,SQLmap自然无法识别注入点。

另外,-r不会像-u那样过滤参数,它会认真测试username和password这两个你已经确认有漏洞的参数,而-u可能因为过滤逻辑或者响应异常,只测试了page参数,所以没检测到漏洞。

3. 两者的适用场景

优先用sqlmap -u的场景

  • 测试简单的无状态GET请求:比如静态页面的ID参数,不需要会话、特殊头就能正常响应的场景。
  • 快速扫测单个URL的参数,确认基础注入可能性。
  • 示例:
sqlmap -u "http://example.com/test?id=1"

必须用sqlmap -r的场景

  • 测试需要会话验证的请求:比如登录后的页面,必须带Cookie才能访问的场景。
  • 测试包含特殊HTTP头的请求:比如需要Referer、Authorization、自定义头的接口。
  • 当-u检测不到漏洞,但你手动确认存在注入时(就像你的案例)。
  • 测试POST请求:把Burp抓的POST请求存成文件,用-r加载即可。
  • 应用有严格的请求格式校验:必须完全模拟浏览器请求才能得到正常响应的场景。

补充小技巧:让-u也能成功检测

如果你想用-u命令也能复现-r的效果,只需要手动补上必要的HTTP头就行,比如:

sqlmap -u "http://xxx.xxx.2.9/mutillidae/index.php?page=user-info.php&username=a&password=b&user-info-php-submit-button=View+Account+Details" \
--cookie="PHPSESSID=cb55bd05e9618af173600ba757e996c1" \
--user-agent="Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0" \
--referer="http://xxx.xxx.2.9/mutillidae/index.php?page=user-info.php&username=a&password=b&user-info-php-submit-button=View+Account+Details"

这样带上Cookie、User-Agent和Referer,SQLmap就能拿到和-r一样的响应,自然能检测到注入点。


内容的提问来源于stack exchange,提问作者Madhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:42:38