sqlmap注入教程
sqlmap 是注入渗透测试里最趁手的自动化注入工具,没有之一。教程它能把手工构造 payload 的注入繁琐过程压缩成一条命令,但这不意味着你可以无脑敲回车。教程真正会用 sqlmap 的注入人,知道什么时候该让它跑,教程什么时候该自己动手。注入
先看最基础的教程用法。目标是注入一个带 id 参数的 URL,比如 http://example.com/item.php?教程id=1。直接执行 sqlmap -u "http://example.com/item.php?注入id=1" --batch,它会自动探测注入点、教程判断数据库类型、注入列出可用的教程注入技术。--batch 参数让所有交互提示都用默认选项,注入适合无人值守。跑完你会看到输出里标出注入类型,比如 boolean-based blind 还是 UNION query。这一步快则几秒,慢则几分钟,取决于目标响应速度和 WAF 的拦截强度。
但真实场景哪有这么干净。很多站点有登录态、有 POST 请求、参数藏在表单里。这时候用 -u 就不够了,得配合 --data="username=admin&password=123" 指定 POST 数据,或者用 -r 直接加载 Burp 抓到的原始请求包。我习惯先抓包,因为请求头里的 Cookie、User-Agent 都可能影响注入结果。比如某个后台登录接口,你光测 username 参数,sqlmap 默认不会带上 Cookie,服务端直接返回 302 跳转,它就会误判为无注入。加上 --cookie="session=abc123" 才能继续。
再进阶一点,绕过 WAF 是必修课。常见 WAF 会拦截 union select 或 information_schema 这类特征字符串。sqlmap 提供 --tamper 参数,内置一堆脚本帮你变形 payload。比如 space2comment 把空格替换成 /**/,between 把比较符改成 between 语法。我遇到过一台 ModSecurity 防护的站点,默认 payload 全被拦,加了 --tamper=between,randomcase 之后,跑通了。但别迷信 tamper,有些 WAF 做语义分析,变形后照样拦。这时候就得手动改脚本或者换注入思路了。
拿到注入点之后,下一步是脱库。sqlmap 的 --dbs 列出所有数据库,-D 数据库名 --tables 列出表,-T 表名 --columns 看字段,最后 -C 字段名 --dump 导出数据。这条链路很机械,但关键在效率。如果数据量巨大,比如几百万行的日志表,直接 dump 会卡死。加 --start=1 --stop=100 限制行数,或者 --where="id>1000" 缩小范围。还有 --threads=5 开并发,但别开太高,目标服务器可能直接宕机,那就得不偿失了。
sqlmap 也不是万能的。遇到时间盲注,响应延迟明显,但目标网络不稳定,误报率会飙升。我碰到过一个案例,目标返回时间在 2 到 8 秒之间随机波动,sqlmap 的 --time-sec=5 默认值根本没法区分是真延迟还是网络抖动。手动把 --time-sec=12 调大,同时加 --retries=3 重试机制,才勉强稳定。还有些场景,比如 NoSQL 注入、二次注入,sqlmap 默认支持很弱,得配合 --dbms=mongodb 或者手动构造请求。
最后说个容易踩的坑。sqlmap 跑完,日志里一堆 payload,你以为结束了?别忘了清理痕迹。目标服务器日志会记录你的请求,有些 WAF 还会封 IP。用代理池 --proxy="socks5://127.0.0.1:1080" 或者 --tor 是基本操作。更关键的是,脱下来的数据别直接存明文,用 --output-dir 指定目录,跑完立刻压缩加密。我见过有人把 dump 结果留在 /tmp 下,结果被管理员翻出来,直接报警。
工具终究是工具,sqlmap 帮你省了时间,但判断得自己下。知道每个参数背后的原理,比记住一百条命令强。
(责任编辑:娱乐)













