sqlmap怎么使用

 人参与 | 时间:2026-10-17 07:26:06

sqlmap 是使用渗透测试圈子里最趁手的自动化注入工具,没有之一。使用它的使用核心逻辑就一句话:你给它一个带参数的 URL,它替你试探、使用判断、使用利用 SQL 注入漏洞。使用但很多人把它当黑盒扫描器用,使用结果一堆误报漏报,使用回头骂工具不行。使用其实问题多半出在用法上。使用

先说说最基本的使用调用方式。假设你发现某个网站有个参数可能存在问题,使用比如 http://example.com/product?使用id=123,直接跑:

sqlmap -u "http://example.com/product?使用id=123" --batch

--batch 参数让所有交互询问都走默认选项,适合无人值守。使用但注意,sqlmap 默认会先发一堆探测 payload,稍微有点防护的站点直接把你 IP 封了。所以实际测试时,我习惯先加 --risk=3 --level=5 提升检测深度,再配合 --random-agent 换掉默认 UA,降低被 WAF 拦的概率。别嫌麻烦,真实环境里没几个站是裸奔的。

工具跑起来后,屏幕会刷各种 payload 和响应状态。新手容易慌,其实你只需要盯住几个关键输出。比如出现 parameter 'id' is vulnerable,说明这个参数确实存在注入点。紧接着它会问你要不要继续测其他参数,如果你只想确认当前这个点,就按 n 跳过。这里有个个人习惯:我从来不全盘接受它的默认选项,尤其是涉及数据获取的步骤,宁可多花点时间手动控制,也别让工具一口气把整个库拖下来——动静太大,容易触发告警。

拿到注入点之后,真正有意思的部分才开始。用 --dbs 枚举数据库,用 -D 数据库名 --tables 列出表,再用 -T 表名 --columns 看字段,最后 -C 字段名 --dump 导出数据。这串命令链能让你从零摸到数据,但实际测试中我很少直接拖库。更常见的场景是:你只需要证明漏洞存在,或者提取某一条关键记录就够了。比如之前测试一个后台管理系统,注入点在登录框的用户名参数上,我用 --current-user 发现数据库账号是 sa,直接判断是 SQL Server 的堆叠注入,接着用 --os-shell 尝试写文件,不到两分钟就拿到了服务器权限。

sqlmap 最容易被忽视的功能其实是 --proxy 和 --tor。前者配合 Burp Suite 能让你实时看到工具发出的每个请求,后者适合需要匿名测试的场景。有一次我在测一个政府网站,对方 IP 有地理限制,加了 --proxy=http://127.0.0.1:8080 后,先在 Burp 里改了 X-Forwarded-For 头,绕过限制才继续跑。工具本身不带绕过逻辑,但配合代理就能灵活处理各种网络层限制。

还有个小细节,很多人不知道:sqlmap 支持从文件读取 HTTP 请求。用 -r request.txt 指定一个完整的请求包,比手写 URL 参数靠谱得多。因为真实场景里,登录后的接口往往带 session、token 甚至加密参数,你不可能全塞进 URL 里。我之前测一个金融 App 的接口,用浏览器抓包导出 POST 请求存成文件,然后 sqlmap -r /tmp/login.txt -p mobile 指定测试手机号字段,效果比在 URL 里拼参数精准十倍。

最后提醒一句:sqlmap 的输出信息量巨大,别被满屏的 [INFO] 带着走。重点看 [WARNING] 和 [CRITICAL] 开头的行,前者告诉你可能被 WAF 拦了,后者直接报错。如果你看到 connection timed out,先查网络,别怀疑工具坏了。大部分“跑不出来”的问题,要么是参数给错,要么是目标站点压根不存在注入,要么是你没加 --level 和 --risk 导致检测太浅。工具终究是死的,你想清楚自己要测什么、目标大概什么架构,再动手,效率会高得多。

顶: 1踩: 558