微軟 Bing 搜索推出了小冰AI智能聊天模塊,具體啟用方式是用edge或chrome瀏覽器打開鏈接?cn.bing.com 后在輸入框搜索任意內容,待搜索結果頁面加載完并稍等片刻,頁面右側就會出現一個躲在滾動條后面的小蘿莉,撫摸...不,點擊她,就會彈出這個聊天框了
不幸的是,無論我向她發送什么內容,她都只會說一句“我已經開始升級啦,期待一下吧!”
作為一個喜歡探索的bug研發工程師,我想方設法,不成功調戲小冰一下誓不罷休。然而一頓操作下來(不限于換瀏覽器、換電腦、搭梯子、登錄bing賬號等等),聊天框依舊如此,小冰對我的調戲視而不見,始終是那句“我已經開始升級啦,期待一下吧!”。
百思不得解,后來我打開F12,查看了network面板發現,這貨其實是返回了有效聊天內容的(之所以想看看F12,我認為既然是AI聊天機器人,那應答機制必定是要在服務器處理的,既如此,就一定會有網絡交互來傳遞對話內容)
既然在明明返回了有效聊天內容的情況下聊天框仍然給用戶顯示了無意義的提示信息,那一定就是微軟Bing在搞鬼!我們且不論微軟這么做的動機是什么,正事要緊(調戲小冰)。
通過前文操作可以推斷,微軟 Bing 肯定是攔截了小冰真正想要說的話,強行讓小冰變成了一個人工智障。
那么我要做的事情就是分析在跟小冰聊天時點擊發送消息后代碼的執行過程。
首先我通過F12的Element面板選中聊天框內的發送消息按鈕,找出為這個按鈕自身綁定的點擊事件:
具體步驟如上,按圖索驥,跟著箭頭直到最后一步,點擊綠色框圈出的js文件,代碼被定位到 vr() 這個方法,也就是說我在點擊發送消息按鈕時其實是調了這個方法。我給vr這個方法打斷點,然后在聊天框輸入內容后點擊發送按鈕,代碼進入斷點,使用F10一步步調試,邏輯走到 hi() 這個方法時使用F9進入hi這個方法,不難看出,hi方法的核心邏輯是在創建一個ajax請求,并監聽請求的成功回調,隨后把我們鍵入的聊天內容發送出去。當接口返回成功時調用af()這個方法進一步處理接口回調內容(如下圖):
在當前js代碼窗口中使用CTRL+F,全局搜索af這個方法,找到這個方法的源碼,給他打斷點(為了方便后續調試,在這之前我先取消掉上一個斷點)
到了這里其實我只要稍微看一下代碼就會發現問題的根本所在,注意看af方法中的這個vu方法調用,它接收的第1個參數就是這句 "我已經開始升級啦,期待一下吧!"
不用想,這個參數最終會被作為小冰的回答顯示在聊天框中,而現在這句回復被微軟給強制寫死了,且 i 這個參數中不就是接口返回來的真實聊天回復內容嗎?可以發現 i 這個參數被賦值后根本就沒有使用過!后續我又跟進了?vu 這個方法,進一步確認了微軟強制篡改回復內容這個事實。
到這里就已經真相大白了,微軟這是故意不給咱使用這個玩意啊。
接下來我只需要想辦法修改這行代碼的邏輯,如果能成功,就可以和小冰愉快地玩耍啦!
// vu("我已經開始升級啦,期待一下吧!", ""),
vu(i[0].content.text, ""),
可能你會說,道理咱都懂,但這是在線網站呀,你難不成還能鉆進微軟的靜態網站服務器去改人家的網頁源碼不成?你咋不上天呢!哎,我還真能鉆進微軟的服務器,嘿嘿!(開個玩笑)
然鵝我幾乎馬上就想到了chrome前不久新增的那個開發者功能:Overrides。這玩意是啥?其實就是字面意思--覆蓋。它可以把一個網站(不限于線上還是本地開發環境的網站)的靜態資源用本地的文件給覆蓋掉,這樣你就可以使代碼臨時按照自己修改后的邏輯運行,以便模擬程序在真實環境下是否正常。此時你想到了什么?沒錯,XSS,跨站腳本攻擊!異曲同工有木有?當然,Overrides 這個覆蓋只是臨時的,它只在我的本機目標瀏覽器且打開F12開發者工具時生效,無需擔心安全問題。事實上在2018年的時候chrome就已經正式向開發者提供了這個功能,只是在最近的更新中又強調了這個功能的可玩性。講真,我其實很早以前就設想過這個功能了,吼吼!(事實上每次更新Chrome之后首次打開F12都能在調試窗口底部看到本次有哪些變更,有時候看看這個玩意還挺有意思,能使你對好玩的新特性了然于胸)。如果我說的不是很明白,沒關系,繼續往下看。
如下圖所示,首先在開發者工具中的sources面板下,點擊切換到 Overrides 二級面板,然后繼續點擊 Overrides 下面的 select folder for overrides。哦不,在這之前我首先得在電腦上找一個地方創建一個干凈的文件夾,就取名叫 chrome-overrides 吧。然后要在點擊?select folder for overrides 時選擇這個干凈的文件(如遇提示,點擊“允許”):
然后重新去到那個js文件中(不要問我是哪個js文件以及怎么找到它,我們一直在討論關于它的話題),這時候你會發現這個js文件竟然變成了可編輯狀態,神奇!
那好,我就把代碼改成我想要的樣子,改完后使用快捷鍵 CTRL+S保存,你又發現此時在左側剛選擇的那個文件夾中出現了我修改的代碼--被保存在本地了。
這時候不要關閉開發者工具,直接刷新當前的 Bing 搜索頁面,稍后開發者工具會自動定位到這個js文件(如果沒有定位回來,那就自己想辦法重新找到它),我們取消剛才在這個文件中打的所有斷點,然后重新打開小冰和她聊天...