本文屬于瀏覽器安全系列第二篇,目錄如下

  1. 2345瀏覽器本地文件讀取及遠程命令執行
  2. 百度瀏覽器遠程命令執行
  3. 搜狗瀏覽器從UXSS到遠程命令執行
  4. Fancy3D引擎(YY瀏覽器)遠程命令執行

原文鏈接: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 真的可以執行

思路總結

  1. UXSS 到 https://chajian.baidu.com/2015/
  2. 修改用戶的下載設置:自動下載到默認保存位置 (不再彈窗提醒)
  3. 獲取用戶的的默認下載路徑
  4. 下載一個文件
  5. 跳轉到學校的網站,使用ActiveXObject執行我們下載的文件。

測試的GIF截圖,下載并啟動Everything。


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