Express Prototype Pollution Gadgets
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Daha fazla ayrıntı için orijinal araştırmaya göz atın
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.
Express'in UTF-7 içeriği render etmesini sağlamak mümkündür:
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ş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
Aşağıdaki yük ile, OPTIONS yanıtından bir yöntemi gizlemek mümkündür:
Aşağıdaki PP yükü kullanılarak dönen durum kodu değiştirmek mümkündür:
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:
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:
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.
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)