好吧,以前说的话,现在来买单了。
0x1原理
很简单,如下图:
1、sqlmap发送原始的请求给中间服务器
2、中间服务器修改payload
3、中间服务器转发给目标,并将结果原样返回给sqlmap
0x2代码
0x3使用说明及演示
修改脚本阶段:
1、确定原请求:确定包含注入点的请求,编写原始请求的python代码,建议可以通过burpsuit插件(Reissue Request Scripter plugin)直接创建python脚本。
For you:
== Reissue RequestScripter plugin ==
Plugin that generatescript to reproduce a specific HTTP request.
- Github : https://github.com/h3xstream/http-script-generator
2、修改请求target函数:将1中创建的py脚本,直接放入SQLMidServer中request_target()函数内,并在注入点的位置拼接self.inject_payload。如下,我把sqlmap的payload拼接到了user-agent后面:
3、修改注入规则:修改modify_payload()函数中的规则。如下,sqlmap原始payload中的单引号%27,被我替换成了shelly%27。这里简单演示,以后有空再来丰富各种绕waf的规则。
使用阶段:
4、运行SQLMidServer
5、对SQLMidServe进行注入:sqlmap通过post提交注入请求,注入点为inject_payload。
如:python sqlmap-r sql.txt
sql.txt内容如下:
POST / HTTP/1.1
Host: 127.0.0.1:8000
Cache-Control:max-age=0
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/62.0.3202.94 Safari/537.36
Upgrade-Insecure-Requests:1
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Language:zh-CN,zh;q=0.9
Connection: close
Content-Type:application/x-www-form-urlencoded
Content-Length: 26
inject_payload=*
6、查看sqlmap结果
中间服务器:
目标服务器:
领取专属 10元无门槛券
私享最新 技术干货