CSRF漏洞学习


[TOC]

CSRF学习

概念

  • CSRF(Cross-site request forgery)跨站请求伪造,通过伪装成受信任用户的请求来利用受信任的网站。

攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作


分类

1.GET型

  • 通过修改get请求的参数,来达到攻击的目的

如:/user.php?id=1&email=123@163.com,这个链接的意思是用户id=1将邮箱修改为123@163.com。当我们把这个链接修改为 /user.php?id=1&email=abc@163.com ,然后通过各种手段发送给被攻击者,诱使被攻击者点击我们的链接,==当用户刚好在访问这个网站==,他同时又点击了这个链接,那么这个用户的邮箱被修改为abc@163.com

2.POST型

  • 这类型的csrf利用起来通常是使用一个自动提交的表单
  • 访问该页面后,表单会自动提交,相当于模拟用户完成了一次POST操作。

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


原理及过程

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

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

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

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

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


防御

  1. 验证HTTP Referer字段
  • 根据 HTTP 协议,在 HTTP 头中有一个字段叫 Referer,它记录了该 HTTP 请求的来源地址。而如果黑客要对网站实施 CSRF 攻击,他只能在他自己的网站构造请求,该请求的 Referer 是指向黑客自己的网站。网站只需要对于每一个请求验证其 Referer 值如果 Referer 是其他网站的话,则有可能是黑客的 CSRF 攻击,拒绝该请求。

    这种方法的显而易见的好处就是简单易行,网站的普通开发人员不需要操心 CSRF 的漏洞,只需要在最后给所有安全敏感的请求统一增加一个拦截器来检查 Referer 的值就可以。特别是对于当前现有的系统,不需要改变当前系统的任何已有代码和逻辑,没有风险,非常便捷。

2.在请求地址中添加 token 并验证(Anti-CSRF token)

  • CSRF 攻击之所以能够成功,是因为黑客可以完全伪造用户的请求,该请求中所有的用户验证信息都是存在于 cookie 中,因此黑客可以在不知道这些验证信息的情况下直接利用用户自己的 cookie 来通过安全验证。
  • 要抵御 CSRF,关键在于在++请求中放入黑客所不能伪造的信息,并且该信息不存在于 cookie 之中++。可以在 HTTP 请求中以参数的形式加入一个==随机产生的 token==,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。

    token 可以在用户登陆后产生并放于 session 之中,然后在每次请求时把 token 从 session 中拿出,与请求中的 token 进行比对,但这种方法的难点在于如何把 token 以参数的形式加入请求。

3.在 HTTP 头中自定义属性并验证

  • 这种方法也是使用token并进行验证,和上一种方法不同的是,这里并不是把 token 以参数的形式置于 HTTP 请求之中,而是把它放到HTTP头中自定义的属性里。通过==XMLHttpRequest==这个类,可以一次性给所有该类请求加上 CSRFToken 这个 HTTP 头属性,并把 token 值放入其中。

漏洞挖掘

1:最简单的方法就是抓取一个正常请求的数据包,如果没有Referer字段和token,那么极有可能存在CSRF漏洞

2:如果有Referer字段,但是去掉Referer字段后再重新提交,如果该提交还有效,那么基本上可以确定存在CSRF漏洞。


文章作者: Doublenine
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Doublenine !
 上一篇
越权漏洞学习 越权漏洞学习
[TOC] 越权漏洞概念 越权,顾名思义就是超出权限范围进行操作。 多数WEB应用都具备权限划分和控制,但是如果权限控制功能设计存在缺陷,那么攻击者就可以通过这些缺陷来访问未经授权的功能或数据,这就是我们通常说的越权漏洞。 越权漏洞
下一篇 
GUETCTF-WEB3-writeup GUETCTF-WEB3-writeup
[TOC] GUETCTF-web3-wp打开网页是一个登陆界面,f12查看源码: <!-- $user = $_GET["username"]; $file = $_GET["file&qu
  目录