Hello Cyber-Spartans!!
Hoy aprenderemos una variedad de cosas interesantes, todo gracias a la máquina HackTheBox llamada Reel.
Antes de empezar quiero aclarar que todo mi contenido publicado se hace con fines educativos, informativos y éticos.
No me hago responsable del mal uso que puedan darle.
Con este tutorial aprenderás:
Cómo realizar un simple escaneo de puertos con Nmap.
Cómo enumerar el puerto FTP
Cómo enumerar el puerto SMTP
Cómo extraer los metadatos de un archivo con exiftool
Cómo realizar un ataque de suplantación de identidad
Cómo hacer un Phishing con un archivo de office (.RTF)
Como usar Metasploit
Cómo enviar mensajes de correo electrónico a través de SMTP utilizando swaks
Cómo instalar y utilizar BloodHound
Identificando Active Directory Privileges & Privileged Accounts
Como en cualquier otra auditoria de seguridad se debe comenzar con una enumeración del sistema.
Para ello realizaremos un simple escaneo con Nmap, de la siguiente manera.
Con el anterior escaneo de puertos que hicimos con Nmap, conseguimos identificar los puertos 21 (FTP),22 (SSH),25 (SMTP) abiertos.
Enumeración FTP (Puerto 21)
Uno de los hallazgos encontrados con la exploración NMAP es el acceso con el usuario “anonymous” para el servicio FTP.
Por lo tanto, podemos autenticar sobre este servicio y revisar su contenido.
There are a variety of commands available for FTP, the most common are:
FTP Command
Description of Command
cd
Change remote working directory
dir
list contents of remote directory
get
receive file
ls
list contents of remote directory
mget
get multiple files
mkdir
make directory on remote machine
mput
send multiple files
open
connect to remote ftp
put
send one file
quit
terminate ftp session and exit
Continuaremos, enumerando los archivos del servidor.
Para descargar archivos vía FTP, podemos ejecutar lo siguiente:
Otra forma de realizar esta descarga sería utilizando el binario WGET.
El archivo “Windows Event Forwarding.docx” contenía la dirección de correo electrónico del usuario nico@megabank.com en el campo de metadatos del creador del documento, que podía verse con exiftool.
Extracción de metadatos con exiftool
ExifTool es un programa de software gratuito y de código abierto para leer, escribir y manipular metadatos de imágenes, audio, vídeo y PDF. Articulo Completo
Si quieres saber cómo se instala esta herramienta, te invito al siguiente artículo.
La salida del comando anterior es la siguiente:
Por otro lado, el archivo readme.txt simplemente contenía:
Enumeracion de SMTP (Puerto 25)
Para la enumeración del servicio SMTP, es útil enumerar los usuarios válidos.
Una forma de validar lo anterior es utilizando TELNET.
Los comandos más comunes para TELNET son los siguientes:
SMTP Command
Description of Command
HELO
It’s the first SMTP command: is starts the conversation identifying the sender server and is generally followed by its domain name.
EHLO
An alternative command to start the conversation, underlying that the server is using the Extended SMTP protocol.
MAIL FROM
With this SMTP command the operations begin: the sender states the source email address in the “From” field and actually starts the email transfer.
RCPT TO
It identifies the recipient of the email; if there are more than one, the command is simply repeated address by address.
DATA
With the DATA command the email content begins to be transferred; it’s generally followed by a 354 reply code given by the server, giving the permission to start the actual transmission.
VRFY
The server is asked to verify whether a particular email address or username actually exists.
QUIT
It terminates the SMTP conversation.
Al intentar verificar la cuenta de correo electrónico nico@megabank.com mediante el comando VRFY a través de SMTP, el comando fue rechazado. Sin embargo, el comando RCPT se puede utilizar para enumerar las cuentas de correo electrónico válidas:
Otra forma de validar esto es utilizando la herramienta smtp-enum-users.
Antes de realizar la exploración previa, escribimos una lista de posibles correos electrónicos existentes.
El contenido del archivo users.txt es el siguiente:
Realizar un ataque de phishing
La suplantación de correo electrónico se produce cuando un atacante (ciberdelincuente) falsifica un correo electrónico para que parezca que ha sido enviado por otra persona.
Con los resultados de la enumeración realizada anteriormente tenemos lo siguiente:
- Una cuenta de correo electrónico identificada como “nico@megabank.com”
- Un servidor SMTP que se ejecuta en el equipo auditado
- Alguien quiere recibir archivos .RTF
Realizando una búsqueda de formas de aprovechar la información recopilada hasta el momento podemos encontrar la existencia de CVE-2017-0199, que fue un Zero-Day crítico descubierto en abril de 2017 para Microsoft Office.
La descripción de Metasploit para esta vulnerabilidad es la siguiente:
Basically this vulnerability leveraged .rtf files (some renamed to .doc) which would connect to a remote server (controlled by the attacker) in order to download a file that contains HTML application content, and executes as an .hta file. Because .hta is executable, the attacker gains full code execution on the victim’s machine. This logical bug also gives the attackers the power to bypass any memory-based mitigations developed by Microsoft. Articulo Completo
Usando Metasploit
Vamos a proceder, con el uso del módulo metasploit para la CVE-2017-0199.
Este módulo creó el archivo malicioso shell.rtf y lo colocó en el directorio /root/.msf4/local/ al tiempo que alojaba el archivo .hta en un servidor web.
Envío de correos electrónicos con documentos adjuntos por SMTP mediante swaks
El siguiente paso es realizar un ataque de suplantación de identidad.
Enviaremos un correo electrónico a nico@megabank.com con el documento infectado adjunto.
Swaks es una herramienta de pruebas SMTP orientada a transacciones, flexible y con muchas funciones, escrita y mantenida por John Jetmore. Articulo Completo
Después de enviar nuestro correo electrónico, sólo tenemos que esperar a que la víctima ejecute el archivo y de esta manera obtendremos RCE.
Persistencia (Nico => Tom)
El usuario nico tenía un archivo en su escritorio llamado cred.xml que parecía contener las credenciales de tom, otro usuario de Reel:
El contenido del archivo es:
PowerShell tiene este objeto llamado PSCredential, que proporciona un método para almacenar nombres de usuario, contraseñas y credenciales. También hay dos funciones, Import-CliXml y Export-CliXml , que se utilizan para guardar estas credenciales y restaurarlas desde un archivo. Este archivo es la salida de Export-CliXml.
Para poder interactuar con el archivo xml como se pretende, el shell de meterpreter debe cargar la extensión de PowerShell utilizando el comando:
Para obtener una contraseña en texto plano del archivo cargándolo con Import-CliXml, y luego volcando los resultados:
Esta contraseña de texto plano se utilizó para obtener acceso SSH a Reel como el usuario TOM.
Escalada de privilegios a través de AD (Tom => Claire)
Enumeracion
En el directorio del escritorio del usuario Tom, había una carpeta titulada Auditoría AD que contenía artefactos de una auditoría de BloodHound Active Directory. Esto incluía una versión antigua de SharpHound.
Identificando vulnerabilidades con BloodHound
SharpHound nos permite descubrir dependencias ocultas en entornos de Active Directory y, junto con BloodHound, que presenta una interfaz gráfica para ello, podemos descubrir fácilmente nuestro siguiente paso a seguir.
Actualizamos SharpHound.ps1 a la última versión y la subimos a la víctima.
Montamos un servidor HTTP en nuestra máquina atacante y servimos el archivo SharpHound actualizado.
Luego lo descargamos en nuestra máquina comprometida.
Y ahora podemos ejecutar la función Invoke-BloodHound para recoger los datos necesarios, pero primero tendremos que ir a un directorio en el que podamos escribir sin riesgo de sobrescribir nada o no tener permisos de escritura:
Vamos a ir a lo grande y usar -CollectionMethod All ya que el archivo note.txt mencionado la consulta por defecto no encontró nada, así que necesitaremos todos los datos que seamos capaces de reunir. Después de un tiempo, el comando termina y vemos que se han creado varios archivos: archivos .json, un archivo .bin y un archivo .zip. Lo que BloodHound necesita es el archivo ZIP (que contiene todos los JSONs generados).
Para ello vamos a montar un servidor SMB en nuestro kali para copiar nuestro ZIP.
Para copiar archivos de un windows a un servidor SMB, debemos ejecutar lo siguiente:
Bloodhound
Es una gran herramienta visual que muestra la relación entre múltiples objetos de Active Directory y permite evaluar de forma rápida la posibilidad de comprometer información relevante, además de identificar potenciales debilidades de seguridad.
Para instalar Bloodhound en Kali, se debe ejecutar:
Despues de la instalación, se debe inicializar neo4j y para ello ejecutamos lo siguiente:
Después de iniciar sesión con las credenciales por defecto neo4j:neo4j, cargamos el archivo 20190623093056_BloodHound.zip desde la interfaz web de bloodhound.
Utilizando la opción “from” y “to” en bloodhound, logramos identificar una posible ruta desde Tom hasta el grupo “backup_admins”. Tenemos que pivotear hacia el usuario Claire. Como Tom es dueño del objeto usuario Claire, es posible que Tom tome la propiedad y modifique el DACL del objeto usuario Claire. Podemos abusar de esto para dar a Tom permisos para cambiar la contraseña de Claire. Para cambiar la DACL primero tenemos que tomar la propiedad del objeto Claire.
Analizando con BloodHound
Escalation Privilege
Tom => Claire
Conceptos Importantes!!WriteOwner : Proporciona la capacidad de tomar la propiedad de un objeto. El propietario de un objeto puede obtener todos los derechos de control sobre el mismo. GenericWrite : Proporciona acceso de escritura a todas las propiedades. WriteDacl : Proporciona la posibilidad de modificar la seguridad de un objeto, lo que puede llevar al control total del mismo.
Para pasar a la cuenta claire, utilizaremos el permiso WriteOwner junto con la funcionalidad de PowerView.
En resumen, debemos realizar los siguientes pasos:
1.) Hazte dueño de la ACL de claire
2.) Obtener permisos en esa ACL
3.) Utiliza esos permisos para cambiar la contraseña
Para ello, necesitaremos PowerView y PowerShell.
Afortunadamente, hay una copia en C:\Users\tom\Desktop\AD Audit\BloodHound, Vamos a iniciar powershell e importar Powerview.
PASO 1
A continuación, tom tiene derechos de WriteOwner sobre el objeto de usuario claire. Así que establecemos a tom como propietario del objeto claire.
PASO 2
Ahora que tom es el propietario del objeto claire, puede añadir entradas a la ACL. Es decir, ahora añadimos una entrada que le de a tom el derecho de cambiar la contraseña del objeto claire.
PASO 3
Cambiar la contraseña de claire:
Además, debemos añadir al usuario Claire al grupo de dominio ‘Backup_Admins’ utilizando la función Add-DomainGroupMember:
Y ahora podemos usar nuestras nuevas credenciales para iniciar sesión a través de SSH con el usuario Claire:
Del análisis anterior, sé que claire tiene derechos WriteDacl en el grupo Backup_Admins. Puedo usar eso para añadirla al grupo.
Después de añadir al grupo “Backup_Admins”, podemos acceder a la carpeta C:\Users\Administrator.
Entre varios de sus archivos, encontramos un script con credenciales de acceso para iniciar sesión con el usuario Administrador.
Y listo hemos logrado comprometer al usuario Administrador del servidor.
Para validar esto, podemos utilizar las credenciales e iniciar sesión por SSH.