【技术分享】我可能是用了假的隐身模式

阅读量151158

|

发布时间 : 2017-01-20 20:03:54

https://p3.ssl.qhimg.com/t012fc6bf1714076414.png

小编:文章提了一个探测chromium内核浏览器当前是否处于隐身模式的通用思路和具体实现,大家可以发散思维,搞一些有趣的事情。


0x01 隐身模式

隐身模式会打开一个新窗口,以便在其中以私密方式浏览互联网,而不让浏览器记录访问的网站,当关闭隐身窗口后也不会留下 Cookie 等其他痕迹。用户可以在隐身窗口和所打开的任何常规浏览窗口之间进行切换,用户只有在使用隐身窗口时才会处于隐身模式,本文将简单的谈一下基于模式差异化的攻击方法。


0x02 浏览器模式的差异化

做过浏览器指纹检测的可能知道使用不同的函数方法或者 DOM 来判断指纹,想要判断目标浏览器当前处于隐身模式还是正常模式,当然也需要找出两种模式下的差异化在哪里,之后使用脚本或其他方法去判断。虽然隐身模式不能用传统那些探测指纹的方法来判断,但我在之前使用隐身模式的过程中发现,当用户输出访问某些 ChromeURL 的时候浏览器不会在当前模式下打开,例如:chrome://settings/manageProfile, chrome://history, chrome://extensions/ 等。这个差异很大的原因可能是隐私模式下对于 extensions, history, profile… 不关联信息时做出的不同处理,利用这个“特性”我想能够做些事情。


0x03 Vuln + Feature

现在我们的理想攻击流程:

获取浏览器当前 Title/location.href/Tabs 等信息;

使用 JavaScript 打开上面测试存在差异化的 URL ;

判断用户目前的浏览器模式是否存在这个微妙的不同;

拿 115Browser 7.2.25 举例,当我们在隐私模式下打开 chrome://settings 时,浏览器启动了一个正常浏览器的进程:

https://p1.ssl.qhimg.com/t01722fe4d1e7e52e9d.png

我们知道是不能从非 chrome 协议直接 href 跨到浏览器域的:

location.href='chrome://settings'
"chrome://settings"
testchrome.html:1 Not allowed to load local resource: chrome://settings/

所以这里我去寻找一个 chrome 域的跨站漏洞,这个 115 Chrome 域下的漏洞(已修复)位于 chrome://tabs_frame ,页面 DOM 动态渲染网站 TABS Title 时过滤不严谨导致的跨站:

tpl = dom = {
        : .()[]: -: }= (elemdir) {
        matched = []cur = elem[dir](cur && cur.!== ) {
            (cur.=== ) {
                matched.(cur)}
            cur = cur[dir]}
        matched}...
= (str) {
    json = .(str)tabList = [](i = json.- i >= i--) {
        tabList.(tpl.((matchkey) {
            json[i][key]}))}
    dom..= tabList.()}

现在我们能够按照上面的思路来进行判断了,这里我为了方便直接使用 115浏览器的 browserInterface.GetTabList 接口来获取 TABS 的差异化:

browserInterface.GetTabList
(callback) {
    native ()(callback)}

这个方法接收回调函数获取当前浏览器的 TABS 信息:

https://p4.ssl.qhimg.com/t01ddb7ba80556cfa67.jpg


0x04 Payload

http://server.n0tr00t.com/chrome/check_incognito_mode.html 

: =.().=+Date().().=..()TEST Chromeium Incognito Window
http://server.n0tr00t.com/chrome/checkwindow.js
= () {
    .= }
= () {
    (..() < ) {
        ..= } {
        ..= }
}
()= (data) {
    .= data
}browserInterface.GetTabList()()

正常模式网页浏览和隐身模式网页的浏览图:

https://p3.ssl.qhimg.com/t01fdd09f9049ef5942.jpg


0x05 EOF

通过漏洞和特性的利用我们成功的实现了对浏览器隐身模式的追踪,在测试过程中发现有些浏览器 chrome://…url 是禁用的,但依然能够他们本身浏览器使用的伪协议来实现差异化的跳转(例如 QQ 浏览器的 qqbrowser:// ),这种特性虽然需要一个漏洞来配合利用,不过我认为相比之下难度着实小了许多。

搜索“同程安全”关注YSRC公众号,招各种安全岗,欢迎推荐。

本文由LYSRC原创发布

转载,请参考转载声明,注明出处: https://www.anquanke.com/post/id/85376

安全客 - 有思想的安全新媒体

分享到:微信
+10赞
收藏
LYSRC
分享到:微信

发表评论

内容需知
  • 投稿须知
  • 转载须知
  • 官网QQ群8:819797106
  • 官网QQ群3:830462644(已满)
  • 官网QQ群2:814450983(已满)
  • 官网QQ群1:702511263(已满)
合作单位
  • 安全客
  • 安全客
Copyright © 北京奇虎科技有限公司 360网络攻防实验室 安全客 All Rights Reserved 京ICP备08010314号-66