Wander - Hardware HackThebox
Reto basado en inyectar comandos con PJL en un servicio de impresión online.
Autor del reto: MrR3boot
Dificultad: Fácil
Enunciado
“My uncle isn’t allowing me to print documents. He’s off to vacation and I need a PIN to unlock this printer. All I found is a web server where this printer is managed from. Can you help me with this situation ?”
Archivos
En este reto, tenemos el siguiente enlace.
instancia vía web
: Contiene la instancia del reto web.
Archivos utilizados aquí.
Analizando el reto
Si introducimos la dirección dada en el reto, podemos observar la siguiente página de entrada.
En ella se listan opciones como Dashboard
, Network
, Job Controls
y Help
pero realmente solo está disponible la sección de Job Controls.
Si nos adentramos en ella podemos observar el siguiente apartado.
Solver
Si nos fijamos en la sección Job Controls
podemos introducir algo relacionado con @PJL INFO ID
, pero ¿qué es esto?
Los comandos PJL (Printer Job Language) son un conjunto de instrucciones desarrolladas por Hewlett-Packard (HP) que permiten controlar impresoras más allá de lo que permite el lenguaje de impresión como PCL o PostScript. Por ejemplo, algunos de los comandos que nos permite este lenguaje son los siguientes.
Cambiar configuraciones de la impresora (idioma, bandeja, tamaño de papel, etc.)
Consultar el estado de la impresora.
Administrar trabajos de impresión.
Interactuar con el panel de control.
Ejecutar comandos de red o incluso, en algunos casos, acceder al sistema de archivos de la impresora.
Un ejemplo detallado de cómo funcionaría sería el siguiente, el cual primero se inicia la secuencia, se indica el inicio del trabajo, acto seguido se configura los parámetros de impresión y por último se cambia el lenguaje de impresión.
1
2
3
4
5
6
<ESC>%-12345X@PJL JOB
@PJL SET PAPER=A4
@PJL SET COPIES=2
@PJL ENTER LANGUAGE=PCL
... datos PCL ...
<ESC>%-12345X
Además, recomiendo visitar la página oficial de HP donde explican más en detalle el lenguaje. También si estás aburrido, te dejo la documentación oficial de más de 300 páginas por si quieres profundizar en el tema.
Una vez comprendido lo que son los comandos PJL
, ¿qué toca hacer ahora?
Pues básicamente, vamos a ir probando comandos para ver cómo se comporta el servidor en cuestión.
Por ejemplo, siguiendo la documentación podemos probar con los siguientes comandos.
1
2
3
4
5
6
7
8
FSAPPEND
FSDELETE
FSDIRLIST
FSDOWNLOAD
FSINIT
FSMKDIR
FSQUERY
FSUPLOAD
Por ejemplo, para ver el directorio actual utilizaremos FSDIRLIST
con el siguiente comando.
1
@PJL FSDIRLIST NAME="0:" ENTRY=1
Mediante este comando, también podemos listar contenido no solo del directorio actual, sino de cualquier ruta del sistema. Para ello utilizaremos la siguiente sintaxis.
1
@PJL FSDIRLIST NAME="0:/../" ENTRY=1
Si seguimos listando contenido mediante el anterior comando, podemos observar como en la carpeta home
se encuentra un directorio default
con un archivo readyjob
.
En este caso, para leer dicho archivo, tenemos que utilizar el comando FSUPLOAD
mediante la siguiente sintaxis.
1
@PJL FSUPLOAD NAME="0:/../home/default/readyjob" ENTRY=1
Al hacerlo, obtenemos la flag.
Flag
HTB{w4lk_4nd_w0nd3r}