試運転ブログ

技術的なあれこれ

CyberRebeatCTFに参加した

2018/9/8 ~ 9/9 で開催されていたCyberRebetCTFにソロで参加していて完走できました。

ennach.sakura.ne.jp

結果は全問とけたので1/147位でした。他にも10数チーム全完していて、解けた順番的には結構後ろの方だった気がします。

よくわからないチーム名で登録していましたが、自分でもなんでこのチーム名にしたのかはわかりません。疲れてたんだと思います。

f:id:otameshi61:20180909144804p:plain

f:id:otameshi61:20180909144953p:plain ※ 問題の得点が変動するのでタイミング的に写真の得点がずれてますね

個人的に特に楽しめた問題を二つ紹介します。

Last 5 boxes

The FLAG is hiding at the last 5 boxes.

https://cyberrebeat.adctf.online/static/a4e796eabf01249f6eb8d565ee66849a5bacb472d4ea8adcc6b4dda8f97d318c.mp4

Steganoのジャンルでmp4ファイルが渡される問題。exiftoolとかで情報をみても特に目ぼしい情報はありませんでした。問題文のboxっていうのがmp4の構造を示す言葉かなと思い「mp4 box」でぐぐると以下のブログがヒット。

qiita.com

MP4Box -std -diso  a4e796eabf01249f6eb8d565ee66849a5bacb472d4ea8adcc6b4dda8f97d318c.mp4

で以下がわかるので、抜き出して、繋げたらpngになった。

<UUIDBox Size="1024" Type="uuid" UUID="{18E66A6B-FBDF0D41-80DF83B8-E1CE2B59}" Specification="unknown" Container="unknown" ></UUIDBox>
<UUIDBox Size="1024" Type="uuid" UUID="{07B14494-B8E2AF4D-9BD6652B-52052AC6}" Specification="unknown" Container="unknown" ></UUIDBox>
<UUIDBox Size="1024" Type="uuid" UUID="{14C6D472-C69F4846-ACD23749-2ED79CB9}" Specification="unknown" Container="unknown" ></UUIDBox>
<UUIDBox Size="1024" Type="uuid" UUID="{792E16CC-B4887445-AC310002-334FD627}" Specification="unknown" Container="unknown" ></UUIDBox>
<UUIDBox Size="1612" Type="uuid" UUID="{C386DEC1-144E214D-9BBE788C-4474F39F}" Specification="unknown" Container="unknown" ></UUIDBox>
from binascii import unhexlify

def read_until(f, delim='\n'):
    data = b''
    while not data.endswith(delim):
        data += f.read(1)
    return data

uuids = [
    ('18E66A6BFBDF0D4180DF83B8E1CE2B59', 1024),
    ('07B14494B8E2AF4D9BD6652B52052AC6', 1024),
    ('14C6D472C69F4846ACD237492ED79CB9', 1024),
    ('792E16CCB4887445AC310002334FD627', 1024),
    ('C386DEC1144E214D9BBE788C4474F39F', 1612)
]

for uuid, size in uuids:
    # split -b 4m  a4e796eabf01249f6eb8d565ee66849a5bacb472d4ea8adcc6b4dda8f97d318c.mp4 video.mp4-
    with open('video.mp4-af', 'rb') as fp:
        _ = read_until(fp, unhexlify(uuid))
        s = fp.read(size - 24)
        with open(uuid, 'wb') as f:
            f.write(s)
cat 18E66A6BFBDF0D4180DF83B8E1CE2B59 07B14494B8E2AF4D9BD6652B52052AC6 14C6D472C69F4846ACD237492ED79CB9 792E16CCB4887445AC310002334FD627 C386DEC1144E214D9BBE788C4474F39F  > flag.png

以下の画像ができる。

f:id:otameshi61:20180909151641p:plain

MP4の構造を知れたので勉強になった。

Opening Movie

http://blazor.cyberrebeat.adctf.online

以下のタグで読み込まれるWebAssemblyを解析する問題。

 <script src="_framework/blazor.js" main="MoviePlayer.dll" entrypoint="MoviePlayer.Program::Main" references="Microsoft.AspNetCore.Blazor.Browser.dll,Microsoft.AspNetCore.Blazor.dll,Microsoft.Extensions.DependencyInjection.Abstractions.dll,Microsoft.Extensions.DependencyInjection.dll,mscorlib.dll,netstandard.dll,System.Core.dll,System.dll,System.Net.Http.dll" linker-enabled="true"></script>

MoviePlayer.dllを落としてきて、ilspyでデコンパイルして調べるとフラグの置いてあるURLがわかる問題でした。WebAssemblyは触ったことなかったので良い経験になりました。

普段はMacを使っていますが、以下の記事を参考にしたら、簡単にilspyを用意できたので良かった(なんか昔はもう少し準備が面倒だった気がする)。

qiita.com

感想

いろいろな問題があって楽しめました。公式サイトのイラストがめっちゃ良かったのと、Signatureの問題文の†真・聖天使猫姫†さんがめっちゃよかったと思います。