背景
在我们之前的一篇 报告 中,我们学会了关于反射型XSS的知识; reflect XSS 的缺点是我们需要欺骗用户访问攻击者构造好的URL。
但是,如果我们可以将我们的javascript代码存储在页面中呢?
那么影响只会更大;没有特殊构造的URL和万恶的XSS防火墙破坏我们的游戏。我们称之为存储型XSS或者持久性XSS攻击。
一如既往,我们正在寻找鼓励我们挖掘BUG的目标。那么Medium.com怎么样?他们的奖金超级丰厚
确定目标
存储信息并于他人分享信息是Medium的主要业务。我们只需找到一种将我们的恶意代码放入信息并执行它的方法,那么让我们来看看他们的编辑器吧。
编辑器支持不同类型的内容(纯文本,图像和媒体嵌入)
通过媒体嵌入,您可以丰富文章内容。例如:加载外部视频,显示您的twitter个人信息来丰富推文内容等等。要做到这些您只需要按下编辑器的(+)按钮,然后粘贴网址,最后按下回车就可以了,这种有趣的技术名为:oEmbed
[*]真正的oEmbed技术是将内容嵌入而不是图片,译者的博客没有集成类似的技术就只能图片代替
如果你拥有一个像Medium.com这样的平台,你想让自己的网站支持各种类型的嵌入。这意味着您应该要维护一个安全的白名单,不能让所有域名的代码都能嵌入到您的网页中去,这样才能保证安全。
[*]Embed.ly是Medium.com拥有的子公司
为了验证我们的概念,我们做一个fake login
寻找漏洞,Embed.ly如何运作的?
首先,他们声明他们支持oEmbed规范;
那么这是否意味着如果我们的恶意外部url包含正确的oEmbed标记我们就成功了?想象一个包含oEmbed标签的html页面,声明它自己是一个视频播放器,但是它的真实内容是加载一个fake login页面。
很遗憾,只有经过批准的提供者才能嵌入他们的代码。
让我们打开Medium编辑器,看看如果我们尝试嵌入Vimeo视频,浏览器会做什么。由于Vimeo在白名单上,它应该可以工作,我们可以更多地了解Embed.ly的内部工作原理。
[*]1. 请求我们的Vimeo视频的request信息
[*]2. oEmbed的响应信息,mediaResourceId是内部唯一标志符
[*]3. POST请求,告诉Medium.com使用mediaResourceId包含我们的视频
[*]4. 请求oEmbed HTML,用来显示oEmbed
[*]5. 响应oEmbed HTML,包含由Embed.ly托管的Vimeo播放器
[*]6. 请求来自oEmbed HTML中iframe标签的内容
值得注意的是,Embed.ly为每个嵌入的内容创建了一个mediaResourceId。这个mediaResourceId是URL的MD5哈希值。这是一个聪明的举动,允许他们缓存结果。是否有人嵌入已经处理过的网址?Embed.ly立即就能从缓存中提取,不必再去请求一遍。
因此我们需要欺骗Embed.ly为我们的fake login页面创建mediaResourceId。此外,这个mediaResourceId应该提供一个响应,通过iframe加载我们的fake login,这样当Medium请求mediaResourceId的时候就会加载我们的fake login
[*]7. 没有成功
没有公共,我尝试了多种办法均没有达到效果!
所以我们必须考虑其它办法了。
下面的代码是[截图6]的请求内容
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ℑ=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F540139087_1280.jpg&key=b19fcc184b9711e1b4764040d3dc5c07&type=text%2Fhtml&schema=vimeo
Decoded:
GET /widgets/media.html?src=https://player.vimeo.com/video/142424242?app_id=122963&dntp=1&url=https://vimeo.com/142424242ℑ=https://i.vimeocdn.com/video/540139087_1280.jpg&key=b19fcc184b9711e1b4764040d3dc5c07&type=text/html&schema=vimeo
如果我们可以做某种中间人攻击[MITM]并假装我们是Vimeo呢?我们将更改Vimeo响应,以便加载我们的fake login页面。搜索指向Vimeo播放器的字符串 https://player.vimeo.com/video/142424242 并将其更改为 https://evildomain.ltd/fakelogin
MITM Attack
1. 快速设置:打开你的 PHP 服务器,上传fakelogin.html(包含正确设计的fake login),上传proxy.php(miniProxy,允许我们加载外部URL,更改响应,提供更改后的响应)
以上所述就是小编给大家介绍的《第二十一篇:存储型XSS(前续)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 块存储、文件存储、对象存储三者之比较
- 云原生存储详解:容器存储与 K8s 存储卷
- Android 存储(本地存储 SD卡存储 SharedPreference SQLite ContentProvider)
- 存储技术之云存储
- 选存储,就选原生块存储!
- Mysql之存储过程与存储函数
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。