mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-21 20:23:18 +00:00
Translated ['pentesting-web/parameter-pollution.md'] to af
This commit is contained in:
parent
58667929f4
commit
c7a2dd0158
2 changed files with 104 additions and 19 deletions
|
@ -604,7 +604,7 @@
|
||||||
* [OAuth to Account takeover](pentesting-web/oauth-to-account-takeover.md)
|
* [OAuth to Account takeover](pentesting-web/oauth-to-account-takeover.md)
|
||||||
* [Open Redirect](pentesting-web/open-redirect.md)
|
* [Open Redirect](pentesting-web/open-redirect.md)
|
||||||
* [ORM Injection](pentesting-web/orm-injection.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)
|
* [Phone Number Injections](pentesting-web/phone-number-injections.md)
|
||||||
* [PostMessage Vulnerabilities](pentesting-web/postmessage-vulnerabilities/README.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)
|
* [Blocking main page to steal postmessage](pentesting-web/postmessage-vulnerabilities/blocking-main-page-to-steal-postmessage.md)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Parameter Pollution
|
# Parameter Pollution | JSON Injection
|
||||||
|
|
||||||
## Parameter Pollution
|
## Parameter Pollution
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@ Deur 'n addisionele `from` parameter in te voeg:
|
||||||
|
|
||||||
* **Gemanipeerde URL:** `https://www.victim.com/send/?from=accountA&to=accountB&amount=10000&from=accountC`
|
* **Gemanipeerde URL:** `https://www.victim.com/send/?from=accountA&to=accountB&amount=10000&from=accountC`
|
||||||
|
|
||||||
Die transaksie mag verkeerdelik aan `accountC` in plaas van `accountA` gehef word, wat die potensiaal van HPP om transaksies of ander funksies soos wagwoordherstel, 2FA instellings, of API sleutel versoeke te manipuleer, toon.
|
Die transaksie mag verkeerdelik aan `accountC` in plaas van `accountA` gehef word, wat die potensiaal van HPP om transaksies of ander funksies soos wagwoordherstel, 2FA instellings, of API sleutel versoeke te manipuleer, demonstreer.
|
||||||
|
|
||||||
#### **Tegnologie-Spesifieke Parameter Parsing**
|
#### **Tegnologie-Spesifieke Parameter Parsing**
|
||||||
|
|
||||||
|
@ -46,9 +46,9 @@ Die transaksie mag verkeerdelik aan `accountC` in plaas van `accountA` gehef wor
|
||||||
|
|
||||||
**OTP Manipulasie Geval:**
|
**OTP Manipulasie Geval:**
|
||||||
|
|
||||||
* **Konteks:** 'n Inlogmeganisme wat 'n Eenmalige Wagwoord (OTP) vereis, is uitgebuit.
|
* **Konteks:** 'n Aanmeldmeganisme wat 'n Eenmalige Wagwoord (OTP) vereis, is uitgebuit.
|
||||||
* **Metode:** Deur die OTP versoek te onderskep met behulp van gereedskap soos Burp Suite, het aanvallers die `email` parameter in die HTTP versoek gedupliceer.
|
* **Metode:** Deur die OTP versoek te onderskep met behulp van gereedskap soos Burp Suite, het aanvallers die `email` parameter in die HTTP versoek gedupliceer.
|
||||||
* **Uitslag:** Die OTP, bedoel vir die oorspronklike e-pos, is in plaas daarvan na die tweede e-posadres in die gemanipeerde versoek gestuur. Hierdie fout het ongeoorloofde toegang moontlik gemaak deur die beoogde sekuriteitsmaatreël te omseil.
|
* **Uitslag:** Die OTP, bedoel vir die aanvanklike e-pos, is in plaas daarvan na die tweede e-posadres in die gemanipeerde versoek gestuur. Hierdie fout het ongeoorloofde toegang moontlik gemaak deur die beoogde sekuriteitsmaatreël te omseil.
|
||||||
|
|
||||||
Hierdie scenario beklemtoon 'n kritieke oorsig in die toepassing se agterkant, wat die eerste `email` parameter vir OTP generasie verwerk het, maar die laaste vir aflewering gebruik het.
|
Hierdie scenario beklemtoon 'n kritieke oorsig in die toepassing se agterkant, wat die eerste `email` parameter vir OTP generasie verwerk het, maar die laaste vir aflewering gebruik het.
|
||||||
|
|
||||||
|
@ -65,8 +65,8 @@ Hierdie voorbeeld beklemtoon verder die noodsaaklikheid van veilige parameter ha
|
||||||
|
|
||||||
Die manier waarop webtegnologieë duplikaat HTTP parameters hanteer, verskil, wat hul vatbaarheid vir HPP aanvalle beïnvloed:
|
Die manier waarop webtegnologieë duplikaat HTTP parameters hanteer, verskil, wat hul vatbaarheid vir HPP aanvalle beïnvloed:
|
||||||
|
|
||||||
* **Flask:** Neem die eerste parameter waarde wat teëgekom word, soos `a=1` in 'n query string `a=1&a=2`, en prioritiseer die aanvanklike instansie bo daaropvolgende duplikate.
|
* **Flask:** Neem die eerste parameter waarde wat teëgekom word, soos `a=1` in 'n query string `a=1&a=2`, en prioritiseer die aanvanklike voorkoms bo daaropvolgende duplikate.
|
||||||
* **PHP (op Apache HTTP Server):** Daarenteen prioritiseer die laaste parameter waarde, en kies vir `a=2` in die gegewe voorbeeld. Hierdie gedrag kan onbedoeld HPP exploits fasiliteer deur die aanvaller se gemanipeerde parameter bo die oorspronklike te eerbiedig.
|
* **PHP (op Apache HTTP Server):** Daarenteen prioritiseer die laaste parameter waarde, en kies `a=2` in die gegewe voorbeeld. Hierdie gedrag kan onbedoeld HPP eksploitatie fasiliteer deur die aanvaller se gemanipeerde parameter bo die oorspronklike te eerbiedig.
|
||||||
|
|
||||||
## Parameter besmetting volgens tegnologie
|
## Parameter besmetting volgens tegnologie
|
||||||
|
|
||||||
|
@ -94,51 +94,136 @@ Daar resultate is geneem van [https://medium.com/@0xAwali/http-parameter-polluti
|
||||||
<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>
|
<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>
|
||||||
|
|
||||||
1. POST RequestMapping == PostMapping & GET RequestMapping == GetMapping.
|
1. POST RequestMapping == PostMapping & GET RequestMapping == GetMapping.
|
||||||
2. POST RequestMapping & PostMapping Erken naam\[].
|
2. POST RequestMapping & PostMapping erken naam\[].
|
||||||
3. Gee voorkeur aan naam as naam EN naam\[] bestaan.
|
3. Gee voorkeur aan naam as naam EN naam\[] bestaan.
|
||||||
4. Koppel parameters bv. eerste, laaste.
|
4. Koppel parameters byvoorbeeld eerste, laaste.
|
||||||
5. POST RequestMapping & PostMapping Erken query parameter met Content-Type.
|
5. POST RequestMapping & PostMapping erken query parameter met Content-Type.
|
||||||
|
|
||||||
### **NodeJS** 20.17.0 **EN** Express 4.21.0 <a href="#id-6d72" id="id-6d72"></a>
|
### **NodeJS** 20.17.0 **EN** 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>
|
<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>
|
||||||
|
|
||||||
1. Erken naam\[].
|
1. Erken naam\[].
|
||||||
2. Koppel parameters bv. eerste, laaste.
|
2. Koppel parameters byvoorbeeld eerste, laaste.
|
||||||
|
|
||||||
### GO 1.22.7 <a href="#id-63dc" id="id-63dc"></a>
|
### GO 1.22.7 <a href="#id-63dc" id="id-63dc"></a>
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1260).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*NVvN1N8sL4g_Gi796FzlZA.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*NVvN1N8sL4g_Gi796FzlZA.jpeg</a></p></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (1260).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*NVvN1N8sL4g_Gi796FzlZA.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*NVvN1N8sL4g_Gi796FzlZA.jpeg</a></p></figcaption></figure>
|
||||||
|
|
||||||
1. NIE Erken naam\[].
|
1. NIE erkende naam\[].
|
||||||
2. Gee voorkeur aan die eerste parameter.
|
2. Gee voorkeur aan die eerste parameter.
|
||||||
|
|
||||||
### Python 3.12.6 EN Werkzeug 3.0.4 EN Flask 3.0.3 <a href="#b853" id="b853"></a>
|
### Python 3.12.6 EN Werkzeug 3.0.4 EN 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>
|
<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. NIE Erken naam\[].
|
1. NIE erkende naam\[].
|
||||||
2. Gee voorkeur aan die eerste parameter.
|
2. Gee voorkeur aan die eerste parameter.
|
||||||
|
|
||||||
### Python 3.12.6 EN Django 4.2.15 <a href="#id-8079" id="id-8079"></a>
|
### Python 3.12.6 EN 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>
|
<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. NIE Erken naam\[].
|
1. NIE erkende naam\[].
|
||||||
2. Gee voorkeur aan die laaste parameter.
|
2. Gee voorkeur aan die laaste parameter.
|
||||||
|
|
||||||
### Python 3.12.6 EN Tornado 6.4.1 <a href="#id-2ad8" id="id-2ad8"></a>
|
### Python 3.12.6 EN 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>
|
<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. NIE Erken naam\[].
|
1. NIE erkende naam\[].
|
||||||
2. Gee voorkeur aan die laaste parameter.
|
2. Gee voorkeur aan die laaste parameter.
|
||||||
|
|
||||||
## Verwysings
|
## JSON Injection
|
||||||
|
|
||||||
|
### Duplikaat sleutels
|
||||||
|
```ini
|
||||||
|
obj = {"test": "user", "test": "admin"}
|
||||||
|
```
|
||||||
|
Die front-end mag die eerste voorkoms glo terwyl die backend die tweede voorkoms van die sleutel gebruik.
|
||||||
|
|
||||||
|
### Sleutelbotsing: Karakterafkap en Kommentaar
|
||||||
|
|
||||||
|
Sekere karakters gaan nie korrek deur die frontend geïnterpreteer word nie, maar die backend sal hulle interpreteer en daardie sleutels gebruik, dit kan nuttig wees om **sekere beperkings te omseil**:
|
||||||
|
```json
|
||||||
|
{"test": 1, "test\[raw \x0d byte]": 2}
|
||||||
|
{"test": 1, "test\ud800": 2}
|
||||||
|
{"test": 1, "test"": 2}
|
||||||
|
{"test": 1, "te\st": 2}
|
||||||
|
```
|
||||||
|
Let op hoe die voorkant in hierdie gevalle mag dink dat `test == 1` en die agterkant sal dink dat `test == 2`.
|
||||||
|
|
||||||
|
Dit kan ook gebruik word om waarde beperkings te omseil soos:
|
||||||
|
```json
|
||||||
|
{"role": "administrator\[raw \x0d byte]"}
|
||||||
|
{"role":"administrator\ud800"}
|
||||||
|
{"role": "administrator""}
|
||||||
|
{"role": "admini\strator"}
|
||||||
|
```
|
||||||
|
### **Gebruik van Kommentaar Truncasie**
|
||||||
|
|
||||||
|
{% code overflow="wrap" %}
|
||||||
|
```ini
|
||||||
|
obj = {"description": "Duplicate with comments", "test": 2, "extra": /*, "test": 1, "extra2": */}
|
||||||
|
```
|
||||||
|
{% endcode %}
|
||||||
|
|
||||||
|
Hier sal ons die serialiseerder van elke parser gebruik om sy onderskeie uitvoer te sien.
|
||||||
|
|
||||||
|
Serialiseerder 1 (bv. GoLang se GoJay biblioteek) sal produseer:
|
||||||
|
|
||||||
|
* `description = "Duplicate with comments"`
|
||||||
|
* `test = 2`
|
||||||
|
* `extra = ""`
|
||||||
|
|
||||||
|
Serialiseerder 2 (bv. Java se JSON-iterator biblioteek) sal produseer:
|
||||||
|
|
||||||
|
* `description = "Duplicate with comments"`
|
||||||
|
* `extra = "/*"`
|
||||||
|
* `extra2 = "*/"`
|
||||||
|
* `test = 1`
|
||||||
|
|
||||||
|
Alternatiewelik kan eenvoudige gebruik van kommentaar ook effektief wees:
|
||||||
|
```ini
|
||||||
|
obj = {"description": "Comment support", "test": 1, "extra": "a"/*, "test": 2, "extra2": "b"*/}
|
||||||
|
```
|
||||||
|
Java se GSON-biblioteek:
|
||||||
|
```json
|
||||||
|
{"description":"Comment support","test":1,"extra":"a"}
|
||||||
|
```
|
||||||
|
Ruby se simdjson biblioteek:
|
||||||
|
```json
|
||||||
|
{"description":"Comment support","test":2,"extra":"a","extra2":"b"}
|
||||||
|
```
|
||||||
|
### **Inkonsekwente Prioriteit: Deserialisering vs. Serialisering**
|
||||||
|
```ini
|
||||||
|
obj = {"test": 1, "test": 2}
|
||||||
|
|
||||||
|
obj["test"] // 1
|
||||||
|
obj.toString() // {"test": 2}
|
||||||
|
```
|
||||||
|
### Float en Heelgetal
|
||||||
|
|
||||||
|
Die nommer
|
||||||
|
```undefined
|
||||||
|
999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
|
||||||
|
```
|
||||||
|
kan gedecodeer word na verskeie verteenwoordigings, insluitend:
|
||||||
|
```undefined
|
||||||
|
999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
|
||||||
|
9.999999999999999e95
|
||||||
|
1E+96
|
||||||
|
0
|
||||||
|
9223372036854775807
|
||||||
|
```
|
||||||
|
Which might create inconsistencies
|
||||||
|
|
||||||
|
## References
|
||||||
|
|
||||||
* [https://medium.com/@shahjerry33/http-parameter-pollution-its-contaminated-85edc0805654](https://medium.com/@shahjerry33/http-parameter-pollution-its-contaminated-85edc0805654)
|
* [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://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://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>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
@ -152,9 +237,9 @@ Leer & oefen GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-siz
|
||||||
|
|
||||||
<summary>Support HackTricks</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
* Kyk na die [**subskripsie planne**](https://github.com/sponsors/carlospolop)!
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||||
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **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)**.**
|
||||||
* **Deel hacking truuks deur PRs in te dien na die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
* **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>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
Loading…
Reference in a new issue