CSRF漏洞很容易就可以被发现并利用。一眼看去很多站点好像在这方面都做得不错:当你检查针对敏感操作的请求时,他们往往会实施CSRF保护。有时候可能是一个在请求主体中的CSRF token,也有可能是一个referer字段检测,或者有时是一个特殊的HTTP头字段或者cookie字段。

但是CSRF的防御不代表它就不可以被绕过。今天我们讨论一些我如何绕过CSRF防御措施的技术。

所有的CSRF

不管哪种CSRF防御措施部署,你都可以先尝试如下两件事:点击劫持和更改请求方法。

点击劫持

在同一个功能端点利用点击劫持会绕过所有CSRF防御。因为从技术上讲,请求确实来自合法站点,如果易受攻击的端点所在页面容易遭受点击劫持攻击,那么所有的CSRF保护将变得没有效果,攻击者可以任意执行CSRF攻击。

更改请求方法

另外值得一试的方法就是更改请求的方法。如果要伪造的敏感请求是通过POST方法发送的,那么尝试将其转换为GET请求。如果操作时通过GET方法发送的,那么尝试转换为POST方法。应用程序可能仍然执行操作,且通常没有任何保护机制。

例如,如下请求:

POST /change_password

POST body:

new_password=qwerty

可以被改写成

GET /change_password?new_password=qwerty

CSRF token的防御措施

因为一个站点使用了CSRF token不代表这个token是有效验证对应请求操作的,可以尝试如下方法绕过CSRF的token保护。

删除token参数或发送空token

不发送token也可以正常请求数据是因为这种逻辑错误在应用程序中非常常见:应用程序有时会在token存在的时候或者token参数不为空的时候检查token的有效性。这种情况下,如果一个请求不包含token或者token值为空,那么也是有可能绕过CSRF的防御的。

例如,合法请求如下

POST /change_password

POST body:

new_password=qwerty &csrf_tok=871caef0757a4ac9691aceb9aad8b65b

那么实施这种请求:

POST /change_password

POST body:

new_password=qwerty

或这种:

POST /change_password

POST body:

new_password=qwerty&csrf_tok=

使用另一个session的CSRF token

应用程序可能只是检查token是否合法,但是不检查token是否确实归属于当前用户。如果是这种情况的话,你可以在payload中硬编码一个合法有效的token即可。

如果一个受害者的token是871caef0757a4ac9691aceb9aad8b65b,你自己的token是YOUR_TOKEN,那么你可以很容易获取到自己的token但很难获取到受害者的token。尝试在payload中提供自己的token来绕过CSRF防御。

换句话说,原本应该发送如下请求:

POST /change_password

POST body:

new_password=qwerty &csrf_tok=871caef0757a4ac9691aceb9aad8b65b

但是改成发送这个请求:

POST /change_password

POST body:

new_password=qwerty &csrf_tok=YOUR_TOKEN

Session固定

有时候站点使用一个双提交cookie作为一个CSRF的防御措施。这个表明这个请求需要包含一个cookie,其值为随机token值,且同时在请求参数中也有一个字段值为该随机token值。如果值相同,那么请求是合法的。这种防御形式是非常常见的。

如果一个双提交cookie用在了防御措施中,那么这个应用有可能没有将有效的token保存在服务器端。所以它没有办法指定token是否合法,并且也有可能很少检查cookie中的token值和参数中token值是不是一样的。这代表你可以发送一个假token,然后仍然可以有效实施CSRF攻击。

这种攻击包含两个步骤:第一步,你使用一个session固定技术去确认受害者的浏览器使用的是你提供的包含假token的session,然后第二步在参数中使用同一个token来执行这个CSRF攻击。

session固定。这是一个可以让你控制受害者的cookie存储的攻击;

执行如下请求来实施CSRF攻击

POST /change_password

Cookie: CSRF_TOK=FAKE_TOKEN;

POST body:

new_password=qwerty &csrf_tok=FAKE_TOKEN

Referer字段的CSRF防御

如果attack.com是一个可控的域名,bank.com是一个要攻击的域名。这个站点没有使用CSRF token但是检查了referer字段。你应该怎么做?

移除referer字段

和发送一个空token值相同,有时候你只需简单地移除referer字段就可以绕过CSRF防御。你可以添加如下meta标签到存在漏洞的页面。

应用程序可能只是在发送后才会验证,这种情况下你可以绕过其CSRF防御。

绕过正则表达式

如果referer检查是基于白名单的,你可以尝试绕过验证URL的正则表达式。例如,你可以尝试在referer的URL中将受害者域名置于二级域名区域或者URL目录区域。

如果一个站点在referer字段检查“bank.com”字段,那么“bank.com.attacker.com"或”attakcer.com/bank.com"可能可以绕过这种检测。

