LoginSignup
2
0

More than 3 years have passed since last update.

TSG CTF 2019 writeup

Last updated at Posted at 2019-05-05

TSGCTF2019の解答
floretとして2人で参加
Warmupと感想入力問題(?)含めて5問解けて14位 870ptsでした

[Forensic]Obliterated File

Point: 92 (90solves)

問題文

※ この問題は非想定な解法があり,"Obliterated File Again" で修正されました.元の問題文は以下の通りです.

TSG CTFに向けて問題を作っていたんですが,いつの間にか誤ってflagのファイルをコミットしていたことに気付いた!とにかく,Google先生にお伺いして次のようなコマンドを打ちこみました.よくわからないけどこれできっと大丈夫...?

$ git filter-branch --index-filter "git rm -f --ignore-unmatch problem/flag" --prune-empty -- --all
$ git reflog expire --expire=now --all
$ git gc --aggressive --prune=now

解法

git log --name-status

を実行するとflagという怪しい履歴が。。。
ob.png

git reset --hard 8412

でそのcommitまでさかのぼる
lsで確認するとflagというファイルがあるので
fileコマンドで確認すると

$ file flag
flag: zlib compressed data

zlibという形式で圧縮されているようなので
pythonで解凍する

import zlib
f=open('flag',mode='rb')
zlib.decompress(f.read())

これでflagゲット

TSGCTF{$_git_update-ref_-d_refs/original/refs/heads/master}

[Forensic]Obliterated File Again

Point: 178 (61solves)

問題文

さっきのコマンドには間違いがあったことに気づきました.これで今度こそ本当に,本当に大丈夫なはず......?

$ git filter-branch --index-filter "git rm -f --ignore-unmatch *flag" --prune-empty -- --all
$ git reflog expire --expire=now --all
$ git gc --aggressive --prune=now

解法

先程と同様に

git log --name-status

としてもflagのログを発見できない
履歴の消し方が強くなっているようだ

gitの履歴はhash値へのポインタのようなものなので
hash値のリストを見ることができればflagの情報
を確認できると考えて調べると

git rev-list --objects --all

で全てのobjectのhash値の一覧を見ることができると分かった
ob2.png

problem/flagというhash値を

git cat-file -t c1e3

で調べるとblobであることが分かったので

git cat-file -p c1e3

で中身を見ると文字化け

前の問題と同じだろうとエスパーして

git cat-file -p c1e3 > flag

で中身を別ファイルに入れて、

import zlib
f=open('flag',mode='rb')
zlib.decompress(f.read())

Obliterated Fileで使ったpythonをそのまま実行してflagゲット

TSGCTF{$_git_update-ref_-d_refs/original/refs/heads/master_S0rry_f0r_m4king_4_m1st4k3_0n_th1s_pr0bl3m}

結局想定外の解法は分からなかった。。。

[Stego]Harekaze

Point: 499 (8solves)

問題文

Are you ready for next CTF?

次のCTFの準備はお済みですか?

解法

harekaze.jpg
という画像が与えられる

単純にflagになる文字列の部分の色を変えてるだけだと思い
pythonの画像処理ライブラリ使用して画像を変換

import cv2
filename='harekaze.jpg'
gry=cv2.imread(filename,0)
cv2.imwrite('flag.jpg',gry)

見づらいけど色覚ある人なら読めるレベル
これでflagゲット
flag.jpg

一応

TSGCTF{UnderTheBlueSeaMermaidSwims}

感想など

正直問題としてはHarekazeが一番簡単でした。
何か間違いあったら指摘お願いします。

参考にしたサイト

https://qiita.com/nkshigeru/items/eb2b6f758c2707757738
https://docs.python.org/ja/3/library/zlib.html
https://git-scm.com/book/ja/v1/Gitの内側-メインテナンスとデータリカバリ

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0