CSRF漏洞详解(跨站请求伪造)

一、漏洞原理

本质:攻击的是未失效的会话。(同一浏览器打开不同页面)

原理图如下:

二、DVWA靶场演示
1、low级别

当我们修改密码为1234时,发现提交方式为get类型

那我们就可以尝试复制url,在同一浏览器中打开一个新的网页,并修改密码值为45678,发现同样能够成功修改密码。

可借助暴力破解模块验证是否成功修改密码。

而在实际的攻击场景中,我们不会点击轻易点击一个长链接,所以这时候就要利用社会工程学,在站长工具中,将长链接生成一个短链接,诱骗受害者点击短链接。

2、medium级别

同样的,将url复制打开新链接,发现这次修改密码失败。

bursuite抓包分析区别

发现数据包中一个含有referer字段,另一个没有。查看源码,原来时对referer字段进行了校验

在本靶场中,最简单的解决思路就是把referer复制过来,填在第二个数据包中即可。

还有另一个思路,就是在同靶场目录下,创建一个html文件,访问该html页面同样可以成功修改密码。这里需要借助burpsuite生成CSRF POC。如图所示:

复制其中的html代码,编写html文件(这里文件名可以任意,因为文件与靶场环境在同一hosts主机,referer中的IP是相同的)

点击submit request,显示成功修改密码!!

3、high级别

在数据包中发现了token字段信息。

尝试复制url修改密码,页面无回显,验证登录发现密码并未修改成功。可见token不能复用。

这里也是参见的一个大佬 的博客找到的解决方案,我们需要结合存XSS漏洞获取token值。进入存储型xss low级别(哪个级别都行,low级别过滤较少)上传下面的js代码

<iframe src="../csrf/" οnlοad="alert(frames[0].document.getElementsByName('user_token')[0].value)"></iframe>

会弹出这样的页面,点击其中的 DVWA security ,会弹出一个token值,不要着急点确定,否则token失效还需要重新获取token。

构造payload,将获取的token值添加在末尾,密码修改成功。

三、CSRF漏洞的挖掘及利用思路

注:

CSRF需要出现在重要的位置才能构成危害(付款、修改密码等场景)

CSRF需要受害者点击才能完成攻击过程(90%)

CSRF需要受害者拥有被攻击网站的cookie才可以,且session会话未失效。

1、关于referer校验,是在实际攻击场景中,我们是无法对用户的referer进行复制的。常规的方法就是我们首先对referer中的内容进行增删,发现其过滤规则是http包头的referer参数的值中必须与host相同。然后借助burpsuite中的模块,生成一个CSRF POC,将代码内容复制到一个新的html文件中,该html文件的名字要含有referer中的关键信息。如果是域名a.com,那么我们可以对html文件命名a.com.html或者b.com.a.com.html;如果是IP,例如在DVWA靶场中,我们发现只要referer中含有192.168.109.130,就可以修改密码成功。那么我们可以将html文件命名为192.168.109.130.html。诱导用户点击该html页面,点击其中按钮,就可以成功修改密码。

2、除此之外,CSRF一般结合XSS漏洞一起使用,因为XSS代码能够使浏览器产生歧义,获取用户cookie、IP、token等信息。对于XSS漏洞原理的理解,感兴趣的小伙伴可以自行查阅其他相关资料学习。

四、修复建议

验证HTTP Referer字段(并不能完全防御)

添加Token字段并验证

添加自定义字段并验证

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值