hacktricks/pentesting-web/parameter-pollution.md

11 KiB
Raw Blame History

Parameter Pollution

Parameter Pollution

{% hint style="success" %} AWS Hacking öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks'i Destekleyin
{% endhint %}

{% embed url="https://websec.nl/" %}

HTTP Parameter Pollution (HPP) Genel Bakış

HTTP Parameter Pollution (HPP), saldırganların HTTP parametrelerini manipüle ederek bir web uygulamasının davranışını beklenmedik şekillerde değiştirdiği bir tekniktir. Bu manipülasyon, HTTP parametrelerini ekleyerek, değiştirerek veya çoğaltarak yapılır. Bu manipülasyonların etkisi kullanıcıya doğrudan görünmez, ancak uygulamanın sunucu tarafındaki işlevselliğini önemli ölçüde değiştirebilir ve istemci tarafında gözlemlenebilir etkiler yaratabilir.

HTTP Parameter Pollution (HPP) Örneği

Bir bankacılık uygulaması işlem URL'si:

  • Orijinal URL: https://www.victim.com/send/?from=accountA&to=accountB&amount=10000

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.

Teknolojiye Özgü Parametre Ayrıştırma

  • Parametrelerin nasıl ayrıştırıldığı ve önceliklendirildiği, temel web teknolojisine bağlıdır ve HPP'nin nasıl istismar edilebileceğini etkiler.
  • Wappalyzer gibi araçlar, bu teknolojileri ve ayrıştırma davranışlarını tanımlamaya yardımcı olur.

PHP ve HPP İstismarı

OTP Manipülasyonu 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.

API Anahtarı Manipülasyonu 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.
  • 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.

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:

  • 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.

Teknolojiye Göre Parametre Kirliliği

Sonuçlar https://medium.com/@0xAwali/http-parameter-pollution-in-2024-32ec1b810f89 adresinden alınmıştır.

PHP 8.3.11 VE Apache 2.4.62

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

  1. Parametre adında %00'dan sonrasını yok sayın.
  2. name[]'i dizi olarak ele alın.
  3. _GET GET Yöntemini ifade etmez.
  4. Son parametreyi tercih edin.

Ruby 3.3.5 ve WEBrick 1.8.2

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

  1. Parametreleri ayırmak için & ve ; ayırıcılarını kullanır.
  2. name[] tanınmaz.
  3. İlk parametreyi tercih edin.

Spring MVC 6.0.23 VE Apache Tomcat 10.1.30

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

  1. POST RequestMapping == PostMapping & GET RequestMapping == GetMapping.
  2. POST RequestMapping & PostMapping name[]'i tanır.
  3. name ve name[] mevcutsa name'i tercih edin.
  4. Parametreleri birleştirin, örneğin first,last.
  5. POST RequestMapping & PostMapping, Content-Type ile sorgu parametresini tanır.

NodeJS 20.17.0 VE Express 4.21.0

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

  1. name[]'i tanır.
  2. Parametreleri birleştirir, örneğin first,last.

GO 1.22.7

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

  1. name[]'i tanımaz.
  2. İlk parametreyi tercih edin.

Python 3.12.6 VE Werkzeug 3.0.4 VE Flask 3.0.3

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

  1. name[]'i tanımaz.
  2. İlk parametreyi tercih edin.

Python 3.12.6 VE Django 4.2.15

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

  1. name[]'i tanımaz.
  2. Son parametreyi tercih edin.

Python 3.12.6 VE Tornado 6.4.1

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

  1. name[]'i tanımaz.
  2. Son parametreyi tercih edin.

Referanslar

{% embed url="https://websec.nl/" %}

{% hint style="success" %} AWS Hacking öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks'i Destekleyin
{% endhint %}