我的作業系統是 Pop!_OS 20.04,在昨天重灌成 Pop!_OS 22.04 了。
由於 Steam 給 Linux 玩遊戲的執行環境 Proton,如果想要使用到最新的功能,也必須要讓顯示卡驅動保持在最新。
之前我又把 APT repository 玩到壞掉,而且修不好,導致我的顯示卡驅動久久不能更新。
於是我就選在昨天,快速的把我的系統給重灌了。顯示卡驅動終於到最新版本了 !
重灌後我發現,我的 Pop!_OS 分享 Wi-Fi 的功能和 Apple 系列的產品有衝突。
因為我的 iPhone 和 MacOS 都不能連上 PC 的 Wi-Fi 了,Android 和 Nintendo Switch 則正常。
如果 iPhone 連不回 PC 分享的 Wi-Fi,這樣我要怎麼 demo 中間人攻擊自己的 iPhone ? 這真的是個危機 ...
好吧,總之還是進入今天的正題。
先建立存放憑證的資料夾
$ sudo mkdir /usr/local/share/ca-certificates/extra
複製一份憑證到剛才建立的資料夾
$ sudo openssl x509 -in ~/.mitmproxy/mitmproxy-ca-cert.pem -inform PEM -out /usr/local/share/ca-certificates/extra/mitmproxy-ca-cert.crt
更新憑證列表
$ sudo update-ca-certificates
把 mitmproxy 開著,然後用 curl 測試看看,你應該會正常的拿到 HTML
$ curl --proxy "localhost:8080" "https://example.com"
補充一下,如果 SSL 憑證沒過,那就會顯示
curl: (60) SSL certificate problem: self-signed certificate in certificate chain
More details here: https://curl.se/docs/sslcerts.html
curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.
如果你不想在 Linux 安裝憑證,你想每次都手動處理連線的話,你也可以這樣做。
$ HTTP_PROXY="localhost:8080" \
HTTPS_PROXY="localhost:8080" \
REQUESTS_CA_BUNDLE="/home/yotsuba/.mitmproxy/mitmproxy-ca.pem" \
curl "https://example.com"
在 Python code 的話則可以這樣寫。
import os
import requests
os.environ['HTTP_PROXY'] = 'localhost:8080'
os.environ['HTTPS_PROXY'] = 'localhost:8080'
os.environ['REQUESTS_CA_BUNDLE'] = '/home/yotsuba/.mitmproxy/mitmproxy-ca.pem'
response = requests.get('https://example.com')
第一件事情一定是先讓手機連上 mitmproxy。
我的電腦的主機板有 Wi-Fi 模組,所以可以分享 Wi-Fi 給其他裝置,實作起來就很方便。
如果沒有的話,買一個外接式的 Wi-Fi 網卡也是可以。
實際上,無論你的網路架構如何,只要最終有辦法把攻擊和被攻擊節點串接在同一個網路,並且讓被攻擊節點通過 mitmproxy 都是可以的。
之後打開瀏覽器,連線到 mitm.it,如果成功發動中間人攻擊,你應該會看到以下的樣子。
接下來只要下載憑證,並且按照網頁中給的 insturctions 來安裝憑證就可以了。