PortSwiggerのWebSecurityAcademy のラボをやってみた
このラボでは、セッションの処理に JWT ベースのメカニズムを使用し。
堅牢な RSA キー ペアを使用してトークンの署名と検証を行い。
ただし、実装上の欠陥により、このメカニズムはアルゴリズム混乱攻撃に対して脆弱de。
ラボを解決するには、まずサーバーの公開キーを取得します。 これは標準エンドポイント経由で公開されます。 このキーを使用して、管理パネルへのアクセスを許可する変更されたセッション トークンに署名します。 /admin、ユーザーを削除します carlos。
まずはwiener:peter でログインを。

Burp Suite でProxyを確認、JWT有りなのでjwt.io で確認を。


alg: RS256 とあるので、対称アルゴリズムを使ってバイパスできないか。
まずは公開鍵を探してみて、エンドポイント:/jwks.json と /.well-known/jwks.json を試してみて。
/jwks.json にアクセスすると公開鍵がゲットでき。

公開鍵が手に入ったので、HS256で公開鍵を作成し、それで署名すればバイパスできるのでは?と考え。
JWT Editor でRS256の公開鍵を作成し、それをエンコードしてHS256の公開鍵を作成し。

これを「Copy public key as PEM」としてコピーし、Decoderに貼り付けてエンコード。

エンコードしたkeyをコピーし、NewSynmetricKey でHS256 の公開鍵を作成。
Generate を押して、"k" の値をエンコードした公開鍵に置き換えて。

/admin でadminパネルにアクセスし、リピーターへ。

JSON Web Tokenのタブから、algをHS256、subをadministrator に変更し、
先程作成したHS256の公開鍵でsignする。
Headerは Modify しない。

Send すると200 OK が返り。
エンドポイント: /admin/delete?username=carlos へアクセスしてアカウントを削除でき。


ほなほな。