Driver
Dificultad: Easy - OS: Windows
¯\_( ͡° ͜ʖ ͡°)_/¯ Machine info
El CTF Driver se centra en la explotación de vulnerabilidades en un entorno Windows a través de un escenario temático relacionado con impresoras. La dinámica general comienza con un proceso de enumeración donde se identifican servicios expuestos como un servidor web IIS en el puerto 80, SMB en el puerto 445 y WinRM en el puerto 5985. La interacción inicial con el sitio web, protegido por autenticación básica HTTP, permite mediante credenciales comunes (admin:admin) acceder a una funcionalidad de carga de firmware para impresoras. Esta funcionalidad representa un vector de ataque fundamental: al aprovechar el hecho de que los archivos subidos son revisados manualmente, es posible introducir un archivo malicioso (.scf) que induce a la máquina objetivo a enviar de vuelta un hash NTLM capturable.
Posteriormente, el ataque se apoya en la interceptación y descifrado del hash NTLM capturado, lo que habilita el acceso remoto a la máquina como el usuario comprometido (tony) vía WinRM. Este segundo vector enfatiza técnicas de cracking offline y autenticación remota. Una vez establecida la sesión remota, se busca obtener una shell más robusta (meterpreter), facilitando así la recolección de información adicional y el análisis de posibles rutas para la escalada de privilegios. La generación y ejecución de un ejecutable malicioso con capacidades de reverse shell constituye otro eje crítico en la cadena de explotación.
El componente final del CTF gira en torno a la escalada de privilegios aprovechando una vulnerabilidad específica en un controlador de impresora instalado (RICOH PCL6 UniversalDriver V4.23). Utilizando módulos automatizados para sugerencia y ejecución de exploits locales desde la sesión meterpreter, se emplea el exploit ricoh_driver_privesc para obtener privilegios SYSTEM, culminando así en el control total de la máquina. En conjunto, el CTF explora técnicas clave en la explotación de servicios expuestos, la manipulación de flujos de autenticación y la explotación de componentes de software especializados como vectores de escalada.
La vulnerabilidad explotada en el driver RICOH PCL6 UniversalDriver V4.23 corresponde a una condición de permisos inseguros en el directorio del driver, que permite la ejecución de código con privilegios elevados a través del subsistema de impresión. Aunque esta técnica ha sido ampliamente documentada en la comunidad de pentesters, no cuenta con un identificador CVE oficial asignado.
Enumeración de puertos/servicios
┌──(root㉿kali)-[/home/kali/Documents/HTB/DRIVER]
└─# nmap -sCV --open -T4 -v -n 10.10.11.106 📌 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
80/tcp open http Microsoft IIS httpd 10.0
|_http-server-header: Microsoft-IIS/10.0
| http-methods:
| Supported Methods: OPTIONS TRACE GET HEAD POST
|_ Potentially risky methods: TRACE
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
| http-auth:
| HTTP/1.1 401 Unauthorized\x0D
|_ Basic realm=MFP Firmware Update Center. Please enter password for admin
135/tcp open msrpc Microsoft Windows RPC
445/tcp open microsoft-ds Microsoft Windows 7 - 10 microsoft-ds (workgroup: WORKGROUP)
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
Service Info: Host: DRIVER; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
|_clock-skew: mean: 6h52m33s, deviation: 0s, median: 6h52m33s
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled but not required
| smb2-time:
| date: 2025-06-09T11:18:01
|_ start_date: 2025-06-09T10:45:24En síntesis:
Algunos de los elementos que nos reveló el escaneo de nmap y que nos pueden ayudar para resolver el ctf son los siguientes:
El puerto 445/tcp (SMB) tiene message signing deshabilitado, lo que abre la posibilidad de ataques relacionados con el protocolo SMB, como la captura de hashes NTLM.
El puerto 5985/tcp ofrece acceso a WinRM (Windows Remote Management), lo que permitirá ejecutar comandos remotos si se obtienen credenciales válidas.
El puerto 135/tcp (MSRPC) está abierto, proporcionando un vector adicional para futuras técnicas de enumeración y explotación.
Información adicional de SMB indica que se está utilizando la cuenta "guest" con autenticación a nivel de usuario, lo que podría permitir interacciones con el recurso compartido de archivos sin privilegios elevados.
challenge_response: supported→ el protocolo SMB en este servidor soporta challenge-response como método de autenticación. Esto es parte del protocolo NTLM: el servidor envía un desafío (challenge) y el cliente responde con una respuesta calculada usando sus credenciales. Este comportamiento es lo que permite, por ejemplo, técnicas como captura de hashes NTLM cuando se fuerza una autenticación hacia el atacante (típicamente vía Responder o impacket-smbserver).
Reconocimiento del puerto 80
Si inspeccionamos el puerto 80 de la máquina nos vamos a encontrar con un mensaje que nos pide credenciales de acceso, al probar con algunas de las credenciales más típicas (admin, password123, administrator, 123456, etc) vamos a poder ingresar.

