mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-24 20:13:37 +00:00
124 lines
8.9 KiB
Markdown
124 lines
8.9 KiB
Markdown
<details>
|
|
|
|
<summary><strong>Aprenda hacking no AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
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
|
|
* **Participe do grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou do 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 do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) no github.
|
|
|
|
</details>
|
|
|
|
|
|
# Retenção de Trabalhos de Impressão
|
|
|
|
Algumas impressoras têm trabalhos de impressão armazenados acessíveis pelo servidor web. Geralmente, no entanto, a retenção de trabalhos deve ser explicitamente ativada para um determinado trabalho de impressão e pode ser feita usando comandos PJL padrão ou código PostScript proprietário. Os trabalhos são então mantidos na memória e podem ser reimpressos a partir do painel de controle.
|
|
|
|
## PJL
|
|
|
|
A retenção legítima de trabalhos pode ser habilitada para o documento atual definindo a variável PJL HOLD conforme mostrado abaixo:
|
|
```
|
|
@PJL SET HOLD=ON
|
|
[actual data to be printed follows]
|
|
```
|
|
Trabalhos em espera são mantidos na memória e podem ser reimpressos a partir do painel de controle da impressora. Esta funcionalidade é suportada por várias impressoras, no entanto, parece que apenas alguns dispositivos Epson permitem que a retenção permanente de trabalhos seja configurada usando `@PJL DEFAULT HOLD=ON`.
|
|
|
|
**Como testar para este ataque?**
|
|
|
|
Use o comando `hold` do [**PRET**](https://github.com/RUB-NDS/PRET) no modo pjl para verificar se a retenção permanente de trabalhos pode ser configurada:
|
|
```
|
|
./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 oferece funcionalidades similares que, no entanto, são específicas do modelo e do fabricante. Para a série HP LaserJet 4k e várias impressoras Kyocera, a retenção de trabalhos pode ser ativada ao adicionar os seguintes comandos no início de um documento PostScript:
|
|
```
|
|
<< /Collate true /CollateDetails
|
|
<< /Hold 1 /Type 8 >> >> setpagedevice
|
|
```
|
|
Enquanto é teoricamente possível habilitar permanentemente a retenção de trabalhos PostScript usando o operador [startjob ](./#postscript-ps), essa configuração é explicitamente redefinida pelo CUPS no início de cada trabalho de impressão usando `<< /Collate false >> setpagedevice`. No entanto, para contornar esse mecanismo de proteção, o atacante pode redefinir permanentemente o operador `setpagedevice` para que não tenha efeito algum.
|
|
|
|
**Como testar esse ataque?**
|
|
|
|
Use o comando `hold` do [**PRET** ](https://github.com/RUB-NDS/PRET) no 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 Trabalho
|
|
|
|
É possível, embora incomum, ativar a retenção de trabalho no diálogo de impressão, como discutido acima. Com PostScript, no entanto, tem-se acesso completo ao trabalho de impressão atual e, com o operador [startjob](./#postscript-ps), é até possível sair do loop do servidor e acessar trabalhos futuros. Tal funcionalidade tem o potencial de capturar todos os documentos se PostScript for usado como um driver de impressora.
|
|
|
|
## PostScript
|
|
|
|
Com a capacidade de se conectar a operadores PostScript arbitrários, é possível manipular e acessar trabalhos de impressão de terceiros. Para **analisar o fluxo de dados real enviado para a impressora**, pode-se aplicar um recurso muito interessante da linguagem PostScript: ler seu próprio código de programa como dados usando o operador `currentfile`. Dessa forma, todo o fluxo de dados a ser processado pelo interpretador PostScript pode ser acessado pela leitura e armazenado em um arquivo no dispositivo de impressão. Se a impressora não oferecer acesso ao sistema de arquivos, **documentos capturados podem ser armazenados na memória**, por exemplo, dentro de dicionários PostScript permanentes. \
|
|
Um problema prático é decidir **qual operador deve ser interceptado**, pois não se tem acesso ao fluxo de dados até que esse operador seja processado pelo interpretador PostScript. Como o atacante deseja capturar trabalhos de impressão desde o início, o **operador redefinido deve ser o primeiro operador** contido no documento PostScript. Felizmente, todos os documentos impressos com CUPS têm uma estrutura fixa que começa com `currentfile /ASCII85Decode filter /LZWDecode filter cvx exec`. Com base na suposição de tal estrutura fixa, o atacante pode capturar documentos desde o início e executar (ou seja, imprimir) o arquivo posteriormente. Para sistemas de impressão **diferentes de CUPS**, esse ataque também deve ser possível, mas **os operadores precisam ser adaptados**. Observe que o cabeçalho PostScript, que geralmente inclui tamanho de mídia, nomes de usuário e de trabalho, não pode ser capturado usando este método porque primeiro nos conectamos no início do documento real. Outra estratégia genérica para se conectar no início de cada trabalho de impressão é definir o parâmetro do sistema `BeginPage`, se suportado pela impressora (a maioria das impressoras suporta). Essa vulnerabilidade provavelmente está presente em dispositivos de impressão há décadas, pois apenas construções de linguagem definidas pelo padrão PostScript são exploradas.
|
|
|
|
Use o comando `capture` do [**PRET**](https://github.com/RUB-NDS/PRET) no 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
|
|
```
|
|
Agora, imprima documentos arbitrários (certifique-se de que o PRET esteja desconectado para não bloquear o canal de impressão). Posteriormente, você pode listar, buscar ou reimprimir 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><strong>Aprenda hacking no AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
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).
|
|
|
|
</details>
|