http抓包实战 pdf_实战 Wireshark https 抓包 2, 再抓 Moka 蹭 OurATS 的小尾巴
在昨天的文章 實戰 Wireshark https 抓包,抓住 Moka 蹭 OurATS 的小尾巴 里,我們通過 chromium-browser 的 SSLKEYLOGFILE 環境變量特性,實現了 Wireshark https 抓包。
今天到百度上一搜,Moka 蹭 OurATS 的廣告還在,趁著機會,我們換個方式,再抓一次。
原理介紹
在昨天的文章里,我們之所以能成功地看到 https 的加密流量,是因為 chromium-browser 為我們生成了 SSLKEYLOGFILE 。
如果不用 chromium-browser 而是我們自己寫的程序,或者使用的是別人已經編譯好的程序,能否實現 https 抓包呢?
本文介紹的方法僅適用于運行的程序需要動態鏈接 libssl.so,也就是使用 OpenSSL 開發的程序。本文參考了 stackexchange 上的一個問題的答案。
https://security.stackexchange.com/questions/80158/extract-pre-master-keys-from-an-openssl-application?security.stackexchange.com怎么確定一個程序動態鏈接了 libssl.so 呢?以本文用到的示例 curl 和 php 為例:
hgy@hgy:~$ ldd /usr/bin/curl | grep libssllibssl.so.1.1 => /usr/lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007fb270415000) hgy@hgy:~$ ldd /usr/bin/php | grep libssllibssl.so.1.1 => /usr/lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007f69c4ffd000)可以看到,curl 和 php 都是動態鏈接了 libssl.so 的。
OpenSSL 1.1.1 之后,可以簡單地在程序里調用 SSL_CTX_set_keylog_callback 通過 callback 函數生成所需要 SSLKEYLOGFILE 。
OpenSSL 1.1.1 之前,要麻煩一些。
但問題是,像 curl 和 php 都是已經編譯好的程序,難道要修改源碼再自己編譯嗎?
不需要。
簡單地說,我們可以自己寫一個類庫,包裝下 libssl.so 的關鍵 API,然后通過 LD_PRELOAD 頂替掉正常的 libssl.so API。在我們自己實現的方法里,加上提取 keylog 的邏輯,然后調用真正的 OpenSSL 函數,讓程序還能正常運行。
stackexchange 的答案里,提供了一個實現好了的程序 sslkeylog.c,下載鏈接如下:
https://git.lekensteyn.nl/peter/wireshark-notes/plain/src/sslkeylog.c
我們將其保存到 /tmp/sslkeylog.c,然后編譯
gcc /tmp/sslkeylog.c -shared -o /tmp/libsslkeylog.so -fPIC -ldl怎么使用呢?其實和 chromium-browser 差不多。
SSLKEYLOGFILE好了,原理介紹到此。是時間動手試試了。
實戰第一步:確定 URL
https://www.baidu.com/s?wd=ourats
實戰第二步:curl命令和php腳本準備
注意 User-Agent header 頭是必須要加的,如果不加獲取不到真正的搜索結果頁,即使加了,也有可能會出現圖片驗證碼頁面,總之我們命令執行完了之后,打開 /tmp/a.html 看一眼,如果顯示一個“Found”鏈接,點開是圖片驗證碼,那就驗證一下,再次執行此命令應該就沒事了。
2. 寫個 php 腳本訪問上述 URL
<?保存為 /tmp/a.php, 然后執行
php /tmp/a.php同 curl 一樣,不是每次執行都能成功獲取到搜索結果頁面,多試幾次。
實戰第三步:配置 Wireshark
和昨天的文章一樣,這里不再多述。
實戰第四步:CURL
我們可以通過返回頁面的大小判斷是圖片驗證頁面還是搜索結果頁面,如果是圖片驗證頁面,那就打開 /tmp/a.html 正常驗證,再執行此命令。
3. 停止 Wireshark 抓包。
4. 由于使用的是 curl,所以我們這次抓的包就少多了,很容易就找到了 http 請求和返回的數據。右擊 Follow - HTTP Stream,過濾出 61.135.169.125:443 發送給我們的數據,并將編碼設為 UTF-8,然后另存為 /tmp/a.html 。
5. 瀏覽器打開 /tmp/a.html,可以看到這次 OurATS 的官網在第一條,Moka 蹭 OurATS 的廣告排到了第三條上。
這個操作的動圖在前臺始終顯示不了,點下邊鏈接查看。
https://www.ourats.com/baidu-moka-ourats/curl-wireshark-find.gif?www.ourats.com實戰第五步:PHP
和第四步流程是一樣的,只不過運行的命令變成了
SSLKEYLOGFILE=/tmp/a.log LD_PRELOAD=/tmp/libsslkeylog.so php /tmp/a.php但這次抓取的數據包里 Wireshark 只顯示出了 http 請求,沒有顯示返回數據。右擊 Follow - HTTP Stream 也得不到返回數據。不過 右擊 Follow - TLS Stream,在這里,看到了 http 返回。具體什么原因,還不清楚。
這個操作的動圖有11M,也超出了知乎上傳圖片的限制大小。點擊下方鏈接查看。
https://www.ourats.com/baidu-moka-ourats/php-wireshark-find.gif?www.ourats.com這次 Moka 蹭 OurATS 的廣告又排到了第一條上。
小結
本文通過 LD_PRELOAD libsslkeylog.so 的方法展示了如何抓取 curl 和 php file get contents 產生的 https 數據包。此方法的適應性比昨天文章里的 chromium-browser 方法要廣很多,只要動態鏈接了 libssl.so 的程序都可以,所以其實不限于 https,imaps、pops 也可以。
總結
以上是生活随笔為你收集整理的http抓包实战 pdf_实战 Wireshark https 抓包 2, 再抓 Moka 蹭 OurATS 的小尾巴的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 比亚迪注册新商标“云辇”,或与新技术有关
- 下一篇: 游客吐槽“20元人民币打卡地”:遍地垃圾