昨天對於 TLS 的介紹,不曉得大家有沒有消化成功呢?今天我們就直接用自己的環境實作一次,究竟 TLS 加密了什麼?
我們今天的工作流程是:
內容繁多且複雜,我會在下方搭配示意圖讓大家知道每個步驟!
而且這個測試方法會需要把你的所有瀏覽器先關掉,所以你如果要照著我的步驟操作,建議先把我的文章複製起來,放在你電腦上隨便一個 .txt
裡面看就好。
現在我們的環境中有:
這時候我們先把伺服器打開。
昨天我們已經有把 HTTPS Server 的 Python 檔案寫好了,暫時先不去管裡面的內容是什麼,重點是我們要把封包分析給你知道!所以直接啟動它吧!
python3 https_server.py
在你的 Windows 開啟 Powershell 並設定環境變數
# 建立一個 sslkeys.log 檔案
New-Item -Path C:\Users\<your_win_username>\sslkeys.log -ItemType File -Force
# 設立一個環境變數,監聽 TSL 協議的封包,並且把結果存到 sslkeys.log 檔案
$env:SSLKEYLOGFILE = "C:\Users\<your_win_username>\sslkeys.log"
# 開始監聽這個環境變數
Get-Content $env:SSLKEYLOGFILE -Wait
這個環境變數的主要功能就是,待會我們會用瀏覽器連接 Kali Linux 的網頁伺服器,在那短短不到 0.2 秒的速度裡,把所有 TLS 的過程記錄下來!
操作步驟就如同之前所述,在你的 Kali Linux Terminal 輸入
wireshark
就會打開一個 GUI 視窗,然後選擇 eth0
來監聽我們這個家用環境的封包。
然後到我們前天的 https-test
資料夾裡面 nano
一個 index.html
<html>
<body>
<h1>
Hello from Ray
<!--你也可以自己隨便輸入內容,反正這裡就是要讓瀏覽器看到的-->
</h1>
</body>
</html>
到目前為止我們已經把實驗室布置好了,現在就準備開始實驗!
https://<your_linux_IPv4>:8443/
剛剛的發生的一切就在這剛示意圖裡面,我們已經在不到 0.2 秒之內先跟雙方打招呼,確定我們要用的加密方式是什麼,我們可以在 Wireshark 的封包中看到許多 TLS 1.3 協議。
接著雙方用 RSA、DH、ECDHE 三種加密方式產生兩對鑰匙。
然後把鑰匙交換給對方,讓雙方知道要用哪一把鑰匙來加密傳輸。
Windows 過去 Kali Linux 的文件會經過一個 Tunnel;
Kali Linux 回來 Windows 的文件也會經過一個 Tunnel。
而且都用兩對加密過的鑰匙傳輸,想破解真沒那麼容易。
在 Wireshark 裡面應該會看到大量封包,你可以在上面 filter 欄位中輸入 tls
把 TLS 1.3 協議的封包篩選出來。
接著我們去檢查一下 Windows sslkeys.log
這個檔案中有沒有出現大量亂碼,這些亂碼實則是 ClientHello、KeyExchange 加密的內容,也是我們解開 TLS 1.3 封包的 (Pre)Master-Secret
。
打開 CMD Terminal 輸入
# 進入檔案目錄
cd C:\Users\<your_username>
# 把這個 sslkeys.log 傳送給 Kali Linux
scp -r .\sslkeys.log <your_username>@<your_linux_IPv4>:/home/<your_username>/Desktop
# 舉例:scp -r .\sslkeys.log raychao@172.100.50.32:/home/raychao/Desktop
接著打開 Wireshark 上方 Edit
→ Preferences
→ Protocols
→ TLS
→ (Pre)Master-Secret log filename
把你剛剛傳送給 Kali Linux 的 sslkeys.log
丟進去,點擊 OK
、APPLY
神奇的事情發生了!你解開剛才加密的封包,而且看到我們輸入的內容。
仔細看也會發現 Protocol 從 TLS 1.3 變成了 HTTP。
✅ 自己架設 HTTPS server(Kali Linux + Python)
✅ Windows Edge 加上 SSLKEYLOGFILE
寫出金鑰
✅ Wireshark 設定 TLS keylog 並正確解密 TLS session
✅ 驗證出完整 HTTP 明文內容
這整個流程幾乎等於:
「在合法環境下實作一次瀏覽器與伺服器之間的 TLS 封包攔截與解密」
這已經是滲透測試、封包分析與網路安全實務裡非常重要、也最難的技能之一了!很高興大家可以跟完篇文章。當然在現實生活中要想做到這件事情會更困難,因為你不知道對方使用的傳輸協議是什麼?解密的方法是什麼?
所以後面我就會開始帶大家認識一些解密的小工具,或可能會自己寫腳本也說不定?
如果很不幸的你在過程中發生任何錯誤或問題,不知道怎麼解決,歡迎在下方留言或是貼上截圖告訴我,我會即時回應你們解決辦法!
自己跟 AI 學習
David Bombal 的 Youtube 影片
Whimsical 製作示意圖