sqlmap能检测sql注入点但无法自动绕过登录态、waf或参数编码问题;需确保目标url可正常访问,手动验证登录态并携带有效cookie,基础命令用-u,后续再根据情况添加参数优化。

sqlmap 能直接检测出大多数可利用的 SQL 注入点,但**它不会自动绕过登录态、WAF 或参数编码问题**——这些恰恰是第一次跑就失败的最常见原因。
目标 URL 必须能被 sqlmap 正常访问到
如果你丢一个未登录的后台地址进去,比如 http://192.168.1.108/dvwa/vulnerabilities/sqli/?id=1,sqlmap 会收到 302 重定向或 403 响应,然后停在“no injection point found”——它不是没能力,是根本没进到目标页面。
- 先用浏览器手动访问该 URL,确认能正常显示内容(比如返回某条记录)
- 如果需要登录,必须带上有效
Cookie:用开发者工具复制完整 Cookie 字符串,加到命令里:--cookie="PHPSESSID=abc123; security=low" - 若目标用了 HTTPS 且证书异常,加
--ignore-certificate-errors避免连接中断
GET 参数注入最简命令就是 -u
对形如 news.php?id=1 这类 URL,-u 是唯一必需参数。其他全是优化项,别一上来就堆 --level --risk --technique。
- 基础检测:
sqlmap -u "http://example.com/news.php?id=1" - 加
--batch跳过所有交互提示(适合快速验证) - 加
--dbms=mysql可跳过数据库指纹识别阶段,节省 30%+ 时间;但若不确定类型,别硬指定,否则可能漏掉 payload -
sqlmap默认只测 URL 中的 GET 参数;POST、Header、Cookie 需显式指定,比如--data="user=admin&pass=123"或--headers="User-Agent: sqlmap"
扫描结果里 “Parameter ‘id’ is vulnerable” 不等于能拿数据
它只说明这个参数存在注入点,且识别出了注入类型(比如 boolean-based blind),但后续操作是否成功,取决于网络稳定性、目标响应一致性、以及你有没有给够权限。
- 布尔盲注下,
--dump提取数据前建议先用--current-db确认当前库名,避免盲目枚举 - 时间盲注(
time-based blind)对网络延迟敏感,加--time-sec=2比默认 1 秒更稳,尤其在高延迟环境 - 如果
--dbs返回空或报错,试试加--threads=3(默认 1),多线程有时能绕过服务端限速逻辑 - 别忽略
[INFO] fetched data logged to这行路径——所有中间结果都存在那里,查不到数据时先翻日志











