iT邦幫忙

2025 iThome 鐵人賽

DAY 20
0
佛心分享-IT 人自學之術

從零開始的 Linux 世界系列 第 20

【Day.20】Wireshark 實作大解密:讓 TLS 封包變 HTTP!

  • 分享至 

  • xImage
  •  

昨天對於 TLS 的介紹,不曉得大家有沒有消化成功呢?今天我們就直接用自己的環境實作一次,究竟 TLS 加密了什麼?

我們今天的工作流程是:

  1. Kali Linux 開啟 HTTPS Server
  2. Windows 建立一個檔案,紀錄 TSL 加密/解密的所有過程
  3. Kali Linux 開啟 Wireshark 截取封包
  4. Windows 瀏覽器連接 HTTPS Server
  5. 解析封包內容

內容繁多且複雜,我會在下方搭配示意圖讓大家知道每個步驟!

而且這個測試方法會需要把你的所有瀏覽器先關掉,所以你如果要照著我的步驟操作,建議先把我的文章複製起來,放在你電腦上隨便一個 .txt 裡面看就好。

1️⃣ 啟動你的 HTTPS server

https://ithelp.ithome.com.tw/upload/images/20251004/20176048IT0oIas90h.png

現在我們的環境中有:

  1. Windows(假設是你自己)
  2. Kali Linux(假設是某個公司開的網頁伺服器)

這時候我們先把伺服器打開。

昨天我們已經有把 HTTPS Server 的 Python 檔案寫好了,暫時先不去管裡面的內容是什麼,重點是我們要把封包分析給你知道!所以直接啟動它吧!

python3 https_server.py

2️⃣ 建立一個檔案紀錄 TLS 握手過程

https://ithelp.ithome.com.tw/upload/images/20251004/20176048EDvsQfeq99.png

在你的 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 的過程記錄下來!

https://ithelp.ithome.com.tw/upload/images/20251004/20176048acGbxDFCa8.png

3️⃣ 準備你的 Wireshark 監聽封包與網頁內容

https://ithelp.ithome.com.tw/upload/images/20251004/20176048BjmoTzAcwx.png

操作步驟就如同之前所述,在你的 Kali Linux Terminal 輸入

wireshark

就會打開一個 GUI 視窗,然後選擇 eth0 來監聽我們這個家用環境的封包。

https://ithelp.ithome.com.tw/upload/images/20251004/20176048EkIZozRjtL.png

然後到我們前天的 https-test 資料夾裡面 nano 一個 index.html

<html>
    <body>
        <h1>
            Hello from Ray
            <!--你也可以自己隨便輸入內容,反正這裡就是要讓瀏覽器看到的-->
        </h1>
    </body>
</html>

4️⃣ 開始測試

https://ithelp.ithome.com.tw/upload/images/20251004/20176048FuatsFgyLp.png

到目前為止我們已經把實驗室布置好了,現在就準備開始實驗!

  1. 打開你的瀏覽器(不管是 Chrome、Edge、Firefox 都可以)
  2. 在你的 URL 網址列輸入
https://<your_linux_IPv4>:8443/
  1. 不到 0.2 秒的時間裡面,你的 Wireshark、sslkeys.log 應該會出現大量封包與亂碼
  2. 看看你的瀏覽器是不是有出現東西

https://ithelp.ithome.com.tw/upload/images/20251004/20176048IEgdsYSIM3.png

5️⃣ 在 0.2 秒內發生什麼

https://ithelp.ithome.com.tw/upload/images/20251004/20176048QZ1opCuQXT.png

剛剛的發生的一切就在這剛示意圖裡面,我們已經在不到 0.2 秒之內先跟雙方打招呼,確定我們要用的加密方式是什麼,我們可以在 Wireshark 的封包中看到許多 TLS 1.3 協議。

接著雙方用 RSA、DH、ECDHE 三種加密方式產生兩對鑰匙。

然後把鑰匙交換給對方,讓雙方知道要用哪一把鑰匙來加密傳輸。

Windows 過去 Kali Linux 的文件會經過一個 Tunnel;
Kali Linux 回來 Windows 的文件也會經過一個 Tunnel。
而且都用兩對加密過的鑰匙傳輸,想破解真沒那麼容易。

6️⃣ 解密方法

https://ithelp.ithome.com.tw/upload/images/20251004/20176048qoLmb8mHcb.png

在 Wireshark 裡面應該會看到大量封包,你可以在上面 filter 欄位中輸入 tls 把 TLS 1.3 協議的封包篩選出來。

https://ithelp.ithome.com.tw/upload/images/20251004/20176048dB6EG7XzUu.png

接著我們去檢查一下 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 上方 EditPreferencesProtocolsTLS(Pre)Master-Secret log filename

把你剛剛傳送給 Kali Linux 的 sslkeys.log 丟進去,點擊 OKAPPLY

https://ithelp.ithome.com.tw/upload/images/20251004/20176048uZG0V2X39S.png

神奇的事情發生了!你解開剛才加密的封包,而且看到我們輸入的內容。
仔細看也會發現 Protocol 從 TLS 1.3 變成了 HTTP。

7️⃣ 你剛剛完成了以下整個鏈

✅ 自己架設 HTTPS server(Kali Linux + Python)

✅ Windows Edge 加上 SSLKEYLOGFILE 寫出金鑰

✅ Wireshark 設定 TLS keylog 並正確解密 TLS session

✅ 驗證出完整 HTTP 明文內容


這整個流程幾乎等於:

「在合法環境下實作一次瀏覽器與伺服器之間的 TLS 封包攔截與解密」

這已經是滲透測試、封包分析與網路安全實務裡非常重要、也最難的技能之一了!很高興大家可以跟完篇文章。當然在現實生活中要想做到這件事情會更困難,因為你不知道對方使用的傳輸協議是什麼?解密的方法是什麼?

所以後面我就會開始帶大家認識一些解密的小工具,或可能會自己寫腳本也說不定?


如果很不幸的你在過程中發生任何錯誤或問題,不知道怎麼解決,歡迎在下方留言或是貼上截圖告訴我,我會即時回應你們解決辦法!

📄 參考資料

自己跟 AI 學習
David Bombal 的 Youtube 影片
Whimsical 製作示意圖


上一篇
【Day.19】從封包到握手,看懂 TLS 1.3 在幹嘛
系列文
從零開始的 Linux 世界20
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言