CSRF跨站请求伪造总结

CSRF

什么是CSRF?

CSRF被称为跨站请求伪造,它利用用户已登录的身份,在用户毫不知情的情况下,以用户的名义完成非法操作。

跟跨站脚本攻击(XSS)相比,XSS利用的是用户对指定网站的信任,

跨站请求伪造(CSRF)利用的是网站对用户(网页浏览器)的信任。

原理

image-20230720205630759

image-20230720222736947

上图中网站 A为存在CSRF漏洞的网站,网站B为攻击者构建的恶意网站,User 为网站A网站的合法用户。CSRF攻击攻击原理及过程如下:

1、 用户user打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A

2、在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A

3、用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B

4、网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A

5、浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。

6、这就是网站B,在用户C不知情的情况下,伪造成A网站受信任的用户C去操作一些事情,但是A网站不知道操作这些事情的C是不是本人在操作。即利用了网站对用户浏览器的信任。

简单的来说,如果要利用CSRF攻击。

需要满足两个条件:

(1)受害者登录信任的网站A,并且生成cookie。

(2)在登录状态下,且cookie有效下访问攻击者网站B。

特点及危害

CSRF的特点

  1. 攻击一般发起在第三方网站,而不是被攻击的网站。被攻击的网站无法防止攻击发生。
  2. 攻击利用受害者在被攻击网站的登录凭证,冒充受害者提交操作;而不是直接窃取数据。整个过程攻击者并不能获取到受害者的登录凭证,仅仅是“冒用”。
  3. 跨站请求可以用各种方式:图片URL、超链接、CORS、Form提交等等。部分请求方式可以直接嵌入在第三方论坛、文章中,难以进行追踪。
  4. CSRF通常是跨域的,因为外域通常更容易被攻击者掌控。但是如果本域下有容易被利用的功能,比如可以发图和链接的论坛和评论区,攻击可以直接在本域下进行,而且这种攻击更加危险。

CSRF的危害

  1. 发送邮件
  2. 修改账户信息
  3. 资金转账
  4. 盗取用户隐私数据
  5. 网站被上传网马
  6. 作为其他攻击方式的辅助攻击(比如xss)
  7. 传播CSRF蠕虫(见下文中的YouTube CSRF漏洞)
  8. 等等

防护

1、同源检测

也就是我们常说的referer。

通过referer检测该请求是否为同一个IP来的。

但是这种方法很容易被绕过或者伪造。

2、使用随机token

CSRF的一个特征是,攻击者无法直接窃取到用户的信息(Cookie,Header,网站内容等),仅仅是冒用Cookie中的信息。

而CSRF攻击之所以能够成功,是因为服务器误把攻击者发送的请求当成了用户自己的请求。那么我们可以要求所有的用户请求都携带一个CSRF攻击者无法获取到的Token。服务器通过校验请求是否携带正确的Token,来把正常的请求和攻击的请求区分开,也可以防范CSRF的攻击。

攻击分类

Get型

这种类型的CSRF一般是由于程序员安全意识不强造成的。GET类型的CSRF利用非常简单,只需要一个HTTP请求,所以,一般会这样利用:

<img src=http://example.cn/csrf.php?xx=11 />

在访问含有这个img的页面后,浏览器会自动向

http://example.cn/csrf.php?xx=11

发出一次HTTP请求。example.cn就会收到包含受害者登录信息的一次跨域请求。所以,如果将该网址替换为存在GET型CSRF的地址,就能完成攻击了。

Post型

这种类型的CSRF危害没有GET型的大,利用起来通常使用的是一个自动提交的表单,如:

<form action=http://example.cn/csrf.php method=POST>
<input type="text" name="xx" value="11" />
</form>
<script> document.forms[0].submit(); </script>

访问该页面后,表单会自动提交,相当于模拟用户完成了一次POST操作。

POST类型的攻击通常比GET要求更加严格一点,但仍并不复杂。任何个人网站、博客,被黑客上传页面的网站都有可能是发起攻击的来源,后端接口不能将安全寄托在仅允许POST上面。

链接类型

链接类型的CSRF并不常见,比起其他两种用户打开页面就中招的情况,这种需要用户点击链接才会触发。这种类型通常是在论坛中发布的图片中嵌入恶意链接,或者以广告的形式诱导用户中招,攻击者通常会以比较夸张的词语诱骗用户点击,例如:

 <a href=" http://example.cn/csrf.php?xx=11" taget="_hacker">
      百万福利,点击就送!!
 <a/>

由于之前用户登录了信任的网站A,并且保存登录状态,只要用户主动访问上面的这个PHP页面,则表示攻击成功。

CSRF探测

利用burp suite,通过抓取数据包,修改相应表单信息,重新提交,伪造客户端请求,请求成功则说明存在csrf漏洞。

1、 配置浏览器代理。Burp的默认代理是127.0.0.1:8080

2、 抓取有可能存在csrf的页面(个人中心信息修改等等),右击选中的链接,选择Engagement tools—->Generate CSRF POC选项

3、 在弹出的CSRF Poc generater页面,点击”Test in browser—>Copy”,复制生成的URL,打开刚才访问过目标网站的浏览器(注意不能关闭原来登录网站的页面,此时也不能关闭代理),新建一个页面,粘贴刚才复制的URL,访问.

或者

把HTML写到自己服务器的phpstudy环境下,然后命名index.php,然后去访问自己的服务器ip地址,看看个人中心的信息是否被修改。

4、如果信息被修改,那么就存在csrf漏洞。但是这个HTML表单有一个不好的地方就是,需要点击一下。我们可以修改代码,让其不需要点击,即可直接访问我们的服务器。

image-20230720225312665

ps:测试csrf漏洞要在个人中心或者能够修改,增加的地方测试,如果没有修改的地方,那么就算存在csrf漏洞也是不行的。

参考文章

https://www.kancloud.cn/buxiaju/wangluoshentoujichu/2068695

一位不知名大佬在看云写的文章。

文章中还有一些POC利用,绕过没有参考,后续再学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值