NodeJS Express
Tip
Ucz się i ćwicz Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.
Szybkie fingerprinting
Przydatne wskaźniki Express podczas recon:
X-Powered-By: Expresslub stack traces wspominająceexpress,body-parser,qs,cookie-parser,express-session, lubfinalhandler- Cookies z prefiksem
s:(signed cookie) lubj:(JSON cookie) - Session cookies takie jak
connect.sid - Ukryte pola formularzy lub parametry zapytań takie jak
_method=PUT/_method=DELETE - Strony błędów leaking
Cannot GET /path,Cannot POST /path,Unexpected tokenwbody-parser, lubURIErrorpodczas parsowania zapytań
Po potwierdzeniu obecności Express skup się na middleware chain, ponieważ większość interesujących błędów wynika z parserów, proxy trust, session handling i method-tunneling, a nie z samego jądra frameworka.
Cookie Signature
Narzędzie https://github.com/DigitalInterruption/cookie-monster to narzędzie do automatyzacji testowania i ponownego podpisywania sekretów cookie Express.js.
Express często ujawnia dwa przydatne formaty cookie:
s:<value>.<sig>signed cookies obsługiwane przezcookie-parserlubexpress-sessionj:<json>JSON cookies, które są automatycznie parsowane przezcookie-parser
Jeśli cookie-parser otrzyma signed cookie i podpis jest nieprawidłowy, wartość staje się false zamiast zmanipulowanej wartości. Jeśli aplikacja akceptuje array of secrets, stare sekrety mogą nadal weryfikować istniejące cookies po rotacji.
Single cookie with a specific name
cookie-monster -c eyJmb28iOiJiYXIifQ== -s LVMVxSNPdU_G8S3mkjlShUD78s4 -n session
Własna lista słów
cookie-monster -c eyJmb28iOiJiYXIifQ== -s LVMVxSNPdU_G8S3mkjlShUD78s4 -w custom.lst
Testowanie wielu ciasteczek w trybie wsadowym
cookie-monster -b -f cookies.json
Przetestuj wiele cookies w trybie batch z custom wordlist
cookie-monster -b -f cookies.json -w custom.lst
Zakoduj i podpisz nowe cookie
Jeśli znasz sekret, możesz podpisać cookie.
cookie-monster -e -f new_cookie.json -k secret
Nadużycie parsera Query String i URL-Encoded
Cele Express często stają się interesujące, gdy parsują klucze kontrolowane przez atakującego do zagnieżdżonych obiektów.
req.querymożna skonfigurować z różnymi parserami, w tymqsexpress.urlencoded({ extended: true })używa parsowania w styluqsdlaapplication/x-www-form-urlencoded- Zagnieżdżone parsowanie odblokowuje object injection, mass assignment, NoSQL injection oraz prototype pollution chains, jeśli sparsowany obiekt zostanie scalony ze stanem aplikacji
Praktyczne payloads do wypróbowania:
# 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'
If the app reflects or persists the resulting object, pivot into the dedicated pages for exploitation details:
Express Prototype Pollution Gadgets
Extra tests that are worth sending against Express specifically:
- Głębokie zagnieżdżenie, aby sprawdzić limity parsera, timeouty lub różnice w odpowiedziach 400/413
- Powtarzające się klucze, żeby zobaczyć, czy aplikacja zachowuje pierwszą wartość, ostatnią, czy tworzy array
- Składnia z nawiasami taka jak
a[b][c]=1, składnia kropkowa taka jaka.b=1, oraz payloady__proto__/constructor[prototype]
trust proxy Nadużycie
Jeśli aplikacja używa app.set("trust proxy", true) lub ufa zbyt wielu hopom, Express będzie wyprowadzać wartości istotne dla bezpieczeństwa z nagłówków przekazywanych przez proxy. Jeśli reverse proxy ich nie nadpisuje, klient może je bezpośrednio sfałszować.
To wpływa na:
req.hostnameprzezX-Forwarded-Hostreq.protocolprzezX-Forwarded-Protoreq.ip/req.ipsprzezX-Forwarded-For
Przydatne do:
- Password reset poisoning and absolute URL poisoning
- Bypassing IP-based allowlists, rate limits, or audit trails
- Wpływania na obsługę ciasteczek
securei logikę HTTPS-only w aplikacjach, które bazują nareq.protocol - Poisoning redirects or cacheable responses gdy aplikacja generuje absolutne linki używając nagłówków forwarded host/proto
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"}
Sprawdź, czy generowane linki, lokalizacje przekierowań, logi lub decyzje dotyczące kontroli dostępu teraz używają wartości dostarczonych przez atakującego.
Related pages:
Reset/Forgotten Password Bypass
Cache Poisoning and Cache Deception
express-session — Notatki testowe
W typowych wdrożeniach Express używa się express-session, który podpisuje session identifier cookie, ale przechowuje rzeczywisty stan po stronie serwera.
Przydatne kontrole:
- Session fixation: uwierzytelnij się przy użyciu cookie sprzed logowania i sprawdź, czy SID pozostaje taki sam po zalogowaniu
- Weak secret rotation: niektóre wdrożenia weryfikują cookies przy użyciu tablicy starych secrets, więc wcześniej ważne podpisy mogą nadal działać
saveUninitialized: true: aplikacja wydaje pre-auth sessions anonimowym użytkownikom, co ułatwia fixation i zwiększa powierzchnię sesji dla brute-force lub analizy cache’uMemoryStorew produkcji zazwyczaj wskazuje na słabą dojrzałość operacyjną i niestabilne zachowanie sesji podczas restartów
Praktyczny przebieg Session fixation:
- Pozyskaj anonimowy session cookie od celu.
- Wyślij ten cookie do ofiary lub uwierzytelnij się nim samodzielnie.
- Sprawdź, czy logowanie wiąże uwierzytelniony stan z istniejącym SID.
- Jeśli tak, odtwórz ten sam cookie w oddzielnej sesji przeglądarki.
Jeżeli aplikacja nie wywołuje req.session.regenerate() po uwierzytelnieniu, fixation jest często nadal możliwy.
Tunelowanie method-override
Niektóre aplikacje Express używają method-override do tunelowania metod HTTP, których formularze HTML nie mogą wysłać natywnie. Gdy jest włączone, zawsze testuj, czy możesz przemycić niebezpieczne metody przez trasę, którą front-end, WAF lub logika CSRF uznała za obsługującą tylko POST.
Typowe próby:
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
Interesujące skutki:
- Uzyskanie dostępu do ukrytych tras
PUT/PATCH/DELETEprzez kontrolę edge dopuszczającą tylkoPOST - Omijanie middleware specyficznego dla trasy, które sprawdza tylko
req.method - Wywoływanie handlerów zmieniających stan przez CSRF, gdy aplikacja waliduje tylko zewnętrzną metodę żądania
Domyślnie middleware zwykle nadpisuje tylko POST, więc priorytetowo traktuj żądania POST z wartościami nadpisującymi w nagłówkach, body i query-string.
Referencje
- https://expressjs.com/en/guide/behind-proxies.html
- https://portswigger.net/research/server-side-prototype-pollution
Tip
Ucz się i ćwicz Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.


