NodeJS Express
Tip
AWSハッキングを学び、実践する:
HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
簡易フィンガープリンティング
recon中に有用な Express の指標:
X-Powered-By: Expressまたはスタックトレースにexpress、body-parser、qs、cookie-parser、express-session、またはfinalhandlerが含まれるs:(署名済み cookie)またはj:(JSON cookie)で始まるクッキーconnect.sidのようなセッションクッキー_method=PUT/_method=DELETEのような隠しフォームフィールドやクエリパラメータ- エラーページで
Cannot GET /path、Cannot POST /path、body-parserのUnexpected token、またはクエリ解析中のURIErrorが漏れる
Express を確認したらミドルウェアチェーンに注目してください。興味深いバグの多くはフレームワークのコア自体ではなく、パーサー、proxy trust、セッション処理、および method-tunneling に起因します。
Cookie Signature
The tool https://github.com/DigitalInterruption/cookie-monster is a utility for automating the testing and re-signing of Express.js cookie secrets.
Express は一般的に以下の2つの有用なクッキー形式を公開します:
s:<value>.<sig>-cookie-parserまたはexpress-sessionが処理する署名付きクッキーj:<json>-cookie-parserにより自動的に解析される JSON クッキー
もし cookie-parser が署名付きクッキーを受け取り、その署名が無効であれば、改ざんされた値の代わりに値は false になります。アプリケーションが secrets の配列を受け入れる場合、シークレットのローテーション後でも古いシークレットで既存のクッキーが検証されることがあります。
特定の名前を持つ単一のクッキー
cookie-monster -c eyJmb28iOiJiYXIifQ== -s LVMVxSNPdU_G8S3mkjlShUD78s4 -n session
カスタム wordlist
cookie-monster -c eyJmb28iOiJiYXIifQ== -s LVMVxSNPdU_G8S3mkjlShUD78s4 -w custom.lst
複数の cookies をバッチモードでテストする
cookie-monster -b -f cookies.json
カスタム wordlist を使って batch mode で複数の cookies をテストする
cookie-monster -b -f cookies.json -w custom.lst
新しい cookie をエンコードして署名する
秘密を知っていれば、その cookie に署名できます。
cookie-monster -e -f new_cookie.json -k secret
クエリ文字列とURLエンコードされたパーサの悪用
Expressのターゲットは、攻撃者が制御するキーをネストされたオブジェクトにパースするときに興味深くなることが多い。
req.queryはqsを含む異なるパーサで構成できますexpress.urlencoded({ extended: true })はapplication/x-www-form-urlencoded用にqsスタイルのパースを使用します- ネストされたパースは、解析されたオブジェクトがアプリケーションの状態にマージされると、object injection, mass assignment, NoSQL injection, and prototype pollution chains を引き起こし得ます
試すべき実用的な 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 に対して特に試す価値のある追加テスト:
- 深いネスト — parser limits、タイムアウト、または 400/413 の挙動差を確認するため
- 重複するキー — アプリが最初の値を保持するか、最後の値を保持するか、あるいは配列にするかを確認するため
- ブラケット構文(例:
a[b][c]=1)、ドット構文(例:a.b=1)、および__proto__/constructor[prototype]ペイロード
trust proxy の悪用
アプリが app.set("trust proxy", true) を使用している、または過度に多くのホップを信頼している場合、Express は転送ヘッダからセキュリティに関わる値を導出します。reverse proxy がそれらを上書きしないと、クライアントはそれらを直接偽装できます。
影響するのは:
req.hostnameviaX-Forwarded-Hostreq.protocolviaX-Forwarded-Protoreq.ip/req.ipsviaX-Forwarded-For
これが役立つ場面:
- Password reset poisoning and absolute URL poisoning
- IP ベースの allowlists、rate limits、または audit trails のバイパス
securecookie handling や req.protocol を基にした HTTPS-only ロジックへの影響- アプリが forwarded host/proto ヘッダで絶対リンクをテンプレート化している場合の redirects や cacheable responses の 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"}
Check whether generated links, redirect locations, logs, or access-control decisions now use attacker-supplied values.
Related pages:
Reset/Forgotten Password Bypass
Cache Poisoning and Cache Deception
express-session テストノート
一般的なExpressのデプロイではexpress-sessionを使い、セッション識別子のCookieに署名するが、実際の状態はサーバー側に保存される。
有用なチェック:
- Session fixation: ログイン前のCookieで認証し、ログイン後にSIDが同じままか確認する
- Weak secret rotation: 一部のデプロイは過去の秘密鍵の配列でCookieを検証するため、以前有効だった署名が引き続き有効になる場合がある
saveUninitialized: true: アプリが匿名ユーザーに事前認証セッションを発行し、fixationを容易にし、brute-forceやキャッシュ解析のためのセッション攻撃対象面を増やすMemoryStoreがproduction環境で使われている場合、運用成熟度が低く、再起動時にセッション挙動が不安定になることが多い
実践的な fixation ワークフロー:
- ターゲットから匿名のセッションCookieを取得する。
- そのCookieを被害者に送るか、自分でそれを使って認証する。
- ログインが認証済みの状態を既存のSIDにバインドするか確認する。
- もしそうなら、別のブラウザセッションで同じCookieを再利用する。
アプリが認証後にreq.session.regenerate()を呼んでいない場合、fixationは依然として可能なことが多い。
Method Override Tunneling
一部のExpressアプリはmethod-overrideを使って、HTMLフォームがネイティブに送信できないHTTPメソッドをトンネリングします。有効な場合、フロントエンド、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
興味深い影響:
POSTのみのエッジ制御を通じて隠されたPUT/PATCH/DELETEルートに到達するreq.methodのみをチェックするルート固有のミドルウェアをバイパスする- アプリケーションが外側のリクエストメソッドのみを検証している場合、CSRF を介して状態を変更するハンドラをトリガーする
デフォルトではミドルウェアは通常 POST のみをオーバーライドするため、ヘッダー、ボディ、クエリ文字列のオーバーライド値を持つ POST リクエストを優先する。
References
- https://expressjs.com/en/guide/behind-proxies.html
- https://portswigger.net/research/server-side-prototype-pollution
Tip
AWSハッキングを学び、実践する:
HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。


