CSRF漏洞详解

CSRF漏洞概述

Cross-site request forgery简称为“CSRF”。 在CSRF的攻击场景中攻击者通过伪造用户的请求,使用户在不知情的情况下执行恶意操作。(这个请求一般是一个链接),然后欺骗目标用户进行点击,用户一旦点击了这个请求,整个攻击也就完成了。所以CSRF攻击也被称为为"one click"攻击。

攻击过程

  • 用户登录受信任的网站A,并在该网站上获取一个认证凭证(如Cookie)。

  • 用户在不登出网站A的情况下,访问恶意网站B。

  • 恶意网站B中的恶意代码会自动向受信任网站A发送请求,其中包含了用户在网站A上的认证凭证。

  • 受信任网站A接收到请求后,由于认证凭证的存在,会误以为是用户的合法请求,并执行相应的操作,如修改密码、发表言论等。

image-20230728145710385

攻击利用受害者在被攻击网站的登录凭证,冒充受害者提交操作;而不是直接窃取数据,整个过程攻击者并不能获取到受害者的登录凭证,仅仅是“冒用”。

攻击手段:

  • 链接欺骗:攻击者通过诱导用户点击恶意链接来触发CSRF攻击。

  • 图片欺骗:攻击者将恶意请求嵌入到图片中,当用户浏览网页时,图片会自动向受信任网站发送请求。

  • Flash欺骗:攻击者通过Flash应用程序发送恶意请求,利用Flash的跨域特性绕过浏览器的同源策略。

  • 自动提交表单:攻击者通过自动提交表单的方式来触发CSRF攻击

    以下是一些常见的CSRF攻击手段的示例代码:

    1. 链接欺骗:

     <!-- 恶意链接 -->
     <a href="http://victim.com/transfer?amount=1000">点击领取奖励</a>
    1. 图片欺骗:

     <!-- 恶意图片 -->
     <img src="http://victim.com/transfer?amount=1000" alt="恶意图片">
    1. Flash欺骗:

     <!-- 恶意Flash应用程序 -->
     <embed src="http://victim.com/transfer?amount=1000">
    1. 自动提交表单:

     <!-- 自动提交表单 -->
     <form action="http://victim.com/transfer" method="POST">
       <input type="hidden" name="amount" value="1000">
       <input type="submit" value="点击领取奖励">
     </form>
     <script>
       document.forms[0].submit();
     </script>

CSRF与XSS的区别

如果小黑事先在x网的首页如果发现了一个XSS漏洞,则小黑可能会这样做:1,欺骗lucy访问埋伏了XSS脚本(盗取cookie的脚本)的页面;如果小黑事先在x网的首页如果发现了一个xss漏洞,则小黑可能会这样做:

  • 欺骗Lucy访问埋伏了脚本(盗取Cookie的脚本)的页面;

  • lucy中招,小黑盗取到到lucy的cookie ;露西中招,小黑盗取到到露西的Cookie;

  • 小黑顺利登录到lucy的后台,小黑自己修改lucy的相关信息;小黑顺利登录到露西的后台,小黑自己修改露西的相关信息;

所以跟上面比一下,就可以看出CSRF与XSS的区别:所以跟上面比一下,就可以看出csrf与xss的区别: CSRF是借用户的权限完成攻击,攻击者并没有拿到用户的权限,而XSS是直接盗取到了用户的权限,然后实施破坏

如何确认一个web系统存在CSRF漏洞

  • 对目标网站增删改的地方进行标记,并观察其逻辑,判断请求是否可以被伪造---比如修改管理员账号时,并不需要验证旧密码,导致请求容易被伪造;

    比如对于敏感信息的修改并没有使用安全的token验证,导致请求容易被伪造;

  • 确认凭证的有效期(这个问题会提高CSRF被利用的概率)

    虽然退出或者关闭了浏览器,但cookie仍然有效,或者session并没有及时过期,导致CSRF攻击变的简单

变种攻击总结:

  • 双重CSRF攻击:攻击者通过在恶意网站中嵌入一个隐藏的iframe,该iframe会加载一个受信任网站的页面,从而在用户不知情的情况下进行CSRF攻击。

  • JSONP劫持:攻击者通过劫持受信任网站的JSONP请求,将恶意代码注入到响应中,从而实现CSRF攻击。

  • CSRF利用GET请求:通常CSRF攻击利用的是POST请求,但也可以利用GET请求进行攻击,只需将恶意请求的参数放在URL中即可。

  • CSRF利用AJAX请求:攻击者可以通过AJAX请求发送恶意请求,利用浏览器的同源策略,将请求发送到受信任网站上。

防御CSRF漏洞的措施

  • 使用CSRF令牌:在每个表单或请求中添加一个随机生成的CSRF令牌,验证请求是否合法。

  • 验证来源:服务器端对请求的来源进行验证,只接受来自受信任网站的请求。

  • 同源检测:浏览器端通过检测请求的来源是否与当前页面的域名一致来防止CSRF攻击。

  • 防止跨域请求:限制网站对外的接口,防止其他域名的请求访问敏感接口。

  • 限制敏感操作:对于一些敏感操作,如修改密码、删除账号等,要求用户进行额外的身份验证,如输入密码、短信验证码等。

参考文章

web 安全问题(一):CSRF 攻击 - dosir - 博客园 (cnblogs.com)

前端安全之 CSRF 攻击原理和防护方法 - 掘金 (juejin.cn)

CSRF漏洞原理说明与利用方法 - 北极边界安全团队 - 博客园 (cnblogs.com)

CSRF原理和实战利用 - FreeBuf网络安全行业门户

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值