游客发表

sqlmappost注入方法

发帖时间:2026-10-17 04:49:58

sqlmap POST注入:别只盯着URL

很多人测注入点,注入眼睛就死盯着地址栏里那个?注入id=1。可现实是注入,登录框、注入搜索框、注入查询接口,注入这些POST提交的注入地方才是漏洞高发区。sqlmap对POST的注入支持其实很成熟,但用法跟GET不太一样,注入得换个思路。注入

最直接的注入办法,把请求包存成文件,注入用-r参数喂给sqlmap。注入我习惯用Burp抓包,注入右键复制为文件,注入保存成txt。然后命令长这样:sqlmap -r login.txt -p username。这里有个坑——如果请求体里有多个参数,sqlmap默认全测,效率低还容易触发WAF。用-p指定一个参数,或者用--param-del自定义分隔符,精准打击。

但现实中,很多POST请求带token或时间戳。你重放旧包,服务器直接拒了。这时候就得靠--data参数手动构造。比如登录接口,你抓到的数据是user=admin&pass=123&csrf=abc,把csrf换成固定的假值,或者干脆去掉,只要后端不校验就能跑。命令就是sqlmap -u "http://target.com/login" --data="user=admin&pass=123"。注意,-u后面跟的是完整URL,POST数据单独放--data里。

再说说cookie。有些站点登录后才开放POST接口,你得先带着会话去测。sqlmap有--cookie参数,把抓到的session值粘进去。但cookie过期了怎么办?我一般配合--level=3,让sqlmap自己尝试解析cookie里的参数,说不定能测出额外的注入点。

POST注入的payload跟GET没本质区别,但有个细节——sqlmap默认对POST参数做URL编码。如果后端是JSON格式,比如{ "user":"admin"},你得加--data="{ \"user\":\"admin\"}",还得用--headers="Content-Type: application/json"。否则sqlmap发的还是普通表单格式,服务器根本不解析。

遇到过最头疼的情况是,POST参数被前端JS加密了。比如密码字段先经过MD5再提交。这时候直接测肯定没用。解法是找到加密逻辑,把sqlmap的payload也加密后再提交——用--tamper参数加载脚本,比如--tamper=md5before,或者自己写个小脚本。别怕麻烦,实际渗透里这种场景很常见。

最后说个技巧。当你不知道POST参数名时,用sqlmap的--forms自动解析页面表单。它会抓取当前URL下的所有input标签,逐个尝试注入。虽然慢,但对付那种隐藏字段多的接口,比手动猜参数省事多了。跑之前记得加--crawl=1,先爬一下页面,把相关URL都找出来。

POST注入测完,别忘了验证漏洞是否真实可利用。sqlmap的--sql-shell能直接让你执行SQL语句,比光看回显判断靠谱得多。我就遇过几次,报错显示有注入,但实际是数据库异常,不是真漏洞。用sql-shell试一条SELECT version(),立刻见分晓。

工具终究是工具,关键还是理解请求结构。多抓包,多看参数,POST注入其实比GET更容易出大货——毕竟很多开发者对URL参数做了过滤,却忽略了请求体内的数据。

    热门排行

    友情链接