Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)! Outras formas de apoiar o HackTricks: * Se você quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)! * Adquira o [**material oficial PEASS & HackTricks**](https://peass.creator-spring.com) * Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos * **Junte-se ao grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-me no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.** * **Compartilhe suas técnicas de hacking enviando PRs para os repositórios github** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
# **Introdução** **Imprimir sem permissão** pode ser um risco de segurança ou violação da política da empresa. Em ambientes onde os trabalhos de impressão são cobrados, um atacante interno tem motivação para burlar o sistema de contabilidade. Além disso, ser capaz de 'imprimir' é uma pré-condição para a maioria dos ataques contra impressoras de rede. Existem duas abordagens principais quando se trata de contabilidade de trabalhos de impressão: **deixar a impressora lidar com isso diretamente ou usar um servidor de impressão intermediário**. A primeira abordagem é específica do fornecedor, geralmente envolve algum tipo de 'driver de impressora' especial e não é discutida aqui. A outra abordagem envolve um servidor de impressão separado – geralmente uma implementação de software como [CUPS](https://en.wikipedia.org/wiki/CUPS) ou [LPRng](https://en.wikipedia.org/wiki/LPRng) – para lidar com a contabilidade e é bastante comum em empresas e instituições. O servidor de impressão pode usar LPD, IPP ou outros protocolos de impressão e encaminha os trabalhos para a impressora real. **É importante notar que o acesso direto à rede da impressora deve ser restrito**, caso contrário, um atacante pode **burlar facilmente o servidor de impressão** e seus mecanismos de contabilidade. Isso significa filtrar o acesso a portas típicas e atípicas (LPD, IPP, raw, HTTP, SMB, FTP, SNMP). Basicamente, existem duas abordagens para contornar os sistemas de contabilidade de trabalhos de impressão: **personificar outro usuário ou manipular o contador** de páginas impressas. A seguir, ambas as opções são discutidas para instalações de LPRng (v3.8.B) e CUPS (v2.1.4), que são sistemas de impressão de código aberto populares usados em ambientes acadêmicos e corporativos. Abaixo é apresentada uma comparação das características de segurança de ambos os sistemas. | Sistema de impressão | Protocolo | Criptografia | Autenticação | Contador de páginas | | -------------------- | --------- | ------------ | ------------ | ------------------- | | **LPRng** | LPD | SSL/TLS | Kerberos, PGP| hardware | | **CUPS** | IPP | SSL/TLS | Kerberos, HTTP| software | # Bypass de autenticação LPRng e CUPS oferecem criptografia de canal baseada em SSL e esquemas de autenticação seguros como [Kerberos](https://en.wikipedia.org/wiki/Kerberos\_\(protocol\)), [PGP](https://en.wikipedia.org/wiki/Pretty\_Good\_Privacy) para trabalhos de impressão assinados ou autenticação HTTP [básica](https://en.wikipedia.org/wiki/Basic\_access\_authentication)/[digest](https://en.wikipedia.org/wiki/Digest\_access\_authentication). Se **configurados corretamente** e caso o atacante não possa acessar a impressora diretamente, ele **não será capaz de personificar outros usuários**. No entanto, esses recursos de segurança são **opcionais e raramente aplicados** nos servidores de impressão do mundo real. Em vez disso, os **nomes de usuário fornecidos como parâmetros LPD (LPRng) ou IPP (CUPS) são registrados e contabilizados** – que podem ser definidos para valores arbitrários pelo lado do cliente. A razão para isso é uma simples consideração de custo-benefício na maioria das instituições**: Kerberos requer uma configuração especial** em cada cliente e a autenticação **HTTP** **exige** que os usuários digitem uma **senha** sempre que quiserem imprimir algo, enquanto os custos de algumas impressões não contabilizadas são suportáveis. Você pode **verificar a autenticação adequada** tentando imprimir com um **nome de usuário personalizado** assim: ``` lp -U nobody test.ps ``` # Manipulação do contador de páginas ## Contadores de páginas de hardware Para uma contabilidade correta, **o número de páginas impressas deve ser determinado** pelo sistema de impressão, o que não é uma tarefa trivial. Os autores do **LPRng** _assumem que a impressora possui algum tipo de mecanismo de contador de páginas não volátil que é confiável e imune a ciclos de ligar/desligar_. Tais **contadores de páginas de hardware** são suportados pela maioria das impressoras e **lidos** pelo LPRng **usando PJL após** cada **trabalho de impressão**. A **HP** até documentou um recurso para **escrever** no **contador de páginas** variável, colocando a impressora em modo de serviço. Dessa forma, o **contador de páginas** da _HP LaserJet 1200, HP LaserJet 4200N_ e _HP LaserJet 4250N_ **pode ser manipulado** dentro de um trabalho de impressão. No final do documento a ser impresso e separado pelo [UEL](./#uel), o contador simplesmente tem que ser redefinido para o seu valor original (por exemplo, `2342`): ``` \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 ``` Um atacante pode definir um número negativo de páginas impressas. Observe que redefinir o dispositivo para [Configurações de fábrica](factory-defaults.md) também **redefine o contador de páginas para zero em alguns** dos dispositivos testados.\ Diminuir o contador de páginas também pode ser usado para **vender uma impressora acima do seu preço**, pois pode ser comparado ao odômetro ao comprar um carro usado. No entanto, vale ressaltar que **redefinir o contador de páginas não é necessariamente para fins maliciosos**: É um modelo de negócios bem conhecido vender tinta cara para dispositivos jato de tinta de baixo custo e bloquear kits de recarga de terceiros, recusando-se a imprimir após um determinado número de páginas – para lidar com tais práticas antiéticas, é absolutamente legítimo redefinir o contador de páginas. Em modelos antigos de HP LaserJets, o comando `pagecount` do [PRET](https://github.com/RUB-NDS/PRET) pode ser usado para definir facilmente contadores de páginas de hardware: ``` ./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 foram implementados para todas as principais linguagens de descrição de páginas. Para PostScript, uma maneira fácil de contornar a contabilidade é verificar se o parâmetro do sistema PageCount existe – o que retornará falso quando interpretado em CUPS/Ghostscript – antes de realmente imprimir o documento, conforme mostrado abaixo. ``` currentsystemparams (PageCount) known { <@\textit{[...] code which is only executed on a printer device [...]}@> } if ``` ```markdown Dessa forma, o software de contabilidade usado pelo CUPS renderiza um documento diferente do que a impressora. **O CUPS só contabiliza uma página** – o que parece ser um **mínimo codificado** – enquanto o trabalho de impressão **real** pode conter **centenas** **de páginas**. Observe que o uso da fila/opção 'raw' do IPP é obrigatório, caso contrário, o CUPS analisa o código com um filtro de PostScript para PostScript (ps2write do Ghostscript) antes de chegar ao contador de páginas. **Como testar esse ataque?** **Embrulhe** um **documento PostScript de várias páginas** arbitrário no **código acima** e imprima. Em seguida, acesse [`http://printserver:631/jobs?which_jobs=all`](http://printserver:631/jobs?which_jobs=all) e verifique o contador de páginas do CUPS para este trabalho de impressão. Observe que você deve estabelecer uma fila raw. Isto é, uma fila onde o sistema de filtragem não está envolvido e o trabalho de impressão vai diretamente para uma impressora. Para o CUPS, isso é feito definindo o tipo de conteúdo para `application/vnd.cups-raw`. Se o seu sistema já estiver configurado para usar o servidor de impressão a ser testado, simplesmente use: ``` ``` lp -o raw test.ps ```
Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)! Outras formas de apoiar o HackTricks: * Se você quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)! * Adquira o [**material oficial PEASS & HackTricks**](https://peass.creator-spring.com) * Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos * **Junte-se ao grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou ao grupo [**telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.** * **Compartilhe suas técnicas de hacking enviando PRs para os repositórios github do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).