最後まで解けてないです
The classic! A grilled-to-perfection patty topped with all the fixin's-- a slice of Gonzo yellow cheese, Revwien lettuce, topato slices, grilled Ojomian onions and...
Note, it is recommended to clear your cookies for this challenge as some may have the same names used in other challenges.
Connect here:
http://one.jh2i.com:50030
http://two.jh2i.com:50030
http://three.jh2i.com:50030
http://four.jh2i.com:50030
http://five.jh2i.com:50030
スターウォーズのファンサイト。
/ /?category=Anthology%20films カテゴリごとに見られる /post/EPISODE%20I%20-%20THE%20PHANTOM%20MENACE エピソード1のサイトはこんな感じ。 /?search=search 検索システムがある /signin /signup /logout 会員システムもある。
まあ、そんなに怪しい所はない。
検索とかpostの後ろとか色々やってみるけど、全然ダメ。
解説を見た
kid path traversal
初めて見たな。
kidというのがよくわかっていなかったけど、そういう用途で使うのか、実装依存っぽいな。
kid path traversal
JWTにkidという開発者が自由に書けるプロパティがあるが、kidを元にトークンの検証を行う場合に実装依存の脆弱性が入り込むことがある。
ざっくり言うと、kidを元に検証用の秘密鍵を取ってきている場合、悪意のあるkidを指定すると任意の秘密鍵での検証をサーバ側に強制させられる。
Cookieのtokenを見てみると、以下のようになっている。
{ "typ": "JWT", "alg": "HS256", "kid": "secret.txt" }
kidにファイル名が入っている。
鍵情報がsecret.txtに入っていて、読み込んでいるに違いない。
secret.txtを任意のパスに変えて、共通鍵を任意のものにしよう。
雑に変えてみると、エラーコードが帰ってくる。
解説にあるようにkidを/dev/null
にしよう。
これでheaderを作って、とりあえずpayloadには何も入れないようにして、""
を鍵にして署名しよう。
payloadを{}
のままにしてJWTを作るとエラー出てくる。
invalid load key, '{'.
これでググると、pickleが使われていることが分かる。pickleに任意のデータが渡せると言えば…
安全でないデシリアライゼーション (by Pickle)
payload部分に悪意あるシリアライゼーションデータを埋め込もう。
と思って試行錯誤するけど、なんか分からないけどうまくいかないー