問題
解いてみた
リンクが2つあるので上の「http://ctfq.sweetduet.info:10080/~q31/kangacha.php 」にアクセスしてみます。
Gachaボタンを押すと下に名前が出てきました。
1回押すたびに一つずつ。
2個目のリンク押してみます。
PHPのソースが出てきました。
このソースがさっきのwebページのソースということでしょう。
何らかの条件でGachaボタンを押すとFLAGが出るという流れだと思います。
ソースの意味を長々と書いてもしょうがないので、要約すると
- ランダムで0~9の値をだす。
- ランダム値をCookieの値shipに保存する
- (FLAG_XXXXXXX + ランダム値)をSHA512した値をCookieの値signatureに保存する
- FLAGを出すにはCookieの値shipが10のとき かつ Cookieの値signatureが(FLAG_XXXXXXX + 10)をSHA512した値であること
ということです。
cookieの値はブラウザで編集できるので肝となるのは(flag_XXXX + 10)をSHA512した値を算出することということです。
ハッシュする前の値が不明(flagが不明なため)なのに、ハッシュ後の値が分かるもんなんですかね。
調べてみます。
HashPumpというのを使うと予測できるそうです。
CTF/Toolkit/HashPump - 電気通信大学MMA
すごいですね。
ハッシュ値って予測不能と言われていますが、意外ともろかったりするのかもしれません。。。
既知のハッシュ前の文字列とハッシュ後の文字列が必要らしいので、一度Gachaボタンを押して、5が出てきたのでこれを使って必要な値をまとめると
| 項目 | 値 |
|---|---|
| 既知のハッシュ前の値 | 5 |
| sha512(FLAG_XXX + 5) | b5ff24ed3b12bcd01169c1920365397d7568adf25bfb21dd6dcae82c7de93bd00b732e3f0cc5f17370982bd09ff97d255c65c12b459bd443a68b738179a44a19 |
| FLAGの文字数 | ここは勘ですが、21が多いので21 |
| 追加文字列 | ,10(区切り文字の,が必要) |
これでやってみます。
というような結果になりました。
Cookieを編集してみます。
これでGachaボタンを押す。
んーダメです。
通信をWiresharkで見てみます。
まさかの2回通信していることが分かりました。
さっき編集したのは1回目の通信だと思うので、そのときに初期化?されてしまって2回目は数値が1個のやつに戻るみたいです。
Burp Suite使って2回目の通信を編集します。
これでFoward
なかったことにされてしまいます。。。
よくわからなくなってきたのでXAMPPをインストールしてPHPをローカルで実行できる環境を作りました。
ソースをコピーしていろいろ試したところ、URLエンコードをしないといけないことが分かりました。
ただここら辺はなんでかよくわからないんですが、
- 10の前の「,」はそのままでいい。
- 大量にある\x00とかの「\x」を「%」に変換する。
という編集が必要でした。
答えは出たもののエンコードの意味がよく分からなくて不完全燃焼です。。。










