hacktricks/network-services-pentesting/pentesting-printers/accounting-bypass.md

93 lines
10 KiB
Markdown
Raw Normal View History

<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** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
2023-06-05 18:33:24 +00:00
# **Introducción**
**Imprimir sin permiso** puede ser un riesgo de seguridad o una violación de la política de la empresa. En entornos donde se cobra por los trabajos de impresión, un atacante interno tiene motivación para eludir el sistema de contabilidad. Además, poder 'imprimir' es una condición previa para la mayoría de los ataques contra impresoras de red.
2023-06-05 18:33:24 +00:00
Hay dos enfoques principales cuando se trata de la contabilidad de trabajos de impresión: **dejar que la impresora lo maneje directamente o usar un servidor de impresión intermedio**. El primer enfoque es específico del proveedor, generalmente implica algún tipo de 'controlador de impresora' especial y no se discute más aquí. El otro enfoque implica un servidor de impresión separado, generalmente una implementación de software como [CUPS](https://en.wikipedia.org/wiki/CUPS) o [LPRng](https://en.wikipedia.org/wiki/LPRng), para manejar la contabilidad y es bastante común en empresas e instituciones. El servidor de impresión puede utilizar LPD, IPP u otros protocolos de impresión y reenvía los trabajos a la impresora real. **Es importante notar que el acceso directo a la red de la impresora debe estar restringido**, de lo contrario, un atacante puede **eludir fácilmente el servidor de impresión** y sus mecanismos de contabilidad. Esto significa filtrar el acceso a puertos típicos y atípicos (LPD, IPP, raw, HTTP, SMB, FTP, SNMP).
2023-06-05 18:33:24 +00:00
Hay básicamente dos enfoques para eludir los sistemas de contabilidad de trabajos de impresión: **suplantar a otro usuario o manipular el contador** de páginas impresas. A continuación, se discuten ambas opciones para instalaciones de LPRng (v3.8.B) y CUPS (v2.1.4), que son sistemas de impresión de código abierto populares utilizados en entornos académicos y corporativos. A continuación, se presenta una comparación de las características de seguridad de ambos sistemas.
2023-06-05 18:33:24 +00:00
| Sistema de impresión | Protocolo | Encriptación | Autenticación | Contador de páginas |
| -------------------- | --------- | ------------ | ------------- | ------------------- |
| **LPRng** | LPD | SSL/TLS | Kerberos, PGP | hardware |
| **CUPS** | IPP | SSL/TLS | Kerberos, HTTP | software |
2023-06-05 18:33:24 +00:00
# Elusiones de autenticación
2023-06-05 18:33:24 +00:00
LPRng y CUPS ofrecen encriptación de canal basada en SSL y esquemas de autenticación seguros como [Kerberos](https://en.wikipedia.org/wiki/Kerberos\_\(protocol\)), trabajos de impresión firmados con [PGP](https://en.wikipedia.org/wiki/Pretty\_Good\_Privacy) o autenticación HTTP [básica](https://en.wikipedia.org/wiki/Basic\_access\_authentication)/[digest](https://en.wikipedia.org/wiki/Digest\_access\_authentication). Si se **configuran correctamente** y en caso de que el atacante no pueda acceder directamente a la impresora, **no podrá suplantar a otros usuarios**. Sin embargo, estas características de seguridad son **opcionales y raramente se aplican** en los servidores de impresión reales. En cambio, los **nombres de usuario dados como parámetros LPD (LPRng) o IPP (CUPS) se registran y se contabilizan** los cuales pueden ser establecidos con valores arbitrarios por el lado del cliente. La razón de esto es una simple consideración de costo-beneficio en la mayoría de las instituciones**: Kerberos necesita una configuración especial** en cada cliente y la autenticación **HTTP** **requiere** que los usuarios ingresen una **contraseña** cada vez que quieren imprimir algo, mientras que el costo de algunas impresiones no contabilizadas es soportable.
2023-06-05 18:33:24 +00:00
Puedes **verificar la autenticación adecuada** intentando imprimir con un **nombre de usuario personalizado** de la siguiente manera:
2023-06-05 18:33:24 +00:00
```
lp -U nobody test.ps
```
# Manipulación del contador de páginas
## Contadores de páginas de hardware
Para una contabilidad correcta, **se debe determinar el número de páginas impresas** por el sistema de impresión, lo cual no es una tarea trivial. Los autores de **LPRng** _hacen la suposición de que la impresora tiene algún tipo de mecanismo de contador de páginas no volátil que es confiable e inmune a ciclos de encendido/apagado_. Tales **contadores de páginas de hardware** son soportados por la mayoría de las impresoras y **leídos** por LPRng **usando PJL después** de cada trabajo de **impresión**. **HP** incluso ha documentado una característica para **escribir** en la variable del **contador de páginas** al poner la impresora en modo de servicio. De esta manera, el **contador de páginas** de la _HP LaserJet 1200, HP LaserJet 4200N_ y _HP LaserJet 4250N_ **puede ser manipulado** dentro de un trabajo de impresión. Al final del documento a imprimir y separado por el [UEL](./#uel), el contador simplemente tiene que ser restablecido a su valor original (por ejemplo, `2342`):
2023-06-05 18:33:24 +00:00
```
\x1b%-12345X@PJL JOB
This page was printed for free
\x1b%-12345X@PJL EOJ
\x1b%-12345X@PJL JOB
@PJL SET SERVICEMODE=HPBOISEID
@PJL SET PAGES=2342
\x1b%-12345X@PJL EOJ
```
Un atacante podría establecer un número negativo de páginas impresas. Tenga en cuenta que restablecer el dispositivo a los [valores de fábrica](factory-defaults.md) también **restablece el contador de páginas a cero en algunos** de los dispositivos probados.\
Reducir el contador de páginas también puede usarse para **vender una impresora por encima de su precio**, ya que se puede comparar con el odómetro al comprar un coche de segunda mano. Sin embargo, es importante enfatizar que **restablecer el contador de páginas no es necesariamente con fines maliciosos**: Es un modelo de negocio bien conocido vender tinta sobrevalorada para dispositivos de inyección de tinta de bajo costo y bloquear kits de recarga de terceros al negarse a imprimir después de un cierto número de páginas para manejar tales prácticas poco éticas es absolutamente legítimo restablecer el contador de páginas.
2023-06-05 18:33:24 +00:00
En impresoras láser HP antiguas, el comando `pagecount` de [PRET](https://github.com/RUB-NDS/PRET) puede usarse para establecer fácilmente contadores de páginas de hardware:
2023-06-05 18:33:24 +00:00
```
./pret.py -q printer pjl
Connection to printer established
Welcome to the pret shell. Type help or ? to list commands.
printer:/> pagecount 10
Old pagecounter: 53214
New pagecounter: 10
```
## Contadores de páginas de software
**CUPS** utiliza **contadores de páginas de software** que han sido implementados para todos los principales lenguajes de descripción de páginas. Para PostScript, una forma fácil de evadir la contabilidad es verificar si el parámetro del sistema PageCount existe lo cual retornará falso cuando se interprete en CUPS/Ghostscript antes de imprimir realmente el documento como se muestra a continuación.
2023-06-05 18:33:24 +00:00
```
currentsystemparams (PageCount) known {
<@\textit{[...] code which is only executed on a printer device [...]}@>
2023-06-05 18:33:24 +00:00
} if
```
De esta manera, el software de contabilidad utilizado por CUPS genera un documento diferente al de la impresora. **CUPS solo contabiliza una página** que parece ser un **mínimo codificado** mientras que el trabajo de impresión **real** puede contener **cientos** **de páginas**. Tenga en cuenta que es obligatorio utilizar la cola/opción 'raw' de IPP, de lo contrario, CUPS analiza el código con un filtro de PostScript a PostScript (ps2write de Ghostscript) antes de que alcance el contador de páginas.
2023-06-05 18:33:24 +00:00
**¿Cómo probar este ataque?**
**Envuelva** un **documento PostScript de varias páginas** arbitrario en el **código anterior** e imprima. Luego vaya a [`http://printserver:631/jobs?which_jobs=all`](http://printserver:631/jobs?which\_jobs=all) y verifique el contador de páginas de CUPS para este trabajo de impresión. Tenga en cuenta que tiene que establecer una cola raw. Es decir, una cola donde el sistema de filtrado no interviene y el trabajo de impresión va directamente a una impresora. Para CUPS, esto se hace configurando el tipo de contenido a `application/vnd.cups-raw`. Si su sistema ya está configurado para usar el servidor de impresión a ser probado, simplemente use:
2023-06-05 18:33:24 +00:00
```
lp -o raw test.ps
```
<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>
2023-06-05 18:33:24 +00:00
Otras formas de apoyar a HackTricks:
2023-06-05 18:33:24 +00:00
* 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 **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).
2023-06-05 18:33:24 +00:00
</details>