Nota: el par de credenciales es admin:admin.
Encontramos una página de MFP Firmware Update Center, osea, un portal interno diseñado para la gestión y actualización de firmware de impresoras multifunción (Multi-Function Printer). En contextos corporativos, un centro de actualización de firmware permite que los equipos de IT o los técnicos de soporte carguen, verifiquen y distribuyan actualizaciones de firmware para impresoras en red, a fin de corregir errores, mejorar funcionalidades o cerrar vulnerabilidades. Estos sistemas suelen interactuar con servidores de archivos (como SMB) donde los paquetes de firmware son almacenados temporalmente para su posterior despliegue.

Forced authentication attack
Inspeccionando las diferentes secciones de la página vamos a encontrar el apartado Firmware Updates con el mensaje "Nuestro equipo de pruebas revisará las cargas manualmente y pronto iniciará las pruebas". Y más abajo tenemos la opción para cargar un archivo. Entonces teniendo en cuenta la pista que nos dio nmap con el mensaje challenge_response: supported y que además el puerto SMB está disponible, podemos implementar un ataque de captura de hash NTLM a través de SMB y hacernos con el hash NTLM de algún usuario del sistema. Para implementar este ataque crearemos y cargaremos el siguiente archivo .scf
Nota: en $IP ponemos la IP de nuestra máquina y ya esta listo para cargarlo

