Zuck3r’s Study

エンジニアではありません

picoCTF 2019 : JaWT Scratchpad を考えてみる

はじめに

久しぶりの記事になっています… 少し基礎知識を増やしたいなという事で半年は本を読んだり、インプット多めの期間となっていました。また、学校のオンライン講義移行等で生活の変わりように慣れるのに少し手間取ったりしていました。💦 それでは、問題を解いていきたいと思います。

本題

問題はこんな感じ。adminでログインしたらフラグが出ますよ~と言った感じでしょうか。 f:id:Zuck3r:20200824214554p:plain 一先ず、URLにアクセス。ヒントを見ても、サイトを見てもJWTについて強く触れているのでそれについて調べてみる… f:id:Zuck3r:20200824214858p:plain

JWTとは何なのか?JSON Web Tokenの略称であり、属性情報(Claim)をJSONデータ構造で表現したトークンの仕様らしい。 分かり易く説明しているサイトがあったのでリンクを貼っておきます。ほぉ、こんなものがあったのかと。 techblog.yahoo.co.jp という事で""hoge""と、""admin""でログインしてみる。確かに、""hoge""の方ではログイン出来たのでJWTがクッキーの中にある。ついでにデコードした内容も貼っておきます

f:id:Zuck3r:20200824215452p:plain
hogeでログイン
f:id:Zuck3r:20200824215839p:plain
hogeでログインした時のクッキーをデコードしたもの
f:id:Zuck3r:20200824220016p:plain
adminは上手くいくわけも無く…

一先ず、安直にクッキーの改竄を考えた。userをadminにすれば良いのでは無かろうかと。クッキーを入れ替えリロード。すると、Internal Server Errorエラーが出た。どうやらダメらしい。

f:id:Zuck3r:20200824220341p:plain
左の値をクッキーのjwtにセットしてみる

次はどうしよう。下の文を読み返してみた。Johnにリンクがあり、John The Rippergithubページに飛ばされた。まぁ、使えという事だろう。 john the ripper hacking jwt と検索した感じで行くと、弱い秘密鍵を見つけ出すことが出来るらしい。という事で、おすすめのパスワードリストとされているrockyou.txtを辞書として使い攻撃してみる…コマンドとしては以下の通り。出てきた秘密鍵をさっきの改竄したjwtに入れ直して、変更したクッキーを入れてページをリロード。フラグが出た。

sudo john /home/kali/Desktop/pico.jwt --wordlist=/home/kali/Desktop/rockyou.txt

f:id:Zuck3r:20200824234106p:plain
出てきた秘密鍵に変更して、クッキーを改竄するとフラグが出た

最後に

かなり久しぶりにCTFの問題を解いてみました。以前よりも、意味がより理解できるようになっていたので少し安心しました。 JWTに対する攻撃方法が他にもヘッダーのalgフィールドをnoneにしてしまう方法など、プラスアルファの知識も増えて個人的には良かったです。 今後も、時間が取れれば少しずつですが更新していきたいと思います。