Hello there, ('ω')ノ
鍵が公開されていないアルゴリズムの混乱による JWT 認証バイパスを。
まずは、ログインして。
対象のリクエストをリピータへ。
/admin に変更し、リクエストを送信すると管理者ユーザとして
ログインしている場合にのみ、管理者パネルにアクセスできるようで。
JWT セッションCookie をコピーして、後で使用できるように保存しておいて。
ログアウトして、再度ログインして。
新しい JWT セッション Cookie をコピーして、
これで、サーバによって生成された 2 つの有効な JWT が。
ターミナルで次のコマンドを実行し、2 つの JWT を引数として渡すことに。
token1:初めにログインしたときのJWT セッションCookie
token2:二度目にログインしたときのJWT セッションCookie
docker run --rm -it portswigger/sig2n <token1> <token2>
X.509 および PKCS1 形式の Base64 でエンコードされた公開鍵と
これらの各キーで署名された改ざんされた JWTが表示されて。
セッション Cookie をこの上記の JWT に置き換えてから、リクエストを送信すると
200 応答を受け取り、アカウント ページに正常にアクセスできたので
これは正しい X.509 キーということで。
セッション Cookie を削除する 302 応答を受け取った場合、
/login にリダイレクトされるので間違った X.509 キーで。
次にBase64 でエンコードされた X.509 キーをコピーして。
JWT Editor Keysタブで、New Symmetric Keyをクリックし
ダイアログで [Generate] をクリックして、JWK 形式で新しいキーを生成して。
k プロパティの値を、コピーした Base64 でエンコードされたキーに置き換えて。
これは、実際のキーで。
JWT のヘッダで、alg パラメータが HS256 に設定されていることを確認し
JWT ペイロードで、sub クレームの値をadministratorに変更して。
[Sign]で、生成した対称キーを選択して。
[Don't modify header] オプションが選択されていることを確認し、[OK] を。
変更されたトークンは、サーバの公開鍵を秘密鍵として使用して署名されて。
エンドポイントを /admin に変更して送信すると。
管理パネルに正常にアクセスしたことを確認でき。
Carlos を削除するためのエンドポイントとパラメータにアクセスすると。
クリアできて。
Best regards, (^^ゞ