CSRF漏洞原理+案例演示及修复策略
什么是CSRF
CSRF(Cross-site request forgery)跨站请求伪造:攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。
这里要注意这句话的几个词,诱导进入-在第三方网站中进行请求发送-受害机有执行请求的权限-冒充用户对网站执行操作。
一个简单的CSRF攻击流程
举例来说就是,A为学校网站管理员,B为黑客-M9(也就是我),我首先在我的网站中插入了学校网站后台创建一个test用户的恶意语句,这时候,假装我与A已经接触了很久,知道他每天几点会对网站进行维护,在维护期间,我可以将我的网站发给A,并告诉A这个网站每天都有一些0day漏洞更新(投其所好),这时候A如果没有关闭后台页面,直接在同一浏览器打开了我的网站,由于浏览器保存了Cookie,网站后台会认为这是A发送的请求,所以就以A的名义执行了我的恶意语句,在A不知情的情况下创建了test用户。
这样一说应该就明白了吧!🍉🍉
对于CSFR漏洞出现的地方,主要要留意一些可以修改信息,插入信息等操作页面,这里演示pikachu靶场的CSRF如何配合Burp来测试。
这里就很明显,我们登录用户,然后点击修改资料,抓到修改资料的数据包(右图),我们可以看到,,这个修改信息是使用get方式提交的,我们可以使用burp的一个小工具,快速将数据包内容转换成html格式,方便我们插入到我们自己的网站中。
这样CSRF可利用的POC已经好了,然后按照我文章开始举的那个小例子进行即可,你可以将代码任意修改,修改创建管理员等等操作皆可。
(这里要注意的一点就是,如果要创建用户等深入操作,你必须要有创建用户的数据包,这个就要你去找源码,然后搭建到本地抓到本地包后再改即可。)
乌云案例之bilbil
这个漏洞是2016年在乌云爆出来的,由于bilbil对绑定绑定微博的地方没有加token保护,导致可以CSRF攻击,让别人点我链接,我的微博账号就和他的blibili账号绑定,然后我就可以登录他的bilibili账号了。
这个是请求微博oauth2授权
会直接被302跳转到Bilibili得绑定页面 且没有token防护,也没有referer检测
我把这条url发给了基友
然后他就被我绑定了微博,然后我就可以使用我的微博账号去登录基友的bilbil账号了。
其实不止是bilbil,当时很多大厂都爆出过CSRF漏洞,其中微博可以利用CSRF利用蠕虫+投票系统可以实现刷票,刷关注,刷收藏等等操作。
CSRF挖掘经验
CSRF主要用于越权操作,因此多发生在有权限控制的地方。
黑盒挖掘:先搭建好环境,打开几个非静态页面,抓包看有没有token,如果没有,再直接请求这个页面,不带referer,如果返回数据还是一样的,那说明很有可能存在CSRF漏洞,
白盒挖掘:读取代码的核心文件,查看里边有没有验证token和referer相关的代码。或者直接搜索token这个关键字,再去看一下比较关心的功能点的代码有没有验证。
CSRF漏洞防御方式:
5.设置验证码
这个方案的思路是:每次的用户提交都需要用户在表单中填写一个图片上的随机字符串,厄….这个方案可以完全解决CSRF,但个人觉得在易用性方面似乎不是太好,还有听闻是验证码图片的使用涉及了一个被称为MHTML的Bug,可能在某些版本的微软IE中受影响,并且验证码没token那么实用,用户体验较差。
6.限制请求方式只为post
结束,当然只是个人拙见,有问题可以联系我哦🍉🍉