NodeJS Express

Tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks

Quick Fingerprinting

Корисні індикатори Express під час recon:

  • X-Powered-By: Express or stack traces mentioning express, body-parser, qs, cookie-parser, express-session, or finalhandler
  • Файли cookie з префіксом s: (signed cookie) або j: (JSON cookie)
  • Сесійні cookie, такі як connect.sid
  • Сховані поля форми або параметри запиту, такі як _method=PUT / _method=DELETE
  • Сторінки помилок leaking Cannot GET /path, Cannot POST /path, Unexpected token in body-parser, or URIError під час парсингу запиту

Коли ви підтверджуєте Express, зосередьтеся на middleware chain, бо більшість цікавих багів походить від парсерів, proxy trust, обробки сесій та method-tunneling, а не від ядра фреймворку.

The tool https://github.com/DigitalInterruption/cookie-monster is a utility for automating the testing and re-signing of Express.js cookie secrets.

Express commonly exposes two useful cookie formats:

  • s:<value>.<sig> signed cookies handled by cookie-parser or express-session
  • j:<json> JSON cookies that are automatically parsed by 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

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

Тестування кількох cookies у batch mode

cookie-monster -b -f cookies.json

Тестування кількох cookies у пакетному режимі з власним словником

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

Якщо ви знаєте секрет, ви можете підписати cookie.

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

Зловживання парсерами Query String та URL-encoded

Express цілі часто стають цікавими, коли вони розбирають ключі, контрольовані атакуючим, у вкладені об’єкти.

  • req.query може бути налаштований з різними парсерами, включаючи qs
  • express.urlencoded({ extended: true }) використовує парсинг у стилі qs для application/x-www-form-urlencoded
  • Вкладений парсинг відкриває object injection, mass assignment, NoSQL injection та prototype pollution ланцюги, якщо розпарсений об’єкт зливається зі станом застосунку

Практичні payloads, які варто спробувати:

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

Якщо додаток відображає або зберігає отриманий об’єкт, перейдіть до окремих сторінок з деталями експлуатації:

Mass Assignment Cwe 915

Express Prototype Pollution Gadgets

Додаткові тести, які варто відправляти саме проти Express:

  • Глибоке вкладення, щоб перевірити обмеження парсера, таймаути або відмінності у відповідях 400/413
  • Повторювані ключі, щоб з’ясувати, чи додаток зберігає перше значення, останнє, чи масив
  • Синтаксис з дужками, наприклад a[b][c]=1, крапковий синтаксис, наприклад a.b=1, та корисні навантаження __proto__ / constructor[prototype]

trust proxy Зловживання

Якщо додаток використовує app.set("trust proxy", true) або довіряє занадто багатьом хопам, Express буде виводити значення, важливі для безпеки, із заголовків пересилання. Якщо зворотний проксі не перезаписує їх, клієнт може підробити їх безпосередньо.

Це впливає на:

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

Це корисно для:

  • Отруєння скидання пароля та отруєння абсолютних URL
  • Обхід IP-орієнтованих списків дозволів (allowlists), лімітів швидкості (rate limits) або журналів аудиту
  • Впливу на обробку secure cookie та логіку тільки HTTPS у додатках, які орієнтуються на req.protocol
  • Отруєння редиректів або кешованих відповідей, коли додаток формує абсолютні посилання, підставляючи 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"}

Перевірте, чи тепер згенеровані посилання, місця перенаправлення, логи або рішення контролю доступу використовують значення, надані зловмисником.

Related pages:

Reset/Forgotten Password Bypass

Cache Poisoning and Cache Deception

express-session Примітки щодо тестування

Типові розгортання Express використовують express-session, який підписує cookie-ідентифікатор сесії, але зберігає реальний стан на сервері.

Корисні перевірки:

  • Session fixation: автентифікуйтеся з pre-login cookie і перевірте, чи залишається SID тим самим після входу
  • Weak secret rotation: деякі розгортання перевіряють cookie за масивом старих секретів, тому раніше дійсні підписи можуть і далі працювати
  • saveUninitialized: true: додаток видає pre-auth sessions анонімним користувачам, що полегшує fixation і збільшує поверхню сесій для brute-force або cache-аналізу
  • MemoryStore у production зазвичай вказує на слабку операційну зрілість і нестабільну поведінку сесій під час рестартів

Практичний workflow для fixation:

  1. Отримайте анонімний session cookie з цілі.
  2. Надішліть цей cookie жертві або автентифікуйтеся з його допомогою самі.
  3. Перевірте, чи зв’язує вхід аутентифікований стан з існуючим SID.
  4. Якщо так — відтворіть той самий cookie в окремій сесії браузера.

Якщо додаток не викликає req.session.regenerate() після автентифікації, fixation часто все ще можлива.

Method Override Tunneling

Деякі Express-додатки використовують method-override для тунелювання HTTP-методів, які HTML-форми не можуть відправити нативно. Коли увімкнено, завжди перевіряйте, чи можна smuggle небезпечні методи через маршрут, який front-end, WAF або логіка CSRF вважали лише POST.

Типові перевірки:

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

Цікаві наслідки:

  • Доступ до прихованих маршрутів PUT / PATCH / DELETE через edge-контроль, який дозволяє лише POST
  • Обхід middleware, специфічного для маршруту, яке перевіряє лише req.method
  • Виклик обробників, що змінюють стан, через CSRF, коли додаток перевіряє лише зовнішній метод запиту

За замовчуванням middleware зазвичай перевизначає лише POST, тому надавайте пріоритет POST запитам із override-значеннями в header, body та query-string.

Посилання

Tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks