mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-27 13:33:37 +00:00
90 lines
11 KiB
Markdown
90 lines
11 KiB
Markdown
<details>
|
|
|
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
|
|
|
- Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
|
|
|
- Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
|
|
- Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
|
|
- **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
|
|
- **Compartilhe suas técnicas de hacking enviando PRs para o [repositório hacktricks](https://github.com/carlospolop/hacktricks) e [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
|
|
</details>
|
|
|
|
|
|
Você pode fazer um usuário enviar uma solicitação HTTP POST para a porta 9100 de vários IPs tentando alcançar uma porta de impressão bruta aberta. Se encontrada, o **cabeçalho HTTP é impresso como texto simples ou descartado** com base nas configurações da impressora. No entanto, os **dados POST** podem **conter** trabalhos de impressão arbitrários como comandos **PostScript** ou **PJL** a serem **interpretados**.
|
|
|
|
### Impressão avançada entre sites
|
|
|
|
Você pode usar objetos JavaScript XMLHttpRequest (XHR), conforme definido em para realizar solicitações HTTP POST para impressoras internas. Uma limitação da abordagem de impressão entre sites discutida até agora é que **os dados só podem ser enviados para o dispositivo**, **não recebidos** por causa da política de mesma origem. Para **contornar** as **restrições** da política de mesma origem, você pode **fazer** o **servidor** responder com uma resposta HTTP falsa, mas **válida**, permitindo solicitações CORS (incluindo `Access-Control-Allow-Origin=*`). Uma visão esquemática do ataque é apresentada abaixo:
|
|
|
|
![Impressão avançada entre sites com falsificação de CORS](http://hacking-printers.net/wiki/images/thumb/c/ce/Cross-site-printing.png/900px-Cross-site-printing.png)
|
|
|
|
Nessa variante aprimorada de XSP - combinada com falsificação de CORS - um atacante da web tem acesso total à resposta HTTP, o que permite extrair informações arbitrárias, como trabalhos de impressão capturados do dispositivo de impressora. Um trecho de código JavaScript de prova de conceito é mostrado abaixo:
|
|
```javascript
|
|
job = "\x1B%-12345X\r\n"
|
|
+ "%!\r\n"
|
|
+ "(HTTP/1.0 200 OK\\n) print\r\n"
|
|
+ "(Server: PostScript HTTPD\\n) print\r\n"
|
|
+ "(Access-Control-Allow-Origin: *\\n) print\r\n"
|
|
+ "(Connection: close\\n) print\r\n"
|
|
+ "(Content-Length: ) print\r\n"
|
|
+ "product dup length dup string cvs print\r\n"
|
|
+ "(\\n\\n) print\r\n"
|
|
+ "print\r\n"
|
|
+ "(\\n) print flush\r\n"
|
|
+ "\x1B%-12345X\r\n";
|
|
|
|
var x = new XMLHttpRequest();
|
|
x.open("POST", "http://printer:9100");
|
|
x.send(job);
|
|
x.onreadystatechange = function() {
|
|
if (x.readyState == 4)
|
|
alert(x.responseText);
|
|
};
|
|
```
|
|
### Limitações do cross-site printing
|
|
|
|
Observe que o **PCL** como linguagem de descrição de página não é aplicável para spoofing de CORS porque permite apenas um **único número** ser **ecoado**. O **PJL** também não pode ser usado porque infelizmente ele adiciona `@PJL ECHO` a todas as strings ecoadas, o que torna impossível simular um cabeçalho HTTP válido. Isso, no entanto, não significa que os ataques **XSP aprimorados** estejam **limitados** a trabalhos **PostScript**: o PostScript pode ser usado para responder com um cabeçalho HTTP falsificado e **o** [**UEL**](./#uel)** pode ser invocado para mudar a linguagem da impressora**. Dessa forma, um atacante da web também pode obter os resultados para comandos PJL. Existem duas armadilhas de implementação que merecem ser mencionadas: primeiro, um `Content-Length` correto para os dados a serem respondidos precisa ser determinado com PostScript. Se o atacante não puder prever o tamanho geral da resposta e a codificação em blocos também não for uma opção, ela precisará definir um valor muito alto e usar preenchimento. Em segundo lugar, adicionar o campo de cabeçalho `Connection: close` é importante, caso contrário, as conexões HTTP/1.1 são mantidas vivas até que o cliente da web ou o dispositivo de impressora acione um tempo limite, o que significa que a impressora não estará acessível por algum tempo.
|
|
|
|
**Se** o dispositivo de impressora suportar **impressão de texto simples**, o cabeçalho da solicitação **HTTP** do XHR é impresso como cópia impressa - incluindo o campo de cabeçalho `Origin` contendo a URL que invocou o JavaScript malicioso, tornando **difícil** para um atacante **ficar em silêncio**. Isso é inevitável, pois não ganhamos controle sobre a impressora - e em algumas circunstâncias podemos desativar a funcionalidade de impressão - até que o corpo HTTP seja processado e o cabeçalho HTTP já tenha sido interpretado como texto simples pelo dispositivo de impressora. Se reduzir o ruído for uma prioridade, o atacante pode, no entanto, **tentar desativar a funcionalidade de impressão primeiro** com comandos PJL proprietários, conforme proposto em [PJL jobmedia](http://hacking-printers.net/wiki/index.php/Document\_processing#PJL\_jobmedia) usando outros canais XSP potenciais como IPP, LPD, FTP ou o servidor web incorporado da impressora. Embora todos os protocolos possam ser testados com sucesso para implantar trabalhos de impressão usando variantes de script entre protocolos, eles têm algumas desvantagens além de não fornecerem feedback usando cabeçalhos CORS falsificados:
|
|
|
|
* O acesso entre protocolos às portas LPD e FTP é bloqueado por vários navegadores da web
|
|
* Os parâmetros para impressão direta no servidor web incorporado são específicos do modelo
|
|
* O padrão IPP requer que o `Content-type` para solicitações HTTP POST seja definido como `application/ipp`, o que não pode ser feito com objetos XHR - no entanto, cabe à implementação realmente se importar com tipos incorretos
|
|
|
|
Uma comparação dos canais de impressão entre sites é apresentada abaixo:
|
|
|
|
| Canal | Porta | Sem feedback | Impressões não solicitadas | Padronizado | Bloqueado por |
|
|
| ----- | ----- | ------------ | ------------------------- | ----------- | ------------- |
|
|
| Raw | 9100 | - | ✔ | ✔ | - |
|
|
| Web | 80 | ✔ | - | - | - |
|
|
| IPP | 631 | ✔ | - | ✔ | - |
|
|
| LPD | 515 | ✔ | - | ✔ | FF, Ch, Op |
|
|
| FTP | 21 | ✔ | - | ✔ | FF, Ch, Op, IE |
|
|
|
|
Um grande problema do XSP é **encontrar** o **endereço correto** ou o nome do **host da impressora**. Nossa abordagem é **abusar do WebRTC**, que é implementado na maioria dos navegadores modernos e tem a função de enumerar endereços IP para interfaces de rede locais. Dado o endereço IP local, objetos XHR são usados para abrir conexões com a porta **9100/tcp** para os 253 endereços restantes para recuperar o nome do produto da impressora usando PostScript e spoofing de CORS, o que leva apenas alguns segundos em nossos testes. Se a impressora estiver na mesma sub-rede que o host da vítima, seu endereço pode ser detectado apenas usando JavaScript. O WebRTC está em desenvolvimento para o Safari e é suportado pelas versões atuais do Firefox, Chrome e Microsoft Edge. O Internet Explorer não tem suporte ao WebRTC, mas o VBScript e o Java também podem ser usados para vazar o endereço IP local. Se o endereço da interface local não puder ser recuperado, aplicamos uma abordagem de força bruta inteligente: tentamos conectar à porta 80 do roteador da vítima usando objetos XHR. Para isso, foi compilada uma lista de 115 endereços de roteador padrão de vários recursos acessíveis pela Internet. Se um roteador estiver acessível, escaneamos a sub-rede em busca de impressoras, conforme descrito anteriormente.
|
|
|
|
## Prova de conceito
|
|
|
|
Uma implementação de prova de conceito que demonstra que os ataques avançados de impressão entre sites são práticos e uma ameaça real para empresas e instituições está disponível em [hacking-printers.net/xsp/](http://hacking-printers.net/xsp/)
|
|
|
|
|
|
<details>
|
|
|
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
|
|
|
- Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
|
|
|
- Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
|
|
- Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
|
|
- **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
|
|
- **Compartilhe seus truques de hacking enviando PRs para o [repositório hacktricks](https://github.com/carlospolop/hacktricks) e [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
|
|
</details>
|