文章出處

網絡安全測試之如何利用彈性邊界環境變量進行提權.盡管進程都設置了環境變量,它們往往被用戶,開發者甚至是系統本身所忽略。對于一個像樣的系統來說,環境變量就是其最根本,這里的系統包括但不僅限于Unix (Linux, BSD), Windows以及OS X。在微軟操作系統的世界中,環境變量在其第一個版本DOS時期就已經出現,且一直沿用至今。環境變量得到重視還得從2014年9月份爆發的ShellShock漏洞說起。

該漏洞在Unxi系統中通過環境變量注入,進而執行命令。

進程的環境

簡言之,環境就是一個可用于進程或者用戶讀取寫入的變量的集合。變量可由用戶,程序或者是系統進行設置,用于提升運行進程時的靈活性。比如文件系統中的路徑,用戶名和控制執行流程的標志。

Windows下的環境

Windows下的環境變量可以使用DOS命令設置進行讀取和寫入:讀取:

set

寫入:

set variable>=value>

在命令行單獨鍵入“set”會顯示所有當前可用的變量。注意本文中說描述的“當前可用”意思是非常相似的進程可用 —— 用戶運行命令解析器這里也可以用編程的方式調用API函數代替set命令:

Kernel32!SetEnvironmentVariable

產生的結果都是一樣的。只有在當前進程及其子進程中改變這些值才會產生效果。只要條件允許,系統將替換所有%VARIABLE%的值。這個替換過程被稱作“擴展”(expansion)。例如我們在命令行下鍵入:

echo %username%

輸出的結果應該為擴展之后變量的值,與鍵入用戶名的結果是一樣的。

環境波動

正如前面所說的,環境變量已經通過一個進程設置。Windows稱這種類型的環境為“不穩定的環境”。當進程正在運行時它保持該變量,當結束進程不會留下任何痕跡。在Windows中還有另外一種類型的環境變量集合,其覆蓋整個系統范圍,在啟動過程依然持續。管理員用戶可以在系統屬性頁面下進行設置,通過使用setx命令影響所有用戶,或者直接通過設置注冊表值:

HKEY_CURRENT_USER\Environment

\

注冊表值中的擴展

Windows注冊表支持REG_EXPAND_SZ類型的值,一個字符串類型的注冊表值,其命令讀取進程以擴展其內的所有變量,擴展進程在程序使用該值之前執行。這個過程保證了需要依賴注冊表中值的程序能正常運行,開發者不必再跟蹤環境變量值。

Windows程序下的擴展

通過注冊表進行搜索,很顯然其中使用了一個擴展過的路徑引用了許多程序,函數庫,對象。即反過來依賴于環境。最常見的變量為“SystemRoot”,在正常情況下,其指向Windows安裝路徑,一般為“C:\Windows”。

簡單總結

我們擁有可用于Windows進程的環境變量,且能自動擴展以及可以由用戶設置。通過這些路徑可以引用部分Windows函數庫。以下為基于環境變量擴展的攻擊場景

場景1:”DLL注入”

假設:

如果通過一個擴展了的環境字符串加載DLL文件,攻擊者通過改變環境變量可獲得一個進程來加載該文件,但需在創建之前提供給這個進程。

換句話說,任何一個在攻擊者控制下的進程,攻擊者都可以對它進行環境設置。

可能性:

加載的DLL文件,不管是被復制,修改,完全替換,對于加載它的進程來說權限都是一樣的。“注射”一個DLL到不同的進程中而不使用任何注射技術。

應用:

最簡單粗暴的方法便是使用命令行。大概流程如下:

在C:\Wherever中創建C:\Windows副本

設置環境變量set SystemRoot=C:\Wherever

結束并重啟explorer.exe進程taskkill /F /IM explorer.exe C:\Windows\explorer.exe

資源管理器將會啟動并從攻擊者目錄加載相當多的DLL。攻擊者可以替換它們并改變執行流程。

場景2:遠程加載DLL

除了需要添加到等式這個因素以外,基本與上一個場景一樣。在Windows,API在請求一個文件或是目錄路徑時通常會接收一個指向遠程機器的UNC路徑。這個過程將會使用SMB協議嘗試訪問指定的路徑。

假設:

如果攻擊者將%SystemRoot%擴充到一個UNC網絡路徑,Windows將使用SMB協議嘗試從遠程路徑加載該圖片

可能性:

從一個被攻擊者控制的服務器上遠程加載DLL,同時也泄漏了受害者機器的IP地址。

之后將嘗試使用已登錄用戶的憑證對遠程服務器進行身份驗證,為攻擊者提供更多的參考信息。

應用:

與場景1類似,但是需要使用遠程路徑。例如我們可以使用本地機器上共享的C盤:

set SystemRoot=\\127.0.0.1\c$\Windows

\

場景3:啟動時加載DLL

就目前而言,此攻擊還算不上持久性攻擊。這也意味著重啟系統,或者是重啟進程,我們之前的努力都白費了。

假設:

攻擊者可以設置永久性(non-volatile)環境變量,將影響到系統控制流程而不論是否進行重啟。

可能性:

在操作系統啟動期間或在滿足特定條件時遠程加載DLL

應用:

與場景1類似,但是攻擊者可以使用setx命令來代替set命令:

setx SystemRoot C:\ Wherever

重啟系統,開始從攻擊者的目錄下將DLL加載到各種進程中。
看文倉www.92to.com網友整理上傳,為您提供最全的知識大全,期待您的分享,轉載請注明出處。
歡迎轉載:http://www.kanwencang.com/bangong/20161230/79940.html

文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()