mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-24 21:53:54 +00:00
Translated ['pentesting-web/parameter-pollution.md'] to rs
This commit is contained in:
parent
7fd5fdb8cd
commit
ae1b9f623b
2 changed files with 112 additions and 27 deletions
|
@ -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)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Parameter Pollution
|
||||
# Parameter Pollution | JSON Injection
|
||||
|
||||
## Parameter Pollution
|
||||
|
||||
|
@ -23,7 +23,7 @@ Learn & practice GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data
|
|||
|
||||
## HTTP Parameter Pollution (HPP) Overview
|
||||
|
||||
HTTP Parameter Pollution (HPP) je tehnika u kojoj napadači manipulišu HTTP parametrima kako bi promenili ponašanje web aplikacije na nepredviđene načine. Ova manipulacija se vrši dodavanjem, modifikovanjem ili dupliciranjem HTTP parametara. Efekat ovih manipulacija nije direktno vidljiv korisniku, ali može značajno promeniti funkcionalnost aplikacije na serverskoj strani, sa uočljivim uticajima na klijentskoj strani.
|
||||
HTTP Parameter Pollution (HPP) je tehnika gde napadači manipulišu HTTP parametrima kako bi promenili ponašanje web aplikacije na nepredviđene načine. Ova manipulacija se vrši dodavanjem, modifikovanjem ili dupliciranjem HTTP parametara. Efekat ovih manipulacija nije direktno vidljiv korisniku, ali može značajno promeniti funkcionalnost aplikacije na serverskoj strani, sa uočljivim uticajima na klijentskoj strani.
|
||||
|
||||
### Example of HTTP Parameter Pollution (HPP)
|
||||
|
||||
|
@ -39,7 +39,7 @@ Transakcija može biti pogrešno naplaćena na `accountC` umesto na `accountA`,
|
|||
|
||||
#### **Technology-Specific Parameter Parsing**
|
||||
|
||||
* Način na koji se parametri analiziraju i prioritizuju zavisi od osnovne web tehnologije, što utiče na to kako se HPP može iskoristiti.
|
||||
* Način na koji se parametri analiziraju i prioritetizuju zavisi od osnovne web tehnologije, što utiče na to kako se HPP može iskoristiti.
|
||||
* Alati poput [Wappalyzer](https://addons.mozilla.org/en-US/firefox/addon/wappalyzer/) pomažu u identifikaciji ovih tehnologija i njihovih ponašanja prilikom analize.
|
||||
|
||||
### PHP and HPP Exploitation
|
||||
|
@ -48,7 +48,7 @@ Transakcija može biti pogrešno naplaćena na `accountC` umesto na `accountA`,
|
|||
|
||||
* **Context:** Mehanizam prijavljivanja koji zahteva jednokratnu lozinku (OTP) je iskorišćen.
|
||||
* **Method:** Presretanjem zahteva za OTP koristeći alate poput Burp Suite, napadači su duplicirali `email` parametar u HTTP zahtevu.
|
||||
* **Outcome:** OTP, namenjen za prvobitni email, umesto toga je poslat na drugu email adresu navedenu u manipulisanom zahtevu. Ova greška je omogućila neovlašćen pristup zaobilaženjem predviđene sigurnosne mere.
|
||||
* **Outcome:** OTP, namenjen za inicijalnu email adresu, umesto toga je poslat na drugu email adresu navedenu u manipulisanom zahtevu. Ova greška je omogućila neovlašćen pristup zaobilaženjem predviđene sigurnosne mere.
|
||||
|
||||
Ovaj scenario ističe kritičan propust u backend-u aplikacije, koji je obradio prvi `email` parametar za generisanje OTP-a, ali je koristio poslednji za isporuku.
|
||||
|
||||
|
@ -56,8 +56,8 @@ Ovaj scenario ističe kritičan propust u backend-u aplikacije, koji je obradio
|
|||
|
||||
* **Scenario:** Aplikacija omogućava korisnicima da ažuriraju svoj API ključ putem stranice za podešavanje profila.
|
||||
* **Attack Vector:** Napadač otkriva da dodavanjem dodatnog `api_key` parametra u POST zahtev može manipulisati ishodom funkcije ažuriranja API ključa.
|
||||
* **Technique:** Koristeći alat poput Burp Suite, napadač kreira zahtev koji uključuje dva `api_key` parametra: jedan legitimni i jedan zlonameran. Server, obrađujući samo poslednji slučaj, ažurira API ključ na vrednost koju je naveo napadač.
|
||||
* **Result:** Napadač dobija kontrolu nad funkcionalnošću API-ja žrtve, potencijalno pristupajući ili modifikujući privatne podatke bez odobrenja.
|
||||
* **Technique:** Koristeći alat poput Burp Suite, napadač kreira zahtev koji uključuje dva `api_key` parametra: jedan legitimni i jedan maliciozni. Server, obrađujući samo poslednju pojavu, ažurira API ključ na vrednost koju je naveo napadač.
|
||||
* **Result:** Napadač dobija kontrolu nad funkcionalnošću API-ja žrtve, potencijalno pristupajući ili modifikujući privatne podatke neovlašćeno.
|
||||
|
||||
Ovaj primer dodatno naglašava potrebu za sigurnim rukovanjem parametrima, posebno u funkcijama koje su kritične kao što je upravljanje API ključem.
|
||||
|
||||
|
@ -65,8 +65,8 @@ Ovaj primer dodatno naglašava potrebu za sigurnim rukovanjem parametrima, poseb
|
|||
|
||||
Način na koji web tehnologije obrađuju duple HTTP parametre varira, utičući na njihovu podložnost HPP napadima:
|
||||
|
||||
* **Flask:** Usvaja prvu vrednost parametra koja se susreće, kao što je `a=1` u upitu `a=1&a=2`, prioritizujući inicijalni primerak nad kasnijim duplikatima.
|
||||
* **PHP (na Apache HTTP Server-u):** Nasuprot tome, prioritizuje poslednju vrednost parametra, birajući `a=2` u datom primeru. Ovo ponašanje može nenamerno olakšati HPP eksploate tako što poštuje manipulisan parametar napadača umesto originalnog.
|
||||
* **Flask:** Usvaja prvu vrednost parametra koja se susreće, kao što je `a=1` u upitu `a=1&a=2`, prioritetizujući inicijalnu instancu nad kasnijim duplikatima.
|
||||
* **PHP (na Apache HTTP Server-u):** Nasuprot tome, prioritetizuje poslednju vrednost parametra, birajući `a=2` u datom primeru. Ovo ponašanje može nenamerno olakšati HPP eksploate tako što poštuje manipulisan parametar napadača umesto originalnog.
|
||||
|
||||
## Parameter pollution by technology
|
||||
|
||||
|
@ -76,10 +76,10 @@ There results were taken from [https://medium.com/@0xAwali/http-parameter-pollut
|
|||
|
||||
<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. Ignorišite sve nakon %00 u imenu parametra.
|
||||
2. Rukujte name\[] kao niz.
|
||||
1. Ignoriši sve nakon %00 u imenu parametra.
|
||||
2. Rukuj sa name\[] kao nizom.
|
||||
3. \_GET ne znači GET metodu.
|
||||
4. Preferirajte poslednji parametar.
|
||||
4. Preferiraj poslednji parametar.
|
||||
|
||||
### Ruby 3.3.5 and WEBrick 1.8.2
|
||||
|
||||
|
@ -87,7 +87,7 @@ There results were taken from [https://medium.com/@0xAwali/http-parameter-pollut
|
|||
|
||||
1. Koristi & i ; delimitere za razdvajanje parametara.
|
||||
2. Ne prepoznaje name\[].
|
||||
3. Preferirajte prvi parametar.
|
||||
3. Preferiraj prvi parametar.
|
||||
|
||||
### Spring MVC 6.0.23 AND Apache Tomcat 10.1.30 <a href="#dd68" id="dd68"></a>
|
||||
|
||||
|
@ -95,8 +95,8 @@ There results were taken from [https://medium.com/@0xAwali/http-parameter-pollut
|
|||
|
||||
1. POST RequestMapping == PostMapping & GET RequestMapping == GetMapping.
|
||||
2. POST RequestMapping & PostMapping prepoznaju name[].
|
||||
3. Preferirajte name ako name i name[] postoje.
|
||||
4. Konkatenirajte parametre npr. first,last.
|
||||
3. Preferiraj name ako name i name[] postoje.
|
||||
4. Konkateniraj parametre npr. first,last.
|
||||
5. POST RequestMapping & PostMapping prepoznaju upitni parametar sa Content-Type.
|
||||
|
||||
### **NodeJS** 20.17.0 **AND** Express 4.21.0 <a href="#id-6d72" id="id-6d72"></a>
|
||||
|
@ -104,57 +104,142 @@ There results were taken from [https://medium.com/@0xAwali/http-parameter-pollut
|
|||
<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. Prepoznaje name[].
|
||||
2. Konkatenirajte parametre npr. first,last.
|
||||
2. Konkateniraj parametre npr. first,last.
|
||||
|
||||
### 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>
|
||||
|
||||
1. NE prepoznaje name[].
|
||||
2. Preferirajte prvi parametar.
|
||||
2. Preferiraj prvi parametar.
|
||||
|
||||
### 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. NE prepoznaje name[].
|
||||
2. Preferirajte prvi parametar.
|
||||
2. Preferiraj prvi parametar.
|
||||
|
||||
### 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. NE prepoznaje name[].
|
||||
2. Preferirajte poslednji parametar.
|
||||
2. Preferiraj poslednji parametar.
|
||||
|
||||
### 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. NE prepoznaje name[].
|
||||
2. Preferirajte poslednji parametar.
|
||||
2. Preferiraj poslednji parametar.
|
||||
|
||||
## References
|
||||
## JSON Injection
|
||||
|
||||
### Duplicate keys
|
||||
```ini
|
||||
obj = {"test": "user", "test": "admin"}
|
||||
```
|
||||
Frontend može verovati prvoj pojavi, dok backend koristi drugu pojavu ključa.
|
||||
|
||||
### Sudar ključeva: Skraćivanje karaktera i komentari
|
||||
|
||||
Određeni karakteri neće biti ispravno interpretirani od strane frontenda, ali backend će ih interpretirati i koristiti te ključeve, što može biti korisno za **obići određena ograničenja**:
|
||||
```json
|
||||
{"test": 1, "test\[raw \x0d byte]": 2}
|
||||
{"test": 1, "test\ud800": 2}
|
||||
{"test": 1, "test"": 2}
|
||||
{"test": 1, "te\st": 2}
|
||||
```
|
||||
Napomena kako u ovim slučajevima frontend može misliti da je `test == 1`, dok backend može misliti da je `test == 2`.
|
||||
|
||||
Ovo se takođe može koristiti za zaobilaženje ograničenja vrednosti kao što su:
|
||||
```json
|
||||
{"role": "administrator\[raw \x0d byte]"}
|
||||
{"role":"administrator\ud800"}
|
||||
{"role": "administrator""}
|
||||
{"role": "admini\strator"}
|
||||
```
|
||||
### **Korišćenje skraćivanja komentara**
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```ini
|
||||
obj = {"description": "Duplicate with comments", "test": 2, "extra": /*, "test": 1, "extra2": */}
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
Ovde ćemo koristiti serializer iz svakog parsera da bismo videli njegov odgovarajući izlaz.
|
||||
|
||||
Serializer 1 (npr., GoLangova GoJay biblioteka) će proizvesti:
|
||||
|
||||
* `description = "Duplikat sa komentarima"`
|
||||
* `test = 2`
|
||||
* `extra = ""`
|
||||
|
||||
Serializer 2 (npr., Java-ova JSON-iterator biblioteka) će proizvesti:
|
||||
|
||||
* `description = "Duplikat sa komentarima"`
|
||||
* `extra = "/*"`
|
||||
* `extra2 = "*/"`
|
||||
* `test = 1`
|
||||
|
||||
Alternativno, jednostavna upotreba komentara može takođe biti efikasna:
|
||||
```ini
|
||||
obj = {"description": "Comment support", "test": 1, "extra": "a"/*, "test": 2, "extra2": "b"*/}
|
||||
```
|
||||
Java-ova GSON biblioteka:
|
||||
```json
|
||||
{"description":"Comment support","test":1,"extra":"a"}
|
||||
```
|
||||
Rubyjeva simdjson biblioteka:
|
||||
```json
|
||||
{"description":"Comment support","test":2,"extra":"a","extra2":"b"}
|
||||
```
|
||||
### **Nepodudarnost Prioriteta: Deserijalizacija naspram Serijalizacije**
|
||||
```ini
|
||||
obj = {"test": 1, "test": 2}
|
||||
|
||||
obj["test"] // 1
|
||||
obj.toString() // {"test": 2}
|
||||
```
|
||||
### Float and Integer
|
||||
|
||||
Broj
|
||||
```undefined
|
||||
999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
|
||||
```
|
||||
može se dekodirati u više reprezentacija, uključujući:
|
||||
```undefined
|
||||
999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
|
||||
9.999999999999999e95
|
||||
1E+96
|
||||
0
|
||||
9223372036854775807
|
||||
```
|
||||
Koje bi mogle stvoriti nesuglasice
|
||||
|
||||
## Reference
|
||||
|
||||
* [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" %}
|
||||
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)
|
||||
Učite i vežbajte 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">\
|
||||
Učite i vežbajte 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>Support HackTricks</summary>
|
||||
<summary>Podržite HackTricks</summary>
|
||||
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
|
||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podelite hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
Loading…
Reference in a new issue