はじめに
本記事ではSECCONオンライン2015の「Unzip the file」を解説します。
問題
解き方
問題の把握
question.txtには以下のように書かれています。
Unzip the file
unzip
つまり、「unzipファイルを解凍せよ」とのことです。
問題ファイルの調査
fileコマンドを使ってunzipファイルの種別を確認します。
$ file unzip
unzip: Zip archive data, at least v2.0 to extract, compression method=deflate
問題文からも容易に推測はできますが、案の定zipファイルでした。
unzipフォルダの解凍
unzipコマンドでunzipフォルダの解凍を試みます。
$ unzip unzip.zip
Archive: unzip.zip
[unzip.zip] backnumber08.txt password:(↵Enter)
skipping: backnumber08.txt incorrect password
skipping: backnumber09.txt incorrect password
skipping: flag incorrect password
どうやらunzipフォルダは何かしらの方法で暗号化されているみたいです。
中にflagといういかにもな名前のファイル/フォルダが含まれており、unzipフォルダを復号することでflagファイルを確認できそうです。
unzipフォルダの復号
同じくunzipファルダに含まれているbacknumber08/09.txtがヒントになりそうです。そこで、この名前を検索エンジンにかけてみると同名のファイルが平文で見つかりました。このことから、既知平文攻撃による解読が有効だとわかります。
既知平文攻撃
既知平文攻撃はpkcrackというツールにより実現可能です。
まず、backnumber08.txtをzip化します。
$ zip backnumber08.txt
同一フォルダ内に、backnumber08.txt、backnumber08.zip、unzip.zipが入っている状態で次のコマンドを実行します。
$ pkcrack -C unzip.zip -c backnumber08.txt -P backnumber08.zip -p backnumber.txt -d output.zip -a
実行後、flagファイルが平文で生成されます。
fileコマンドを実行するとflagがwordファイルであることがわかるため、ファイル名をflag.docxに変えて開くと、flagを入手できます。
まとめ
本問はzipの暗号化方式の脆弱性を警鐘している。
参考
・入門セキュリティコンテスト