Client Side Prototype Pollution
Otomatik araçlar kullanarak keşfetme
Araçlar https://github.com/dwisiswant0/ppfuzz, https://github.com/kleiton0x00/ppmap ve https://github.com/kosmosec/proto-find prototip kirlenmesi açıklarını bulmak için kullanılabilir.
Ayrıca, prototip kirlenmesi açıkları için eriştiğiniz sayfaları otomatik olarak taramak amacıyla PPScan tarayıcı uzantısını da kullanabilirsiniz.
Bir özelliğin nerede kullanıldığını hata ayıklama
Prototype Pollution'ın Temel Sebebini Bulma
Bir prototype pollution açığı herhangi bir araç tarafından belirlendikten sonra ve eğer kod aşırı karmaşık değilse, Chrome Geliştirici Araçları'nda location.hash
, decodeURIComponent
veya location.search
gibi anahtar kelimeleri arayarak açığı bulabilirsiniz. Bu yaklaşım, JavaScript kodunun savunmasız bölümünü belirlemenizi sağlar.
Daha büyük ve karmaşık kod tabanları için, savunmasız kodu keşfetmenin basit bir yöntemi aşağıdaki adımları içerir:
Bir aracı kullanarak bir açığı belirleyin ve bir özelliği kurucuda ayarlamak için tasarlanmış bir yük elde edin. ppmap tarafından sağlanan bir örnek şöyle görünebilir:
constructor[prototype][ppmap]=reserved
.Sayfada çalışacak ilk JavaScript kodunun satırında bir kesme noktası ayarlayın. Yük ile sayfayı yenileyin ve bu kesme noktasında yürütmeyi durdurun.
JavaScript yürütmesi duraklatıldığında, JS konsolunda aşağıdaki betiği çalıştırın. Bu betik, 'ppmap' özelliği oluşturulduğunda sinyal verecek ve kökenini bulmanıza yardımcı olacaktır:
Sources sekmesine geri dönün ve “Script yürütmesini devam ettir” seçeneğini seçin. JavaScript çalışmaya devam edecek ve 'ppmap' özelliği beklendiği gibi kirletilecektir. Sağlanan kod parçasını kullanarak 'ppmap' özelliğinin kirletildiği tam yeri belirlemek mümkündür. Call Stack'i inceleyerek, kirlenmenin gerçekleştiği farklı yığınlar gözlemlenebilir.
Hangi yığını inceleyeceğinize karar verirken, genellikle JavaScript kütüphane dosyalarıyla ilişkili yığınları hedeflemek faydalıdır, çünkü prototip kirlenmesi genellikle bu kütüphaneler içinde meydana gelir. Kütüphane dosyalarına (sağ tarafta, rehberlik için sağlanan bir resme benzer şekilde görülebilir) bağlılığını inceleyerek ilgili yığını belirleyin. 4 ve 6. satırlardaki gibi birden fazla yığın olduğunda, mantıklı seçim 4. satırdaki yüktür, çünkü bu, kirlenmenin ilk gerçekleştiği yeri temsil eder ve dolayısıyla zafiyetin kök nedenidir. Yığına tıklamak sizi zayıf koda yönlendirecektir.
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F1400%2F1*S8NBOl1a7f1zhJxlh-6g4w.jpeg&width=768&dpr=4&quality=100&sign=7de3adb9&sv=1)
Script Gadget'larını Bulma
Gadget, bir PP zafiyeti keşfedildiğinde kötüye kullanılacak koddur.
Uygulama basitse, srcdoc/innerHTML/iframe/createElement
gibi anahtar kelimeleri arama yapabiliriz ve kaynak kodunu gözden geçirip bunun javascript yürütmesine yol açıp açmadığını kontrol edebiliriz. Bazen, bahsedilen teknikler hiç gadget bulamayabilir. Bu durumda, saf kaynak kodu incelemesi aşağıdaki örnekte olduğu gibi bazı güzel gadget'lar ortaya çıkarır.
Mithil kütüphanesi kodunda PP gadget bulma örneği
Bu yazıyı kontrol edin: https://blog.huli.tw/2022/05/02/en/intigriti-revenge-challenge-author-writeup/
Zayıf kütüphaneler için yüklerin yeniden derlenmesi
PP aracılığıyla HTML Sanitizer'ları atlatma
Bu araştırma bazı HTML sanitizers kütüphaneleri tarafından sağlanan sanitizasyonları atlatmak için kullanılacak PP gadget'larını göstermektedir:
sanitize-html
dompurify
Closure
Referanslar
Last updated