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 へアクセスしてアカウントを削除でき。
ほなほな。