當前位置:
首頁 > 最新 > 手把手教你使用PowerShell繞過AppLocker

手把手教你使用PowerShell繞過AppLocker

大家好,我是小編

感謝昨天小夥伴們點的贊

今天早飯堂堂正正地吃了倆煎餅果子

而且加了四個蛋!!

前言

目前Windows操作系統客戶端在安全性、意識和監控方面的能力都在不斷增加,包括AppLocker,Device Guard,AMSI,Powershell ScriptBlock Logging,PowerShell約束語言模式,用戶模式代碼完整性,HIDS,SOC等程序和功能的使用。

今天就教大家如何使用PowerShell診斷腳本執行命令並繞過AppLocker,本文重在技術分享,可不要用於惡意操作哦。

這裡整理了一個目錄結構,其中包含位於以下父目錄的診斷腳本:

%systemroot%diagnosticssystem

特別是,兩個子目錄( AERO)和( Audio)包含兩個PowerShell腳本:

CL_Invocation.ps1

CL_LoadAssembly.ps1

CL_Invocation.ps1提供了一個通過System.Diagnostics.Process執行二進位文件的函數(SyncInvoke)。並且CL_LoadAssembly.ps1提供了兩個用於載入.NET / C#程序集(DLL / EXE)的函數:

LoadAssemblyFromNS

LoadAssemblyFromPath

分析CL_Invocation.ps1

在調查這個腳本時,執行命令會非常簡單,如下面的截圖所示:

導入模塊並使用SyncInvoke也很簡單,命令執行通過以下方式成功實現:

CL_Invocation.ps1

(or import-module CL_Invocation.ps1)

SyncInvoke

然而,進一步的研究表明,這種技術在隨後的測試工作中沒有繞過任何系統防護。

PowerShell有約束語言模式(在PSv5中),會阻止某些PowerShell代碼/腳本的執行,並且默認AppLocker在非特權帳戶的情況下會執行未簽名的二進位文件。儘管如此,CL_Invocation.ps1在可信賴的執行鏈中仍然具有優點,並且在與其他技術結合時可以逃避分析。

分析CL_LoadAssembly.ps1

subTee在幾年前發布的Tweet中也曾提到過CL_LoadAssembly的旁路技術:

為了測試這種方法,我們在C#(Target Framework:.NET 2.0)中編譯了一個非常基本的程序(程序集),我調用funrun.exe,如果執行,它將通過proc.start()運行calc.exe:

在非特權用戶狀態下,使用具有默認AppLocker規則的Windows 2016計算機,用戶試圖直接執行funrun.exe。在cmd行和PowerShell(v5)上調用時,遭到阻止,如以下屏幕截圖所示:

在PowerShell(v2)下運行時,Funrun.exe也被阻止:

使用CL_LoadAssembly,用戶通過對funrun.exe的路徑遍歷調用來成功載入程序集。但是,約束語言模式阻止用戶在PowerShell(v5)中的調用方法,如以下屏幕截圖所示:

跳過約束語言模式,用戶需調用PowerShell (v2)並成功載入程序集,並將路徑遍歷調用到funrun.exe:

用戶調用funrun程序集方法並生成calc.exe:

成功!

作為非特權用戶,這證明可以通過調用PowerShell(v2)(註:這是必要條件)繞過約束語言模式,並通過CL_LoadAssembly.ps1載入程序集來繞過AppLocker。下面是CL序列:

powershell -v 2 -ep bypasscd C:windowsdiagnosticssystemAEROimport-module .CL_LoadAssembly.ps1LoadAssemblyFromPath ........ empfunrun.exe[funrun.hashtag]::winning()

AppLocker繞過資源

有關AppLocker繞過技術的更多信息,建議大家查看由Oddvar Moe創建和維護的Ultimate AppLocker繞過列表,在撰寫本文時這些資源也起到了很大的幫助。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 漏洞銀行 的精彩文章:

TAG:漏洞銀行 |