当前位置: 当前位置:首页 > 热点 > 漏洞sqlmap正文

漏洞sqlmap

作者:焦点 来源:知识 浏览: 【大 中 小】 发布时间:2026-10-17 06:14:59 评论数:
```html

sqlmap 跑完一个注入点,漏洞屏幕上跳出“OS shell”的漏洞瞬间,我盯着那行字看了好几秒。漏洞这台服务器从发现注入到拿到系统权限,漏洞前后不到二十分钟。漏洞漏洞本身不复杂,漏洞一个 PHP 文件里的漏洞 $_GET['id'] 直接拼进 SQL 查询,连过滤都没做。漏洞sqlmap 只是漏洞把这件事变得像按电梯按钮一样简单。

很多人把 sqlmap 当成“黑盒神器”,漏洞丢个 URL 进去,漏洞等着它自己吐数据。漏洞这么用当然能跑出东西,漏洞但你根本不知道它背后在干嘛。漏洞sqlmap 的漏洞核心其实就一件事:把盲注的“猜”变成了自动化的“问”。它内置了布尔盲注、时间盲注、报错注入、联合查询、堆叠查询等好几种 payload 模板,根据目标数据库的类型和返回特征自动切换。你看到它慢吞吞地跑,其实是在用二分法逐字符提取数据——比如判断某个字符的 ASCII 码,先试 128,再试 64,再试 96,七八次就能锁定一个字符。这个逻辑不新鲜,手工注入也这么干,但 sqlmap 把它写成了状态机,还带缓存和并发,效率就上来了。

我印象比较深的一次,目标站开了 WAF,普通 payload 全被拦。sqlmap 默认的 --random-agent 和 --tamper 脚本派上用场。tamper 目录下几十个脚本,专门做 payload 变形,比如 space2comment 把空格换成 /**/,charencode 做 URL 编码。我选了 between 和 randomcase 两个脚本组合,请求立刻绕过了规则。这不是什么高深技术,就是利用 WAF 正则匹配的粗糙性。但如果你不知道 sqlmap 有 tamper 这个机制,可能就卡在那儿了。

sqlmap 的 -r 参数也值得单独说。很多人只会 -u,但实际渗透中大量注入点藏在 POST 请求体或者 Cookie 里。把整个 HTTP 请求保存成文件,用 -r request.txt 丢给 sqlmap,它会自动解析出所有参数并逐个测试。我见过一个后台登录接口,用户名参数存在堆叠注入,但用 -u 根本测不到,因为请求是 POST 的 JSON 格式。sqlmap 拿到原始请求后,连 JSON 里的嵌套字段都能识别,直接测出了 --os-shell 的条件。

不过 sqlmap 不是万能的。它最怕的是目标返回内容完全固定,没有布尔差异,也没有时间延迟。这种“无回显无差异”的场景,sqlmap 跑半天也只能告诉你“可能不存在注入”。这时候得靠手工去构造更精细的 payload,或者换用其他工具比如 noSQLmap 针对 NoSQL 数据库。另外 sqlmap 的 --os-shell 依赖数据库的 FILE 权限和 secure_file_priv 设置,MySQL 8.0 之后默认关闭了 INTO OUTFILE 写文件,这个功能就废了一半。很多人不知道这点,以为拿到注入就能拿 shell,实际跑起来才发现写不了文件。

还有一个坑:sqlmap 的 --level 和 --risk 调太高会发送大量请求,容易触发目标站的流量告警。我一般先用 --level=2 --risk=1 跑一遍,确认注入类型后再针对性调参。如果目标有速率限制,还得加 --delay 和 --threads=1。这些细节在官方文档里都有,但很多人不看,直接默认参数怼上去,结果 IP 被封了还怪工具不行。

说到底,sqlmap 是个放大器。你懂 SQL 注入的原理,它能帮你把效率提升十倍;你不懂原理,它就是个碰运气的脚本。我见过有人拿 sqlmap 扫了几百个站,一个注入都没跑出来,然后说“sqlmap 过时了”。其实是他连 --batch 和 --smart 的区别都没搞清。工具永远只是工具,漏洞的本质还是代码里那行没过滤的字符串拼接。

```