Skip to content

Instantly share code, notes, and snippets.

@gion-pop
Last active November 9, 2017 16:33
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gion-pop/dd468f240d959f03f18e to your computer and use it in GitHub Desktop.
Save gion-pop/dd468f240d959f03f18e to your computer and use it in GitHub Desktop.
SECCON 2015 Online CTF Writeup

SECCON 2015 Online CTF Writeup

人生と研究がしんどいのでフルでは参加しなかった. 早く楽になりたい

詳しくは @matsubara0507 の書いたWriteupを読んでほしい

自分でFlagを獲ったのは次の問題:

  • SECCON WARS 2015
  • Unzip the file
  • Exec dmesg

SECCON WARS 2015

またおまえか形式の問題. 再生すると, 文字が流れていくが, QRコードの部分が常に暗くなっているので, コマで切り出して処理すればよさげな感じだった. ただし, 途中でSECCONロゴが前面を流れて邪魔してくる.

諸般の事情でOpenCVで動画を扱う方法を会得していたので, それを試してみることにした.

import cv2
import numpy as np


vid = cv2.VideoCapture('8SFsln4VyEk.mp4')
print('File loaded.')

for _ in range(600):
    vid.read()
print('Skipped.')

i = 0
frames = []
while True:
    ret, frame = vid.read()
    if not ret:
        break
    frames.append(cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY))
sum_frame = np.sum(frames, axis=0)
sum_frame[sum_frame < 18000] = 0

cv2.imwrite('result.png', sum_frame)
cv2.imshow('', sum_frame)
cv2.waitKey(0)
cv2.destroyAllWindows()

結果 600フレーム目くらいまでロゴが邪魔するので飛ばして, それ以降のコマをグレー画像にしてリストに入れておく. そのあとnp.sum()で1枚にまとめて, 適当に閾値を決めて出力. まとめて出力するだけだと境界がはっきりしないかなんかでうまくQRコードとして認識してくれなかった.

Unzip the file

Zipならおそらく既知平文攻撃だろうということと, PkCrackを使えばよさそうという情報はあったので, 適当に遊んだ.

まずはPkCrackをビルド:

% cd tmp/
% wget https://www.unix-ag.uni-kl.de/~conrad/krypto/pkcrack/pkcrack-1.2.2.tar.gz -O - | tar zxv
% cd pkcrack-1.2.2/src
% make

とくに問題なくビルドはできた.

既知平文についての情報を得るために, 解凍しようとしてみる:

% unzip /vagrant/unzip.zip
Archive:  /vagrant/unzip.zip
[/vagrant/unzip.zip] backnumber08.txt password:

もちろんわからないので空のままEnter:

   skipping: backnumber08.txt        incorrect password
   skipping: backnumber09.txt        incorrect password
   skipping: flag                    incorrect password

backnumber0?.txtというファイルがすぐ見つかるのだろうと思ってググったら, どうやらSECCONメルマガのバックナンバーのようだったので, このファイルでZip書庫を作成してPkCrackに渡した:

% cd ../
% zip backnumber09.zip backnumber09.txt
% src/pkcrack -C /vagrant/unzip.zip -c backnumber09.txt -P backnumber09.zip -p backnumber09.txt -d /vagrant/decrypted.zip

めでたく/vagrant/decrypted.zipが作成されたので解凍. flagファイルの素性は

% file flag
flag: Microsoft Word 2007+

とのことだったので, 適当に改名してWordで開く: 白文字に設定されていただけだった.

Exec dmesg

ISOファイルをVirtualBoxに渡して起動したら, なんとなくLinuxが起動したので, とりあえずdmesgしたが,

$ dmesg
dmesg: applet not found

つれない返事だった. あまりBusyBoxとかappletなるものはよくわからないけど, 多分この環境のBusyBoxはdmesgを有効にされてないんだろうな, と思った.

dmesg以外でもどうにかすればメッセージバッファを確認できたよな……と思ってまず/var/logを見たけど何もなかった. 次にls /dev/とかしてたら/dev/kmsgなるスペシャルファイルがあったので, これをlessした. どうやらそれっぽい. ここにフラグがあるんだろうなと思ったので, SECCONで検索をかけた:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment