diff --git a/SUMMARY.md b/SUMMARY.md index 60279767a..0103b2fa9 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -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) diff --git a/pentesting-web/parameter-pollution.md b/pentesting-web/parameter-pollution.md index 041ad0a76..7d3d6d988 100644 --- a/pentesting-web/parameter-pollution.md +++ b/pentesting-web/parameter-pollution.md @@ -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:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Aprende y practica Hacking en GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
-Apoya a HackTricks +Support HackTricks -* 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.
{% endhint %} @@ -21,75 +21,75 @@ Aprende y practica Hacking en GCP: +### PHP 8.3.11 AND Apache 2.4.62

https://miro.medium.com/v2/resize:fit:1100/format:webp/1*l_Pf2JNCYhmfAvfk7UTEbQ.jpeg

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

https://miro.medium.com/v2/resize:fit:1100/format:webp/1*kKxtZ8qEmgTIMS81py5hhg.jpeg

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 +### Spring MVC 6.0.23 AND Apache Tomcat 10.1.30

https://miro.medium.com/v2/resize:fit:1100/format:webp/1*llG22MF1gPTYZYFVCmCiVw.jpeg

@@ -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 +### **NodeJS** 20.17.0 **AND** Express 4.21.0

https://miro.medium.com/v2/resize:fit:1100/format:webp/1*JzNkLOSW7orcHXswtMHGMA.jpeg

@@ -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 +### Python 3.12.6 AND Werkzeug 3.0.4 AND Flask 3.0.3

https://miro.medium.com/v2/resize:fit:1100/format:webp/1*Se5467PFFjIlmT3O7KNlWQ.jpeg

1. NO reconoce name[]. 2. Preferir el primer parámetro. -### Python 3.12.6 Y Django 4.2.15 +### Python 3.12.6 AND Django 4.2.15

https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rf38VXut5YhAx0ZhUzgT8Q.jpeg

1. NO reconoce name[]. 2. Preferir el último parámetro. -### Python 3.12.6 Y Tornado 6.4.1 +### Python 3.12.6 AND Tornado 6.4.1

https://miro.medium.com/v2/resize:fit:1100/format:webp/1*obCn7xahDc296JZccXM2qQ.jpeg

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)
{% embed url="https://websec.nl/" %} {% hint style="success" %} -Aprende y practica Hacking en AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Aprende y practica Hacking en GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
-Apoya a HackTricks +Support HackTricks -* 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.
{% endhint %}