CSRF学习

0x00 CSRF简介:

       CSRF全称Cross Site Request Fergery,中文跨站请求伪造。这是一种常见的Web攻击手段,但是开发者往往容易忽略对与这个漏洞的防护,造成隐患。CSRF可以结合其他的漏洞进行组合拳攻击,当然也可以他自己就独自搞事情。

 

0x01 攻击原理简介

       假设现在你要在网上向你媳妇儿转一笔钱,这个转账的链接呢是这样的:http://xxx.com/pay.php?user=yousrself&receiver=wife&mount=1000,那么在你登录的转账账户,然后执行这个链接,你的媳妇儿就能收到你的转账了。但是现在呢,有一个hack,我们称为大三儿,大三发现了这个转账链接的参数构造,于是呢他自己构造了一个这样的参数: http://xxx.com/pay.php?user=yousrself&receiver=hacker_bigthree&mount=1000,这个链接是什么意思呢,就是你向黑客大三转账1000元,然后大三将这个链接发给你,由于你刚给媳妇儿转账,你还没有退出你的登陆账号,而此时你收到大三发的这个链接,一激动点开了,那就好了,你成功向大三转账了。

       那么上面就是CSRF攻击的简介了,通俗来讲就是黑客利用你的身份执行自己伪造的正确的请求(这个请求不是你想要执行的)。

       演示效果:

       这是DVWA的一个CSRF靶场,里面有一个修改密码的功能。

CSRF学习_第1张图片

当我们要修改密码的时候他向后台提交的链接是这样的(顺带将密码设置为123456)。

CSRF学习_第2张图片

那么现在假设你成功登陆这个网站,正在进行一些操作,而这个修改密码的操作所要提交的参数恰好被攻击者知道了,此时你收到一条来自攻击者的含有恶意攻击链接的信息:

CSRF学习_第3张图片

然后你一激动,点进去了,那么便一不小心执行了那条含有恶意攻击的链接,你的密码就被修改了,变成了password

CSRF学习_第4张图片

CSRF学习_第5张图片

一次CSRF攻击便成功了。

 

0x02 攻击条件

       从上面看来,要想执行CSRF攻击,这几个条件应该要满足,首先黑客需要利用你的身份,那么此时你的身份一定是已经被验证过的合法用户,就是说你成功登陆了某网站,并且还没有退出登陆。第二个呢就是黑客要伪造一个正确的请求,那么要伪造这个正确的请求就必须要了解这个请求会包含哪些参数等等,第三个就是你这个被攻击的人一定要点击黑客发给你的这条恶意请求链接,当然啦,也有自动发送这条链接的方式,但是总会有一个链接的载体,你需要与这个载体有交互。

 

 

0x03 CSRF的防护

       在对于身份认证这一块有一个叫做cookie的东西,起了很大作用,而CSRF攻击很大程度上也要依靠跨域间的cookie传送。可以看到,我第一次修改密码为123456的cookie值和第二次点击恶意链接提交的cookie值是一样的。关于cookie要多说一句,默认情况下大多数浏览器是允许发送第三方cookie的,但是IE除外,因为相对而言IE的安全做的好一点,理由,IE花了很多钱。(金主牛逼)。

       P3P头:用于取消发送第三方cookie是浏览器的拦截策略,包括IE。

       Refer头防护:通过添加这个请求头,判断请求与来源是否是同一个域内,可以用于防护CSRF,不过这个措施可靠性不高,Refer头可以手动修改的。

       验证码防护:通过验证码强制要求用户之间产生交互才能完成请求,可用于防护,而且比较有效,但是用户体验可能下降。

       Token机制:这是目前广泛采用的CSRF机制,通过生成token随机数,验证请求是否由本人发起。这种情况可能就需要组合拳才能进行攻击,例如先XSS获取你的token值,再进行CSRF攻击。

 

更多关于CSRF的知识建议参考:《白帽子讲web安全》,里面介绍的非常详细。

你可能感兴趣的:(WEB安全)