このブログは、大国魂(ITブログ) Advent Calendar 2018 の22日目です。
この記事の内容について
インフラ運用者ではあるもののセキュリティに興味があるので SECCON 2018 オンライン予選 に参加した筆者が、良質な Writeup がたくさんあるにもかかわらず自身の振り返りも兼ねて解けた問題の Writeup を書いた、というものになります。
予選終了後、便利に参照させていただいていた記事はこちらになります。
今回は最も簡単だった Forensics の unzip です。
uznip
解くうえで悩んだことがあれば記載しようとしていましたが、悩むことなく解けたので解き方のみ記載しています。
unzip のファイルの中身について
flag.zip
展開しようとすると暗号化された zip ファイルであり、中身に flag.txt が含まれていることがわかります。
makefile.sh
以下の内容が記載されたシェルファイルとなります。
echo 'SECCON{'`cat key`'}' > flag.txt
zip -e --password=`perl -e "print time()"` flag.zip flag.txt
- 1行目は SECCON のフラグ形式の中に key というファイルの中身を cat で出力したものを flag.txt に出力している。
- 2行目は zip コマンドの -e オプションで flag.zip という名前で flag.txt を暗号化したうえで圧縮している。
- この時指定されるパスワードは perl の -e オプションで time(エポックタイム) を表示したもの。
解法
- flag.zip が生成された時間 = 圧縮時点の時間となるため、この時間をエポックタイムに変換すれば zip をファイルを解凍できと想定。
- タイムスタンプは 2018/10/27 00:10:42 なのでエポックタイムに変換すると、1540566642 が得られます。
- 1540566642 を zip 解答時のパスワードに指定しても解答できないため、処理時間があると考えて 1秒前の 1540566641 を指定すると無事に flags.zip を回答できます。
- 展開された flag.txt に記載された
SECCON{We1c0me_2_SECCONCTF2o18}
がフラグとなります。
問題について
題意的な何か
メール誤送信対策に添付ファイルをパスワード付きzipにするという手法は多くの方が実施されているかと思います。
この作業を自動化しようという意図のスクリプトかと思いますが、今回のエポックタイムのように数字のみだとすぐに破られてしまいそうですね。
もう少し複雑なパスワード生成ツールを利用したワンタイムパスワードが安全そうではあります(破られないとは言っていない)
問題の中身
問題自体は Windows 上だけでも解ける(環境を選ばない)、初心者に優しいタイプの練習問題です。
コマンドの一つ一つがわからなくても、Windows であればググればよく、Linux や mac であれば、ターミナル上で man コマンドを打つだけで解けます。
エポックタイム補足
エポックタイムについては適当な変換サイトを利用して解きましたが、Linux/mac であれば date を利用することで変換可能です。
[root]# date +%s --date "2018/10/27 00:10:42"
1540566642
Windows ではどうなんだ?と気になったので調べてみたら、こちらの記事を参考に PowerShell でできました。
PS C:\> ((Get-Date "2018/10/27 00:10:42 GMT") - (Get-Date "1970/01/01 00:00:00 GMT")).TotalSeconds
1540599042
ワンライナーで出せるものの、1970/1/1 を引き算しないといけないのがひと手間かかる感じですね。