hacktricks/network-services-pentesting/pentesting-printers/print-job-manipulation.md

68 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
# Superposición de Contenido
Una forma sencilla de manipular la apariencia de las impresiones es **usar** superposiciones. \
[**PCL**](./#pcl) tiene una función documentada para colocar **macros de superposición** encima de un documento. Desafortunadamente, esta característica está **limitada al trabajo de impresión actual** y no puede hacerse permanente. \
[**PostScript**](./#postscript-ps) no ofrece tal funcionalidad por defecto, sin embargo, se puede programar **redefiniendo el operador showpage** que se encuentra en cada documento PostScript para imprimir la página actual. El atacante puede **engancharse allí**, ejecutar su propio código y luego llamar a la versión original del operador.\
Por lo tanto, puede superponer todas las páginas a imprimir con un archivo EPS personalizado. Este hack puede usarse para **añadir gráficos o fuentes arbitrarios a copias impresas de un documento** (Es posible alterar completamente la apariencia de un documento superponiendo una página en blanco y luego añadiendo contenido personalizado).\
Obviamente, tal enfoque solo puede tener éxito si se usa PostScript como controlador de impresora y no se ha establecido una `StartJobPassword`.
![](http://hacking-printers.net/wiki/images/thumb/9/93/Overlay.jpg/300px-Overlay.jpg)
**¿Cómo probar este ataque?**
Usa los comandos `cross` o `overlay` de [**PRET**](https://github.com/RUB-NDS/PRET) en modo ps, luego desconéctate e imprime un documento arbitrario:
```
./pret.py -q printer ps
Connection to printer established
Welcome to the pret shell. Type help or ? to list commands.
printer:/> overlay overlays/smiley.eps
printer:/> cross whoa "HACKED"
printer:/> exit
```
# Reemplazo de Contenido
Incluso si un atacante puede colocar una superposición sobre documentos existentes, no podrá **alterar valores específicos** en el documento original a menos que se conozca su estructura exacta. A veces uno no solo quiere agregar contenido personalizado, sino **analizar y reemplazar partes** del documento existente. \
El problema de reemplazar texto en archivos PostScript se puede reducir al **problema de extraer cadenas** del documento renderizado. Esto no es trivial, porque las cadenas pueden ser construidas dinámicamente por el propio programa PostScript. Por lo tanto, el análisis y reemplazo simple dentro del código fuente del documento no es una opción.\
Puedes usar un **operador `show` redefinido**. El operador show acepta una cadena como entrada, que se pinta en una ubicación determinada de la página actual. Al redefinir el operador, el **texto** puede ser **extraído** de manera elegante. Este enfoque también se puede utilizar para **buscar y reemplazar** de manera dirigida en cadenas inmediatamente **antes** de que sean **pintadas**. \
El enfoque es **exitoso** para documentos PostScript basados en **LaTeX** que se envían directamente a la impresora mientras **falla** para archivos PostScript generados por **GIMP** que en lugar de cadenas **crea gráficos rasterizados** de su representación. El mismo problema ocurre para cualquier formato de documento incluso el propio PostScript cuando es procesado por CUPS. Teóricamente, tales construcciones de lenguaje también podrían ser analizadas y deberían ser objeto de futuras investigaciones.
**¿Cómo probar este ataque?**
Usa el comando `replace` de [**PRET**](https://github.com/RUB-NDS/PRET) en modo ps, luego desconecta e imprime un documento PostScript que contenga DEF:
```
./pret.py -q printer ps
Connection to printer established
Welcome to the pret shell. Type help or ? to list commands.
printer:/> replace "ABC" "DEF"
printer:/> exit
```
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue**me en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>