Translated ['pentesting-web/parameter-pollution.md'] to es

This commit is contained in:
Translator 2024-11-12 12:23:24 +00:00
parent 0dc64ba188
commit 3664303912
2 changed files with 133 additions and 48 deletions

View file

@ -604,7 +604,7 @@
* [OAuth to Account takeover](pentesting-web/oauth-to-account-takeover.md)
* [Open Redirect](pentesting-web/open-redirect.md)
* [ORM Injection](pentesting-web/orm-injection.md)
* [Parameter Pollution](pentesting-web/parameter-pollution.md)
* [Parameter Pollution | JSON Injection](pentesting-web/parameter-pollution.md)
* [Phone Number Injections](pentesting-web/phone-number-injections.md)
* [PostMessage Vulnerabilities](pentesting-web/postmessage-vulnerabilities/README.md)
* [Blocking main page to steal postmessage](pentesting-web/postmessage-vulnerabilities/blocking-main-page-to-steal-postmessage.md)

View file

@ -1,18 +1,18 @@
# Contaminación de Parámetros
# Parameter Pollution | JSON Injection
## Contaminación de Parámetros
## Parameter Pollution
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Apoya a HackTricks</summary>
<summary>Support HackTricks</summary>
* Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
@ -21,75 +21,75 @@ Aprende y practica Hacking en GCP: <img src="../.gitbook/assets/grte.png" alt=""
{% embed url="https://websec.nl/" %}
## Visión General de la Contaminación de Parámetros HTTP (HPP)
## HTTP Parameter Pollution (HPP) Overview
La Contaminación de Parámetros HTTP (HPP) es una técnica donde los atacantes manipulan parámetros HTTP para cambiar el comportamiento de una aplicación web de maneras no intencionadas. Esta manipulación se realiza añadiendo, modificando o duplicando parámetros HTTP. El efecto de estas manipulaciones no es directamente visible para el usuario, pero puede alterar significativamente la funcionalidad de la aplicación en el lado del servidor, con impactos observables en el lado del cliente.
HTTP Parameter Pollution (HPP) es una técnica donde los atacantes manipulan parámetros HTTP para cambiar el comportamiento de una aplicación web de maneras no intencionadas. Esta manipulación se realiza añadiendo, modificando o duplicando parámetros HTTP. El efecto de estas manipulaciones no es directamente visible para el usuario, pero puede alterar significativamente la funcionalidad de la aplicación en el lado del servidor, con impactos observables en el lado del cliente.
### Ejemplo de Contaminación de Parámetros HTTP (HPP)
### Example of HTTP Parameter Pollution (HPP)
Una URL de transacción de una aplicación bancaria:
* **URL Original:** `https://www.victim.com/send/?from=accountA&to=accountB&amount=10000`
* **Original URL:** `https://www.victim.com/send/?from=accountA&to=accountB&amount=10000`
Al insertar un parámetro `from` adicional:
* **URL Manipulada:** `https://www.victim.com/send/?from=accountA&to=accountB&amount=10000&from=accountC`
* **Manipulated URL:** `https://www.victim.com/send/?from=accountA&to=accountB&amount=10000&from=accountC`
La transacción puede ser incorrectamente cargada a `accountC` en lugar de `accountA`, mostrando el potencial de HPP para manipular transacciones u otras funcionalidades como restablecimientos de contraseña, configuraciones de 2FA o solicitudes de claves API.
#### **Análisis de Parámetros Específico de Tecnología**
#### **Technology-Specific Parameter Parsing**
* La forma en que se analizan y priorizan los parámetros depende de la tecnología web subyacente, afectando cómo se puede explotar HPP.
* Herramientas como [Wappalyzer](https://addons.mozilla.org/en-US/firefox/addon/wappalyzer/) ayudan a identificar estas tecnologías y sus comportamientos de análisis.
### Explotación de HPP en PHP
### PHP and HPP Exploitation
**Caso de Manipulación de OTP:**
**OTP Manipulation Case:**
* **Contexto:** Se explotó un mecanismo de inicio de sesión que requería una Contraseña de Un Solo Uso (OTP).
* **Método:** Al interceptar la solicitud de OTP utilizando herramientas como Burp Suite, los atacantes duplicaron el parámetro `email` en la solicitud HTTP.
* **Resultado:** El OTP, destinado al correo electrónico inicial, fue enviado en su lugar a la segunda dirección de correo electrónico especificada en la solicitud manipulada. Este fallo permitió el acceso no autorizado al eludir la medida de seguridad prevista.
* **Context:** Se explotó un mecanismo de inicio de sesión que requería una Contraseña de Un Solo Uso (OTP).
* **Method:** Al interceptar la solicitud de OTP utilizando herramientas como Burp Suite, los atacantes duplicaron el parámetro `email` en la solicitud HTTP.
* **Outcome:** El OTP, destinado al correo electrónico inicial, fue enviado en su lugar a la segunda dirección de correo electrónico especificada en la solicitud manipulada. Este defecto permitió el acceso no autorizado al eludir la medida de seguridad prevista.
Este escenario destaca una omisión crítica en el backend de la aplicación, que procesó el primer parámetro `email` para la generación de OTP, pero utilizó el último para la entrega.
Este escenario destaca una falla crítica en el backend de la aplicación, que procesó el primer parámetro `email` para la generación de OTP, pero utilizó el último para la entrega.
**Caso de Manipulación de Clave API:**
**API Key Manipulation Case:**
* **Escenario:** Una aplicación permite a los usuarios actualizar su clave API a través de una página de configuración de perfil.
* **Vector de Ataque:** Un atacante descubre que al añadir un parámetro `api_key` adicional a la solicitud POST, puede manipular el resultado de la función de actualización de la clave API.
* **Técnica:** Utilizando una herramienta como Burp Suite, el atacante elabora una solicitud que incluye dos parámetros `api_key`: uno legítimo y uno malicioso. El servidor, procesando solo la última ocurrencia, actualiza la clave API al valor proporcionado por el atacante.
* **Resultado:** El atacante obtiene control sobre la funcionalidad API de la víctima, potencialmente accediendo o modificando datos privados sin autorización.
* **Scenario:** Una aplicación permite a los usuarios actualizar su clave API a través de una página de configuración de perfil.
* **Attack Vector:** Un atacante descubre que al añadir un parámetro `api_key` adicional a la solicitud POST, puede manipular el resultado de la función de actualización de la clave API.
* **Technique:** Utilizando una herramienta como Burp Suite, el atacante elabora una solicitud que incluye dos parámetros `api_key`: uno legítimo y uno malicioso. El servidor, procesando solo la última ocurrencia, actualiza la clave API al valor proporcionado por el atacante.
* **Result:** El atacante obtiene control sobre la funcionalidad API de la víctima, potencialmente accediendo o modificando datos privados sin autorización.
Este ejemplo subraya aún más la necesidad de un manejo seguro de parámetros, especialmente en funciones tan críticas como la gestión de claves API.
Este ejemplo subraya aún más la necesidad de un manejo seguro de parámetros, especialmente en características tan críticas como la gestión de claves API.
### Análisis de Parámetros: Flask vs. PHP
### Parameter Parsing: Flask vs. PHP
La forma en que las tecnologías web manejan parámetros HTTP duplicados varía, afectando su susceptibilidad a ataques HPP:
* **Flask:** Adopta el primer valor de parámetro encontrado, como `a=1` en una cadena de consulta `a=1&a=2`, priorizando la instancia inicial sobre duplicados posteriores.
* **PHP (en Apache HTTP Server):** Por el contrario, prioriza el último valor de parámetro, optando por `a=2` en el ejemplo dado. Este comportamiento puede facilitar inadvertidamente los exploits de HPP al honrar el parámetro manipulado por el atacante sobre el original.
* **Flask:** Adopta el primer valor de parámetro encontrado, como `a=1` en una cadena de consulta `a=1&a=2`, priorizando la instancia inicial sobre los duplicados posteriores.
* **PHP (en Apache HTTP Server):** Por el contrario, prioriza el último valor de parámetro, optando por `a=2` en el ejemplo dado. Este comportamiento puede facilitar inadvertidamente los exploits HPP al honrar el parámetro manipulado del atacante sobre el original.
## Contaminación de parámetros por tecnología
## Parameter pollution by technology
Los resultados fueron tomados de [https://medium.com/@0xAwali/http-parameter-pollution-in-2024-32ec1b810f89](https://medium.com/@0xAwali/http-parameter-pollution-in-2024-32ec1b810f89)
There results were taken from [https://medium.com/@0xAwali/http-parameter-pollution-in-2024-32ec1b810f89](https://medium.com/@0xAwali/http-parameter-pollution-in-2024-32ec1b810f89)
### PHP 8.3.11 Y Apache 2.4.62 <a href="#id-9523" id="id-9523"></a>
### PHP 8.3.11 AND Apache 2.4.62 <a href="#id-9523" id="id-9523"></a>
<figure><img src="../.gitbook/assets/image (1255).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*l_Pf2JNCYhmfAvfk7UTEbQ.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*l_Pf2JNCYhmfAvfk7UTEbQ.jpeg</a></p></figcaption></figure>
1. Ignorar cualquier cosa después de %00 en el nombre del parámetro.
2. Manejar name\[] como un array.
2. Manejar name\[] como array.
3. \_GET no significa método GET.
4. Preferir el último parámetro.
### Ruby 3.3.5 y WEBrick 1.8.2
### Ruby 3.3.5 and WEBrick 1.8.2
<figure><img src="../.gitbook/assets/image (1257).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*kKxtZ8qEmgTIMS81py5hhg.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*kKxtZ8qEmgTIMS81py5hhg.jpeg</a></p></figcaption></figure>
1. Utiliza los delimitadores & y ; para dividir parámetros.
2. No reconoce name[].
3. Prefiere el primer parámetro.
3. Preferir el primer parámetro.
### Spring MVC 6.0.23 Y Apache Tomcat 10.1.30 <a href="#dd68" id="dd68"></a>
### Spring MVC 6.0.23 AND Apache Tomcat 10.1.30 <a href="#dd68" id="dd68"></a>
<figure><img src="../.gitbook/assets/image (1258).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*llG22MF1gPTYZYFVCmCiVw.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*llG22MF1gPTYZYFVCmCiVw.jpeg</a></p></figcaption></figure>
@ -99,7 +99,7 @@ Los resultados fueron tomados de [https://medium.com/@0xAwali/http-parameter-pol
4. Concatenar parámetros e.g. first,last.
5. POST RequestMapping & PostMapping reconocen parámetros de consulta con Content-Type.
### **NodeJS** 20.17.0 **Y** Express 4.21.0 <a href="#id-6d72" id="id-6d72"></a>
### **NodeJS** 20.17.0 **AND** Express 4.21.0 <a href="#id-6d72" id="id-6d72"></a>
<figure><img src="../.gitbook/assets/image (1259).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*JzNkLOSW7orcHXswtMHGMA.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*JzNkLOSW7orcHXswtMHGMA.jpeg</a></p></figcaption></figure>
@ -113,48 +113,133 @@ Los resultados fueron tomados de [https://medium.com/@0xAwali/http-parameter-pol
1. NO reconoce name[].
2. Preferir el primer parámetro.
### Python 3.12.6 Y Werkzeug 3.0.4 Y Flask 3.0.3 <a href="#b853" id="b853"></a>
### Python 3.12.6 AND Werkzeug 3.0.4 AND Flask 3.0.3 <a href="#b853" id="b853"></a>
<figure><img src="../.gitbook/assets/image (1261).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*Se5467PFFjIlmT3O7KNlWQ.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*Se5467PFFjIlmT3O7KNlWQ.jpeg</a></p></figcaption></figure>
1. NO reconoce name[].
2. Preferir el primer parámetro.
### Python 3.12.6 Y Django 4.2.15 <a href="#id-8079" id="id-8079"></a>
### Python 3.12.6 AND Django 4.2.15 <a href="#id-8079" id="id-8079"></a>
<figure><img src="../.gitbook/assets/image (1262).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rf38VXut5YhAx0ZhUzgT8Q.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rf38VXut5YhAx0ZhUzgT8Q.jpeg</a></p></figcaption></figure>
1. NO reconoce name[].
2. Preferir el último parámetro.
### Python 3.12.6 Y Tornado 6.4.1 <a href="#id-2ad8" id="id-2ad8"></a>
### Python 3.12.6 AND Tornado 6.4.1 <a href="#id-2ad8" id="id-2ad8"></a>
<figure><img src="../.gitbook/assets/image (1263).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*obCn7xahDc296JZccXM2qQ.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*obCn7xahDc296JZccXM2qQ.jpeg</a></p></figcaption></figure>
1. NO reconoce name[].
2. Preferir el último parámetro.
## Referencias
## JSON Injection
### Duplicate keys
```ini
obj = {"test": "user", "test": "admin"}
```
El front-end podría creer la primera ocurrencia mientras que el backend utiliza la segunda ocurrencia de la clave.
### Colisión de Claves: Truncamiento de Caracteres y Comentarios
Ciertos caracteres no serán interpretados correctamente por el front-end, pero el backend los interpretará y utilizará esas claves, esto podría ser útil para **eludir ciertas restricciones**:
```json
{"test": 1, "test\[raw \x0d byte]": 2}
{"test": 1, "test\ud800": 2}
{"test": 1, "test"": 2}
{"test": 1, "te\st": 2}
```
Nota cómo en estos casos el front end podría pensar que `test == 1` y el backend pensará que `test == 2`.
Esto también se puede usar para eludir restricciones de valor como:
```json
{"role": "administrator\[raw \x0d byte]"}
{"role":"administrator\ud800"}
{"role": "administrator""}
{"role": "admini\strator"}
```
### **Uso de la Truncación de Comentarios**
{% code overflow="wrap" %}
```ini
obj = {"description": "Duplicate with comments", "test": 2, "extra": /*, "test": 1, "extra2": */}
```
{% endcode %}
Aquí utilizaremos el serializador de cada analizador para ver su respectiva salida.
Serializer 1 (por ejemplo, la biblioteca GoJay de GoLang) producirá:
* `description = "Duplicado con comentarios"`
* `test = 2`
* `extra = ""`
Serializer 2 (por ejemplo, la biblioteca JSON-iterator de Java) producirá:
* `description = "Duplicado con comentarios"`
* `extra = "/*"`
* `extra2 = "*/"`
* `test = 1`
Alternativamente, el uso directo de comentarios también puede ser efectivo:
```ini
obj = {"description": "Comment support", "test": 1, "extra": "a"/*, "test": 2, "extra2": "b"*/}
```
La biblioteca GSON de Java:
```json
{"description":"Comment support","test":1,"extra":"a"}
```
La biblioteca simdjson de Ruby:
```json
{"description":"Comment support","test":2,"extra":"a","extra2":"b"}
```
### **Precedencia Inconsistente: Deserialización vs. Serialización**
```ini
obj = {"test": 1, "test": 2}
obj["test"] // 1
obj.toString() // {"test": 2}
```
### Float and Integer
El número
```undefined
999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
```
puede ser decodificado a múltiples representaciones, incluyendo:
```undefined
999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
9.999999999999999e95
1E+96
0
9223372036854775807
```
Which might create inconsistencias
## References
* [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)
* [https://medium.com/@0xAwali/http-parameter-pollution-in-2024-32ec1b810f89](https://medium.com/@0xAwali/http-parameter-pollution-in-2024-32ec1b810f89)
* [https://bishopfox.com/blog/json-interoperability-vulnerabilities](https://bishopfox.com/blog/json-interoperability-vulnerabilities)
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Apoya a HackTricks</summary>
<summary>Support HackTricks</summary>
* Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}