csrf漏洞防御方案_绕过CSRF防御相关推荐

  1. csrf漏洞防御方案_变量覆盖漏洞利用及防御方案

    一.漏洞简介 变量覆盖漏洞是指攻击者使用自定义的变量去覆盖源代码中的变量,从而改变代码逻辑,实现攻击目的的一种漏洞.通常来说,单独的变量覆盖漏洞很难有利用价值,但是在与其他应用代码或漏洞结合后,其造成 ...

  2. 漏洞防御方案_越权漏洞原理及防御方案

    一.漏洞描述 越权访问(Broken Access Control,简称BAC)是Web应用程序中一种常见的漏洞,由于其存在范围广.危害大,被OWASP列为Web应用十大安全隐患的第二名. 该漏洞是指 ...

  3. 远程执行漏洞修复方案_请马上修复!SaltStack远程命令执行漏洞

    [漏洞预警]SaltStack远程命令执行漏洞(CVE-2020-11651.CVE-2020-11652) 2020年5月3日,阿里云应急响应中心监测到近日国外某安全团队披露了SaltStack存在 ...

  4. mysql注入漏洞修复方案_注入漏洞修复方案

    近看到网上曝出的dedecms版本的一个注入漏洞利用,漏洞PoC和分析文章也已在网上公开.但是在我实际测试过程当中,发现无法复现.南昌办公应用培训南京电脑维护必备原因是此漏洞的利用需要一定的前提条件, ...

  5. 滑坡泥石流的防御措施_滑坡泥石流防御

    什么是滑坡.泥石流?滑坡是指山坡在河流冲刷.降雨.地震.人工切坡等因素影响下,土层或岩层整体或分散地顺斜坡向下滑动的现象.滑坡也叫地滑,群众中还有"走山"."垮山&quo ...

  6. 带你刷burpsuite官方网络安全学院靶场(练兵场)之客户端漏洞——跨站请求伪造(CSRF)专题

    介绍 PortSwigger是信息安全从业者必备工具burpsuite的发行商,作为网络空间安全的领导者,他们为信息安全初学者提供了一个在线的网络安全学院(也称练兵场),在讲解相关漏洞的同时还配套了相 ...

  7. CSRF漏洞检测与发现

    1.首先明白什么是CSRF漏洞 跨站请求伪造,这里刚入门的同学肯定不明白是什么意思,其实重点在于请求伪造 简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并执行一些操作 ...

  8. 浅谈几种区块链网络攻击以及防御方案之女巫攻击

    旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/13/network_attack_of_blockchain_sybil_attack/ 写在前面的话 自比特 ...

  9. csrf漏洞防御方案_CSRF原理实战及防御手段

    注:本文仅供学习参考 csrf定义: CSRF跨站点请求伪造(Cross-Site Request Forgery)攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是 ...

最新文章

  1. nexus 离线下载中央库索引
  2. R语言ggplot2可视化更改轴上数字的格式(显示格式)实战
  3. SQL server判断字符串是否包含某个字符串
  4. sqoop 导入mysql blob字段,Sqoop导入的数据格式问题
  5. 前端学习(2308):react之子传父
  6. Map 的Properties集合存储IO流对象
  7. sysbench在美团点评中的应用
  8. 心玮医疗发布75万股权回购计划 用于招揽和激励员工等
  9. Oracle 10g 中 X$KCVFH 说明
  10. JAVA怎么出现10行10列的星号_C语言输出n行n列星号
  11. 六祎-简单的排版表(python)
  12. PHP base64转图片
  13. C盘空间不足怎么办?教你将其他盘存储空间分给C盘
  14. 第一课print()输出函数(包含心形图案代码)
  15. git回退到上一个版本:
  16. 适用于主流浏览器导出Excel表格的代码
  17. Apache Kylin(一)
  18. opencv(10) OpenCV 找出图像中最小值最大值函数minMaxLoc
  19. CodeForces - 1244E
  20. Received HTTP code 503 from proxy after CONNECT

热门文章

  1. 知乎日报客户端--每日看看板块
  2. Scatterfile分散加载文件和 mem.scf
  3. eSearch使用教程大全
  4. oracle 语句 子查询,Oracle子查询
  5. 优秀的计算机编程类博客 和 文章
  6. 计算机与音乐结合论文,计算机毕业论文:浅谈计算机音乐技术在音乐教学中的应用...
  7. NAS4Free 安装配置(六)配置transmission实现BT(PT)下载
  8. nyist最终淘汰赛第一场
  9. 基于Python的招聘信息的大数据可视化分析系统
  10. 计算机桌面打不开原因,电脑桌面图标打不开怎么办?