Express Prototype Pollution Gadgets
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Za više detalja pogledajte originalno istraživanje
U Express aplikaciji koja koristi JSON content type response i reflektuje JSON:
U ovim slučajevima XSS obično nije moguć sa JSON tipom sadržaja. Međutim, sa zagađenjem prototipa možemo zbuniti Express da vrati HTML odgovor. Ova ranjivost se oslanja na aplikaciju koja koristi res.send(obj)
i koristi parser tela sa tipom sadržaja application/json.
By polluting body
and _body
properties, it's possible to cause Express to serve up the HTML content type and reflect the _body
property, resulting in stored XSS.
Moguće je naterati express da prikazuje UTF-7 sadržaj sa:
Sledeći PP će dodati dodatni razmak unutar JSON atributa koji neće pokvariti funkcionalnost:
Tada će reflektovani JSON izgledati ovako:
Sledeći PP gadget će naterati server da vrati HTTP header: Access-Control-Expose_headers: foo
Zahteva se da CORS modul bude instaliran
Sa sledećim payload-om, moguće je sakriti metodu iz OPTIONS odgovora:
Moguće je promeniti vratni status kod koristeći sledeći PP payload:
Kada dodelite prototipu primitivnu vrednost kao što je string, to proizvodi operaciju bez efekta jer prototip mora biti objekat. Ako pokušate da dodelite objekat prototipa samom Object.prototype
, to će izazvati izuzetak. Možemo koristiti ova dva ponašanja da otkrijemo da li je zagađenje prototipa bilo uspešno:
Kada aplikacija uključuje objekat u svoj odgovor, kreiranje atributa sa neobičnim imenom pored __proto__
može biti korisno. Konkretno, ako samo neobični atribut bude vraćen u odgovoru, to može ukazivati na ranjivost aplikacije:
Pored toga, u scenarijima gde se koristi biblioteka kao što je Lodash, postavljanje svojstva kako putem zagađenja prototipa (PP) tako i direktno unutar objekta nudi još jedan dijagnostički pristup. Ako je takvo svojstvo izostavljeno iz odgovora, to sugeriše da Lodash proverava postojanje svojstva u ciljanom objektu pre nego što ga spoji:
Postoji opcija u Express-u koja vam omogućava da kreirate objekte iz parametara upita. Definitivno je možete koristiti u lancu grešaka za iskorišćavanje ranjivosti zagađenja prototipa.
?foo.bar=baz
kreira objekat u Node.
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)