📌¿Qué son los .scf Files?
Los archivos de comandos de shell con extensión .scf, son documentos de texto que contienen instrucciones para el Explorador de Windows. Su principal vector de utilidad en el ámbito ofensivo radica en la capacidad de definir una ruta hacia un archivo de icono (.ico), la cual puede estar referenciada mediante una ruta UNC (Universal Naming Convention) que apunte a un servidor remoto (el del atacante). Este comportamiento permite explotar una funcionalidad inherente del Explorador de Windows: al visualizar una carpeta que contiene un archivo .scf, el sistema intentará automáticamente recuperar y renderizar el icono especificado, sin necesidad de que el archivo sea abierto explícitamente por el usuario. En el proceso de recuperación de dicho icono a través de SMB, el sistema cliente envía una solicitud de autenticación que, en entornos configurados por defecto, incluye un hash NetNTLMv2 del usuario actual. Este mecanismo nos permite realizar ataques de captura de hash, facilitando así la obtención de credenciales que posteriormente podemos descifrar con herramientas como John the Ripper. En este escenario, el CTF incluye un portal web que permite la carga de archivos para la actualización de firmware de impresoras, los cuales son transferidos internamente a un recurso compartido SMB para su revisión. Esta configuración nos da la oportunidad de introducir un archivo .scf malicioso. Al cargar el archivo dentro del recurso compartido, el proceso de revisión o incluso la simple visualización de la carpeta por parte de un usuario o servicio privilegiado provocará la emisión de una solicitud SMB hacia un servidor controlado por el atacante con Responder o impacket-smbclient. De este modo, se posibilita la intercepción de hashes NTLM.
📌Lógica del ataque
Subimos un archivo
.SCFmalicioso al portal Firmware Updates. Este archivo contiene una instrucción para que el sistema busque un icono remoto usando una ruta UNC que apunta a un servidor SMB que nosotros controlamos (en este caso con Responder o con impacket-smbserver).Cuando un usuario interno (o proceso automático) abre la carpeta compartida de SMB donde se almacenan los archivos subidos, el Explorador de Windows intenta cargar el icono del archivo
SCF.Este intento de carga genera una solicitud de conexión SMB hacia nuestro servidor.
Como parte de la autenticación automática, Windows envía un hash NetNTLMv2 del usuario que realiza la solicitud.
Capturamos ese hash y luego lo crackeamos offline con John the Ripper, obteniendo las credenciales del usuario.
Con esas credenciales, podemos autenticarnos vía WinRM (puerto 5985) y obtener una shell en la máquina víctima.
Ahora, antes de hacer click en "Submit" vamos a levantar nuestros servidores smb para que esperen esa conexión entrante y capturen el hash. Para este caso podemos usar Responder o impacket-smbserver
impacket-smbserver
Responder
El hash capturado lo guardamos en un archivo y se lo pasamos a John the Ripper para crackearlo
Una vez que obtuvimos credenciales nuevas lo mejor es validarlas contra los servicios más comunes y encontrar el siguiente vector de ingreso. Para automatizar este proceso diseñe el siguiente script en bash que podes descargarlo del siguiente repositorio: service_validation.sh
Remote Code Execution con EvilWinRM
Tenemos acceso al servicio WinRM, asique ahora nos vamos a conectar con EvilWinRM
Privilege Escalation Enumeration con winPEAS.exe
Como no se encontraron permisos o grupos del usuario tony que nos permitan escalar privilegios se me ocurrió implementar winPEAS para buscar más a fondo elementos que podamos explotar, lo único que tenemos que hacer es dirigirnos al directorio /temp y cargar el binario de winPEAS allí:
Algunos elementos clave que nos enumeró winPEAS:
Hay un proceso
spoolsvcorriendo en el puerto 49410Hay un PS history file disponible en la ruta:
C:\Users\tony\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txtque nos está indicando que en la máquina está instalado el driver de impresora Ricoh PCL6 UniversalDriver V4.23.
📌¿Qué es spoolsv?
spoolsv.exe es el ejecutable correspondiente al Print Spooler Service en Windows, es decir, el servicio de cola de impresión.
Este servicio se encarga de gestionar los trabajos de impresión que los usuarios envían a las impresoras.
Recibe documentos que van a ser impresos, los almacena temporalmente en la cola (spool), y los envía a la impresora cuando está disponible.
Es un componente fundamental de la arquitectura de impresión en Windows.
spoolsv.exe aparece como un proceso en ejecución porque es el que ejecuta el servicio: Print Spooler Service
Además spoolsv.exe es el servicio que interactúa con los drivers de impresora:
Cuando se instala un driver de impresora, el spooler lo carga y lo gestiona.
Cuando se configura una impresora o se envía un trabajo de impresión, el spooler se comunica con ese driver.
Vulnerabilidades en drivers de impresora muchas veces se explotan a través del Print Spooler o por su interacción con el sistema.
Con esta información ya podemos deducir por dónde hay que realizar la escalada de privilegios, lo más probable es que exista algún exploit que se base en alguna vulnerabilidad de ese driver para escalar privilegios. Una forma de encontrar el exploit indicado para este equipo es con el módulo local_exploit_suggester de msfconsole, pero para usarlo primero tenemos que migrar nuestra reverse shell a meterpreter. Otra opción es buscar algún exploit público en internet para este tipo de drivers. Vamos a desarrollar ambas opciones a continuación:
Reverse shell con Meterpreter
El procedimiento para obtener nuestra sesión en meterpreter es el siguiente:
1) Creamos un payload .exe con msfvenom para cargarlo a la sesión del usuario tony
2) En la sesión del usuario tony vamos a ir al directorio /temp y vamos a cargar este payload
3) Antes de ejecutar el payload vamos a configurar y levantar el listener con meterpreter. Luego si podemos ejecutarlo y se nos abrira una sesion en meterpreter
📌¿Porque migramos al proceso explorer.exe?
Al momento de realizar la escalada de privilegios, observe que la ejecución del exploit ricoh_driver_privesc presentaba inestabilidad y bloqueos intermitentes durante la fase de adición de una impresora temporal. Tras analizar el entorno, identifique que la sesión inicial de Meterpreter estaba alojada en un proceso no interactivo y aislado, lo cual limitaba la capacidad del exploit para interactuar correctamente con componentes del sistema como el servicio de impresión (Print Spooler) y las interfaces COM involucradas en la gestión de impresoras.
Para intentar corregir este problema decidi migrar la sesión Meterpreter a un proceso explorer.exe, que corre en un contexto de sesión interactiva (Session 1) bajo el entorno de escritorio del usuario tony. El proceso explorer.exe es útil en este tipo de escenarios, ya que posee los permisos necesarios y las dependencias adecuadas para interactuar con subsistemas como el spooler de impresión, además de estar menos restringido en cuanto a la ejecución de operaciones de interfaz gráfica y manejo de objetos COM.
Una vez que cambiamos el proceso de la sesión al explorer.exe, el exploit pudo completar exitosamente todas las fases del ataque, incluyendo la adición y posterior eliminación de la impresora temporal, así como la ejecución del payload en contexto elevado. Además, el cambio de proceso permitió mantener la conexión de Meterpreter de manera más robusta, evitando futuros problemas de conexión.
El consejo es siempre migrar la sesión Meterpreter a un proceso interactivo y estable antes de ejecutar exploits locales complejos o potencialmente disruptivos. Procesos como explorer.exe nos dan mayor persistencia y estabilidad de la sesión. En contraposición, procesos no interactivos o creados por el propio payload (por ejemplo, shells lanzadas a través de WinRM o procesos de sesión 0) suelen estar sujetos a restricciones de contexto que afectan la ejecución de ciertos exploits y aumentan el riesgo de desconexión.
4) Una vez que ya está establecida la reverse shell vamos a seleccionar el módulo post/multi/recon/local_exploit_suggester y lo vamos a setear indicándole el número de la sesión (para ver cual es el ID de la sesión podemos usar el comando sessions en msfconsole no en meterpreter)
El resultado nos muestra 8 exploits disponibles para probar con la sesion de meterpreter, el que vamos a usar para este caso es el último, pero antes debemos configurar los siguientes parámetros (en lhost ponemos nuestra ip y en lport el puerto que usamos en el payload original):
Una vez que el exploit nos abrió una segunda sesión con el usuario SYSTEM podemos cargar el módulo kiwi (mimikatz) para extraer todas las credenciales disponibles o también podemos usar el comando hashdump desde meterpreter
Y de esta forma logramos escalar privilegios en este equipo. Nota: si se cae la sesión de meterpreter en repetidas ocasiones te recomiendo que sigas esta secuencia de comandos para agilizar el procedimiento
El segundo método para escalar privilegios en esta máquina es cargando y ejecutando el script CVE-2021-1675.ps1 en la sesión de tony, esto básicamente nos permite crear y añadir un usuario al grupo de administradores del sistema para luego usar estas credenciales y conectarnos con EvilWinRM
1) Descargamos el script en nuestro equipo y levantamos un servidor con python para compartir este recurso
En la sesión de tony descargamos el script desde el directorio /temp y lo ejecutamos indicándole el usuario y su contraseña
Una vez que creamos al usuario, nos conectamos con sus credenciales via WinRM
Last updated