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

Quick Fingerprinting

Recon sırasında faydalı Express göstergeleri:

  • X-Powered-By: Express veya stack trace’lerde express, body-parser, qs, cookie-parser, express-session veya finalhandler gibi isimlerin geçmesi
  • s: (signed cookie) veya j: (JSON cookie) öneki olan cookies
  • connect.sid gibi session cookie’leri
  • _method=PUT / _method=DELETE gibi gizli form alanları veya query parametreleri
  • Hata sayfalarında Cannot GET /path, Cannot POST /path, Unexpected token in body-parser veya query parsing sırasında URIError mesajları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.

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-parser veya express-session tarafından işlenen signed cookie’ler
  • j:<json>cookie-parser tarafı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.

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, qs dahil olmak üzere farklı parserlarla yapılandırılabilir
  • express.urlencoded({ extended: true }), application/x-www-form-urlencoded için qs-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:

Mass Assignment Cwe 915

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.hostname via X-Forwarded-Host
  • req.protocol via X-Forwarded-Proto
  • req.ip / req.ips via X-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 uygulamalarda secure cookie 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ır
  • MemoryStore prodüksiyonda genellikle zayıf operasyonel olgunluğu ve yeniden başlatmalarda kararsız session davranışını gösterir

Pratik fixation iş akışı:

  1. Hedeften anonim bir session çerezi edinin.
  2. Bu çerezi bir mağdura gönderin veya onunla kendiniz kimlik doğrulaması yapın.
  3. Girişin kimlikli durumu mevcut SID’e bağlayıp bağlamadığını kontrol edin.
  4. 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 gizli PUT / PATCH / DELETE rotaları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

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