D-CTF Finals 2016 参加記

,

https://dctf.def.camp/

D-CTFの本戦へscryptosとして参加して優勝してきた。 193s氏としほさんとふるかわ氏と私でルーマニアの会場へ行き、日本からはしゃろさんとバッタさんの支援を受けた。

賞金は$1500$euroでした。現地に行った$4$人だけで分配としても交通費のため大赤字なのはつらい。 まあ目的はctfへの参加であるし、楽しかったので良し。

ctf

誰も解けなかったrev200を除いて全完チームが$2$つあり、first bloodの差($6$ptなのでそれなりに大きい)で$1$位。 主な勝因としては193s氏がよく分からない方法でよく分からない問題のflagのもぎとったことか。

私個人としては多少は貢献できたのかなと思っている。 予選のときは(pwnで出題不備が複数あった影響が大きいとはいえ)$1$点も入れられなかったので、それなりに気になっていたのでよかった。

writeupは後に参照しそうなものだけ:

Eye Eye Captain (Missedchalls 300)

スマホの画面が明滅している動画が渡される。 攻撃者が情報を盗み出しているところであるので、何が流出したか調べろという問題。

opencvで適当な位置の輝度を各frameごとに取得してtextに落とすコードを書いた。 意外と短い。

#!/usr/bin/env python2
import numpy as np
import cv2
cap = cv2.VideoCapture('./surveillance.mp4')
while cap.isOpened():
    flag, frame = cap.read()
    pos_frame = cap.get(cv2.cv.CV_CAP_PROP_POS_FRAMES)
    acc = 0
    for dy in range(-4,4):
        for dx in range(-4,4):
            acc += sum(frame[700 + dy][600 + dx])
    print ('%.2f' % (pos_frame/60)), acc

この後はふるかわ氏が(紆余曲折とguessingの末に)flagにしてくれた。

  • d-ctf終了後のホテルでのyukicoder
    • 3完だが嘘解法のため終了後即撃墜
  • 空港で待機中にatcoder
    • c openしてひたすら座ってる内にバッテリーがなくなって終了
    • ネットワークの調子が悪いのは認識してたが、バッテリーは持つはずだと踏んでたので要反省
  • しほさんや193s氏と話していたら、やはり暗号や基本的な代数あたりをちゃんとやるべきという気持ちになった やっていきたい

memo

次の海外遠征のためのメモ。

  • ヨーロッパはコンセントの規格が違う
    • 空港で売ってるでしょと思ったが買えなかったので、事前に買っておくべき
    • 電圧の違いにも注意 (220Vだった)
  • 飛行機のため、腰まくらと首まくらがあるとよさそう
    • 日本$\to$トルコの$13,14$時間の便では腰まくらが用意されていたが、トルコ$\to$ルーマニアの$2,3$時間の便ではなかった
    • 首まくらしてる人はちらほら居た
  • 飛行機の席
    • 中央の$4$人席は運が良いと$4$席占有して横になって寝られる 雑に座席移動も可らしい
    • 通路側がよさげ 足を伸ばせるのとトイレに行きやすい
  • 電源も無線も確保は難しいので、本を持っていくとよい
    • 紙とペンがなくても読めるタイプのやつのほうがよさげ
    • 機内にコンセントはなかった
    • 空港によってはfree wifiに認証があり突破に失敗しうる
  • 本番中に寝る必要がないように注意しておく
    • ねむたさで頭が回ってなかったためいくらか寝たが、そうでなければexp300はしゃろさんに任せなくてよかったはず
    • 機内でひたすら寝てもむしろ疲れてたりするっぽい?
  • 英語頑張って