NodeJS Express

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

Quick Fingerprinting

Χρήσιμοι δείκτες Express κατά το 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 είναι ένα utility για αυτοματοποίηση των δοκιμών και του re-signing των 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

Προσαρμοσμένη λίστα λέξεων

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

Δοκιμάστε πολλαπλά cookies σε batch mode

cookie-monster -b -f cookies.json

Δοκιμάστε πολλαπλά cookies χρησιμοποιώντας batch mode με custom wordlist

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

Αν γνωρίζετε το secret, μπορείτε να υπογράψετε το cookie.

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

Κατάχρηση Query String και URL-Encoded Parser

Express targets often become interesting when they parse attacker-controlled keys into nested objects.

  • req.query μπορεί να ρυθμιστεί με διαφορετικούς parsers, συμπεριλαμβανομένου του qs
  • express.urlencoded({ extended: true }) χρησιμοποιεί qs-style parsing για application/x-www-form-urlencoded
  • Η nested parsing ξεκλειδώνει object injection, mass assignment, NoSQL injection και prototype pollution chains αν το parsed object συγχωνευτεί στην κατάσταση της εφαρμογής

Πρακτικά payloads για δοκιμή:

# 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'

Αν η εφαρμογή αντανακλά ή αποθηκεύει το προκύπτον αντικείμενο, ανατρέξτε στις ειδικές σελίδες για λεπτομέρειες εκμετάλλευσης:

Mass Assignment Cwe 915

Express Prototype Pollution Gadgets

Επιπλέον δοκιμές που αξίζει να εκτελέσετε ειδικά ενάντια στο Express:

  • Βαθιά εμφώλευση για έλεγχο ορίων του αναλυτή, χρονικών ορίων (timeouts), ή διαφορών 400/413
  • Διπλά κλειδιά για να δείτε εάν η εφαρμογή διατηρεί την πρώτη τιμή, την τελευταία, ή έναν πίνακα (array)
  • Σύνταξη με αγκύλες όπως a[b][c]=1, σύνταξη με τελείες όπως a.b=1, και payloads __proto__ / constructor[prototype]

trust proxy Κατάχρηση

Εάν η εφαρμογή χρησιμοποιεί app.set("trust proxy", true) ή εμπιστεύεται υπερβολικά πολλά hops, το Express θα εξάγει τιμές σχετικές με την ασφάλεια από τα forwarding headers. Εάν ο reverse proxy δεν τα επανεγγράφει, ένας client μπορεί να τα πλαστογραφήσει απευθείας.

Αυτό επηρεάζει:

  • req.hostname μέσω X-Forwarded-Host
  • req.protocol μέσω X-Forwarded-Proto
  • req.ip / req.ips μέσω X-Forwarded-For

Αυτό είναι χρήσιμο για:

  • Password reset poisoning και absolute URL poisoning
  • Παράκαμψη allowlists βάσει IP, rate limits, ή audit trails
  • Επηρεασμός της διαχείρισης των secure cookies και της λογικής μόνο-HTTPS σε εφαρμογές που βασίζονται στο req.protocol
  • Poisoning redirects ή cacheable responses όταν η εφαρμογή templates απόλυτους συνδέσμους με 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"}

Ελέγξτε εάν οι παραγόμενοι σύνδεσμοι, οι τοποθεσίες ανακατεύθυνσης, τα logs ή οι αποφάσεις access-control πλέον χρησιμοποιούν attacker-supplied τιμές.

Related pages:

Reset/Forgotten Password Bypass

Cache Poisoning and Cache Deception

express-session Σημειώσεις Δοκιμών

Common Express deployments use express-session, which signs the session identifier cookie but stores the real state server-side.

Χρήσιμοι έλεγχοι:

  • Session fixation: αυθεντικοποιηθείτε με ένα pre-login cookie και επαληθεύστε εάν το SID παραμένει ίδιο μετά το login
  • Weak secret rotation: ορισμένες εγκαταστάσεις επαληθεύουν cookies με έναν πίνακα παλιών secrets, οπότε προηγουμένως έγκυρες υπογραφές μπορεί να συνεχίσουν να λειτουργούν
  • saveUninitialized: true: η εφαρμογή εκδίδει pre-auth sessions σε ανώνυμους χρήστες, κάτι που κάνει το fixation πιο εύκολο και αυξάνει την επιφάνεια των sessions για brute-force ή cache analysis
  • MemoryStore σε production συνήθως υποδεικνύει χαμηλή ωριμότητα λειτουργίας και ασταθή συμπεριφορά των sessions κατά τις επανεκκινήσεις

Πρακτικό workflow για fixation:

  1. Πάρτε ένα ανώνυμο session cookie από τον στόχο.
  2. Στείλτε αυτό το cookie σε ένα victim ή αυθεντικοποιηθείτε με αυτό ο ίδιος.
  3. Ελέγξτε εάν το login δένει την authenticated κατάσταση με το υπάρχον SID.
  4. Αν ναι, αναπαίξτε (replay) το ίδιο cookie σε ξεχωριστή browser session.

Αν η εφαρμογή δεν καλεί req.session.regenerate() μετά την authentication, το fixation συχνά παραμένει δυνατό.

Method Override Tunneling

Μερικές Express εφαρμογές χρησιμοποιούν το method-override για να tunnel τα HTTP verbs που τα HTML forms δεν μπορούν να στείλουν εγγενώς. Όταν είναι ενεργό, δοκιμάστε πάντα αν μπορείτε να smuggle επικίνδυνες μεθόδους μέσω μίας διαδρομής που το front-end, το WAF ή η λογική CSRF θεώρησαν ότι ήταν μόνο POST.

Τυπικά probes:

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

Ενδιαφέροντες αντίκτυποι:

  • Πρόσβαση σε κρυφές PUT / PATCH / DELETE routes μέσω ενός POST-only edge control
  • Παρακάμπτοντας route-specific middleware που ελέγχει μόνο το req.method
  • Προκαλώντας state-changing handlers μέσω CSRF όταν η εφαρμογή επικυρώνει μόνο την εξωτερική μέθοδο του request

Κατά προεπιλογή το middleware συνήθως αντικαθιστά μόνο το POST, οπότε δώστε προτεραιότητα σε POST requests με τιμές override στα header, body και query-string.

Αναφορές

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks