Translated ['mobile-pentesting/android-app-pentesting/apk-decompilers.md

This commit is contained in:
Translator 2024-11-05 18:07:23 +00:00
parent 171fedf83e
commit 50566af1a5
5 changed files with 169 additions and 125 deletions

View file

@ -1,8 +1,8 @@
# APK decompilers
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -14,26 +14,24 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
</details>
{% endhint %}
{% endhint %}
**Para más detalles sobre cada herramienta, consulta la publicación original en [https://eiken.dev/blog/2021/02/how-to-break-your-jar-in-2021-decompilation-guide-for-jars-and-apks/#cfr](https://eiken.dev/blog/2021/02/how-to-break-your-jar-in-2021-decompilation-guide-for-jars-and-apks/#cfr)**
**Para más detalles sobre cada herramienta, consulta la publicación original de** [**https://eiken.dev/blog/2021/02/how-to-break-your-jar-in-2021-decompilation-guide-for-jars-and-apks/#cfr**](https://eiken.dev/blog/2021/02/how-to-break-your-jar-in-2021-decompilation-guide-for-jars-and-apks/#cfr)
### [JD-Gui](https://github.com/java-decompiler/jd-gui)
Como el decompilador GUI Java pionero, **JD-Gui** te permite investigar código Java dentro de archivos APK. Es fácil de usar; después de obtener el APK, simplemente ábrelo con JD-Gui para inspeccionar el código.
Como el decompilador GUI Java pionero, **JD-Gui** te permite investigar el código Java dentro de archivos APK. Es fácil de usar; después de obtener el APK, simplemente ábrelo con JD-Gui para inspeccionar el código.
### [Jadx](https://github.com/skylot/jadx)
**Jadx** ofrece una interfaz fácil de usar para decompilar código Java de aplicaciones Android. Se recomienda por su facilidad de uso en diferentes plataformas.
- Para iniciar la GUI, navega al directorio bin y ejecuta: `jadx-gui`
- Para uso en línea de comandos, decompila un APK con: `jadx app.apk`
- Para especificar un directorio de salida o ajustar opciones de decompilación: `jadx app.apk -d <ruta al directorio de salida> --no-res --no-src --no-imports`
* Para lanzar la GUI, navega al directorio bin y ejecuta: `jadx-gui`
* Para uso en línea de comandos, decompila un APK con: `jadx app.apk`
* Para especificar un directorio de salida o ajustar opciones de decompilación: `jadx app.apk -d <ruta al directorio de salida> --no-res --no-src --no-imports`
### [GDA-android-reversing-Tool](https://github.com/charles2gan/GDA-android-reversing-Tool)
**GDA**, una herramienta solo para Windows, ofrece amplias características para la ingeniería inversa de aplicaciones Android. Instala y ejecuta GDA en tu sistema Windows, luego carga el archivo APK para su análisis.
**GDA**, una herramienta solo para Windows, ofrece amplias características para la ingeniería inversa de aplicaciones Android. Instala y ejecuta GDA en tu sistema Windows, luego carga el archivo APK para análisis.
### [Bytecode-Viewer](https://github.com/Konloch/bytecode-viewer/releases)
@ -43,37 +41,40 @@ Con **Bytecode-Viewer**, puedes analizar archivos APK utilizando múltiples deco
**Enjarify** traduce bytecode Dalvik a bytecode Java, permitiendo que las herramientas de análisis de Java analicen aplicaciones Android de manera más efectiva.
- Para usar Enjarify, ejecuta: `enjarify app.apk`
Esto genera el bytecode Java equivalente del APK proporcionado.
* Para usar Enjarify, ejecuta: `enjarify app.apk` Esto genera el bytecode Java equivalente del APK proporcionado.
### [CFR](https://github.com/leibnitz27/cfr)
**CFR** es capaz de decompilar características modernas de Java. Úsalo de la siguiente manera:
- Para decompilación estándar: `java -jar ./cfr.jar "app.jar" --outputdir "directorio_salida"`
- Para archivos JAR grandes, ajusta la asignación de memoria de la JVM: `java -Xmx4G -jar ./cfr.jar "app.jar" --outputdir "directorio_salida"`
* Para decompilación estándar: `java -jar ./cfr.jar "app.jar" --outputdir "directorio_salida"`
* Para archivos JAR grandes, ajusta la asignación de memoria de la JVM: `java -Xmx4G -jar ./cfr.jar "app.jar" --outputdir "directorio_salida"`
### [Fernflower](https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine)
**Fernflower**, un decompilador analítico, requiere ser construido desde el código fuente. Después de construir:
- Decompila un archivo JAR: `java -jar ./fernflower.jar "app.jar" "directorio_salida"`
Luego, extrae los archivos `.java` del JAR generado usando `unzip`.
* Decompila un archivo JAR: `java -jar ./fernflower.jar "app.jar" "directorio_salida"` Luego, extrae los archivos `.java` del JAR generado usando `unzip`.
### [Krakatau](https://github.com/Storyyeller/Krakatau)
**Krakatau** ofrece un control detallado sobre la decompilación, especialmente para manejar bibliotecas externas.
- Usa Krakatau especificando la ruta de la biblioteca estándar y el archivo JAR a decompilar: `./Krakatau/decompile.py -out "directorio_salida" -skip -nauto -path "./jrt-extractor/rt.jar" "app.jar"`
* Usa Krakatau especificando la ruta de la biblioteca estándar y el archivo JAR a decompilar: `./Krakatau/decompile.py -out "directorio_salida" -skip -nauto -path "./jrt-extractor/rt.jar" "app.jar"`
### [procyon](https://github.com/mstrobel/procyon)
Para una decompilación sencilla con **procyon**:
- Decompila un archivo JAR a un directorio especificado: `procyon -jar "app.jar" -o "directorio_salida"`
* Decompila un archivo JAR a un directorio especificado: `procyon -jar "app.jar" -o "directorio_salida"`
### [frida-DEXdump](https://github.com/hluwa/frida-dexdump)
Esta herramienta se puede usar para volcar el DEX de un APK en ejecución en memoria. Esto ayuda a superar la ofuscación estática que se elimina mientras la aplicación se ejecuta en memoria.
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -85,5 +86,3 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
</details>
{% endhint %}
</details>
{% endhint %}

View file

@ -1,39 +1,38 @@
# iOS Testing Environment
# Entorno de Pruebas de iOS
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Aprende y practica Hacking en AWS:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
<summary>Apoya a HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
</details>
{% endhint %}
{% endhint %}
## Apple Developer Program
## Programa de Desarrolladores de Apple
Una **identidad de aprovisionamiento** es una colección de claves públicas y privadas que están asociadas a una cuenta de desarrollador de Apple. Para **firmar aplicaciones** necesitas pagar **99$/año** para registrarte en el **Apple Developer Program** y obtener tu identidad de aprovisionamiento. Sin esto, no podrás ejecutar aplicaciones desde el código fuente en un dispositivo físico. Otra opción para hacer esto es usar un **dispositivo con jailbreak**.
Una **identidad de aprovisionamiento** es una colección de claves públicas y privadas que están asociadas a una cuenta de desarrollador de Apple. Para **firmar aplicaciones** necesitas pagar **99$/año** para registrarte en el **Programa de Desarrolladores de Apple** y obtener tu identidad de aprovisionamiento. Sin esto, no podrás ejecutar aplicaciones desde el código fuente en un dispositivo físico. Otra opción para hacer esto es usar un **dispositivo con jailbreak**.
A partir de Xcode 7.2, Apple ha proporcionado una opción para crear un **perfil de aprovisionamiento de desarrollo de iOS gratuito** que permite escribir y probar tu aplicación en un iPhone real. Ve a _Xcode_ --> _Preferences_ --> _Accounts_ --> _+_ (Agregar nuevo Apple ID con tus credenciales) --> _Haz clic en el Apple ID creado_ --> _Manage Certificates_ --> _+_ (Desarrollo de Apple) --> _Done_\
\_\_Luego, para ejecutar tu aplicación en tu iPhone, primero necesitas **indicar al iPhone que confíe en la computadora.** Luego, puedes intentar **ejecutar la aplicación en el móvil desde Xcode,** pero aparecerá un error. Así que ve a _Settings_ --> _General_ --> _Profiles and Device Management_ --> Selecciona el perfil no confiable y haz clic en "**Trust**".
A partir de Xcode 7.2, Apple ha proporcionado una opción para crear un **perfil de aprovisionamiento de desarrollo de iOS gratuito** que permite escribir y probar tu aplicación en un iPhone real. Ve a _Xcode_ --> _Preferencias_ --> _Cuentas_ --> _+_ (Agregar nuevo ID de Aplicación con tus credenciales) --> _Haz clic en el ID de Apple creado_ --> _Administrar Certificados_ --> _+_ (Desarrollo de Apple) --> _Listo_\
\_\_Luego, para ejecutar tu aplicación en tu iPhone, primero necesitas **indicar al iPhone que confíe en la computadora.** Luego, puedes intentar **ejecutar la aplicación en el móvil desde Xcode,** pero aparecerá un error. Así que ve a _Configuración_ --> _General_ --> _Perfiles y Gestión de Dispositivos_ --> Selecciona el perfil no confiable y haz clic en "**Confiar**".
Ten en cuenta que **las aplicaciones firmadas por el mismo certificado de firma pueden compartir recursos de manera segura, como elementos del llavero**.
Los perfiles de aprovisionamiento se almacenan dentro del teléfono en **`/Library/MobileDevice/ProvisioningProfiles`**
## **Simulator**
## **Simulador**
{% hint style="info" %}
Ten en cuenta que un **simulador no es lo mismo que un emulador**. El simulador solo simula el comportamiento del dispositivo y las funciones, pero no las utiliza realmente.
{% endhint %}
### **Simulator**
### **Simulador**
Lo primero que necesitas saber es que **realizar un pentest dentro de un simulador será mucho más limitado que hacerlo en un dispositivo con jailbreak**.
@ -43,14 +42,14 @@ Se recomienda encarecidamente **descargar** Xcode desde la **tienda de aplicacio
Los archivos del simulador se pueden encontrar en `/Users/<username>/Library/Developer/CoreSimulator/Devices`
Para abrir el simulador, ejecuta Xcode, luego presiona en la _pestaña de Xcode_ --> _Open Developer tools_ --> _Simulator_\
Para abrir el simulador, ejecuta Xcode, luego presiona en la _pestaña de Xcode_ --> _Abrir herramientas de desarrollador_ --> _Simulador_\
\_\_En la siguiente imagen, al hacer clic en "iPod touch \[...\]" puedes seleccionar otro dispositivo para probar:
![](<../../.gitbook/assets/image (270).png>)
![](<../../.gitbook/assets/image (520).png>)
### Applications in the Simulator
### Aplicaciones en el Simulador
Dentro de `/Users/<username>/Library/Developer/CoreSimulator/Devices` puedes encontrar todos los **simuladores instalados**. Si deseas acceder a los archivos de una aplicación creada dentro de uno de los emuladores, puede ser difícil saber **en cuál está instalada la aplicación**. Una forma rápida de **encontrar el UID correcto** es ejecutar la aplicación en el simulador y ejecutar:
```bash
@ -67,15 +66,19 @@ Y en esta carpeta puedes **encontrar el paquete de la aplicación.**
Corellium es el único emulador de iOS disponible públicamente. Es una solución SaaS empresarial con un modelo de licencia por usuario y no ofrece ninguna licencia de prueba.
## Jailbeaking
## No se necesita Jailbreak
Apple requiere estrictamente que el código que se ejecuta en el iPhone debe estar **firmado por un certificado emitido por Apple**. **Jailbreaking** es el proceso de **eludir tales restricciones** y otros controles de seguridad impuestos por el sistema operativo. Por lo tanto, una vez que el dispositivo está jailbroken, la **verificación de integridad** que es responsable de verificar las aplicaciones que se instalan está parcheada, por lo que es **eludida**.
Consulta esta publicación de blog sobre cómo hacer pentesting a una aplicación de iOS en un **dispositivo no jailbroken**: [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed)
## Jailbreaking
Apple requiere estrictamente que el código que se ejecuta en el iPhone debe estar **firmado por un certificado emitido por Apple**. **Jailbreaking** es el proceso de **eludir tales restricciones** y otros controles de seguridad impuestos por el sistema operativo. Por lo tanto, una vez que el dispositivo está jailbroken, la **verificación de integridad** que es responsable de verificar las aplicaciones instaladas se parchea, por lo que es **eludida**.
{% hint style="info" %}
A diferencia de Android, **no puedes cambiar a "Modo Desarrollador"** en iOS para ejecutar código no firmado/no confiable en el dispositivo.
{% endhint %}
### Android Rooting vs. iOS Jailbreaking
### Rooting de Android vs. Jailbreaking de iOS
Aunque a menudo se comparan, **rooting** en Android y **jailbreaking** en iOS son procesos fundamentalmente diferentes. Rootear dispositivos Android puede implicar **instalar el binario `su`** o **reemplazar el sistema con un ROM personalizado con root**, lo que no necesariamente requiere exploits si el bootloader está desbloqueado. **Flashear ROMs personalizados** reemplaza el sistema operativo del dispositivo después de desbloquear el bootloader, a veces requiriendo un exploit.
@ -89,10 +92,10 @@ Las actualizaciones de iOS están controladas por un **mecanismo de desafío-res
### Variedades de Jailbreak
* **Jailbreaks atados** requieren una conexión a computadora para cada reinicio.
* **Jailbreaks semi-atados** permiten arrancar en modo no jailbroken sin una computadora.
* **Jailbreaks semi-desatados** requieren re-jailbreaking manual sin necesidad de una computadora.
* **Jailbreaks desatados** ofrecen una solución de jailbreak permanente sin necesidad de re-aplicación.
* **Jailbreaks tethered** requieren una conexión a computadora para cada reinicio.
* **Jailbreaks semi-tethered** permiten arrancar en modo no jailbroken sin una computadora.
* **Jailbreaks semi-untethered** requieren re-jailbreaking manual sin necesidad de una computadora.
* **Jailbreaks untethered** ofrecen una solución de jailbreak permanente sin necesidad de re-aplicación.
### Herramientas y Recursos de Jailbreaking
@ -122,33 +125,32 @@ El jailbreaking **elimina el sandboxing impuesto por el sistema operativo**, per
* En un dispositivo jailbroken, las aplicaciones obtienen **acceso de lectura/escritura a nuevos archivos** fuera del sandbox.
* Algunas **llamadas de API** **se comportarán de manera diferente**.
* La presencia del servicio **OpenSSH**.
* Llamar a `/bin/sh` devolverá **1** en lugar de 0.
* Llamar a `/bin/sh` **devolverá 1** en lugar de 0.
**Más información sobre cómo detectar el jailbreaking** [**aquí**](https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/jailbreak-detection-methods/)**.**
Puedes intentar evitar estas detecciones usando **objection's** `ios jailbreak disable`.
Puedes intentar evitar estas detecciones usando **objection's** `ios jailbreak disable`
## **Evasión de Detección de Jailbreak**
## **Bypass de Detección de Jailbreak**
* Puedes intentar evitar estas detecciones usando **objection's** `ios jailbreak disable`.
* También podrías instalar la herramienta **Liberty Lite** (https://ryleyangus.com/repo/). Una vez que se agregue el repositorio, la aplicación debería aparecer en la pestaña Buscar.
* Puedes intentar evitar estas detecciones usando **objection's** `ios jailbreak disable`
* También podrías instalar la herramienta **Liberty Lite** (https://ryleyangus.com/repo/). Una vez que se agregue el repositorio, la aplicación debería aparecer en la pestaña Buscar
## Referencias
* [https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/](https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/)
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Aprende y practica Hacking en AWS:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Apoya a HackTricks</summary>
* Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* Consulta los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
</details>
{% endhint %}
</details>
{% endhint %}

View file

@ -1,8 +1,8 @@
# Web API Pentesting
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -17,8 +17,8 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
Use [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=web-api-pentesting) para construir y **automatizar flujos de trabajo** fácilmente, impulsados por las **herramientas comunitarias más avanzadas** del mundo.\
Obtén acceso hoy:
Use [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=web-api-pentesting) to easily build and **automate workflows** powered by the world's **most advanced** community tools.\
Get Access Today:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=web-api-pentesting" %}
@ -28,7 +28,7 @@ Pentesting APIs implica un enfoque estructurado para descubrir vulnerabilidades.
### **Comprendiendo los Tipos de API**
* **SOAP/XML Web Services**: Utilizan el formato WSDL para documentación, que se encuentra típicamente en rutas `?wsdl`. Herramientas como **SOAPUI** y **WSDLer** (Extensión de Burp Suite) son instrumentales para analizar y generar solicitudes. La documentación de ejemplo está accesible en [DNE Online](http://www.dneonline.com/calculator.asmx).
* **SOAP/XML Web Services**: Utilizan el formato WSDL para documentación, que se encuentra típicamente en rutas `?wsdl`. Herramientas como **SOAPUI** y **WSDLer** (Extensión de Burp Suite) son fundamentales para analizar y generar solicitudes. La documentación de ejemplo está accesible en [DNE Online](http://www.dneonline.com/calculator.asmx).
* **REST APIs (JSON)**: La documentación a menudo viene en archivos WADL, sin embargo, herramientas como [Swagger UI](https://swagger.io/tools/swagger-ui/) proporcionan una interfaz más amigable para la interacción. **Postman** es una herramienta valiosa para crear y gestionar solicitudes de ejemplo.
* **GraphQL**: Un lenguaje de consulta para APIs que ofrece una descripción completa y comprensible de los datos en tu API.
@ -36,19 +36,19 @@ Pentesting APIs implica un enfoque estructurado para descubrir vulnerabilidades.
* [**VAmPI**](https://github.com/erev0s/VAmPI): Una API deliberadamente vulnerable para práctica práctica, cubriendo las 10 principales vulnerabilidades de API de OWASP.
### **Trucos Efectivos para Pentesting de API**
### **Trucos Efectivos para el Pentesting de API**
* **Vulnerabilidades SOAP/XML**: Explora vulnerabilidades XXE, aunque las declaraciones DTD a menudo están restringidas. Las etiquetas CDATA pueden permitir la inserción de cargas útiles si el XML sigue siendo válido.
* **Escalación de Privilegios**: Prueba los puntos finales con diferentes niveles de privilegio para identificar posibilidades de acceso no autorizado.
* **Configuraciones Incorrectas de CORS**: Investiga la configuración de CORS para potenciales explotaciones a través de ataques CSRF desde sesiones autenticadas.
* **Configuraciones Incorrectas de CORS**: Investiga la configuración de CORS para potencial explotación a través de ataques CSRF desde sesiones autenticadas.
* **Descubrimiento de Puntos Finales**: Aprovecha los patrones de API para descubrir puntos finales ocultos. Herramientas como fuzzers pueden automatizar este proceso.
* **Manipulación de Parámetros**: Experimenta con agregar o reemplazar parámetros en solicitudes para acceder a datos o funcionalidades no autorizadas.
* **Pruebas de Métodos HTTP**: Varía los métodos de solicitud (GET, POST, PUT, DELETE, PATCH) para descubrir comportamientos inesperados o divulgaciones de información.
* **Manipulación de Content-Type**: Cambia entre diferentes tipos de contenido (x-www-form-urlencoded, application/xml, application/json) para probar problemas de análisis o vulnerabilidades.
* **Técnicas Avanzadas de Parámetros**: Prueba con tipos de datos inesperados en cargas útiles JSON o juega con datos XML para inyecciones XXE. También intenta la contaminación de parámetros y caracteres comodín para pruebas más amplias.
* **Técnicas Avanzadas de Parámetros**: Prueba con tipos de datos inesperados en cargas útiles JSON o juega con datos XML para inyecciones XXE. También, intenta la contaminación de parámetros y caracteres comodín para pruebas más amplias.
* **Pruebas de Versiones**: Las versiones más antiguas de API pueden ser más susceptibles a ataques. Siempre verifica y prueba contra múltiples versiones de API.
### **Herramientas y Recursos para Pentesting de API**
### **Herramientas y Recursos para el Pentesting de API**
* [**kiterunner**](https://github.com/assetnote/kiterunner): Excelente para descubrir puntos finales de API. Úsalo para escanear y forzar rutas y parámetros contra APIs objetivo.
```bash
@ -57,15 +57,16 @@ kr scan https://domain.com/api/ -A=apiroutes-220828 -x 20
kr brute https://domain.com/api/ -A=raft-large-words -x 20 -d=0
kr brute https://domain.com/api/ -w /tmp/lang-english.txt -x 20 -d=0
```
* Herramientas adicionales como **automatic-api-attack-tool**, **Astra** y **restler-fuzzer** ofrecen funcionalidades personalizadas para pruebas de seguridad de API, que van desde la simulación de ataques hasta el fuzzing y el escaneo de vulnerabilidades.
* [**https://github.com/BishopFox/sj**](https://github.com/BishopFox/sj): sj es una herramienta de línea de comandos diseñada para ayudar con la auditoría de **archivos de definición Swagger/OpenAPI expuestos** al verificar los puntos finales de la API asociados en busca de autenticación débil. También proporciona plantillas de comandos para pruebas manuales de vulnerabilidades.
* Herramientas adicionales como **automatic-api-attack-tool**, **Astra** y **restler-fuzzer** ofrecen funcionalidades personalizadas para pruebas de seguridad de API, que van desde simulación de ataques hasta fuzzing y escaneo de vulnerabilidades.
* [**Cherrybomb**](https://github.com/blst-security/cherrybomb): Es una herramienta de seguridad de API que audita tu API basada en un archivo OAS (la herramienta está escrita en rust).
### **Recursos de Aprendizaje y Práctica**
* **OWASP API Security Top 10**: Lectura esencial para entender las vulnerabilidades comunes de API ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf)).
* **API Security Checklist**: Una lista de verificación completa para asegurar APIs ([GitHub link](https://github.com/shieldfy/API-Security-Checklist)).
* **Logger++ Filters**: Para buscar vulnerabilidades en API, Logger++ ofrece filtros útiles ([GitHub link](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)).
* **API Endpoints List**: Una lista curada de posibles endpoints de API para fines de prueba ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)).
* **Logger++ Filters**: Para cazar vulnerabilidades de API, Logger++ ofrece filtros útiles ([GitHub link](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)).
* **API Endpoints List**: Una lista curada de posibles puntos finales de API para fines de prueba ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)).
## Referencias
@ -73,14 +74,14 @@ kr brute https://domain.com/api/ -w /tmp/lang-english.txt -x 20 -d=0
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
Usa [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=web-api-pentesting) para construir y **automatizar flujos de trabajo** fácilmente, impulsados por las **herramientas comunitarias más avanzadas** del mundo.\
Usa [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=web-api-pentesting) para construir y **automatizar flujos de trabajo** fácilmente impulsados por las **herramientas comunitarias más avanzadas** del mundo.\
Obtén acceso hoy:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=web-api-pentesting" %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Aprende y practica Hacking en AWS:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -88,7 +89,7 @@ Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" d
* Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
* **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos de github.
</details>
{% endhint %}

View file

@ -1,8 +1,8 @@
# CORS - Misconfiguraciones y Bypass
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -21,7 +21,7 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
## ¿Qué es CORS?
El intercambio de recursos de origen cruzado (CORS) estándar **permite a los servidores definir quién puede acceder a sus activos** y **qué métodos de solicitud HTTP están permitidos** desde fuentes externas.
Cross-Origin Resource Sharing (CORS) estándar **permite a los servidores definir quién puede acceder a sus activos** y **qué métodos de solicitud HTTP están permitidos** desde fuentes externas.
Una política de **mismo origen** exige que un **servidor que solicita** un recurso y el servidor que aloja el **recurso** compartan el mismo protocolo (por ejemplo, `http://`), nombre de dominio (por ejemplo, `internal-web.com`) y **puerto** (por ejemplo, 80). Bajo esta política, solo se permite el acceso a los recursos desde páginas web del mismo dominio y puerto.
@ -119,7 +119,7 @@ Tenga en cuenta que generalmente (dependiendo del tipo de contenido y los encabe
1. **`Access-Control-Request-Local-Network`**: Este encabezado se incluye en la solicitud del cliente para significar que la consulta está dirigida a un recurso de red local. Sirve como un marcador para informar al servidor que la solicitud se origina desde dentro de la red local.
2. **`Access-Control-Allow-Local-Network`**: En respuesta, los servidores utilizan este encabezado para comunicar que el recurso solicitado está permitido para ser compartido con entidades fuera de la red local. Actúa como una luz verde para compartir recursos a través de diferentes límites de red, asegurando un acceso controlado mientras se mantienen los protocolos de seguridad.
Una **respuesta válida que permite la solicitud de red local** también necesita tener en la respuesta el encabezado `Access-Controls-Allow-Local_network: true` :
Una **respuesta válida que permita la solicitud de red local** también necesita tener en la respuesta el encabezado `Access-Controls-Allow-Local_network: true` :
```
HTTP/1.1 200 OK
...
@ -136,11 +136,20 @@ Tenga en cuenta que la IP de linux **0.0.0.0** funciona para **bypassear** estos
También es posible **bypassear los requisitos de la red local** si utiliza la **dirección IP pública de un endpoint local** (como la IP pública del enrutador). Porque en varias ocasiones, incluso si se está accediendo a la **IP pública**, si es **desde la red local**, se otorgará acceso.
{% endhint %}
### Wildcards
Tenga en cuenta que incluso si la siguiente configuración puede parecer super permisiva:
```bash
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
```
Esto no es permitido por los navegadores y, por lo tanto, las credenciales no se enviarán con la solicitud permitida por esto.
## Configuraciones erróneas explotables
Se ha observado que la configuración de `Access-Control-Allow-Credentials` a **`true`** es un requisito previo para la mayoría de los **ataques reales**. Esta configuración permite que el navegador envíe credenciales y lea la respuesta, mejorando la efectividad del ataque. Sin esto, el beneficio de hacer que un navegador emita una solicitud en lugar de hacerlo uno mismo disminuye, ya que aprovechar las cookies de un usuario se vuelve inviable.
### Excepción: Explotar la ubicación de la red como autenticación
### Excepción: Explotar la Ubicación de la Red como Autenticación
Existe una excepción donde la ubicación de la red de la víctima actúa como una forma de autenticación. Esto permite que el navegador de la víctima se use como un proxy, eludiendo la autenticación basada en IP para acceder a aplicaciones de intranet. Este método comparte similitudes en impacto con el DNS rebinding, pero es más simple de explotar.
@ -211,8 +220,37 @@ if ($_SERVER['HTTP_HOST'] == '*.requester.com') {
// Unauthorized access
}
```
En esta configuración, todos los subdominios de `requester.com` tienen acceso permitido. Sin embargo, si un subdominio, digamos `sub.requester.com`, se ve comprometido con una vulnerabilidad XSS, un atacante puede aprovechar esta debilidad. Por ejemplo, un atacante con acceso a `sub.requester.com` podría explotar la vulnerabilidad XSS para eludir las políticas de CORS y acceder maliciosamente a recursos en `provider.com`.
En esta configuración, se permite el acceso a todos los subdominios de `requester.com`. Sin embargo, si un subdominio, digamos `sub.requester.com`, está comprometido con una vulnerabilidad XSS, un atacante puede aprovechar esta debilidad. Por ejemplo, un atacante con acceso a `sub.requester.com` podría explotar la vulnerabilidad XSS para eludir las políticas de CORS y acceder maliciosamente a recursos en `provider.com`.
### **Caracteres Especiales**
La [hoja de trucos para eludir la validación de URL](https://portswigger.net/research/introducing-the-url-validation-bypass-cheat-sheet) de PortSwigger encontró que algunos navegadores admiten caracteres extraños dentro de los nombres de dominio.
Chrome y Firefox admiten guiones bajos `_` que pueden eludir las expresiones regulares implementadas para validar el encabezado `Origin`:
```
GET / HTTP/2
Cookie: <session_cookie>
Origin: https://target.application_.arbitrary.com
```
```
HTTP/2 200 OK
Access-Control-Allow-Origin: https://target.application_.arbitrary.com
Access-Control-Allow-Credentials: true
```
Safari es aún más indulgente al aceptar caracteres especiales en el nombre de dominio:
```
GET / HTTP/2
Cookie: <session_cookie>
Origin: https://target.application}.arbitrary.com
```
```
HTTP/2 200 OK
Cookie: <session_cookie>
Access-Control-Allow-Origin: https://target.application}.arbitrary.com
Access-Control-Allow-Credentials: true
```
### **Envenenamiento de caché del lado del servidor**
[**De esta investigación**](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)
@ -240,11 +278,11 @@ Para más información sobre vulnerabilidades XSS almacenadas, consulte [PortSwi
[**De esta investigación**](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)
En este escenario, se observa una instancia de una página web que refleja el contenido de un encabezado HTTP personalizado sin la codificación adecuada. Específicamente, la página web refleja de vuelta el contenido incluido en un encabezado `X-User-id`, que podría incluir JavaScript malicioso, como se demuestra en el ejemplo donde el encabezado contiene una etiqueta de imagen SVG diseñada para ejecutar código JavaScript al cargar.
En este escenario, se observa una instancia de una página web que refleja el contenido de un encabezado HTTP personalizado sin la codificación adecuada. Específicamente, la página web refleja de vuelta el contenido incluido en un encabezado `X-User-id`, que podría incluir JavaScript malicioso, como se demuestra en el ejemplo donde el encabezado contiene una etiqueta de imagen SVG diseñada para ejecutar código JavaScript al cargarse.
Las políticas de Cross-Origin Resource Sharing (CORS) permiten el envío de encabezados personalizados. Sin embargo, sin que la respuesta sea renderizada directamente por el navegador debido a las restricciones de CORS, la utilidad de tal inyección podría parecer limitada. El punto crítico surge al considerar el comportamiento de la caché del navegador. Si el encabezado `Vary: Origin` no está especificado, se vuelve posible que la respuesta maliciosa sea almacenada en caché por el navegador. Posteriormente, esta respuesta en caché podría ser renderizada directamente al navegar a la URL, eludiendo la necesidad de renderizado directo en la solicitud inicial. Este mecanismo mejora la fiabilidad del ataque al aprovechar la caché del lado del cliente.
Para ilustrar este ataque, se proporciona un ejemplo de JavaScript, diseñado para ser ejecutado en el entorno de una página web, como a través de un JSFiddle. Este script realiza una acción simple: envía una solicitud a una URL especificada con un encabezado personalizado que contiene el JavaScript malicioso. Al completar con éxito la solicitud, intenta navegar a la URL objetivo, potencialmente desencadenando la ejecución del script inyectado si la respuesta ha sido almacenada en caché sin un manejo adecuado del encabezado `Vary: Origin`.
Para ilustrar este ataque, se proporciona un ejemplo de JavaScript, diseñado para ser ejecutado en el entorno de una página web, como a través de un JSFiddle. Este script realiza una acción simple: envía una solicitud a una URL especificada con un encabezado personalizado que contiene el JavaScript malicioso. Al completar la solicitud con éxito, intenta navegar a la URL objetivo, potencialmente activando la ejecución del script inyectado si la respuesta ha sido almacenada en caché sin un manejo adecuado del encabezado `Vary: Origin`.
Aquí hay un desglose resumido del JavaScript utilizado para ejecutar este ataque:
```html
@ -266,7 +304,7 @@ XSSI, también conocido como Cross-Site Script Inclusion, es un tipo de vulnerab
Esta vulnerabilidad se vuelve particularmente significativa cuando se trata de JavaScript dinámico o JSONP (JSON con Padding), especialmente cuando se utilizan información de autoridad ambiental como cookies para la autenticación. Al solicitar un recurso de un host diferente, las cookies se incluyen, haciéndolas accesibles para el atacante.
Para comprender mejor y mitigar esta vulnerabilidad, puedes usar el plugin de BurpSuite disponible en [https://github.com/kapytein/jsonp](https://github.com/kapytein/jsonp). Este plugin puede ayudar a identificar y abordar posibles vulnerabilidades XSSI en tus aplicaciones web.
Para comprender mejor y mitigar esta vulnerabilidad, puedes utilizar el plugin de BurpSuite disponible en [https://github.com/kapytein/jsonp](https://github.com/kapytein/jsonp). Este plugin puede ayudar a identificar y abordar posibles vulnerabilidades XSSI en tus aplicaciones web.
[**Lee más sobre los diferentes tipos de XSSI y cómo explotarlos aquí.**](xssi-cross-site-script-inclusion.md)
@ -279,7 +317,7 @@ Intenta agregar un **`callback`** **parameter** en la solicitud. Tal vez la pág
Una forma de eludir la restricción `Access-Control-Allow-Origin` es solicitando a una aplicación web que haga una solicitud en tu nombre y devuelva la respuesta. Sin embargo, en este escenario, las credenciales de la víctima final no se enviarán ya que la solicitud se realiza a un dominio diferente.
1. [**CORS-escape**](https://github.com/shalvah/cors-escape): Esta herramienta proporciona un proxy que reenvía tu solicitud junto con sus encabezados, mientras también falsifica el encabezado Origin para que coincida con el dominio solicitado. Esto elude efectivamente la política de CORS. Aquí hay un ejemplo de uso con XMLHttpRequest:
2. [**simple-cors-escape**](https://github.com/shalvah/simple-cors-escape): Esta herramienta ofrece un enfoque alternativo para proxying solicitudes. En lugar de pasar tu solicitud tal cual, el servidor hace su propia solicitud con los parámetros especificados.
2. [**simple-cors-escape**](https://github.com/shalvah/simple-cors-escape): Esta herramienta ofrece un enfoque alternativo para hacer proxy de solicitudes. En lugar de pasar tu solicitud tal cual, el servidor hace su propia solicitud con los parámetros especificados.
### Bypass de Iframe + Popup
@ -295,27 +333,27 @@ El rebinding DNS a través de TTL es una técnica utilizada para eludir ciertas
1. El atacante crea una página web y hace que la víctima acceda a ella.
2. El atacante luego cambia el DNS (IP) de su propio dominio para apuntar a la página web de la víctima.
3. El navegador de la víctima almacena en caché la respuesta DNS, que puede tener un valor TTL (Time to Live) que indica cuánto tiempo se debe considerar válido el registro DNS.
3. El navegador de la víctima almacena en caché la respuesta DNS, que puede tener un valor de TTL (Time to Live) que indica cuánto tiempo se debe considerar válido el registro DNS.
4. Cuando expira el TTL, el navegador de la víctima realiza una nueva solicitud DNS, lo que permite al atacante ejecutar código JavaScript en la página de la víctima.
5. Al mantener el control sobre la IP de la víctima, el atacante puede recopilar información de la víctima sin enviar ninguna cookie al servidor de la víctima.
Es importante notar que los navegadores tienen mecanismos de caché que pueden prevenir el abuso inmediato de esta técnica, incluso con valores TTL bajos.
Es importante notar que los navegadores tienen mecanismos de caché que pueden prevenir el abuso inmediato de esta técnica, incluso con valores de TTL bajos.
El rebinding DNS puede ser útil para eludir verificaciones de IP explícitas realizadas por la víctima o para escenarios donde un usuario o bot permanece en la misma página durante un período prolongado, permitiendo que la caché expire.
Si necesitas una forma rápida de abusar del rebinding DNS, puedes usar servicios como [https://lock.cmpxchg8b.com/rebinder.html](https://lock.cmpxchg8b.com/rebinder.html).
Para ejecutar tu propio servidor de rebinding DNS, puedes utilizar herramientas como **DNSrebinder** ([https://github.com/mogwailabs/DNSrebinder](https://github.com/mogwailabs/DNSrebinder)). Esto implica exponer tu puerto local 53/udp, crear un registro A que apunte a él (por ejemplo, ns.example.com), y crear un registro NS que apunte al subdominio A creado anteriormente (por ejemplo, ns.example.com). Cualquier subdominio del subdominio ns.example.com será resuelto por tu host.
Para ejecutar tu propio servidor de rebinding DNS, puedes utilizar herramientas como **DNSrebinder** ([https://github.com/mogwailabs/DNSrebinder](https://github.com/mogwailabs/DNSrebinder)). Esto implica exponer tu puerto local 53/udp, crear un registro A que apunte a él (por ejemplo, ns.example.com), y crear un registro NS que apunte al subdominio A creado previamente (por ejemplo, ns.example.com). Cualquier subdominio del subdominio ns.example.com será resuelto por tu host.
También puedes explorar un servidor en funcionamiento públicamente en [http://rebind.it/singularity.html](http://rebind.it/singularity.html) para una mejor comprensión y experimentación.
### Rebinding DNS a través de **DNS Cache Flooding**
El rebinding DNS a través de flooding de caché DNS es otra técnica utilizada para eludir el mecanismo de caché de los navegadores y forzar una segunda solicitud DNS. Así es como funciona:
El rebinding DNS a través de DNS cache flooding es otra técnica utilizada para eludir el mecanismo de caché de los navegadores y forzar una segunda solicitud DNS. Así es como funciona:
1. Inicialmente, cuando la víctima realiza una solicitud DNS, se responde con la dirección IP del atacante.
2. Para eludir la defensa de caché, el atacante aprovecha un service worker. El service worker inunda la caché DNS, lo que efectivamente elimina el nombre del servidor del atacante almacenado en caché.
3. Cuando el navegador de la víctima realiza una segunda solicitud DNS, ahora se responde con la dirección IP 127.0.0.1, que típicamente se refiere al localhost.
3. Cuando el navegador de la víctima realiza una segunda solicitud DNS, ahora se responde con la dirección IP 127.0.0.1, que normalmente se refiere al localhost.
Al inundar la caché DNS con el service worker, el atacante puede manipular el proceso de resolución DNS y forzar al navegador de la víctima a realizar una segunda solicitud, esta vez resolviendo a la dirección IP deseada por el atacante.
@ -325,7 +363,7 @@ Otra forma de eludir la defensa de caché es utilizando múltiples direcciones I
1. El atacante configura dos registros A (o un solo registro A con dos IPs) para el mismo subdominio en el proveedor de DNS.
2. Cuando un navegador verifica estos registros, recibe ambas direcciones IP.
3. Si el navegador decide usar primero la dirección IP del atacante, el atacante puede servir una carga útil que realiza solicitudes HTTP al mismo dominio.
3. Si el navegador decide usar primero la dirección IP del atacante, el atacante puede servir una carga útil que realice solicitudes HTTP al mismo dominio.
4. Sin embargo, una vez que el atacante obtiene la dirección IP de la víctima, deja de responder al navegador de la víctima.
5. El navegador de la víctima, al darse cuenta de que el dominio no responde, pasa a usar la segunda dirección IP dada.
6. Al acceder a la segunda dirección IP, el navegador elude la Política de Mismo Origen (SOP), permitiendo al atacante abusar de esto y recopilar y exfiltrar información.
@ -343,8 +381,8 @@ Para más información puedes consultar [https://unit42.paloaltonetworks.com/dns
### Otros Bypasses Comunes
* Si **no se permiten IPs internas**, podrían **olvidar prohibir 0.0.0.0** (funciona en Linux y Mac)
* Si **no se permiten IPs internas**, responder con un **CNAME** a **localhost** (funciona en Linux y Mac)
* Si **no se permiten IPs internas**, podrían **haber olvidado prohibir 0.0.0.0** (funciona en Linux y Mac)
* Si **no se permiten IPs internas**, responde con un **CNAME** a **localhost** (funciona en Linux y Mac)
* Si **no se permiten IPs internas** como respuestas DNS, puedes responder **CNAMEs a servicios internos** como www.corporate.internal.
### Rebinding DNS Arma
@ -355,10 +393,10 @@ Puedes encontrar más información sobre las técnicas de bypass anteriores y c
### Protección Real contra el Rebinding DNS
* Usar TLS en servicios internos
* Solicitar autenticación para acceder a datos
* Validar el encabezado Host
* [https://wicg.github.io/private-network-access/](https://wicg.github.io/private-network-access/): Propuesta para siempre enviar una solicitud previa cuando los servidores públicos quieren acceder a servidores internos
* Usa TLS en servicios internos
* Solicita autenticación para acceder a datos
* Valida el encabezado Host
* [https://wicg.github.io/private-network-access/](https://wicg.github.io/private-network-access/): Propuesta para siempre enviar una solicitud previa cuando los servidores públicos quieran acceder a servidores internos
## **Herramientas**
@ -388,8 +426,8 @@ Puedes encontrar más información sobre las técnicas de bypass anteriores y c
{% embed url="https://websec.nl/" %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Aprende y practica Hacking en AWS:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>

View file

@ -1,16 +1,16 @@
# OAuth a Toma de Control de Cuenta
# OAuth a la toma de control de cuentas
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Apoya a HackTricks</summary>
<summary>Support HackTricks</summary>
* Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos de github.
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
@ -21,25 +21,25 @@ Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" d
## Información Básica <a href="#d4a8" id="d4a8"></a>
OAuth ofrece varias versiones, con información fundamental accesible en [documentación de OAuth 2.0](https://oauth.net/2/). Esta discusión se centra principalmente en el ampliamente utilizado [tipo de concesión de código de autorización de OAuth 2.0](https://oauth.net/2/grant-types/authorization-code/), proporcionando un **marco de autorización que permite a una aplicación acceder o realizar acciones en la cuenta de un usuario en otra aplicación** (el servidor de autorización).
OAuth ofrece varias versiones, con información fundamental accesible en [OAuth 2.0 documentation](https://oauth.net/2/). Esta discusión se centra principalmente en el ampliamente utilizado [OAuth 2.0 authorization code grant type](https://oauth.net/2/grant-types/authorization-code/), proporcionando un **marco de autorización que permite a una aplicación acceder o realizar acciones en la cuenta de un usuario en otra aplicación** (el servidor de autorización).
Considera un sitio web hipotético _**https://example.com**_, diseñado para **mostrar todas tus publicaciones en redes sociales**, incluidas las privadas. Para lograr esto, se emplea OAuth 2.0. _https://example.com_ solicitará tu permiso para **acceder a tus publicaciones en redes sociales**. En consecuencia, aparecerá una pantalla de consentimiento en _https://socialmedia.com_, describiendo los **permisos solicitados y el desarrollador que realiza la solicitud**. Tras tu autorización, _https://example.com_ obtiene la capacidad de **acceder a tus publicaciones en tu nombre**.
Es esencial comprender los siguientes componentes dentro del marco de OAuth 2.0:
* **propietario del recurso**: Tú, como el **usuario/entidad**, autorizas el acceso a tu recurso, como las publicaciones de tu cuenta de redes sociales.
* **servidor de recursos**: El **servidor que gestiona las solicitudes autenticadas** después de que la aplicación ha asegurado un `access token` en nombre del `propietario del recurso`, por ejemplo, **https://socialmedia.com**.
* **aplicación cliente**: La **aplicación que busca autorización** del `propietario del recurso`, como **https://example.com**.
* **servidor de autorización**: El **servidor que emite `access tokens`** a la `aplicación cliente` tras la autenticación exitosa del `propietario del recurso` y la obtención de autorización, por ejemplo, **https://socialmedia.com**.
* **resource owner**: Tú, como el **usuario/entidad**, autorizas el acceso a tu recurso, como las publicaciones de tu cuenta de redes sociales.
* **resource server**: El **servidor que gestiona las solicitudes autenticadas** después de que la aplicación ha asegurado un `access token` en nombre del `resource owner`, por ejemplo, **https://socialmedia.com**.
* **client application**: La **aplicación que busca autorización** del `resource owner`, como **https://example.com**.
* **authorization server**: El **servidor que emite `access tokens`** a la `client application` tras la autenticación exitosa del `resource owner` y la obtención de autorización, por ejemplo, **https://socialmedia.com**.
* **client\_id**: Un identificador público y único para la aplicación.
* **client\_secret:** Una clave confidencial, conocida únicamente por la aplicación y el servidor de autorización, utilizada para generar `access_tokens`.
* **response\_type**: Un valor que especifica **el tipo de token solicitado**, como `code`.
* **scope**: El **nivel de acceso** que la `aplicación cliente` está solicitando del `propietario del recurso`.
* **scope**: El **nivel de acceso** que la `client application` está solicitando del `resource owner`.
* **redirect\_uri**: La **URL a la que el usuario es redirigido después de la autorización**. Esto generalmente debe alinearse con la URL de redirección pre-registrada.
* **state**: Un parámetro para **mantener datos a través de la redirección del usuario hacia y desde el servidor de autorización**. Su singularidad es crítica para servir como un **mecanismo de protección CSRF**.
* **grant\_type**: Un parámetro que indica **el tipo de concesión y el tipo de token que se devolverá**.
* **code**: El código de autorización del `servidor de autorización`, utilizado junto con `client_id` y `client_secret` por la aplicación cliente para adquirir un `access_token`.
* **access\_token**: El **token que la aplicación cliente utiliza para solicitudes API** en nombre del `propietario del recurso`.
* **code**: El código de autorización del `authorization server`, utilizado junto con `client_id` y `client_secret` por la `client application` para adquirir un `access_token`.
* **access\_token**: El **token que la `client application` utiliza para solicitudes API** en nombre del `resource owner`.
* **refresh\_token**: Permite a la aplicación **obtener un nuevo `access_token` sin volver a solicitar al usuario**.
### Flujo
@ -61,7 +61,7 @@ https://socialmedia.com/auth
```
https://example.com?code=uniqueCode123&state=randomString123
```
5. https://example.com utiliza este `code`, junto con su `client_id` y `client_secret`, para hacer una solicitud del lado del servidor para obtener un `access_token` en tu nombre, lo que permite el acceso a los permisos a los que diste tu consentimiento:
5. https://example.com utiliza este `code`, junto con su `client_id` y `client_secret`, para hacer una solicitud del lado del servidor para obtener un `access_token` en su nombre, lo que permite el acceso a los permisos a los que usted consintió:
```
POST /oauth/access_token
Host: socialmedia.com
@ -77,9 +77,9 @@ El `redirect_uri` es crucial para la seguridad en las implementaciones de OAuth
Las técnicas de explotación varían según la lógica de validación del servidor de autorización. Pueden ir desde una coincidencia estricta de rutas hasta aceptar cualquier URL dentro del dominio o subdirectorio especificado. Los métodos de explotación comunes incluyen redirecciones abiertas, recorrido de rutas, explotación de expresiones regulares débiles e inyección de HTML para el robo de tokens.
Además de `redirect_uri`, otros parámetros de OAuth y OpenID como `client_uri`, `policy_uri`, `tos_uri` y `initiate_login_uri` también son susceptibles a ataques de redirección. Estos parámetros son opcionales y su soporte varía entre servidores.
Además de `redirect_uri`, otros parámetros de OAuth y OpenID como `client_uri`, `policy_uri`, `tos_uri` e `initiate_login_uri` también son susceptibles a ataques de redirección. Estos parámetros son opcionales y su soporte varía entre servidores.
Para aquellos que apuntan a un servidor OpenID, el punto final de descubrimiento (`**.well-known/openid-configuration**`) a menudo lista detalles de configuración valiosos como `registration_endpoint`, `request_uri_parameter_supported` y "`require_request_uri_registration`. Estos detalles pueden ayudar a identificar el punto final de registro y otros aspectos específicos de configuración del servidor.
Para aquellos que apuntan a un servidor OpenID, el punto final de descubrimiento (`**.well-known/openid-configuration**`) a menudo lista detalles de configuración valiosos como `registration_endpoint`, `request_uri_parameter_supported` y "`require_request_uri_registration`. Estos detalles pueden ayudar a identificar el punto final de registro y otras especificaciones de configuración del servidor.
### XSS en la implementación de redirección <a href="#bda5" id="bda5"></a>
@ -93,9 +93,9 @@ En las implementaciones de OAuth, el uso indebido u omisión del **`state` param
Los atacantes pueden explotar esto interceptando el proceso de autorización para vincular su cuenta con la cuenta de una víctima, lo que lleva a posibles **tomas de control de cuentas**. Esto es especialmente crítico en aplicaciones donde se utiliza OAuth para **fines de autenticación**.
Se han documentado ejemplos del mundo real de esta vulnerabilidad en varios **desafíos CTF** y **plataformas de hacking**, destacando sus implicaciones prácticas. El problema también se extiende a integraciones con servicios de terceros como **Slack**, **Stripe** y **PayPal**, donde los atacantes pueden redirigir notificaciones o pagos a sus cuentas.
Se han documentado ejemplos del mundo real de esta vulnerabilidad en varios **CTF challenges** y **hacking platforms**, destacando sus implicaciones prácticas. El problema también se extiende a integraciones con servicios de terceros como **Slack**, **Stripe** y **PayPal**, donde los atacantes pueden redirigir notificaciones o pagos a sus cuentas.
El manejo y validación adecuados del **`state` parameter** son cruciales para protegerse contra CSRF y asegurar el flujo de OAuth.
El manejo y la validación adecuados del **`state` parameter** son cruciales para protegerse contra CSRF y asegurar el flujo de OAuth.
### Pre Toma de Control de Cuenta <a href="#ebe4" id="ebe4"></a>
@ -106,7 +106,7 @@ El manejo y validación adecuados del **`state` parameter** son cruciales para p
Identificar y proteger los parámetros secretos de OAuth es crucial. Mientras que el **`client_id`** puede ser divulgado de manera segura, revelar el **`client_secret`** presenta riesgos significativos. Si el `client_secret` se ve comprometido, los atacantes pueden explotar la identidad y confianza de la aplicación para **robar `access_tokens` de usuarios** e información privada.
Una vulnerabilidad común surge cuando las aplicaciones manejan erróneamente el intercambio del `code` de autorización por un `access_token` del lado del cliente en lugar del lado del servidor. Este error lleva a la exposición del `client_secret`, permitiendo a los atacantes generar `access_tokens` bajo la apariencia de la aplicación. Además, a través de ingeniería social, los atacantes podrían escalar privilegios al agregar alcances adicionales a la autorización de OAuth, explotando aún más el estatus de confianza de la aplicación.
Una vulnerabilidad común surge cuando las aplicaciones manejan erróneamente el intercambio del `code` de autorización por un `access_token` del lado del cliente en lugar del lado del servidor. Este error lleva a la exposición del `client_secret`, permitiendo a los atacantes generar `access_tokens` bajo la apariencia de la aplicación. Además, a través de ingeniería social, los atacantes podrían escalar privilegios al agregar ámbitos adicionales a la autorización de OAuth, explotando aún más el estatus de confianza de la aplicación.
### Fuerza Bruta del Secreto del Cliente
@ -123,7 +123,7 @@ code=77515&redirect_uri=http%3A%2F%2F10.10.10.10%3A3000%2Fcallback&grant_type=au
```
### Referer Header leaking Code + State
Una vez que el cliente tiene el **code y state**, si está **reflejado dentro del Referer header** cuando navega a una página diferente, entonces es vulnerable.
Una vez que el cliente tiene el **código y el estado**, si está **reflejado dentro del encabezado Referer** cuando navega a una página diferente, entonces es vulnerable.
### Access Token Stored in Browser History
@ -131,15 +131,15 @@ Ve al **historial del navegador y verifica si el access token está guardado all
### Everlasting Authorization Code
El **authorization code debería vivir solo por un tiempo para limitar la ventana de tiempo en la que un atacante puede robarlo y usarlo**.
El **código de autorización debería vivir solo por un tiempo para limitar la ventana de tiempo en la que un atacante puede robarlo y usarlo**.
### Authorization/Refresh Token not bound to client
Si puedes obtener el **authorization code y usarlo con un cliente diferente, entonces puedes tomar el control de otras cuentas**.
Si puedes obtener el **código de autorización y usarlo con un cliente diferente, entonces puedes tomar el control de otras cuentas**.
### Happy Paths, XSS, Iframes & Post Messages to leak code & state values
[**Check this post**](https://labs.detectify.com/writeups/account-hijacking-using-dirty-dancing-in-sign-in-oauth-flows/#gadget-2-xss-on-sandbox-third-party-domain-that-gets-the-url)
[**Revisa esta publicación**](https://labs.detectify.com/writeups/account-hijacking-using-dirty-dancing-in-sign-in-oauth-flows/#gadget-2-xss-on-sandbox-third-party-domain-that-gets-the-url)
### AWS Cognito <a href="#bda5" id="bda5"></a>
@ -171,7 +171,7 @@ Como [**se menciona en este informe**](https://salt.security/blog/oh-auth-abusin
Esto se debe a que un **atacante** podría crear una **aplicación que soporte OAuth y login con Facebook** (por ejemplo) en su propia aplicación. Luego, una vez que una víctima inicie sesión con Facebook en la **aplicación del atacante**, el atacante podría obtener el **token OAuth del usuario otorgado a su aplicación y usarlo para iniciar sesión en la aplicación OAuth de la víctima usando el token de usuario de la víctima**.
{% hint style="danger" %}
Por lo tanto, si el atacante logra que el usuario acceda a su propia aplicación OAuth, podrá tomar el control de la cuenta de la víctima en aplicaciones que esperan un token y no están verificando si el token fue otorgado a su ID de aplicación.
Por lo tanto, si el atacante logra que el usuario acceda a su propia aplicación OAuth, podrá tomar el control de la cuenta de la víctima en aplicaciones que esperan un token y no verifican si el token fue otorgado a su ID de aplicación.
{% endhint %}
### Dos enlaces y cookie <a href="#bda5" id="bda5"></a>
@ -182,7 +182,7 @@ Para eludir este prompt, era posible abrir una pestaña para iniciar el **flujo
### Bypass de Interacción del Prompt <a href="#bda5" id="bda5"></a>
Como se explica en [**este video**](https://www.youtube.com/watch?v=n9x7\_J\_a\_7Q), algunas implementaciones de OAuth permiten indicar el parámetro **`prompt`** GET como None (**`&prompt=none`**) para **evitar que se pida a los usuarios que confirmen** el acceso otorgado en un prompt en la web si ya están conectados a la plataforma.
Como se explica en [**este video**](https://www.youtube.com/watch?v=n9x7\_J\_a\_7Q), algunas implementaciones de OAuth permiten indicar el parámetro **`prompt`** GET como None (**`&prompt=none`**) para **evitar que se le pida a los usuarios confirmar** el acceso otorgado en un prompt en la web si ya están conectados a la plataforma.
### response\_mode
@ -193,6 +193,10 @@ Como [**se explica en este video**](https://www.youtube.com/watch?v=n9x7\_J\_a\_
* `response_mode=form_post` -> El código se proporciona dentro de un formulario POST con un input llamado `code` y el valor
* `response_mode=web_message` -> El código se envía en un mensaje post: `window.opener.postMessage({"code": "asdasdasd...`
### Flujo OAuth ROPC - bypass de 2 FA <a href="#b440" id="b440"></a>
Según [**esta publicación de blog**](https://cybxis.medium.com/a-bypass-on-gitlabs-login-email-verification-via-oauth-ropc-flow-e194242cad96), este es un flujo de OAuth que permite iniciar sesión en OAuth a través de **nombre de usuario** y **contraseña**. Si durante este flujo simple se devuelve un **token** con acceso a todas las acciones que el usuario puede realizar, entonces es posible eludir 2FA usando ese token.
### Parámetros SSRFs <a href="#bda5" id="bda5"></a>
[**Consulta esta investigación**](https://portswigger.net/research/hidden-oauth-attack-vectors) **Para más detalles sobre esta técnica.**
@ -212,7 +216,7 @@ El Registro Dinámico de Clientes en OAuth sirve como un vector menos obvio pero
**Estrategia de Explotación:**
* SSRF puede ser desencadenado registrando un nuevo cliente con URLs maliciosas en parámetros como `logo_uri`, `jwks_uri`, o `sector_identifier_uri`.
* Si bien la explotación directa a través de `request_uris` puede ser mitigada por controles de lista blanca, proporcionar un `request_uri` pre-registrado y controlado por el atacante puede facilitar SSRF durante la fase de autorización.
* Si bien la explotación directa a través de `request_uris` puede ser mitigada por controles de lista blanca, proporcionar un `request_uri` pre-registrado y controlado por un atacante puede facilitar SSRF durante la fase de autorización.
## Condiciones de Carrera de Proveedores OAuth
@ -228,8 +232,8 @@ Si la plataforma que estás probando es un proveedor de OAuth [**lee esto para p
{% embed url="https://websec.nl/" %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Aprende y practica Hacking en AWS:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>