本文屬于瀏覽器安全系列第二篇,目錄如下
原文鏈接:http://zhchbin.github.io/2016/09/01/Baidu-Browser-RCE/
作者:zhchbin
案例鏈接:http://wooyun.org/bugs/wooyun-2010-0216027
免責聲明
本博客提供的部分文章思路可能帶有攻擊性,僅供安全研究與教學之用,風險自負!
百度瀏覽器遠程命令執行
- 版本信息:8.4.100.3514
- 測試環境:(1)Windows 7 64 bit with IE 10 (2)Windows XP 32 bit with IE 8
0x00 套路
為了實現遠程命令執行,我們需要有兩個條件:(1)下載可執行文件(比如exe,腳本之類的)到用戶的系統中(2)啟動我們的可執行程序。接下來的分析都是為了實現這個目標而進行的一系列探索及嘗試。
0x01 UXSS與特權域
一個價值8000美刀的UXSS:https://bugs.chromium.org/p/chromium/issues/detail?id=560011 ,百度瀏覽器上也存在該問題。各種特權域的XSS問題都已經被之前的老司機們挖沒有了,所以我們從UXSS入手是最快捷的方式。那百度瀏覽器的特權域有什么呢?在使用的過程中發現,百度瀏覽器應用中心(https://chajian.baidu.com/2015/)這個網站直接能夠打開 bdbrowser://settings 這個頁面。于是,我就分析了一下里面的代碼,發現是使用了
widnow.external.StartRequest(1158, "open_url", "", "[\"offside","bdbrowser://settings#extension\"]")
從而可以確定,這個域名可以使用window.external.StartRequest這個API。也就是說:我們可以通過UXSS -> 在百度瀏覽器應用中心的網站上調用以上的API。

0x02 尋找文件下載
在日常使用瀏覽器的過程中,我們可以設置一個默認的文件下載路徑,然后選擇不提示。在百度瀏覽器中,也存在一個這樣子的設置,而且可以直接通過上面的API進行設置。所以,我們可以設置其默認不提示,這樣子就不需要用戶交互完成文件的下載!那么,我們能知道文件的下載路徑嗎?一開始我是想像二哥那樣:http://wooyun.org/bugs/wooyun-2010-083294 尋找一個能夠直接修改其默認下載路徑的接口,這樣子就可以通過下載文件到用戶的開機啟動路徑中完成RCE。不過,百度瀏覽器修改了這個設置的API,設置時會彈出選擇窗口給用戶選擇路徑。

哎,于是,換一個思路吧。我們嘗試看看能不能獲取到用戶設置的默認路徑吧!分析調試設置頁面的源代碼之后,我發現了以下的操作就可以獲取到用戶的默認路徑!
window.external.StartRequest(1162, "fetch_prefs.addListener", "console.log", "[]", "", window);
window.external.StartRequest(1163, "preference_ready", "", "[]", "", window);

0x03 執行?
完成文件的下載,我們又知道了文件在用戶系統中的絕對路徑。這個能干嘛啊?在尋找的過程中,我搜索了一下,找到了這樣的一個鏈接:http://stackoverflow.com/a/5047811/1634804 這里是指在IE上通過ActiveXObject啟動notepad.exe的代碼。想到百度瀏覽器還有一個IE內核的時候,還是試試吧。沒想到一試,發現居然可以直接執行,是的,什么提示都沒有。一開始我還懷疑是我自己設置了IE的安全級別,發現測了手上的幾個系統,還在虛擬機環境下進行測試,都發現能打開notepad。
<script>
ws=new ActiveXObject("WScript.Shell");
ws.Exec("C:\\Windows\\notepad.exe");
</script>

而在同一個系統上的IE瀏覽器,訪問這個頁面的時候會提示以下的信息。從這可以估計出百度瀏覽器在使用IE內核的時候,安全性級別設置的比較低。
SCRIPT429: Automation 服務器不能創建對象

接下來,我們要怎么利用?在使用的過程中,發現百度瀏覽器大多會先使用WebKit引擎進行渲染,而且,我查了一下,沒有任何可以設置的方式。所以,第一個想到的方案是做個界面欺騙用戶切換成IE模式,這樣子我們的RCE就大打折扣。
0x04 WebKit -> IE
想啊想!心中想起了一句話:中國特色社會主義。在China,很多銀行的網站都默認只能使用IE,訪問這些網站的時候,百度瀏覽器會不會很人性化的幫我們切換成IE內核呢?于是,繼續測試,發現果然!打開工行,招行等銀行的網站時,優先使用的是IE內核。

于是,我們只要找到一個網站是銀行的,且這個網站存在XSS或者前端界面可控的,就可以通過這個網站執行ActiveXObject了。不過找銀行的貌似挺麻煩的,找了一會之后,我把思路換成了學校,因為學校的網站(edu.cn的子域)也是默認優先IE內核。找啊找,找到一個XSS,被IE的過濾器過濾,找到另外一個不會被過濾的,URL長度有限制且有關鍵詞檢查。最后,還是在母校找到了一個站點:
http://ecampus.sysu.edu.cn/zsuoa/application/pages/select_frame.jsp?url=http://baidu.com
這個頁面會去加載使用iframe去加載url里執訂的鏈接,雖然不是XSS,但是更好用!
0x05 真的可以執行
思路總結
- UXSS 到 https://chajian.baidu.com/2015/
- 修改用戶的下載設置:自動下載到默認保存位置 (不再彈窗提醒)
- 獲取用戶的的默認下載路徑
- 下載一個文件
- 跳轉到學校的網站,使用ActiveXObject執行我們下載的文件。
測試的GIF截圖,下載并啟動Everything。

本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/73/
暫無評論