Empezamos ejecutando Arp-scan para descubrir la ip de la primera máquina de las 4.
Enumeración
Escaneo de puertos
Realizamos un escaneo de todos los puertos para saber cuáles están activos.
❯ sudo nmap -sSCV -p- -n -Pn --min-rate 5000 192.168.56.105
Starting Nmap 7.94 ( https://nmap.org ) at 2024-07-02 18:06 CEST
Nmap scan report for 192.168.56.105
Host is up (0.00040s latency).
Not shown: 65521 closed tcp ports (reset)
PORT STATE SERVICE VERSION
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds?
3389/tcp open ms-wbt-server Microsoft Terminal Services
| rdp-ntlm-info:
| Target_Name: MILANESA1
| NetBIOS_Domain_Name: MILANESA1
| NetBIOS_Computer_Name: MILANESA1
| DNS_Domain_Name: Milanesa1
| DNS_Computer_Name: Milanesa1
| Product_Version: 10.0.14393
|_ System_Time: 2024-07-02T16:07:44+00:00
| ssl-cert: Subject: commonName=Milanesa1
| Not valid before: 2024-06-18T06:07:22
|_Not valid after: 2024-12-18T06:07:22
|_ssl-date: 2024-07-02T16:07:49+00:00; -2s from scanner time.
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
8080/tcp open http Microsoft IIS httpd 10.0
|_http-title: Milanesas Argentinas
|_http-server-header: Microsoft-IIS/10.0
| http-methods:
|_ Potentially risky methods: TRACE
|_http-open-proxy: Proxy might be redirecting requests
47001/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
49664/tcp open msrpc Microsoft Windows RPC
49665/tcp open msrpc Microsoft Windows RPC
49666/tcp open msrpc Microsoft Windows RPC
49667/tcp open msrpc Microsoft Windows RPC
49668/tcp open msrpc Microsoft Windows RPC
49669/tcp open msrpc Microsoft Windows RPC
49670/tcp open msrpc Microsoft Windows RPC
MAC Address: 08:00:27:35:A4:D0 (Oracle VirtualBox virtual NIC)
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
|_nbstat: NetBIOS name: MILANESA1, NetBIOS user: <unknown>, NetBIOS MAC: 08:00:27:35:a4:d0 (Oracle VirtualBox virtual NIC)
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled but not required
|_clock-skew: mean: -2s, deviation: 0s, median: -2s
| smb2-time:
| date: 2024-07-02T16:07:44
|_ start_date: 2024-07-02T15:58:54
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 80.96 seconds
Los parámetros utilizados son:
- -p- : Escaneo de todos los puertos. (65535)
- -sS : Realiza un TCP SYN Scan para escanear de manera rápida que puertos están abiertos.
- -sC : Realiz una escaneo con los scripts basicos de reconocimiento
- -sV : Realiza un escaneo en buqueda de los servicios
- –min-rate 5000: Especificamos que el escaneo de puertos no vaya más lento que 5000 paquetes por segundo, el parámetro anterior y este hacen que el escaneo se demore menos.
- -n: No realiza resolución de DNS, evitamos que el escaneo dure más tiempo del necesario.
- -Pn: Deshabilitamos el descubrimiento de host mediante ping.
Vemos que ene el puerto 8080 que tiene un IIS.
Si fuzeamos nos encontramos con un login.aspx.
El cual si intentamos autenticarnos con credenciales por defecto.
Vemos que ni por asomo parece un panel de login, mas bien parece un cmd.
En el cual vemos con este articulo que tenemos que pasarle un «programa» y un argumento así que enumeramos por usuarios.
Y por logs, así que vamos a ver que esconde
Encontramos un usuario y una contraseña en texto claro.
Comprobamos las interfaces de red.
Y entramos mediante rdp.
Y obtenemos acceso.
Comprobamos las interfaces.
Y nos descargamos Ligolo, proxy para Linux y agent para Windows en la misma versión ambos.
Abrimos un servidor compartido con smb.
Y lo transferimos a la primera maquina victima.
Creamos la primera interfaz de red y ejecutamos el proxy.
Seguidamente en la maquina victima ejecutamos el agente.
Recibimos la conexión y la indicamos.
Añadimos la nueva interfaz de red.
Y vemos que tenemos conexión.
Milanesa2
Enumeración
Escaneo de puertos
Realizamos un escaneo de todos los puertos para saber cuáles están activos.
Nos encontramos con un IIS.
Si fuzeamos nos encontramos con un WordPress.
Así que hacemos un escaneo básico con wpscan.
Y encontramos un usuario.
Le hacemos fuerza bruta y obtenemos las password.
Vamos a generarnos un payload con msfvenom con extensión .php y luego lo vamos a convertir .jpg aquí lo importante es que la ip a la que apuntamos el payload debe ser el segundo interfaz de la máquina milanesa1.
Lo subimos.
Y con el administrador de archivo le cambiamos la extensión.
Añadimos un nuevo listener para obtener la revhell.
Nos dirigimos a la ruta y nos ponemos a la escucha.
Ahora subiremos el nc.exe para una shell mas estable.
Repetimos el proceso cambiando la extensión.
y añadiendo un nuevo listener.
añadimos un nuevo listenar y ejecutamos la ruta donde se encuentra el nc.exe.
Enumeramos las interfaces.
Añadirnos una nueva adaptador de red y agregamos la red.
Nos crearemos una nueva carpeta compartida con smb para recibir el agent.
Y lo copiamos en nuestro directorio.
Añadimos un nuevo listener para recibir la conexión del agente.
Y ejecutamos el agente apuntando a la segunda interfaz de la maquina anterior la cual mediante el Port Forwarding recibiremos la conexión.
Obtenemos la conexión e iniciamos la sesión.
Milanesa 3
Vemos que tenemos conexion.
Enumeración
Escaneo de puertos
Realizamos un escaneo de todos los puertos para saber cuáles están activos.
Y al no encontrar nada ejecutamos un fuzeo mas avanzado con un diccionario distinto.
Donde nos encontramos con dvwa.
Al no tener credenciales, capturamos con burpsuite el fallido acceso.
Y con patator hacemos fuerza bruta obteniendo las credenciales «admin:qwerty«.
En unos de los apartado podemos inyectar comandos, así que le cambiaremos la contraseña al usuario administrador.
Y accederemos con el con WINRM.
Obtenemos un archivo llamado info.txt.
El cual parece un informe anual por años de «Lamilanesa«.
Listamos los usuarios y nos llama la atención el usuario adm_tier1, nos indica que nos enfrentamos a una máquina dentro de dominio custodiado por un tiering.
Antes de nada añadiremos una nueva interfaz de red con su respectivo segmento puesto que hemos encontrado una nueva interfaz.
Añadiremos un nuevo listener en la sesión 2 para recibir la conexion y otra para pasarnos el agente.
Ejecutamos el agente apuntando a la segunda interfaz de la maquina anterior.
Recibimos la conexión e iniciamos la sesión.
Tenemos conexión.
Y ejecutamos un escaneo, vemos el nombre del DC y el dominio y lo agregamos a nuestro fichero /etc/host.
Además utilizaremos el archivo ino.txt anteriormente para crearnos un diccionario.
Y con crackmapexec obtenemos las credenciales de adm_tier1 anteriormente enumerado.
Puesto que no nos podemos conectar, utilizaremos la sesión anterior de la maquina 3, la cual accedimos como administrador para añadir a adm_tier1 en el grupo de administradores para que nos deje entrar con WINRM.
Conseguimos acceder-.
Recapitulando estamos ante un dominio con una pki y un tiering por lo que no vamos a poder hacer un movimiento lateral ni conectarnos al DC, pero recordemos que hemos visto una pki instalada.
Ejecutamos neo4j.
Si no lo tenemos ya nos descargamos bloodhound, luego importamos los archivos que hemos generado. Si no nos deja cargar el zip, descomprimimos los archivos y los cargamos por separado.
Una vez en bloodhound buscamos plantillas vulnerables y encontramos la plantilla hackmeuser vulnerable a ECS1.
Ahora lo haremos será exportar la clave privada en un archivo .pfx.
Esto es una indicación de que DC no es compatible con el PKINIT, que es una autenticación previa que permite recuperar TGT o NTHash utilizando el certificado, teniendo una lectura de esto artículo, todavía es posible abusar de esto ya que tenemos el certificado de administrador podemos hacer los siguientes ataques
- Agregue nuestra cuenta de máquina creada a los DCics
msDS-AllowedToActOnBehalfOfOtherIdentity
propiedad para realizar delegación basada en recursosRCBD
- Modificar contraseña de cuentas
- Otorgar al usuario de bajo privilegio derechos DCSync
Esto se puede lograr con PaseTheCert ,irá con la concesión de derechos DCsync a hackme.thl, pero primero tenemos que extraer la clave y cert del archivo pfx
Usaremos PassTheCert.py
para otorgar privilegios especiales al usuario adm_tier1
en el dominio hackme.thl
. Con el certificado y la clave proporcionados, el comando concede derechos de replicación de directorio (DCSYNC) al usuario adm_tier1
, lo que permite a ese usuario recuperar hashes de contraseñas y realizar otras acciones relacionadas con la replicación de directorio en Active Directory.
Ahora podemos ejecutar secretsdump.py con hackme.thl para dumpear las credenciales de todos los usuarios puesto que tenemos ese privilegio.
Y con el hash entramos como administradores del dominio
Agradecimiento a thehackerslabs por la colaboración y el esfuerzo en la creación de este Write-UP.