mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-28 07:31:10 +00:00
Translated ['pentesting-web/parameter-pollution.md'] to tr
This commit is contained in:
parent
5a931b2209
commit
fa4ccd1389
2 changed files with 113 additions and 28 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,17 +1,17 @@
|
|||
# Parameter Pollution
|
||||
# Parameter Pollution | JSON Injection
|
||||
|
||||
## Parameter Pollution
|
||||
|
||||
{% hint style="success" %}
|
||||
AWS Hacking öğrenin ve pratik yapın:<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">\
|
||||
GCP Hacking öğrenin ve pratik yapın: <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)
|
||||
AWS Hacking'i öğrenin ve pratik yapın:<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">\
|
||||
GCP Hacking'i öğrenin ve pratik yapın: <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>HackTricks'i Destekleyin</summary>
|
||||
|
||||
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
|
||||
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter**'da **bizi takip edin** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Bize katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya **bizi** **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
|
||||
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
|
||||
|
||||
</details>
|
||||
|
@ -35,7 +35,7 @@ Ek bir `from` parametresi ekleyerek:
|
|||
|
||||
* **Manipüle Edilmiş URL:** `https://www.victim.com/send/?from=accountA&to=accountB&amount=10000&from=accountC`
|
||||
|
||||
İşlem, `accountA` yerine yanlışlıkla `accountC`'ye tahsil edilebilir ve bu, HPP'nin işlemleri veya şifre sıfırlama, 2FA ayarları veya API anahtarı talepleri gibi diğer işlevleri manipüle etme potansiyelini göstermektedir.
|
||||
İşlem, `accountA` yerine yanlışlıkla `accountC`'ye tahsil edilebilir ve bu durum HPP'nin işlemleri veya şifre sıfırlama, 2FA ayarları veya API anahtarı talepleri gibi diğer işlevleri manipüle etme potansiyelini göstermektedir.
|
||||
|
||||
#### **Teknolojiye Özgü Parametre Ayrıştırma**
|
||||
|
||||
|
@ -44,29 +44,29 @@ Ek bir `from` parametresi ekleyerek:
|
|||
|
||||
### PHP ve HPP İstismarı
|
||||
|
||||
**OTP Manipülasyonu Durumu:**
|
||||
**OTP Manipülasyon Durumu:**
|
||||
|
||||
* **Bağlam:** Tek Seferlik Şifre (OTP) gerektiren bir giriş mekanizması istismar edildi.
|
||||
* **Yöntem:** Burp Suite gibi araçlar kullanarak OTP talebini kesen saldırganlar, HTTP isteğindeki `email` parametresini çoğalttı.
|
||||
* **Sonuç:** İlk e-posta için tasarlanan OTP, manipüle edilmiş istekte belirtilen ikinci e-posta adresine gönderildi. Bu hata, amaçlanan güvenlik önlemini aşarak yetkisiz erişime izin verdi.
|
||||
|
||||
Bu senaryo, uygulamanın arka ucundaki kritik bir gözden geçirmeyi vurgular; ilk `email` parametresi OTP üretimi için işlenirken, teslimat için sonuncusu kullanılmıştır.
|
||||
Bu senaryo, OTP üretimi için ilk `email` parametresini işleyen ancak teslimat için sonuncusunu kullanan uygulamanın arka ucundaki kritik bir gözden geçirmeyi vurgulamaktadır.
|
||||
|
||||
**API Anahtarı Manipülasyonu Durumu:**
|
||||
**API Anahtarı Manipülasyon Durumu:**
|
||||
|
||||
* **Senaryo:** Bir uygulama, kullanıcıların profil ayarları sayfası aracılığıyla API anahtarlarını güncellemelerine izin verir.
|
||||
* **Saldırı Vektörü:** Bir saldırgan, POST isteğine ek bir `api_key` parametresi ekleyerek API anahtarı güncelleme işlevinin sonucunu manipüle edebileceğini keşfeder.
|
||||
* **Teknik:** Burp Suite gibi bir araç kullanarak, saldırgan bir geçerli ve bir kötü niyetli `api_key` parametresi içeren bir istek hazırlar. Sunucu, yalnızca sonuncusunu işleyerek, API anahtarını saldırganın sağladığı değere günceller.
|
||||
* **Senaryo:** Bir uygulama, kullanıcıların profil ayarları sayfası aracılığıyla API anahtarlarını güncellemelerine izin veriyor.
|
||||
* **Saldırı Vektörü:** Bir saldırgan, POST isteğine ek bir `api_key` parametresi ekleyerek API anahtarı güncelleme işlevinin sonucunu manipüle edebileceğini keşfetti.
|
||||
* **Teknik:** Burp Suite gibi bir araç kullanarak, saldırgan bir geçerli ve bir kötü niyetli olmak üzere iki `api_key` parametresi içeren bir istek oluşturur. Sunucu, yalnızca sonuncusunu işleyerek, API anahtarını saldırganın sağladığı değere günceller.
|
||||
* **Sonuç:** Saldırgan, mağdurun API işlevselliği üzerinde kontrol kazanır ve muhtemelen özel verilere yetkisiz erişim veya değişiklik yapabilir.
|
||||
|
||||
Bu örnek, özellikle API anahtarı yönetimi gibi kritik özelliklerde güvenli parametre işlemenin gerekliliğini daha da vurgular.
|
||||
Bu örnek, özellikle API anahtarı yönetimi gibi kritik özelliklerde güvenli parametre işlemenin gerekliliğini daha da vurgulamaktadır.
|
||||
|
||||
### Parametre Ayrıştırma: Flask vs. PHP
|
||||
|
||||
Web teknolojilerinin yinelenen HTTP parametrelerini ele alma şekli, HPP saldırılarına karşı duyarlılıklarını etkiler:
|
||||
Web teknolojilerinin çoğaltılmış HTTP parametrelerini ele alma şekli, HPP saldırılarına karşı duyarlılıklarını etkiler:
|
||||
|
||||
* **Flask:** Bir sorgu dizesinde `a=1&a=2` gibi karşılaştığı ilk parametre değerini benimser, ilk örneği sonraki yinelenenlerden öncelikli kılar.
|
||||
* **PHP (Apache HTTP Sunucusunda):** Aksine, son parametre değerini önceliklendirir ve verilen örnekte `a=2` seçilir. Bu davranış, saldırganın manipüle ettiği parametreyi orijinalin üzerinde tutarak HPP istismarlarını istemeden kolaylaştırabilir.
|
||||
* **Flask:** Bir sorgu dizesinde `a=1&a=2` gibi karşılaştığı ilk parametre değerini benimser, ilk örneği sonraki çoğaltmalara tercih eder.
|
||||
* **PHP (Apache HTTP Sunucusunda):** Aksine, son parametre değerini önceliklendirir ve verilen örnekte `a=2` seçilir. Bu davranış, saldırganın manipüle ettiği parametreyi orijinaline tercih ederek HPP istismarlarını istemeden kolaylaştırabilir.
|
||||
|
||||
## Teknolojiye Göre Parametre Kirliliği
|
||||
|
||||
|
@ -77,7 +77,7 @@ Sonuçlar [https://medium.com/@0xAwali/http-parameter-pollution-in-2024-32ec1b81
|
|||
<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. Parametre adında %00'dan sonrasını yok sayın.
|
||||
2. name\[]'i dizi olarak ele alın.
|
||||
2. name\[]'yi dizi olarak ele alın.
|
||||
3. \_GET GET Yöntemini ifade etmez.
|
||||
4. Son parametreyi tercih edin.
|
||||
|
||||
|
@ -94,66 +94,151 @@ Sonuçlar [https://medium.com/@0xAwali/http-parameter-pollution-in-2024-32ec1b81
|
|||
<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.
|
||||
2. POST RequestMapping & PostMapping name\[]'i tanır.
|
||||
2. POST RequestMapping & PostMapping name\[]'yi tanır.
|
||||
3. name ve name\[] mevcutsa name'i tercih edin.
|
||||
4. Parametreleri birleştirin, örneğin first,last.
|
||||
4. Parametreleri birleştirir, örneğin first,last.
|
||||
5. POST RequestMapping & PostMapping, Content-Type ile sorgu parametresini tanır.
|
||||
|
||||
### **NodeJS** 20.17.0 **VE** 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>
|
||||
|
||||
1. name\[]'i tanır.
|
||||
1. name\[]'yi tanır.
|
||||
2. Parametreleri birleştirir, örneğin 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. name\[]'i tanımaz.
|
||||
1. name\[] tanınmaz.
|
||||
2. İlk parametreyi tercih edin.
|
||||
|
||||
### Python 3.12.6 VE Werkzeug 3.0.4 VE 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. name\[]'i tanımaz.
|
||||
1. name\[] tanınmaz.
|
||||
2. İlk parametreyi tercih edin.
|
||||
|
||||
### Python 3.12.6 VE 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. name\[]'i tanımaz.
|
||||
1. name\[] tanınmaz.
|
||||
2. Son parametreyi tercih edin.
|
||||
|
||||
### Python 3.12.6 VE 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. name\[]'i tanımaz.
|
||||
1. name\[] tanınmaz.
|
||||
2. Son parametreyi tercih edin.
|
||||
|
||||
## Referanslar
|
||||
## JSON Injection
|
||||
|
||||
### Çoğaltılmış anahtarlar
|
||||
```ini
|
||||
obj = {"test": "user", "test": "admin"}
|
||||
```
|
||||
Ön uç, ilk oluşumu doğru kabul edebilirken, arka uç anahtarın ikinci oluşumunu kullanabilir.
|
||||
|
||||
### Anahtar Çakışması: Karakter Kısaltma ve Yorumlar
|
||||
|
||||
Belirli karakterler ön uç tarafından doğru bir şekilde yorumlanmayabilir, ancak arka uç bunları yorumlayacak ve bu anahtarları kullanacaktır; bu, **belirli kısıtlamaları aşmak** için faydalı olabilir:
|
||||
```json
|
||||
{"test": 1, "test\[raw \x0d byte]": 2}
|
||||
{"test": 1, "test\ud800": 2}
|
||||
{"test": 1, "test"": 2}
|
||||
{"test": 1, "te\st": 2}
|
||||
```
|
||||
Not edin ki bu durumlarda ön uç `test == 1` olduğunu düşünebilirken, arka uç `test == 2` olduğunu düşünebilir.
|
||||
|
||||
Bu, aşağıdaki gibi değer kısıtlamalarını aşmak için de kullanılabilir:
|
||||
```json
|
||||
{"role": "administrator\[raw \x0d byte]"}
|
||||
{"role":"administrator\ud800"}
|
||||
{"role": "administrator""}
|
||||
{"role": "admini\strator"}
|
||||
```
|
||||
### **Yorum Kısaltmasını Kullanma**
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```ini
|
||||
obj = {"description": "Duplicate with comments", "test": 2, "extra": /*, "test": 1, "extra2": */}
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
Burada her bir ayrıştırıcıdan serileştiriciyi kullanarak ilgili çıktısını göreceğiz.
|
||||
|
||||
Serileştirici 1 (örneğin, GoLang'ın GoJay kütüphanesi) şunları üretecektir:
|
||||
|
||||
* `description = "Yorumlarla tekrar"`
|
||||
* `test = 2`
|
||||
* `extra = ""`
|
||||
|
||||
Serileştirici 2 (örneğin, Java'nın JSON-iterator kütüphanesi) şunları üretecektir:
|
||||
|
||||
* `description = "Yorumlarla tekrar"`
|
||||
* `extra = "/*"`
|
||||
* `extra2 = "*/"`
|
||||
* `test = 1`
|
||||
|
||||
Alternatif olarak, yorumların basit kullanımı da etkili olabilir:
|
||||
```ini
|
||||
obj = {"description": "Comment support", "test": 1, "extra": "a"/*, "test": 2, "extra2": "b"*/}
|
||||
```
|
||||
Java’nın GSON kütüphanesi:
|
||||
```json
|
||||
{"description":"Comment support","test":1,"extra":"a"}
|
||||
```
|
||||
Ruby’nin simdjson kütüphanesi:
|
||||
```json
|
||||
{"description":"Comment support","test":2,"extra":"a","extra2":"b"}
|
||||
```
|
||||
### **Tutarsız Öncelik: Deserialization vs. Serialization**
|
||||
```ini
|
||||
obj = {"test": 1, "test": 2}
|
||||
|
||||
obj["test"] // 1
|
||||
obj.toString() // {"test": 2}
|
||||
```
|
||||
### Float ve Tam Sayı
|
||||
|
||||
Sayı
|
||||
```undefined
|
||||
999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
|
||||
```
|
||||
birden fazla temsile çözülebilir, bunlar arasında:
|
||||
```undefined
|
||||
999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
|
||||
9.999999999999999e95
|
||||
1E+96
|
||||
0
|
||||
9223372036854775807
|
||||
```
|
||||
Which might create inconsistences
|
||||
|
||||
## 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" %}
|
||||
AWS Hacking öğrenin ve pratik yapın:<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">\
|
||||
GCP Hacking öğrenin ve pratik yapın: <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)
|
||||
AWS Hacking'i öğrenin ve pratik yapın:<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">\
|
||||
GCP Hacking'i öğrenin ve pratik yapın: <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>HackTricks'i Destekleyin</summary>
|
||||
|
||||
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
|
||||
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter**'da **bizi takip edin** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'i takip edin.**
|
||||
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
|
||||
|
||||
</details>
|
||||
|
|
Loading…
Reference in a new issue