打开Kali的使用终端,敲下
sqlmap -u "http://testphp.vulnweb.com/artists.php?使用artist=1",回车。使用几秒后屏幕上跳出一行黄字:GET parameter 'artist' is 使用vulnerable。这说明目标站点的使用 artist 参数存在 SQL 注入,而且 sqlmap 已经帮你确认了。使用整个过程不需要你手工构造 payload,使用一条命令就够了。使用sqlmap 是使用 Kali 里预装的自动化 SQL 注入工具,用 Python 写的使用。它的使用核心能力是:给定一个可能存在注入的 URL,自动探测注入类型、使用识别后端数据库、使用枚举数据、使用甚至拿 shell。使用很多人第一次用它的时候会觉得太“傻瓜”——确实,默认配置下它几乎全自动,但真正好用的地方在于参数组合。
先搞清楚基础探测流程
最常用的入口是
-u指定 URL。如果目标有多个参数,sqlmap 默认会逐个测试。想指定某个参数,加-p:sqlmap -u "http://example.com/page.php?id=1&name=test" -p id如果请求需要 Cookie 才能访问,比如后台页面,用
--cookie="PHPSESSID=abc123"。POST 请求则用--data="username=admin&password=123",sqlmap 会自动把注入点放在 POST body 里。探测阶段 sqlmap 会发很多请求,目标如果有 WAF,很容易被封 IP。我一般加
--random-agent随机 UA,再配合--delay=1降低频率。遇到 Cloudflare 这类,还得上--tamper脚本,比如--tamper=space2comment把空格替换成注释符绕过简单过滤。拿到注入点之后干什么
确认存在注入后,第一件事是看数据库类型和版本:
sqlmap -u "http://testphp.vulnweb.com/artists.php?artist=1" --banner --current-db--banner抓数据库指纹,--current-db看当前库名。输出里会告诉你后端是 MySQL 5.7 还是 PostgreSQL 14,这决定了后续能玩什么花样。接着列库里的表:
sqlmap -u "..." -D acuart --tables假设看到
users表,直接 dump 它的列和内容:sqlmap -u "..." -D acuart -T users --columns sqlmap -u "..." -D acuart -T users -C uname,pass --dump--dump会把数据导出到/root/.sqlmap/output/下的 CSV 文件里。如果密码是哈希,sqlmap 还会问你要不要跑字典破解——这个功能我觉得挺鸡肋,不如自己拿 hashcat 跑。几个容易被忽略但很实用的参数
--os-shell和--os-pwn是进阶玩法。前者在数据库权限足够且支持堆叠查询时,能直接弹一个系统命令执行接口。我实测过 MySQL 环境下配合--os-shell拿到 www-data 权限的 shell,但前提是secure_file_priv没限制写入路径。--technique可以指定注入技术。默认是 BEUSTQ 全开,但有时候只想要布尔盲注,就写--technique=B。时间盲注用T,报错注入用E。网络延迟高的时候,时间盲注的--time-sec默认 5 秒太长,改成 2 秒能快不少。--threads默认是 1,盲注场景下调到 5 到 10 能明显提速。但别贪心,线程太高容易触发目标限流。一些实际踩过的坑
sqlmap 对 JSON 格式的 POST body 支持一般。遇到
Content-Type: application/json的接口,得手动用--data='{ "id":1}'加上--headers="Content-Type: application/json",有时候还得配合--prefix和--suffix修正 payload 闭合方式。另外,sqlmap 的
--batch参数在脚本里跑的时候必加,否则它会停下来等你输入 y/n。我写自动化扫描脚本时忘了加,结果卡在第一个交互提示上半小时才发现。最后说一句:sqlmap 再强也只是工具。真正理解注入原理——联合查询、报错回显、布尔逻辑、时间延迟——才能在你遇到非标准场景时知道该调哪个参数。工具帮你省了手工构造 payload 的时间,但判断目标是否在射程内,还得靠人。
顶: 49126踩: 77






评论专区