更新时间:2025-05-15 20:31作者:佚名
翻译:Shan66
估计版税:200RMB
提交方法:将电子邮件发送到linwei360.cn,或登录到网络版本以在线贡献

前言
最近,微软的Edge浏览器团队已开始在推文上炒作阅读模式,称此功能可以消除网页的混乱,以避免分心。我对这些事情并不陌生,因为我了解各种伪协议如何在边缘浏览器中起作用,但是直到最近关于它的讨论在推文上爆炸之前,我从未使用过它。如果您不耐烦,则可以直接观看POC视频,否则可以耐心阅读本文。
要体验阅读模式,您可以加载网站并单击“阅读视图”按钮(即书形图标)。
这样,网页看起来会更令人耳目一新。
但是,该网页的DECAF版本的真实地址是什么?打开开发工具(F12)并键入位置。在控制台中键入HREF:显然,边缘浏览器添加了pseudo-protocol读取:在URL的前面。
以下漏洞适用于所有Edge浏览器版本,但是此处的POC本身是为Edge 15构建的。要在较旧版本上执行此POC,有必要进行相应的修改以确保其以阅读模式显示。
阅读模式是一种内部资源
阅读模式网页与真实网站无关。如果我们查看源代码(按CTRL U),我们将找不到原始页面的任何跟踪,该页面实际上是文件系统中托管的内部资源:
1
C: \ Windows \ SystemApps \ Microsoft.microsoftEdge_8wekyb3d8bbwe \ Assets \ ReadingView
边缘浏览器将解析原始网页的内容,删除iframe/脚本和其他HTML标签,并最终将其显示在内部阅读视图HTML中的iframe中。但是所有这些都是在幕后完成的,用户对此一无所知,通常会错误地认为它仍在原始网站上,因为地址栏没有更改。
但是,如果边缘浏览器通过在真实URL之前设置“读取:”协议在读取模式下显示网页,我们仍然可以使用脚本来做出一些小动作吗?我们可以在阅读模式下自动加载任何URL吗?
强迫任何网站进入阅读模式
让我们看看是否可以使用预阅读:协议来强制使用读取模式呈现的任意URL。
这种方法效果很好,但是仍然有一些吸引人们的注意力:尽管地址栏中的URL是crack.com.ar.ar,但渲染内容来自brokenbrowser.com。这种情况是什么?然后,如果我们检测到crack.com.ar,我们将看到一个位置。重新指向brokenbrowser.com,但是边缘浏览器不会更新地址栏!
漏洞1:在阅读模式下,Edge浏览器在脚本/HTTP重定向时不会更新地址栏。
查找我们感兴趣的重定向
这意味着我们可以使用重定向来掩饰自己为任何网站,甚至控制所有这些网站,将所有这些网站重定向到我们所控制的网站。例如,如果我们可以将Google.com重定向到恶意页面,则用户将认为内容来自Google,实际上是来自Evil.com。
顺便说一句,考虑到所有有机结果都是指向目标网站的链接,因为Google并不是一项艰巨的任务。例如,Google索引了Crack.com.ar的页面“ crack-01.html”。如果我们找到指向自然排序结果的链接,将其重定向到页面,那么我们一定会赢得胜利,因为它位于我们自己的服务器中,我可以随意修改它!是吗?让我们打开Chrome并找到指向我们服务器的Google重定向(crack.com.ar)。请记住:我们的目标是找到将Google URL重定向到crack.com.ar,并且该网站在我们的控制中。
在阅读模式下重定向
现在,我们有一个Google.com.ar URL重定向到crack.com.ar。然后,我们可以在crack.com.ar的网页上放置一些文本,例如“它不是真正的Google站点”,以便我们可以轻松地确定内容的真正位置。以下是Google重定向,带有前缀Read:伪协议。在边缘浏览器中打开的情况如下:
哇!多么美丽的伪装,但别忘了,我们正在使用阅读模式!这意味着我们无法完全控制页面的外观。请记住:Edge浏览器在呈现我们的页面之前会剥离大量HTML内容。例如,删除了iframe和脚本,JavaScript链接也不起作用。那么,我们如何自定义此页面并摆脱浅黄色的背景?我们如何在这里运行脚本?
在阅读模式下运行脚本
当我们处于阅读模式时,Edge浏览器试图保持内容静态,这意味着不允许脚本,丢弃IFRAMES等。换句话说,我们的内容最终看起来更像是一本书,而不是网页。但是,我们将尝试打破这种看似冷冻的静态阅读模式带来的各种障碍。
为此,我手动测试了几个HTML标签,例如iframe/脚本/元数据,但它们都被删除了。然后,我尝试了对象/HTML标签,令我惊讶的是,它实际上奏效了!事情比我们想象的要容易,对象/HTML标签几乎可以准确地模拟IFRAMES:它们是可以运行脚本的HTML容器!
漏洞2:Microsoft的边缘浏览器在阅读模式下呈现页面时不会删除对象标签。
因此,如果我们在crack.com.ar中的页面中添加一个对象标签,然后触发提示,它看起来令人信服。
现在,边缘浏览器会认为主页来自google.com.ar(实际上,它来自crack.com.ar),并且对象/html来自crack.com.ar.ar(确实如此)。但是问题是,尽管我们可以发出提示/警报,但我们仍然无法访问主页。
假设我们想将主页的背景颜色更改为白色,或者编写一些使攻击更令人困惑的东西,我们将需要绕过相同的原始策略或设置顶级URL而不更改地址栏。接下来,让我们尝试以前的方法:绕过SOP。
在外面思考
我们如何代表顶级域提出任意的HTML代码,以便实际访问它?实际上,数据URI是一个不错的选择。我们可以在数据URI中渲染HTML,而不是渲染托管的内容,例如:
不用担心,事情并不是那么简单。实际上,边缘浏览器不允许从此数据UI中访问任何其他文档。所有浏览器都将数据URIS作为与创建者不同的特殊来源进行处理,但是在Edge浏览器上,此限制很容易绕过:一旦加载页面后,自document.pripemument.write。单独的写入就足以设置我们的源以匹配我们的父源。
漏洞3:在data: uris中,可以通过document.write设置源以匹配其父源/创建者。
是的,伙计们!我们现在正在访问Google的顶级域。这样,我们可以完全访问渲染读取模式的内部HTML代码,而无需更改任何内容,以便我们可以用top.document.write替换淡黄背景。
[POC测试页面]
演示视频
视频加载.