Express Prototype Pollution Gadgets
XSS yanıtlarını sunma
Daha fazla ayrıntı için orijinal araştırmaya göz atın
JSON içerik türünü HTML olarak değiştirin
JSON içerik türü yanıtı kullanan bir Express uygulamasında ve bir JSON'u yansıtarak:
Bu durumlarda XSS genellikle JSON içerik türü ile mümkün değildir. Ancak, prototip kirlenmesi ile Express'i HTML yanıtı sunması için kandırabiliriz. Bu zafiyet, uygulamanın res.send(obj)
kullanmasına ve uygulama/json içerik türü ile gövde ayrıştırıcısını kullanmasına dayanır.
body
ve _body
özelliklerini kirleterek, Express'in HTML içerik türünü sunmasını sağlamak ve _body
özelliğini yansıtmak mümkündür, bu da saklı XSS'e yol açar.
UTF7'yi Render Et
Express'in UTF-7 içeriği render etmesini sağlamak mümkündür:
Güvenli Tarama Teknikleri
JSON boşlukları
Aşağıdaki PP, bir JSON içindeki niteliklerin işlevselliği bozmayacak şekilde ekstra bir boşluğa sahip olmasını sağlayacaktır:
O zaman yansıtılmış JSON şöyle görünecektir:
Açık Başlıklar
Aşağıdaki PP aracı, sunucunun HTTP başlığını geri göndermesini sağlayacaktır: Access-Control-Expose_headers: foo
CORS modülünün yüklenmesi gerekmektedir
OPTIONS Yöntemi
Aşağıdaki yük ile, OPTIONS yanıtından bir yöntemi gizlemek mümkündür:
Durum
Aşağıdaki PP yükü kullanılarak dönen durum kodu değiştirmek mümkündür:
Hata
Bir prototipe bir dize gibi bir ilkel atadığınızda, bu prototipin bir nesne olması gerektiğinden no-op işlemi üretir. Eğer bir prototip nesnesini Object.prototype
'a atamaya çalışırsanız, bu bir istisna fırlatır. Bu iki davranışı prototip kirliliğinin başarılı olup olmadığını tespit etmek için kullanabiliriz:
Yansıtılan Değer
Bir uygulama yanıtında bir nesne içerdiğinde, __proto__
ile birlikte alışılmadık bir isimle bir özellik oluşturmak faydalı olabilir. Özellikle, eğer yalnızca alışılmadık özellik yanıt olarak döndürülüyorsa, bu uygulamanın zayıflığını gösterebilir:
Ayrıca, Lodash gibi bir kütüphane kullanıldığında, bir özelliği hem prototip kirlenmesi (PP) yoluyla hem de doğrudan nesne içinde ayarlamak başka bir tanısal yaklaşım sunar. Eğer böyle bir özellik yanıttan çıkarılmışsa, bu, Lodash'ın birleştirmeden önce hedef nesnede özelliğin varlığını doğruladığını gösterir:
Misc
Dots'a İzin Ver
Express'te sorgu dizesi parametrelerinden nesneler oluşturmanıza olanak tanıyan bir seçenek vardır. Kesinlikle bir hata zincirinde kullanarak bir prototip kirlenmesi açığını istismar edebilirsiniz.
?foo.bar=baz
Node'da bir nesne oluşturur.
Referanslar
Last updated