当前位置:首页 > 百科

sqlmap post注入

sqlmap的注入post注入,说白了就是注入对付那些把参数藏在表单里的网站。很多人以为装了waf就万事大吉,注入结果sqlmap一个--forms参数扫过去,注入照样给你翻个底朝天。注入

有一次我测试一个内部管理系统,注入登录框做得挺像那么回事——密码加密传输,注入验证码动态刷新。注入我手工试了试,注入发现用户名那里有个诡异的注入报错,但被自定义错误页挡住了。注入这时候手工猜字段名太蠢了,注入直接上sqlmap。注入命令很简单:sqlmap -u "http://target.com/login.php" --forms --dbs。注入--forms会让它自动解析页面里的注入表单,省得我手动抓包填数据。

它先提交了一堆垃圾数据,观察响应差异。注意看它的输出,如果出现"parameter 'username' is injectable",那就成了。但post注入有个坑——很多参数不是直接暴露在URL里的,你得给它提供请求体。常见做法是先用burp抓个包,把整个post数据存成文件,然后sqlmap -r request.txt。这招比--forms更稳,因为你可以精确控制cookie、csrf token这些额外头。

再聊个细节。sqlmap默认会跑一堆payload,但碰上后端做了参数过滤,比如把单引号转义了,它就容易卡死。这时候得手动指定注入点:sqlmap -u "http://target.com/login.php" --data="user=admin&pass=123" -p user。-p参数强制指定测试user字段,省得它浪费时间在pass上。还有,如果目标响应慢,加个--time-sec=3,用时间盲注代替报错注入,不然等它跑完你得泡三杯咖啡。

说个真实案例。之前测一个电商后台,登录接口用了JSON格式传输,不是标准的key=value。sqlmap默认不认识JSON,直接报错"unrecognized content type"。解决办法是手动构造注入payload,用--data='{ "user":"admin*","pass":"123"}',星号告诉sqlmap这是注入点。它照样能识别,只是你得先摸清数据格式。

还有别忽略https站点。sqlmap默认会验证证书,碰上自签名证书直接拒绝连接。加个-k参数忽略证书错误,不然你会莫名其妙地连不上目标。这种小坑,文档里不写,实战中能卡你半小时。

最后说句实在话——sqlmap的post注入核心就三步:拿到真实请求包、确定注入参数、选对注入技术。别一上来就跑默认配置,先看响应码、响应时间、错误页特征。工具再强,也得你判断往哪儿打。手动测出个大概位置,再用sqlmap扩大战果,这比盲扫效率高一倍不止。

分享到: