mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/generic-hacking/tunneling-and-port-forwarding.md', 'src
This commit is contained in:
parent
16537467a1
commit
b2bfcc178d
@ -5,7 +5,7 @@
|
||||
## Dica do Nmap
|
||||
|
||||
> [!WARNING]
|
||||
> **ICMP** e **SYN** scans não podem ser tunelados através de proxies socks, então devemos **desativar a descoberta por ping** (`-Pn`) e especificar **scans TCP** (`-sT`) para que isso funcione.
|
||||
> **ICMP** e **SYN** scans não podem ser tunelados através de proxies socks, então devemos **desativar a descoberta de ping** (`-Pn`) e especificar **scans TCP** (`-sT`) para que isso funcione.
|
||||
|
||||
## **Bash**
|
||||
|
||||
@ -93,7 +93,7 @@ route add -net 10.0.0.0/16 gw 1.1.1.1
|
||||
|
||||
## SSHUTTLE
|
||||
|
||||
Você pode **tunar** via **ssh** todo o **tráfego** para uma **sub-rede** através de um host.\
|
||||
Você pode **túnel** via **ssh** todo o **tráfego** para uma **sub-rede** através de um host.\
|
||||
Por exemplo, encaminhando todo o tráfego que vai para 10.10.10.0/24
|
||||
```bash
|
||||
pip install sshuttle
|
||||
@ -163,7 +163,7 @@ Para notar:
|
||||
### rPort2Port local
|
||||
|
||||
> [!WARNING]
|
||||
> Neste caso, a **porta é aberta no host do beacon**, não no Servidor da Equipe, e o **tráfego é enviado para o cliente Cobalt Strike** (não para o Servidor da Equipe) e de lá para o host:porta indicado.
|
||||
> Neste caso, a **porta é aberta no host do beacon**, não no Servidor da Equipe e o **tráfego é enviado para o cliente Cobalt Strike** (não para o Servidor da Equipe) e de lá para o host:porta indicado.
|
||||
```bash
|
||||
rportfwd_local [bind port] [forward host] [forward port]
|
||||
rportfwd_local stop [bind port]
|
||||
@ -250,7 +250,7 @@ attacker> python server.py --server-port 9999 --server-ip 0.0.0.0 --proxy-ip 127
|
||||
```bash
|
||||
victim> python client.py --server-ip <rpivot_server_ip> --server-port 9999
|
||||
```
|
||||
Pivotar através do **NTLM proxy**
|
||||
Fazer pivot através do **NTLM proxy**
|
||||
```bash
|
||||
victim> python client.py --server-ip <rpivot_server_ip> --server-port 9999 --ntlm-proxy-ip <proxy_ip> --ntlm-proxy-port 8080 --domain CONTOSO.COM --username Alice --password P@ssw0rd
|
||||
```
|
||||
@ -348,7 +348,7 @@ netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=4444
|
||||
Você precisa ter **acesso RDP sobre o sistema**.\
|
||||
Baixe:
|
||||
|
||||
1. [SocksOverRDP x64 Binaries](https://github.com/nccgroup/SocksOverRDP/releases) - Esta ferramenta utiliza `Dynamic Virtual Channels` (`DVC`) do recurso de Serviço de Área de Trabalho Remota do Windows. DVC é responsável por **tunneling de pacotes sobre a conexão RDP**.
|
||||
1. [SocksOverRDP x64 Binaries](https://github.com/nccgroup/SocksOverRDP/releases) - Esta ferramenta usa `Dynamic Virtual Channels` (`DVC`) do recurso de Serviço de Área de Trabalho Remota do Windows. DVC é responsável por **tunneling de pacotes sobre a conexão RDP**.
|
||||
2. [Proxifier Portable Binary](https://www.proxifier.com/download/#win-tab)
|
||||
|
||||
No seu computador cliente, carregue **`SocksOverRDP-Plugin.dll`** assim:
|
||||
@ -377,7 +377,7 @@ Em **Profile -> Proxification Rules** adicione o nome do programa a ser proxific
|
||||
## Bypass de proxy NTLM
|
||||
|
||||
A ferramenta mencionada anteriormente: **Rpivot**\
|
||||
**OpenVPN** também pode contorná-lo, configurando essas opções no arquivo de configuração:
|
||||
**OpenVPN** também pode contorná-lo, configurando estas opções no arquivo de configuração:
|
||||
```bash
|
||||
http-proxy <proxy_ip> 8080 <file_with_creds> ntlm
|
||||
```
|
||||
@ -394,7 +394,7 @@ Domain CONTOSO.COM
|
||||
Proxy 10.0.0.10:8080
|
||||
Tunnel 2222:<attackers_machine>:443
|
||||
```
|
||||
Agora, se você configurar, por exemplo, o serviço **SSH** na vítima para escutar na porta 443. Você pode se conectar a ele através da porta 2222 do atacante.\
|
||||
Agora, se você configurar, por exemplo, no alvo, o serviço **SSH** para escutar na porta 443. Você pode se conectar a ele através da porta 2222 do atacante.\
|
||||
Você também poderia usar um **meterpreter** que se conecta a localhost:443 e o atacante está escutando na porta 2222.
|
||||
|
||||
## YARP
|
||||
@ -444,7 +444,7 @@ listen [lhost:]lport rhost:rport #Ex: listen 127.0.0.1:8080 10.0.0.20:80, this b
|
||||
```
|
||||
#### Mudar o DNS do proxychains
|
||||
|
||||
Proxychains intercepta a chamada `gethostbyname` da libc e encaminha a solicitação de DNS tcp através do proxy socks. Por **padrão**, o servidor **DNS** que o proxychains usa é **4.2.2.2** (hardcoded). Para mudá-lo, edite o arquivo: _/usr/lib/proxychains3/proxyresolv_ e altere o IP. Se você estiver em um **ambiente Windows**, pode definir o IP do **controlador de domínio**.
|
||||
Proxychains intercepta a chamada `gethostbyname` da libc e encaminha a solicitação de DNS tcp através do proxy socks. Por **padrão**, o servidor **DNS** que o proxychains usa é **4.2.2.2** (codificado). Para mudá-lo, edite o arquivo: _/usr/lib/proxychains3/proxyresolv_ e altere o IP. Se você estiver em um **ambiente Windows**, pode definir o IP do **controlador de domínio**.
|
||||
|
||||
## Túneis em Go
|
||||
|
||||
@ -498,7 +498,7 @@ chmod a+x ./ngrok
|
||||
|
||||
**Documentação:** [https://ngrok.com/docs/getting-started/](https://ngrok.com/docs/getting-started/).
|
||||
|
||||
_É também possível adicionar autenticação e TLS, se necessário._
|
||||
_Também é possível adicionar autenticação e TLS, se necessário._
|
||||
|
||||
#### Tunneling TCP
|
||||
```bash
|
||||
@ -513,12 +513,12 @@ _É também possível adicionar autenticação e TLS, se necessário._
|
||||
./ngrok http file:///tmp/httpbin/
|
||||
# Example of resulting link: https://abcd-1-2-3-4.ngrok.io/
|
||||
```
|
||||
#### Capturando chamadas HTTP
|
||||
#### Captura de chamadas HTTP
|
||||
|
||||
_Utilizado para XSS, SSRF, SSTI ..._\
|
||||
_Util útil para XSS, SSRF, SSTI ..._\
|
||||
Diretamente do stdout ou na interface HTTP [http://127.0.0.1:4040](http://127.0.0.1:4000).
|
||||
|
||||
#### Tunelando serviço HTTP interno
|
||||
#### Tunelamento de serviço HTTP interno
|
||||
```bash
|
||||
./ngrok http localhost:8080 --host-header=rewrite
|
||||
# Example of resulting link: https://abcd-1-2-3-4.ngrok.io/
|
||||
@ -576,7 +576,7 @@ Porque todo o tráfego sai do host **saindo pela porta 443**, os túneis Cloudfl
|
||||
|
||||
## FRP (Fast Reverse Proxy)
|
||||
|
||||
[`frp`](https://github.com/fatedier/frp) é um proxy reverso em Go que é mantido ativamente e suporta **TCP, UDP, HTTP/S, SOCKS e P2P NAT-hole-punching**. A partir da **v0.53.0 (Maio de 2024)**, ele pode atuar como um **Gateway de Túnel SSH**, permitindo que um host alvo crie um túnel reverso usando apenas o cliente OpenSSH padrão – nenhum binário extra é necessário.
|
||||
[`frp`](https://github.com/fatedier/frp) é um proxy reverso em Go que é mantido ativamente e suporta **TCP, UDP, HTTP/S, SOCKS e P2P NAT-hole-punching**. A partir da **v0.53.0 (Maio de 2024)**, ele pode atuar como um **SSH Tunnel Gateway**, permitindo que um host alvo crie um túnel reverso usando apenas o cliente OpenSSH padrão – nenhum binário extra é necessário.
|
||||
|
||||
### Túnel TCP reverso clássico
|
||||
```bash
|
||||
|
@ -55,12 +55,12 @@ ls -l $(cat /proc/sys/kernel/modprobe) # Verificar acesso ao modprobe
|
||||
#### **`/proc/sys/fs`**
|
||||
|
||||
- De acordo com [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html), contém opções e informações sobre o sistema de arquivos.
|
||||
- O acesso de escrita pode permitir vários ataques de negação de serviço contra o host.
|
||||
- O acesso de gravação pode permitir vários ataques de negação de serviço contra o host.
|
||||
|
||||
#### **`/proc/sys/fs/binfmt_misc`**
|
||||
|
||||
- Permite registrar interpretadores para formatos binários não nativos com base em seu número mágico.
|
||||
- Pode levar à escalada de privilégios ou acesso ao shell root se `/proc/sys/fs/binfmt_misc/register` for gravável.
|
||||
- Pode levar a escalonamento de privilégios ou acesso a shell root se `/proc/sys/fs/binfmt_misc/register` for gravável.
|
||||
- Exploit relevante e explicação:
|
||||
- [Poor man's rootkit via binfmt_misc](https://github.com/toffan/binfmt_misc)
|
||||
- Tutorial detalhado: [Video link](https://www.youtube.com/watch?v=WBC7hhgMvQQ)
|
||||
@ -90,13 +90,13 @@ echo b > /proc/sysrq-trigger # Reinicializa o host
|
||||
|
||||
- Lista símbolos exportados do kernel e seus endereços.
|
||||
- Essencial para o desenvolvimento de exploits de kernel, especialmente para superar KASLR.
|
||||
- As informações de endereço são restritas com `kptr_restrict` definido como `1` ou `2`.
|
||||
- Informações de endereço são restritas com `kptr_restrict` definido como `1` ou `2`.
|
||||
- Detalhes em [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
|
||||
|
||||
#### **`/proc/[pid]/mem`**
|
||||
|
||||
- Interfaces com o dispositivo de memória do kernel `/dev/mem`.
|
||||
- Historicamente vulnerável a ataques de escalada de privilégios.
|
||||
- Historicamente vulnerável a ataques de escalonamento de privilégios.
|
||||
- Mais em [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
|
||||
|
||||
#### **`/proc/kcore`**
|
||||
@ -109,12 +109,12 @@ echo b > /proc/sysrq-trigger # Reinicializa o host
|
||||
#### **`/proc/kmem`**
|
||||
|
||||
- Interface alternativa para `/dev/kmem`, representando a memória virtual do kernel.
|
||||
- Permite leitura e escrita, portanto, modificação direta da memória do kernel.
|
||||
- Permite leitura e gravação, portanto, modificação direta da memória do kernel.
|
||||
|
||||
#### **`/proc/mem`**
|
||||
|
||||
- Interface alternativa para `/dev/mem`, representando a memória física.
|
||||
- Permite leitura e escrita, a modificação de toda a memória requer a resolução de endereços virtuais para físicos.
|
||||
- Permite leitura e gravação, a modificação de toda a memória requer a resolução de endereços virtuais para físicos.
|
||||
|
||||
#### **`/proc/sched_debug`**
|
||||
|
||||
@ -131,7 +131,7 @@ echo b > /proc/sysrq-trigger # Reinicializa o host
|
||||
#### **`/sys/kernel/uevent_helper`**
|
||||
|
||||
- Usado para manipular `uevents` de dispositivos do kernel.
|
||||
- Escrever em `/sys/kernel/uevent_helper` pode executar scripts arbitrários ao serem acionados `uevent`.
|
||||
- Gravar em `/sys/kernel/uevent_helper` pode executar scripts arbitrários ao serem acionados `uevent`.
|
||||
- **Exemplo de Exploração**:
|
||||
```bash
|
||||
|
||||
@ -291,8 +291,8 @@ locate the other containers' filesystems and SA / web identity tokens
|
||||
Mounting certain host Unix sockets or writable pseudo-filesystems is equivalent to giving the container full root on the node. **Treat the following paths as highly sensitive and never expose them to untrusted workloads**:
|
||||
|
||||
```text
|
||||
/run/containerd/containerd.sock # socket CRI do containerd
|
||||
/var/run/crio/crio.sock # socket de runtime CRI-O
|
||||
/run/containerd/containerd.sock # soquete CRI do containerd
|
||||
/var/run/crio/crio.sock # soquete de runtime CRI-O
|
||||
/run/podman/podman.sock # API do Podman (com ou sem root)
|
||||
/var/run/kubelet.sock # API do Kubelet em nós do Kubernetes
|
||||
/run/firecracker-containerd.sock # Kata / Firecracker
|
||||
|
@ -18,7 +18,7 @@ Com um dispositivo antigo com jailbreak, é possível instalar o IPA, **descript
|
||||
2. Instale e inicie o [Apple Configurator](https://apps.apple.com/au/app/apple-configurator/id1037126344?mt=12) no seu macos
|
||||
3. Abra o `Terminal` no seu Mac e cd para `/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps`. O IPA aparecerá nesta pasta mais tarde.
|
||||
4. Você deve ver seu dispositivo iOS. Clique duas vezes nele e, em seguida, clique em Adicionar + → Apps na barra de menu superior.
|
||||
5. Após clicar em Adicionar, o Configurator fará o download do IPA da Apple e tentará enviá-lo para o seu dispositivo. Se você seguiu minha recomendação anterior e já instalou o IPA, um aviso pedindo para reinstalar o aplicativo aparecerá.
|
||||
5. Após clicar em Adicionar, o Configurator fará o download do IPA da Apple e tentará enviá-lo para o seu dispositivo. Se você seguiu minha recomendação anterior e já instalou o IPA, um prompt pedindo para reinstalar o aplicativo aparecerá.
|
||||
6. O IPA deve ser baixado dentro de `/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps`, de onde você pode pegá-lo.
|
||||
|
||||
Verifique [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed) para mais informações detalhadas sobre esse processo.
|
||||
@ -47,7 +47,7 @@ Note que você pode precisar do **AppSync Unified tweak** do Cydia para evitar e
|
||||
Uma vez instalado, você pode usar o **Iridium tweak** do Cydia para obter o IPA descriptografado.
|
||||
|
||||
|
||||
### Patch de permissões & re-assinatura
|
||||
### Patch entitlements & re-sign
|
||||
|
||||
Para re-assinar o aplicativo com a permissão `get-task-allow`, existem várias ferramentas disponíveis, como `app-signer`, `codesign` e `iResign`. O `app-signer` possui uma interface muito amigável que permite re-assinar um arquivo IPA de forma muito fácil, indicando o IPA a ser re-assinado, para **colocá-lo como `get-task-allow`** e o certificado e perfil de provisionamento a serem usados.
|
||||
|
||||
@ -59,15 +59,15 @@ ideviceinstaller -i resigned.ipa -w
|
||||
```
|
||||
---
|
||||
|
||||
### Ativar Modo de Desenvolvedor (iOS 16+)
|
||||
### Ativar Modo Desenvolvedor (iOS 16+)
|
||||
|
||||
Desde o iOS 16, a Apple introduziu o **Modo de Desenvolvedor**: qualquer binário que contenha `get_task_allow` *ou* que seja assinado com um certificado de desenvolvimento se recusará a iniciar até que o Modo de Desenvolvedor esteja ativado no dispositivo. Você também não poderá anexar Frida/LLDB a menos que essa opção esteja ativada.
|
||||
Desde o iOS 16, a Apple introduziu o **Modo Desenvolvedor**: qualquer binário que carregue `get_task_allow` *ou* esteja assinado com um certificado de desenvolvimento se recusará a iniciar até que o Modo Desenvolvedor esteja ativado no dispositivo. Você também não poderá anexar Frida/LLDB a menos que essa opção esteja ativada.
|
||||
|
||||
1. Instale ou envie **qualquer** IPA assinada por desenvolvedor para o telefone.
|
||||
2. Navegue até **Ajustes → Privacidade e Segurança → Modo de Desenvolvedor** e ative-o.
|
||||
3. O dispositivo será reiniciado; após inserir o código de acesso, você será solicitado a **Ativar** o Modo de Desenvolvedor.
|
||||
2. Navegue até **Ajustes → Privacidade e Segurança → Modo Desenvolvedor** e ative-o.
|
||||
3. O dispositivo será reiniciado; após inserir o código de acesso, você será solicitado a **Ativar** o Modo Desenvolvedor.
|
||||
|
||||
O Modo de Desenvolvedor permanece ativo até que você o desative ou limpe o telefone, então este passo precisa ser realizado apenas uma vez por dispositivo. A [documentação da Apple](https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device) explica as implicações de segurança.
|
||||
O Modo Desenvolvedor permanece ativo até que você o desative ou limpe o telefone, então este passo precisa ser realizado apenas uma vez por dispositivo. [A documentação da Apple](https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device) explica as implicações de segurança.
|
||||
|
||||
### Opções modernas de sideloading
|
||||
|
||||
@ -76,13 +76,13 @@ Agora existem várias maneiras maduras de sideload e manter IPAs re-assinadas at
|
||||
| Ferramenta | Requisitos | Forças | Limitações |
|
||||
|------------|------------|--------|------------|
|
||||
| **AltStore 2 / SideStore** | Companheiro macOS/Windows/Linux que re-assina a IPA a cada 7 dias com um perfil de desenvolvedor gratuito | Recarga automática via Wi-Fi, funciona até iOS 17 | Necessita de computador na mesma rede, limite de 3 aplicativos imposto pela Apple |
|
||||
| **TrollStore 1/2** | Dispositivo em iOS 14 – 15.4.1 vulnerável ao bug do CoreTrust | Assinatura *permanente* (sem limite de 7 dias); nenhum computador necessário uma vez instalado | Não suportado em iOS 15.5+ (bug corrigido) |
|
||||
| **TrollStore 1/2** | Dispositivo com iOS 14 – 15.4.1 vulnerável ao bug do CoreTrust | Assinatura *permanente* (sem limite de 7 dias); nenhum computador necessário uma vez instalado | Não suportado no iOS 15.5+ (bug corrigido) |
|
||||
|
||||
Para pentests rotineiros em versões atuais do iOS, Alt/Side-Store geralmente são a escolha mais prática.
|
||||
|
||||
### Hooking / instrumentação dinâmica
|
||||
|
||||
Você pode hook seu aplicativo exatamente como em um dispositivo com jailbreak uma vez que ele esteja assinado com `get_task_allow` **e** o Modo de Desenvolvedor esteja ativado:
|
||||
Você pode hook seu aplicativo exatamente como em um dispositivo com jailbreak uma vez que ele esteja assinado com `get_task_allow` **e** o Modo Desenvolvedor esteja ativado:
|
||||
```bash
|
||||
# Spawn & attach with objection
|
||||
objection -g "com.example.target" explore
|
||||
@ -104,9 +104,9 @@ opensecurity/mobile-security-framework-mobsf:latest
|
||||
```
|
||||
MobSF irá implantar automaticamente o binário, habilitar um servidor Frida dentro do sandbox do aplicativo e gerar um relatório interativo.
|
||||
|
||||
### iOS 17 & Considerações sobre o Modo de Bloqueio
|
||||
### iOS 17 & Modo de Bloqueio considerações
|
||||
|
||||
* **Modo de Bloqueio** (Configurações → Privacidade e Segurança) bloqueia o vinculador dinâmico de carregar bibliotecas dinâmicas não assinadas ou assinadas externamente. Ao testar dispositivos que podem ter este modo habilitado, certifique-se de que está **desativado** ou suas sessões Frida/objection serão encerradas imediatamente.
|
||||
* **Modo de Bloqueio** (Configurações → Privacidade & Segurança) bloqueia o vinculador dinâmico de carregar bibliotecas dinâmicas não assinadas ou assinadas externamente. Ao testar dispositivos que podem ter este modo habilitado, certifique-se de que está **desativado** ou suas sessões Frida/objection serão encerradas imediatamente.
|
||||
* A Autenticação de Ponteiros (PAC) é aplicada em todo o sistema em dispositivos A12+. Frida ≥16 lida com a remoção de PAC de forma transparente — apenas mantenha tanto *frida-server* quanto a ferramenta Python/CLI atualizados quando uma nova versão principal do iOS for lançada.
|
||||
|
||||
## Referências
|
||||
|
@ -1,18 +1,18 @@
|
||||
# Django
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include /src/banners/hacktricks-training.md}}
|
||||
|
||||
## Manipulação de Cache para RCE
|
||||
O método de armazenamento de cache padrão do Django é [Python pickles](https://docs.python.org/3/library/pickle.html), que pode levar a RCE se [entrada não confiável for descompactada](https://media.blackhat.com/bh-us-11/Slaviero/BH_US_11_Slaviero_Sour_Pickles_Slides.pdf). **Se um atacante conseguir obter acesso de gravação ao cache, ele pode escalar essa vulnerabilidade para RCE no servidor subjacente**.
|
||||
|
||||
O cache do Django é armazenado em um dos quatro lugares: [Redis](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/redis.py#L12), [memória](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/locmem.py#L16), [arquivos](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/filebased.py#L16), ou um [banco de dados](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/db.py#L95). O cache armazenado em um servidor Redis ou banco de dados são os vetores de ataque mais prováveis (injeção Redis e injeção SQL), mas um atacante também pode ser capaz de usar cache baseado em arquivos para transformar uma gravação arbitrária em RCE. Os mantenedores marcaram isso como um não problema. É importante notar que a pasta de arquivos de cache, o nome da tabela SQL e os detalhes do servidor Redis variarão com base na implementação.
|
||||
O cache do Django é armazenado em um dos quatro lugares: [Redis](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/redis.py#L12), [memória](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/locmem.py#L16), [arquivos](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/filebased.py#L16), ou um [banco de dados](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/db.py#L95). O cache armazenado em um servidor Redis ou banco de dados são os vetores de ataque mais prováveis (injeção Redis e injeção SQL), mas um atacante também pode ser capaz de usar o cache baseado em arquivos para transformar uma gravação arbitrária em RCE. Os mantenedores marcaram isso como um não problema. É importante notar que a pasta de arquivos de cache, o nome da tabela SQL e os detalhes do servidor Redis variarão com base na implementação.
|
||||
|
||||
Este relatório do HackerOne fornece um ótimo exemplo reproduzível de exploração do cache do Django armazenado em um banco de dados SQLite: https://hackerone.com/reports/1415436
|
||||
|
||||
---
|
||||
|
||||
## Injeção de Template do Lado do Servidor (SSTI)
|
||||
A Linguagem de Template do Django (DTL) é **Turing-completa**. Se dados fornecidos pelo usuário forem renderizados como uma *string de template* (por exemplo, chamando `Template(user_input).render()` ou quando `|safe`/`format_html()` remove a auto-escapagem), um atacante pode alcançar SSTI total → RCE.
|
||||
A Linguagem de Template do Django (DTL) é **Turing-completa**. Se dados fornecidos pelo usuário forem renderizados como uma *string de template* (por exemplo, chamando `Template(user_input).render()` ou quando `|safe`/`format_html()` remove a auto-escapagem), um atacante pode alcançar SSTI completo → RCE.
|
||||
|
||||
### Detecção
|
||||
1. Procure por chamadas dinâmicas para `Template()` / `Engine.from_string()` / `render_to_string()` que incluam *qualquer* dado de solicitação não sanitizado.
|
||||
@ -33,12 +33,12 @@ Encontre o índice de `subprocess.Popen` (≈400–500 dependendo da versão do
|
||||
```
|
||||
Um dispositivo universal mais seguro é iterar até `cls.__name__ == 'Popen'`.
|
||||
|
||||
O mesmo dispositivo funciona para recursos de renderização de template do **Debug Toolbar** ou **Django-CMS** que manipulam incorretamente a entrada do usuário.
|
||||
O mesmo dispositivo funciona para recursos de renderização de template do **Debug Toolbar** ou **Django-CMS** que manipulam mal a entrada do usuário.
|
||||
|
||||
---
|
||||
|
||||
## RCE de Cookie de Sessão Baseado em Pickle
|
||||
Se a configuração `SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'` estiver habilitada (ou um serializador personalizado que desserializa pickle), o Django *descriptografa e desempacota* o cookie de sessão **antes** de chamar qualquer código de visualização. Portanto, possuir uma chave de assinatura válida (a `SECRET_KEY` do projeto por padrão) é suficiente para execução remota imediata de código.
|
||||
Se a configuração `SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'` estiver habilitada (ou um serializador personalizado que desserializa pickle), o Django *descriptografa e desserializa* o cookie de sessão **antes** de chamar qualquer código de visualização. Portanto, possuir uma chave de assinatura válida (a `SECRET_KEY` do projeto por padrão) é suficiente para execução remota imediata de código.
|
||||
|
||||
### Requisitos para Exploração
|
||||
* O servidor usa `PickleSerializer`.
|
||||
@ -65,7 +65,7 @@ Envie o cookie resultante, e o payload é executado com as permissões do trabal
|
||||
---
|
||||
|
||||
## Recentes (2023-2025) CVEs de Alto Impacto do Django que os Pentesters Devem Verificar
|
||||
* **CVE-2025-48432** – *Injeção de Log via `request.path` não escapado* (corrigido em 4 de junho de 2025). Permite que atacantes insiram quebras de linha/códigos ANSI em arquivos de log e envenenem a análise de log a jusante. Nível de patch ≥ 4.2.22 / 5.1.10 / 5.2.2.
|
||||
* **CVE-2025-48432** – *Injeção de Log via `request.path` não escapado* (corrigido em 4 de junho de 2025). Permite que atacantes introduzam quebras de linha/códigos ANSI em arquivos de log e envenenem a análise de log a jusante. Nível de patch ≥ 4.2.22 / 5.1.10 / 5.2.2.
|
||||
* **CVE-2024-42005** – *Injeção SQL crítica* em `QuerySet.values()/values_list()` no `JSONField` (CVSS 9.8). Crie chaves JSON para sair da citação e executar SQL arbitrário. Corrigido em 4.2.15 / 5.0.8.
|
||||
|
||||
Sempre identifique a versão exata do framework via a página de erro `X-Frame-Options` ou o hash de `/static/admin/css/base.css` e teste o acima onde aplicável.
|
||||
@ -74,6 +74,6 @@ Sempre identifique a versão exata do framework via a página de erro `X-Frame-O
|
||||
|
||||
## Referências
|
||||
* Lançamento de segurança do Django – "Django 5.2.2, 5.1.10, 4.2.22 abordam CVE-2025-48432" – 4 de junho de 2025.
|
||||
* OP-Innovate: "Django lança atualizações de segurança para abordar falha de injeção SQL CVE-2024-42005" – 11 de agosto de 2024.
|
||||
* OP-Innovate: "Django lança atualizações de segurança para abordar a falha de injeção SQL CVE-2024-42005" – 11 de agosto de 2024.
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include /src/banners/hacktricks-training.md}}
|
||||
|
@ -83,7 +83,7 @@ Um cabeçalho hop-by-hop é um cabeçalho que é projetado para ser processado e
|
||||
## Range requests
|
||||
|
||||
- **`Accept-Ranges`**: Indica se o servidor suporta solicitações de intervalo e, se sim, em qual unidade o intervalo pode ser expresso. `Accept-Ranges: <range-unit>`
|
||||
- **`Range`**: Indica a parte de um documento que o servidor deve retornar. Por exemplo, `Range:80-100` retornará os bytes 80 a 100 da resposta original com um código de status de 206 Partial Content. Também lembre-se de remover o cabeçalho `Accept-Encoding` da solicitação.
|
||||
- **`Range`**: Indica a parte de um documento que o servidor deve retornar. Por exemplo, `Range:80-100` retornará os bytes 80 a 100 da resposta original com um código de status 206 Partial Content. Também lembre-se de remover o cabeçalho `Accept-Encoding` da solicitação.
|
||||
- Isso pode ser útil para obter uma resposta com código JavaScript refletido arbitrário que, de outra forma, poderia ser escapado. Mas para abusar disso, você precisaria injetar esses cabeçalhos na solicitação.
|
||||
- **`If-Range`**: Cria uma solicitação de intervalo condicional que só é atendida se o etag ou a data fornecidos corresponderem ao recurso remoto. Usado para evitar o download de dois intervalos de versões incompatíveis do recurso.
|
||||
- **`Content-Range`**: Indica onde em uma mensagem de corpo completo uma mensagem parcial pertence.
|
||||
@ -109,7 +109,7 @@ Por exemplo, uma combinação de **`Range`** e **`Etag`** em uma solicitação H
|
||||
## Controls
|
||||
|
||||
- **`Allow`**: Este cabeçalho é usado para comunicar os métodos HTTP que um recurso pode manipular. Por exemplo, pode ser especificado como `Allow: GET, POST, HEAD`, indicando que o recurso suporta esses métodos.
|
||||
- **`Expect`**: Utilizado pelo cliente para transmitir expectativas que o servidor precisa atender para que a solicitação seja processada com sucesso. Um caso de uso comum envolve o cabeçalho `Expect: 100-continue`, que sinaliza que o cliente pretende enviar um grande volume de dados. O cliente aguarda uma resposta `100 (Continue)` antes de prosseguir com a transmissão. Esse mecanismo ajuda a otimizar o uso da rede, aguardando a confirmação do servidor.
|
||||
- **`Expect`**: Utilizado pelo cliente para transmitir expectativas que o servidor precisa atender para que a solicitação seja processada com sucesso. Um caso de uso comum envolve o cabeçalho `Expect: 100-continue`, que sinaliza que o cliente pretende enviar um grande payload de dados. O cliente aguarda uma resposta `100 (Continue)` antes de prosseguir com a transmissão. Esse mecanismo ajuda a otimizar o uso da rede, aguardando a confirmação do servidor.
|
||||
|
||||
## Downloads
|
||||
|
||||
@ -117,7 +117,7 @@ Por exemplo, uma combinação de **`Range`** e **`Etag`** em uma solicitação H
|
||||
```
|
||||
Content-Disposition: attachment; filename="filename.jpg"
|
||||
```
|
||||
Isso significa que o arquivo nomeado "filename.jpg" é destinado a ser baixado e salvo.
|
||||
Isso significa que o arquivo chamado "filename.jpg" é destinado a ser baixado e salvo.
|
||||
|
||||
## Cabeçalhos de Segurança
|
||||
|
||||
@ -166,9 +166,9 @@ Cross-Origin-Resource-Policy: same-origin
|
||||
Access-Control-Allow-Origin: https://example.com
|
||||
Access-Control-Allow-Credentials: true
|
||||
```
|
||||
### **Política de Incorporação de Origem Cruzada (COEP) e Política de Abertura de Origem Cruzada (COOP)**
|
||||
### **Política de Incorporação entre Origens (COEP) e Política de Abertura entre Origens (COOP)**
|
||||
|
||||
COEP e COOP são essenciais para habilitar o isolamento de origem cruzada, reduzindo significativamente o risco de ataques semelhantes ao Spectre. Eles controlam o carregamento de recursos de origem cruzada e a interação com janelas de origem cruzada, respectivamente.
|
||||
COEP e COOP são essenciais para habilitar o isolamento entre origens, reduzindo significativamente o risco de ataques semelhantes ao Spectre. Eles controlam o carregamento de recursos entre origens e a interação com janelas entre origens, respectivamente.
|
||||
```
|
||||
Cross-Origin-Embedder-Policy: require-corp
|
||||
Cross-Origin-Opener-Policy: same-origin-allow-popups
|
||||
@ -193,7 +193,7 @@ Situações típicas onde esse erro aparece:
|
||||
|
||||
1. Identifique um cabeçalho que é filtrado ou validado no lado do servidor (por exemplo, lendo código-fonte, documentação ou mensagens de erro).
|
||||
2. Envie o **mesmo cabeçalho com uma capitalização diferente** (misturada ou em maiúsculas). Como as pilhas HTTP geralmente canonicizam cabeçalhos apenas *depois* que o código do usuário foi executado, a verificação vulnerável pode ser pulada.
|
||||
3. Se o componente downstream tratar cabeçalhos de forma case-insensitive (a maioria faz), ele aceitará o valor controlado pelo atacante.
|
||||
3. Se o componente a jusante tratar cabeçalhos de forma case-insensitive (a maioria faz), ele aceitará o valor controlado pelo atacante.
|
||||
|
||||
### Exemplo: Apache Camel `exec` RCE (CVE-2025-27636)
|
||||
|
||||
@ -215,7 +215,7 @@ Os cabeçalhos chegam ao componente `exec` sem filtragem, resultando na execuç
|
||||
|
||||
## Referências
|
||||
|
||||
- [CVE-2025-27636 – RCE em Apache Camel via bypass de casing de cabeçalho (blog OffSec)](https://www.offsec.com/blog/cve-2025-27636/)
|
||||
- [CVE-2025-27636 – RCE em Apache Camel via bypass de capitalização de cabeçalho (blog OffSec)](https://www.offsec.com/blog/cve-2025-27636/)
|
||||
- [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition)
|
||||
- [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers)
|
||||
- [https://web.dev/security-headers/](https://web.dev/security-headers/)
|
||||
|
@ -197,7 +197,7 @@ Mitigações (recomendadas mesmo para aplicativos Classic ASP legados):
|
||||
|
||||
O vetor de autenticação forçada foi revisitado pela Check Point Research em 2023, provando que ainda é explorável em Windows Server totalmente atualizado quando a chave do registro está ausente. citeturn0search0
|
||||
|
||||
### Cracker de Senha .mdb
|
||||
### .mdb Cracker de Senha
|
||||
|
||||
[**Access PassView**](https://www.nirsoft.net/utils/accesspv.html) é uma ferramenta gratuita que pode ser usada para recuperar a senha principal do banco de dados do Microsoft Access 95/97/2000/XP ou Jet Database Engine 3.0/4.0.
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user