hacktricks/network-services-pentesting/pentesting-printers/print-job-manipulation.md
2023-06-03 01:46:23 +00:00

6.7 KiB

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

Contenido de superposición

Una forma sencilla de manipular la apariencia de las impresiones es usando superposiciones.
PCL tiene una función documentada para poner macros de superposición encima de un documento. Desafortunadamente, esta función está limitada al trabajo de impresión actual y no se puede hacer permanente.
PostScript no ofrece tal funcionalidad por defecto, sin embargo, se puede programar en él 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 que se van a imprimir con un archivo EPS personalizado. Este hack se puede utilizar para añadir gráficos o fuentes arbitrarias a las copias impresas de un documento (es posible alterar por completo la apariencia de un documento superponiendo una página en blanco y luego añadiendo contenido personalizado).
Obviamente, tal enfoque sólo puede tener éxito si se utiliza PostScript como controlador de impresora y no se establece ninguna StartJobPassword.

¿Cómo probar este ataque?

Usa los comandos cross o overlay de 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 poner 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, no solo se desea 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 programa PostScript en sí mismo. Por lo tanto, el análisis y reemplazo simple dentro del código fuente del documento no es una opción.
Se puede 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, se puede extraer el texto de manera elegante. Este enfoque también se puede utilizar para la búsqueda y reemplazo dirigidos 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 que falla para archivos PostScript generados por GIMP que en lugar de cadenas crean gráficos rasterizados de su representación. El mismo problema ocurre para cualquier formato de documento, incluso PostScript en sí, cuando se procesa mediante CUPS. Teóricamente, dichas construcciones de lenguaje también podrían ser analizadas y deberían ser objeto de investigación adicional.

¿Cómo probar este ataque?

Use el comando replace de PRET en modo ps, luego desconéctese e imprima 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
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