NodeJS Express
Tip
Aprende y practica Hacking en AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
Quick Fingerprinting
Indicadores útiles de Express durante recon:
X-Powered-By: Expresso stack traces que mencionenexpress,body-parser,qs,cookie-parser,express-session, ofinalhandler- Cookies prefijadas con
s:(cookie firmada) oj:(cookie JSON) - Cookies de sesión como
connect.sid - Campos de formulario ocultos o parámetros de consulta como
_method=PUT/_method=DELETE - Páginas de error leaking
Cannot GET /path,Cannot POST /path,Unexpected tokenenbody-parser, oURIErrordurante el análisis de la query
Cuando confirmes Express, céntrate en la cadena de middleware, porque la mayoría de los bugs interesantes provienen de los parsers, proxy trust, el manejo de sesiones y el method-tunneling en vez del núcleo del framework.
Cookie Signature
La herramienta https://github.com/DigitalInterruption/cookie-monster es una utilidad para automatizar las pruebas y volver a firmar los secretos de cookies de Express.js.
Express suele exponer comúnmente dos formatos de cookie útiles:
s:<value>.<sig>cookies firmadas manejadas porcookie-parseroexpress-sessionj:<json>cookies JSON que son parseadas automáticamente porcookie-parser
Si cookie-parser recibe una cookie firmada y la firma es inválida, el valor pasa a ser false en lugar del valor manipulado. Si la aplicación acepta un array de secretos, los secretos antiguos aún pueden verificar cookies existentes después de la rotación.
Cookie única con un nombre específico
cookie-monster -c eyJmb28iOiJiYXIifQ== -s LVMVxSNPdU_G8S3mkjlShUD78s4 -n session
Wordlist personalizada
cookie-monster -c eyJmb28iOiJiYXIifQ== -s LVMVxSNPdU_G8S3mkjlShUD78s4 -w custom.lst
Probar múltiples cookies usando batch mode
cookie-monster -b -f cookies.json
Probar múltiples cookies usando batch mode con una wordlist personalizada
cookie-monster -b -f cookies.json -w custom.lst
Codificar y firmar una nueva cookie
Si conoces el secreto, puedes firmar la cookie.
cookie-monster -e -f new_cookie.json -k secret
Abuso del parser de Query String y URL-Encoded
Los objetivos Express suelen volverse interesantes cuando analizan claves controladas por el atacante en objetos anidados.
req.querypuede configurarse con diferentes parsers, incluyendoqsexpress.urlencoded({ extended: true })utiliza parsing estiloqsparaapplication/x-www-form-urlencoded- El parsing anidado habilita object injection, mass assignment, NoSQL injection y prototype pollution chains si el objeto parseado se fusiona con el estado de la aplicación
Payloads prácticos para probar:
# 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 la app refleja o persiste el objeto resultante, dirígete a las páginas dedicadas para los detalles de explotación:
Express Prototype Pollution Gadgets
Pruebas adicionales que vale la pena enviar específicamente contra Express:
- Anidamiento profundo para detectar límites del analizador, tiempos de espera, o diferencias 400/413
- Claves duplicadas para ver si la app mantiene el primer valor, el último, o un array
- Sintaxis con corchetes como
a[b][c]=1, sintaxis punteada comoa.b=1, y payloads__proto__/constructor[prototype]
trust proxy Abuso
Si la app usa app.set("trust proxy", true) o confía en demasiados saltos, Express derivará valores relevantes para la seguridad a partir de las cabeceras de reenvío. Si el proxy inverso no los sobrescribe, un cliente puede falsificarlos directamente.
Esto afecta a:
req.hostnamevíaX-Forwarded-Hostreq.protocolvíaX-Forwarded-Protoreq.ip/req.ipsvíaX-Forwarded-For
Esto es útil para:
- Envenenamiento de restablecimiento de contraseña y envenenamiento de URL absoluta
- Evadir listas de permitidos basadas en IP, límites de tasa, o trazas de auditoría
- Influir en el manejo de cookies
securey en la lógica solo-HTTPS en apps que dependen dereq.protocol - Envenenar redirecciones o respuestas cacheables cuando la app genera enlaces absolutos usando las cabeceras de host/proto reenviadas
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"}
Verifica si los enlaces generados, ubicaciones de redirección, registros o decisiones de control de acceso ahora usan valores proporcionados por el atacante.
Páginas relacionadas:
Reset/Forgotten Password Bypass
Cache Poisoning and Cache Deception
express-session Notas de prueba
Las implementaciones comunes de Express usan express-session, que firma la cookie de identificador de sesión pero guarda el estado real en el servidor.
Comprobaciones útiles:
- Session fixation: autentícate con una cookie previa al login y verifica si el SID permanece igual después del login
- Weak secret rotation: algunas implementaciones verifican cookies con un array de secretos antiguos, por lo que firmas previamente válidas pueden seguir funcionando
saveUninitialized: true: la aplicación emite sesiones pre-auth a usuarios anónimos, lo que facilita la fixation y aumenta la superficie de sesión para ataques de fuerza bruta o análisis de cachéMemoryStoreen producción suele indicar baja madurez operativa y comportamiento inestable de sesiones durante reinicios
Un flujo práctico de fixation:
- Obtén una cookie de sesión anónima del objetivo.
- Envía esa cookie a una víctima o autentícate con ella tú mismo.
- Comprueba si el login vincula el estado autenticado al SID existente.
- Si lo hace, reproduce la misma cookie en una sesión de navegador separada.
Si la app no llama a req.session.regenerate() después de la autenticación, a menudo la fixation sigue siendo posible.
Method Override Tunneling
Algunas apps Express usan method-override para tunelar verbos que los formularios HTML no pueden enviar de forma nativa. Cuando está habilitado, siempre prueba si puedes contrabandear métodos peligrosos a través de una ruta que el front-end, WAF, o la lógica CSRF asumió que era solo POST.
Pruebas típicas:
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
Impactos interesantes:
- Acceder a rutas ocultas
PUT/PATCH/DELETEa través de un control de borde que solo permitePOST - Evadir middleware específico de ruta que solo comprueba
req.method - Activar manejadores que cambian estado vía CSRF cuando la aplicación valida únicamente el método externo de la solicitud
Por defecto, el middleware normalmente solo sobrescribe POST, así que prioriza las peticiones POST con valores de override en header, body y query-string.
Referencias
- https://expressjs.com/en/guide/behind-proxies.html
- https://portswigger.net/research/server-side-prototype-pollution
Tip
Aprende y practica Hacking en AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.


