windows平臺下,瀏覽器安全是繞不過的話題,其涉及的安全問題涵蓋二進制和web,攻擊場景也很是多樣化:web
等等。chrome
本文關注的是第一類攻擊場景:用戶訪問惡意URL被感染惡意代碼。shell
傳統的攻擊場景是:攻擊者僞造系統管理員身份發送一封郵件給用戶,郵件內容中附帶攻擊者的URL連接,註明爲系統安全補丁升級包。用戶收到這封郵件後會去下載並運行該「系統安全補丁升級包」,被感染惡意代碼。把整個過程分解一下:windows
攻擊者誘導用戶訪問構造的惡意URL瀏覽器
瀏覽器彈出是否下載攻擊者的惡意程序詢問框,用戶點擊"是",瀏覽器開始下載攻擊者的惡意程序緩存
用戶運行剛下載的惡意程序,被感染安全
能夠看到這樣一個完整的攻擊流暢,每一步都須要用戶主動參與。cookie
攻擊者可否成功的實施攻擊,達到讓用戶感染惡意代碼的目的,這在很大程度上取決於用戶自己。對於有必定安全意識的用戶,這類攻擊是比較難成功的,由於他們知道從官網下載所須要的軟件、不運行來歷不明的軟件。攻擊者的社工能力,對惡意URL的包裝能力,顯得十分重要。session
那麼爲了解決這一問題,攻擊者的技巧也在進步,最近幾年瀏覽器相關的各類漏洞頻繁爆出,包括IE、chrome、adobe flash等,而且已經公開有相關遠程代碼執行漏洞的利用程序(exp)也很多。因爲微軟和谷歌都給自家的瀏覽器加上了沙箱,瀏覽器在訪問URL時的進程完整級別都爲low、Untrusted或者AppContainer,以下:
函數
攻擊者得到遠程代碼執行以後,還須要利用突破沙箱的漏洞(沙箱自己或者操做系統內核漏洞),提高權限才能執行下載的惡意代碼。
攻擊者若是結合這兩類exp,就能夠省去步驟2和步驟3,將攻擊場景變爲用戶訪問攻擊者的URL就執行惡意代碼。若是還能結合XSS漏洞,用戶主動點擊攻擊者的URL這一步驟均可以省去了。這樣攻擊的成功率不只會大大提升,也會增長了隱蔽性。
做爲安全工做者,有時須要重現這樣的一套攻擊場景。在具體實現的時候,可能會遇到一個問題:若是直接利用msf windows/download_exec 模塊生成的shellcode做爲flash漏洞payload,沒法將第二階段內核提權exp下載成功。
這個問題其實就是由於沙箱的存在所致使的,本文就是爲了解決這一問題,下面會給出兩種思路。
在給出具體的解決方法以前,咱們再具體的看一下這個問題。此次能夠將Flash的shellcode改成反彈shell,好比使用msf的 windows/meterpreter/reverse_http 模塊,將LHOST設置爲監聽計算機的IP。在獲取到meterpreter shell以後,查看一下當前程序所在的目錄:
能夠看到,當前文件目錄爲當前用戶的桌面。
這時試着在這個目錄下面建立一個文件,隨便輸入一些內容,看是否可以成功:
失敗了,顯示錯誤爲權限不足。看到這裏,或許你已經明白了爲什麼使用msf模塊windows/download_exec會失敗的緣由了:咱們通常在使用的時候都只會更改URL參數,不多去更改EXE參數,即便去更改EXE的值也只是換個名字罷了,不會去設置下載文件的全路徑,因此默認下載的位置就會是:當前桌面/EXE的值。由於沙箱所致使的權限問題,這樣就會失敗。
因此解決的思路之一就是設置EXE的全路徑,讓其下載到當前權限下能夠寫入的路徑。那麼當前程序可寫入的路徑有哪些呢?這能夠經過一個簡單的操做就能夠獲得了。
首先利用windbg附加到IE瀏覽器,而後設置下面斷點:
由於IE在正常運行的時候,自身也是要進行文件寫入操做的嘛。在windbg中輸入g命令,繼續讓IE運行,斷下來的時候查看Createfile第一個參數的值:
「C:\Users\Win7SP1\AppData\Local\Microsoft\Windows\Temporary Internet Files\Low\Content.IE5\O24JWRDT\fdd05fdad54c04a2b94bfc425cf303de[1].js」 就是IE當前寫入文件fdd05fdad54c04a2b94bfc425cf303de[1].js的全路徑,那麼C:\Users\Win7SP1\AppData\Local\Microsoft\Windows\Temporary Internet Files\Low\Content.IE5\就是當前IE能夠寫入的目錄了。咱們在文件管理器中查看一下該文件:
再仔細看一下這個目錄,這彷佛正是IE的緩存目錄?!咱們來查看一下:
因此,此時的IE爲何對該目錄具備寫入的權限也是很容易理解了。那麼將windows/download_exec的EXE參數設置爲IE緩存目錄下的一個全路徑,彷佛就能夠解決了?在實驗環境中,這樣是能夠的,可是在真實的攻擊場景中,你還須要面對另外一個問題---- 仔細看一下這個緩存路徑,裏面包含着當前用戶的用戶名:Win7SP1。
這就意味這咱們須要知道當前的用戶名,或者是可以獲取當前的用戶名動態的拼接全路徑。msf中是不具備這樣的模塊的,這須要咱們本身編寫shellcode來達到目的,這部份內容的具體實現就不在這裏詳細介紹了,有興趣的能夠去查閱相關shellcode的編寫技巧。
若是你使用過msf中內核提權漏洞的利用模塊,在使用的時候,你只須要設置一個SESSION參數就能夠了。
這個SESSION能夠是以前,你利用像flash這種遠程代碼執行漏洞所獲取到的一個session。將這個session值賦值給SESSION參數,若是目標符合內核提取漏洞的利用條件,就可以獲取到一個目標系統權限的shell。
前面已經提到了,此時IE能夠寫入的目錄只有IE的緩存目錄,而這個目錄是和當前用戶名相關的,須要獲取到用戶名纔可以正確設置。可是咱們在使用的時候並無顯示的設置這個參數,那麼msf是怎麼來操做的呢?咱們能夠來查看一下msf內核利用模塊的源代碼:
msf的源代碼仍是很是具備可讀性的,函數命名都是按照要實現的功能來的,不懂msf那套API也是能夠看懂大概。
注意紅框中的代碼,能夠看出msf的操做:
在目標計算機上以隱藏的方式,啓動一個notepad進程。
打開啓動的notepad進程,獲取到進程句柄。
判斷目標操做系統位數,將dll形式的提權exp注入到notepad進程中。
啓動注入的dll,完成提權。
因此,解決思路之二也就明顯了,咱們可讓IE建立一個新的進程,而後直接將提權exp注入到新進程空間中,再執行就能夠了。這須要咱們理解內核提權exp,編寫shellcode啓動新進程並將提權代碼注入到其中,並讓其啓動。
微軟加入的瀏覽器沙箱技術,給攻擊者製造了兩個障礙:
攻擊者須要權限提高的漏洞exp(沙箱自己或者操做系統內核漏洞)。
攻擊者須要本身編寫shellcode。
這兩座大山,對攻擊者能力提出了很高的要求,無疑大大增長了攻擊者利用成功的難度。近幾年,微軟和adobe都對自家的產品加入了衆多的漏洞利用緩解機制,諸如CFG和隔離堆等,這些防禦機制直接讓一部分0day做廢,變爲沒法利用的bug。而且,微軟最近還在測試對IE的函數調用進行過濾,阻止調用一切無關的API調用,這讓想要突破沙箱又變得十分困難!
綜上,全補丁的win10+edge瀏覽器,可謂是當前很是安全組合。雖然每一年的黑客比賽中仍是有被攻破的消息,可是價值幾百萬美刀的漏洞利用會隨便用在你我普通百姓身上?更多的是技術上和國家安全層面上的形態了。
最後,但願這篇文章提出的解決思路能夠幫助到有這需求的安全工做者。
by:會飛的貓