Express Prototype Pollution Gadgets
Last updated
Last updated
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Vir verdere besonderhede kyk na die oorspronklike navorsing
In 'n Express-app wat 'n JSON inhouds tipe antwoord gebruik en 'n JSON reflekteer:
In hierdie gevalle is XSS normaalweg nie moontlik met 'n JSON-inhouds tipe nie. egter, met prototipe besoedeling kan ons Express verwar om 'n HTML-antwoord te dien. Hierdie kwesbaarheid is afhanklik van die toepassing wat res.send(obj)
gebruik en die liggaam parser met die toepassing/json-inhouds tipe.
Deur body
en _body
eienskappe te besmet, is dit moontlik om Express te laat bedien die HTML inhoud tipe en die _body
eienskap te reflekteer, wat lei tot gestoor XSS.
Dit is moontlik om express UTF-7 inhoud te laat weergee met:
Die volgende PP sal eienskappe binne 'n JSON 'n ekstra spasie gee wat die funksionaliteit nie sal breek nie:
Dan sal 'n weerspieëlde JSON soos volg lyk:
Die volgende PP-gadget sal die bediener dwing om die HTTP-koptekst terug te stuur: Access-Control-Expose_headers: foo
Dit vereis dat die CORS-module geïnstalleer word
Met die volgende payload is dit moontlik om 'n metode uit 'n OPTIONS-antwoord te verberg:
Dit is moontlik om die teruggegee statuskode te verander met die volgende PP payload:
Wanneer jy 'n prototipe aan 'n primitiewe soos 'n string toewys, produseer dit 'n geen-operasie nie, aangesien die prototipe 'n objek moet wees. As jy probeer om 'n prototipe objek aan die Object.prototype
self toe te wys, sal dit 'n uitsondering gooi. Ons kan hierdie twee gedrag gebruik om te detecteer of prototipe besoedeling suksesvol was:
Wanneer 'n toepassing 'n objek in sy antwoord insluit, kan dit insiggewend wees om 'n attribuut met 'n ongewone naam saam met __proto__
te skep. Spesifiek, as slegs die ongewone attribuut in die antwoord teruggestuur word, kan dit die toepassing se kwesbaarheid aandui:
Boonop, in scenario's waar 'n biblioteek soos Lodash gebruik word, bied die instelling van 'n eienskap sowel via prototipe besoedeling (PP) as direk binne die objek 'n ander diagnostiese benadering. As so 'n eienskap uit die antwoord weggelaat word, dui dit daarop dat Lodash die bestaan van die eienskap in die teikenobjek verifieer voordat dit saamgevoeg word:
Daar is 'n opsie in Express wat jou toelaat om objekte uit soekstring parameters te skep. Jy kan dit beslis in 'n fout ketting gebruik om 'n prototype besoedeling kwesbaarheid te benut.
?foo.bar=baz
skep 'n objek in Node.
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)