きっかけ
今までWeb Exploitation問題を中心に解いていたのですが、Web問題がどんな感じなのか気になって解いてみました。
今回は、そのwriteupを書いていきます。
問題名:JaWT Scratchpad
問題を起動するとリンクが表示されるので、リンク先ページを見ていきます。
admin(管理者)には特別なスクラッチが割り当てられているのでadmin以外でログインしてくださいと記載されています。
特別なスクラッチにフラグが隠されていそうですね…
他にもサイト上で気になる点が2つあります。
- powered by JWTのリンク
- 画面一番最後の文章
まず、画面上にあるpowered by JWTのリンクについてみていきます。
とりあえずリンク先を見てみるとJSON Web Token(JWT)デバッガーサイトが出てきました。
このことから、JWTがJSON Web Tokenであることが分かりました。
JSON Web Tokenとは?
JSON形式のデータをデジタル署名で保護した、安全な情報共有のためのコンパクトなトークン規格です。
JWTの構成
ヘッダーとペイロード(データの中身)、署名が .(ドット)で区切られて表示されます。
ここでは詳細に解説しませんが、初学者向けに丁寧に解説しているサイトがあるので気になる方は下のリンクを参照してください。
URL:https://qiita.com/asagohan2301/items/cef8bcb969fef9064a5c
次に一番下の文章ですね。
わざわざJohnというワードが書いてあり、この時点でJhon the Ripperに関係しているのかなと思っていたらリンク先がJohn the RipperのGithubページになっていました。
情報の整理
- adminでログインできればフラグが入っていそうなスクラッチがみれる
- JWTが関係している
- Jhon the Ripperが関係している
調査
JWTはcookieに格納可能なのでcookieを確認して行きたいと思います。
cookie確認方法:右クリック→検証→アプリケーション→cookie
ログイン前にcookieを確認するとまだ生成されていなかったので、試しにtestという名前でログインしていきます。

testユーザーに割り当てられたスクラッチが表示され、メモ欄が出てきます。
今回の問題とは関係ないだろうと思いながら、XSSを試しましたが無理でした…
一般でログインができたので、cookieを確認して行きます。

cookieの中にJWTが格納されていたので、デバッガーサイトで確認します。
見切れちゃってるのですが、上からヘッダー、ペイロード、署名の順番で表示されています。
この時点で、ペイロード部分をadminに変換したJWTを作成してcookieに入れてあげればadminに成りすますことができるんじゃないかと考えました。
デバッガーサイトにはエンコード機能がついているのでJWTを簡単に生成することができるのですが、署名作成に必要な秘密鍵の特定に失敗しているので現時点ではJWTを生成することはできません。
ここで活躍するのが、John the Ripperです。
John the Ripper
※kaliLinuxを使っていきます。
John the Ripperの辞書攻撃を利用して、秘密鍵を特定していこうと思います。
JWTの形式は変換しなくてもJohn the Ripperが認識できる形式になっているので、新しく作成したファイルにコピーします。
※私はnewfile1という名前のファイルにコピーしました。

辞書攻撃で使う辞書は、rockyou.txtです。
コマンド↓
john --wordlist=辞書のパス 検証データが入ったファイル

実行するとilovepicoが秘密鍵であることが分かりました。
デバッガーサイトに戻り、署名部分に入力していきます。

※署名部分が赤く表示されているのですが、しっかりJWTが生成されるので気にしなくて大丈夫です。
右側にペイロードがadminに書き換わったJWTが生成されました!
これをcookieに保存してリロードするとフラグが出てきます。

ここまで閲覧していただき、ありがとうございます。
今回はJhon the Ripperのコマンド解説などはしなかったのですが、興味がある方はTryHackMeの問題解説でQiitaに投稿していますので、以下のリンクからご参照下さい。
URL:https://qiita.com/nekobayashi-222/items/48dec2c349ff96b7e93e

