誰動了我的寬帶?HTTP劫持!

導讀 日常遇到的劫持一般爲DNS劫持,可在路由器裏強制指定公共DNS解決。本文記錄了自己家用寬帶HTTP劫持的發現過程。相比DNS劫持,HTTP劫持則更爲流氓,解決起來也比較棘手。

近來在家上網時,iPhone Safari網頁裏經常彈出“在手機淘寶中打開連接嗎?”的提示框,如下圖:
誰動了我的寬帶?HTTP劫持!誰動了我的寬帶?HTTP劫持!

作爲一名iOS碼農,很自然的知道這是網頁在調用淘寶app的 URL Scheme tbopen:// ,這是幹什麼的呢?當然是淘寶客的推廣鏈接,點了之後打開淘寶去領券,如果你按提示下單了,推廣者就能拿到返利。問題在於,網頁爲什麼會發出這種請求,結合當前網站是http的,隱隱覺得可能是被劫持了。下面記錄一下排查過程。

誰在劫持

先說一下環境,家裏寬帶是聯通百兆,路由器華碩AC86U,刷的梅林(僅開啓虛擬內存插件),路由器直接撥號,且當時安裝條件限制,家裏沒有光貓,接線員直接接到了一樓的交換機上。

1. 是網站自己掛的廣告嗎?

在Wi-Fi下,每次用Safari隱身模式反覆訪問截圖裏這個網站,仍會出現這個提示,概率大概30%-40%。切換手機聯通4G網絡,移動4G,則一次都不會出現。換用電腦Safari和Chrome,也一次不會出現。

結論:僅在iPhone手機端Wi-Fi環境纔會出現

2. 是路由器刷的梅林固件導致的嗎?

翻箱倒櫃找出了以前買的 TPLink-WR700n,就是下圖這個小路由器(簡直是神器,小巧玲瓏,AP和Router模式任意切換),設置好撥號賬號密碼後換掉華碩繼續測試,震驚了,劫持彈窗仍然存在。
誰動了我的寬帶?HTTP劫持!誰動了我的寬帶?HTTP劫持!

結論:梅林沒問題,只能是運營商的鍋了。

怎樣劫持

由於梅林裏已經設置DNS爲114,排除了DNS劫持。確定是運營商的接入點的問題,接下來就是看看它究竟是怎麼劫持的。這裏使用Charles抓包iPhone(還沒必要祭出Wireshark大殺器)具體設置不在這裏講了,在百度裏隨機訪問網頁,待出現劫持時,停止記錄,開始分析記錄日誌。從後往前,找出返回數據裏包含 tbopen 的請求。不出意外,很容易就發現了:

誰動了我的寬帶?HTTP劫持!誰動了我的寬帶?HTTP劫持!

原請求爲 http://static.geetest.com/static/js/fullpage.8.9.3.js ,經過確認, https://www.geetest.com/ 極驗,是業界提供安全與風控解決方案的平臺,不可能返回 tbopen 這樣的數據的。在Charles裏複製此http請求的curl命令出來,使用阿里雲VPS裏進行訪問,獲取到的則爲真實的JS內容。

curl -H 'Host: static.geetest.com' -H 'Accept: */*' -H 'User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 12_1_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Mobile/15E148 Safari/604.1' -H 'Accept-Language: zh-cn' -H 'Referer:http://pass.52pk.com/' --compressed 'http://static.geetest.com/static/js/fullpage.8.9.3.js' 

使用自己的Mac重放這個curl命令,還是有很高几率被劫持。進一步,修改此請求的User-Agent字段,去掉手機標識符,僅保留爲Safari,繼續重放,則不會出現被劫持。同時,注意到發生劫持後,有個新的同樣的js請求發出,url裏多了個參數utm_id=1024001,會返回正確的JS內容,這樣做的目的,猜測可能是爲了區分請求,好讓真正的JS能正常返回不影響網頁加載,否則可能出現劫持後再被劫持,無法加載出正確的JS內容。

至此,整個劫持的過程大致清晰了:聯通的接入點會根據UA過濾出移動設備中的http JS請求,然後一定機率返回劫持後的僞JS內容,在裏面嵌入淘寶客推廣鏈接。

劫持的JS內容如下,裏面有淘寶客推廣鏈接,建議阿里媽媽的相關人士解決一下?誰動了我的寬帶?HTTP劫持!誰動了我的寬帶?HTTP劫持!

代碼比較簡單,將自己的JS腳本掛載到頁面DOM上,使用setInterval延遲20ms去調用tbopen,打開淘寶app領券。

想在手機端暫時屏蔽的話,可以在surge里加個Header Rewrite規則修改UA

[Header Rewrite] 
^http://* header-replace User-Agent Safari/530 

最後的最後,站長們還沒上https的趕快上吧。

原文來自:https://www.linuxprobe.com/http-hijack.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章