web安全之csrf


1.csrf介绍

跨站点请求伪造(Cross Site Request Forgery)被称作 CSRF。CSRF的其他称呼CSRF 也被称作 XSRF,会话叠置(Session Riding),跨站点引用伪造(Cross-Site Reference Forgery),恶意连接(Hostile Linking),一键攻击(One-Click Attack)。CSRF是一种web网络攻击,它利用用户在已经登录某个网站的情况下,通过伪装成合法用户的请求来执行非法操作。攻击者通过欺骗用户让其浏览器访问之前已认证过的站点,并在用户不知情的情况下触发了包含恶意操作的请求。这种攻击方式限制在已通过身份验证的用户的功能范围内,因此可执行的恶意操作通常涉及该用户在目标网站上具备的权限,如修改账号信息、转账等。如果受害者是系统管理员,攻击的危害可能更为严重。

2.攻击流程

一个典型的CSRF攻击有着如下的流程:
1.受害者登录a.com,并保留了登录凭证(Cookie)。
2.攻击者引诱受害者访问了b.com。
3.b.com 向 a.com 发送了一个请求:a.com/act=xx。浏览器会默认携带a.com的Cookie。
4.a.com接收到请求后,对请求进行验证,并确认是受害者的凭证,误以为是受害者自己发送的请求。
5.a.com以受害者的名义执行了act=xx。
6.攻击完成,攻击者在受害者不知情的情况下,冒充受害者,让a.com执行了自己定义的操作。

3.csrf攻击特点,条件,防御手段

攻击特点

  1. 攻击发起在第三方网站:攻击者一般会在受害者常访问的网站上加载恶意代码,发起攻击。
  2. 利用受害者的登录凭证:攻击者会利用受害者在被攻击网站的登录凭证,冒充受害者提交操作。
  3. 跨站请求:攻击者会用各种方式发起跨站请求,例如:图片URL、超链接、CORS、Form提交等。
  4. 难以追踪:部分攻击方式可以直接嵌入在第三方论坛、文章中,使得攻击来源难以追踪。
  5. 通常是跨域的:因为外域通常更容易被攻击者掌控。但如果本域下有容易被利用的功能,攻击者可以直接在本域下发起攻击。

攻击条件

  1. 网站存在值得攻击的功能:攻击者会寻找可以修改邮箱、密码、转账、手机号等功能的网站。
  2. 基于cookie的会话处理:网站对于客户端请求只通过cookie进行用户验证,没有其他的会话跟踪和用户验证机制。
  3. 没有不可预测的参数:比如修改密码时需要输入验证码或原密码,这两个参数攻击者既不知道也猜不到,功能就不会被CSRF成功攻击。

防御手段

  1. 验证请求来源:在接收到请求时,检查请求来源,确保请求来自可信来源。
  2. 使用验证码或二次验证:添加验证码或二次验证机制,确保请求可信。
  3. 设置token:在请求中添加唯一token,验证请求的合法性。

4.测试方法

CSRF(跨站请求伪造)的测试方法通常包括以下步骤:

  1. 设置代理:首先,在浏览器中设置代理,使用Burp Suite作为代理服务器。这可以通过安装相应的插件并在浏览器中配置代理设置来完成。
  2. 注册用户并修改密码:打开待测试的网站,注册一个新用户并登录。然后,在网站上修改密码。
  3. 抓包分析:使用Burp Suite抓取与密码修改相关的请求和响应包。这有助于了解请求的详细信息,例如请求方法和参数。
  4. 构造CSRF请求:在Burp Suite中,右键单击选定的请求,选择“参与工具”/“生成CSRF PoC”。这将生成一个包含CSRF攻击代码的HTML页面。
  5. 修改CSRF请求:根据需要,可以修改CSRF PoC中的参数,例如将目标邮箱更改为攻击者的邮箱。
  6. 测试CSRF攻击:将生成的CSRF HTML页面粘贴到攻击者的浏览器中并打开。点击页面上的“提交请求”按钮,攻击者应该能够成功执行目标操作,例如修改受害者的密码。
  7. 检查结果:在Burp Suite中观察代理请求和响应。如果密码被成功修改,并且响应显示“密码修改成功”,那么说明该网站存在CSRF漏洞。

5.csrf和css的区别

相同点:

  1. 攻击者把恶意代码放在其自己控制的网站上,诱导受害者访问这个网站
  2. 通过邮件、短信、社交软件进行传播
  3. 放在存在该漏洞的网站上,等待有缘人,比如评论区

不同点:

  1. XSS 允许攻击者在受害者的浏览器上执行 js 代码;而 CSRF 不行
  2. XSS 通过窃取受害者的 cookie 来实现账号接管,如果目标站点使用了 httponly 这就行不通了;CSRF 通过浏览器发起请求,自动携带受害者的cookie信息,即使有 httponly 也不影响 CSRF 攻击的实现
  3. XSS 的危害更大。攻击者如果成功实现了 XSS 攻击,那通常意味着他可以使用受害者在这个网站的所有功能,而 CSRF 只限于特定的存在漏洞的功能
  4. CSRF 无法让攻击者获取到服务器返回的数据,由于请求是由受害者的浏览器发起的,那么服务器的响应最后还是给到了受害者那里,攻击者是拿不到这部分数据的,所以对于一些查询类功能,即便没有做任何防御 CSRF 的措施,它也几乎是没有利用价值的;而 XSS 由于可以执行js代码,这也就使得攻击者可以将它想要的数据发送到自己的服务器上,比如前面 XSS 章中提到的回传 cookie。

文章作者: chens
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 chens !
  目录