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






评论专区