专栏首页FreeBuf用HTTP请求重写实现JSON CSRF

用HTTP请求重写实现JSON CSRF

在该篇Writeup中,介绍了作者在某漏洞测试项目中发现JSON类型跨站请求伪造漏洞(Cross-Site Request Forgery,CSRF)的过程。

通常来说,JSON CSRF漏洞主要在于Web应用本身的身份验证机制上,简单来看存在该漏洞,其HTTP请求须满足以下三个条件:

1、Web应用身份验证机制是基于Cookie形式的(Cookie形式的验证机制本身存在CSRF攻击风险); 2、Web应用的HTTP请求中无针对用户的特定token保护; 3、Web应用的HTTP请求无同源策略保护。

如果具备上述三个条件,那么就可以从其它源中以创建AJAX请求的方式实现JSON请求伪造。注意,这只是实现JSON CSRF的主要条件,但有时候,即使是第2或第3个条件不满足,也有可能实现JSON CSRF。

我最近发现的JSON CSRF漏洞

当我测试Web应用时,我会特意去分析身份验证机制,如果其是基于Cookie形式的验证方式,那么我就会直接测试CSRF漏洞。这里的情况和上述三个主要条件有点不同,这里只满足第1,而第2第3个条件都不满足。因为这里的Web应用HTTP请求中,针对不同用户都在‘X-Auth-Token’头中指定了不同的Token值,而且还对Origin头进行了验证。以下是Web应用的PUT请求:

平时,我从Twitter中学习到了一些请求测试方法,所以这里我就来尝试尝试:

1、把请求方法更改为GET,增加一些内容作为请求参数; 2、删除请求中原本的用户特定Token和一些验证头信息; 3、以相同的长度不同的Token验证测试请求。

很幸运,其中的第2种方法是有效的,删除请求中包含Token的‘X-Auth-Token’头后,Web应用后端竟然还能正常响应:

到此,尽管Web应用存在Token头验证漏洞,但由于请求是PUT方式且Web后端还对 Origin 有验证,所以我们还是无法深入利用。如果Web后端接受其它Origin头就好了,那样的话,至少可以用PUT方法伪造JSON形式的AJAX请求。怎么办呢?

接着,我把PUT请求方法更改为POST,并把其中的Origin头删掉,然后出现了以下错误提示:

Web后端不允许POST方法?但没关系,还可以用另外一种重写方法来测试一下,我们在POST方法后加上_method=PUT试试看:

竟然是可以的!所以到此,CSRF的实现条件基本成立,可创建以下POC代码进行深入测试:

<body onload='document.forms[0].submit()'><form action="https://<vulnerable-url>?_method=PUT" method="POST" enctype="text/plain"><input type="text" name='{"username":"blob","dummy":"' value='"}'><input type="submit" value="send"></form><!---This results in a request body of:{"username":"blob", "dummy": "="} -->

总结

该漏洞原因在于Web应用对anti-csrf token和请求头存在不安全的校验,测试者在进行漏洞验证时不但需要理解基本的CSRF原理,还需掌握一些独特的请求重写技巧,就可能找到突破口。

*参考来源:medium,clouds 编译整理,转载请注明来自 FreeBuf.COM1

本文分享自微信公众号 - FreeBuf(freebuf),作者:clouds

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-04-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Facebook的Gmail验证机制存在的CSRF漏洞

    本文分享的是一个Facebook CSRF漏洞,用Gmail或G-Suite账户来验证新创建Facebook账户时存在的CSRF令牌验证机制漏洞,攻击者利用该漏...

    FB客服
  • 从“小白”到“白帽子黑客”的实用指南

    在安全的江湖之中,有一群武功高强、行侠仗义的英雄叫做: “白帽子黑客” 他们热衷于研究网络与计算机, 善于发现安全漏洞, 但他们并不会做坏事, 而是将漏洞及时...

    FB客服
  • 2017年十大Web黑客技术榜单

    近期,由安全公司 Portswigger 发起的“2017年十大Web黑客技术”评选结果出炉了!经过一开始初选的37个技术议题提名,到后来白帽社区投票的15个入...

    FB客服
  • CSRF浅谈

    CSRF(全称:Cross Site Request Fogery,跨站请求伪造),顾名思义,黑客伪造了一个可以发起请求的页面,正好你访问了,还带上了一些coo...

    WZR
  • 思维导图学 Spring

    思维导图使用 Xmind 制作,是记录 极客时间 丁雪峰 玩转Spring全家桶。

    Yano_nankai
  • 如何在@SpringBootTest中动态地启用不同的profiles

    这个类存在的意义就是为了让其它类别的 ResourceTest 继承它,并在一次启动当中运行完所有的集成测试。避免每个 ResourceTest 都初始化启动 ...

    lambeta
  • Facebook开源Torchnet,加速AI研究

    近日,Facebook 发表了一篇学术论文和一篇博客帖子详述Torchnet——一个用于简化人工智能——深度学习的新型开源软件。 图片描述 深度学习涉及海量数据...

    CSDN技术头条
  • 2017年十大Web黑客技术榜单

    近期,由安全公司 Portswigger 发起的“2017年十大Web黑客技术”评选结果出炉了!经过一开始初选的37个技术议题提名,到后来白帽社区投票的15个入...

    FB客服
  • 【全栈修炼】414- CORS和CSRF修炼宝典

    核心知识: CORS是一个W3C标准,它允许浏览器向跨源服务器,发出XMLHttpRequest 请求,从而克服 AJAX 只能同源使用的限制。

    pingan8787
  • 008-golang-container/list 链表的简单使用

    上善若水.夏

扫码关注云+社区

领取腾讯云代金券