SECCON 2015 Online Unzip the file WriteUp
今回は Crypto を解いていきます。
問題は SECCON 2015 Online より Unzip the file を解いていきたいと思います。
Cryptoというと RSA復号 が定番と思ってたりしますが、
今回は unzip ということでzipファイルの復号の模様。まぁ暗号化zipでしょう。
設問
さて問題文(question.txt)を見ると…Unzip the fileということでzipを解凍せよ、とあります。
ではまず
それではunzipファイルを見てみます。
私が普段利用している端末は Windows 10 Pro で、WSL2 導入済みです。
ということで wsl コマンドで ubuntu のコマンドが使えますので、
file unzip で確認すると…
[host名]:/mnt/c/Users/user$ file unzip
unzip: Zip archive data, at least v2.0 to extract
ということで、やはりzipファイルでした。
ではunzipコマンドで解凍を試みてみます。
[host名]:/mnt/c/Users/user$ unzip unzip
Archive: unzip
[unzip] backnumber08.txt password:
skipping: backnumber08.txt incorrect password
skipping: backnumber09.txt incorrect password
skipping: flag incorrect password
パスワードを求められはじかれました。
中にはtxt二つと、明らかにFlagが書かれていそうなファイルが…
では、zipのパスワードをどう解くか…
Zipの脆弱性
zipのパスワードをどう解くかにあたって、zipの脆弱性調べてみました。
有名どころは以下の模様です。
- 既知平文攻撃
- ZipSlip
まず、既知平文攻撃ですが、wikipediaより、
難解で不可解に思える暗号文でも、手がかりとして
元となる平文中の数語から数フレーズが既知もしくは想定可能であれば
解読の糸口をつかむことができる。
また総当たり攻撃の場合でも、復号した文中にクリブが見つかれば、
試みた復号方法が正しいらしいと知ることができ、全文の解読につながる。
とあります。暗号化zipにおける既知平文攻撃が成功する条件は
・暗号化されたZIPファイルの中に1つでも中身のわかるファイルが存在する場合
となっています。
なお、zipslipのほうはディレクトリトラバーサルであって、
解凍時に意図しないファイルの置き換えを起こさせる、というものなので
復号化には利用できないです(Pwnとかで使えそうですね)
参考記事
既知平文攻撃の実施
それでは、暗号化zipへの既知平文攻撃を実施していきます。
先ほど書いた
「暗号化されたZIPファイルの中に1つでも中身のわかるファイルが存在する場合」
という条件を満たすために、backnumber08.txt か backnumber09.txt が必要です。
ググってみると…以下発見できます。
既知平文攻撃には bkcrack を使ってみます。
既知平文には以下組み合わせて実施できます。
Load data from zip archives
Having a zip archive encrypted.zip with the entry cipher being the ciphertext
and plain.zip with the entry plain as the known plaintext,
bkcrack can be run like this:bkcrack -C encrypted.zip -c cipher -P plain.zip -p plain
Unlock encrypted archive
It is also possible to generate a new encrypted archive
with the password of your choice:bkcrack -C encrypted.zip -k 12345678 23456789 34567890 -U unlocked.zip password
bkcrack -C encrypted.zip -k 12345678 23456789 34567890 -U unlocked.zip password
とあるので、まず、plain.zip にあたるものを作っておきます。
[host名]:/mnt/c/Users/user$ zip backnumber09.zip backnumber09.txt
adding: backnumber09.txt (deflated 60%)
そして、bkcrackを実行。
PS C:\Users\user\Desktop\bkcrack-1.5.0-win64> .\bkcrack -C unzip.zip -c backnumber09.txt -P backnumber09.zip -p backnumber09.txt -U unlocked.zip password
bkcrack 1.5.0 - 2022-07-07
[21:10:28] Z reduction using 4832 bytes of known plaintext
100.0 % (4832 / 4832)
[21:10:29] Attack on 3202 Z values at index 1124
Keys: 270293cd b1496a17 8fd0945a
2.8 % (91 / 3202)
[21:10:29] Keys
270293cd b1496a17 8fd0945a
[21:10:29] Writing unlocked archive unlocked.zip with password "password"
100.0 % (3 / 3)
Wrote unlocked archive.
Flag確認
これで、パスワードが "password" である unlocked.zip ができましたので、
解凍して中を見ていきましょう。
[host名]:/mnt/c/Users/user$ unzip -d unlock unlocked.zip
Archive: unlocked.zip
[unlocked.zip] backnumber08.txt password:
inflating: unlock/backnumber08.txt
inflating: unlock/backnumber09.txt
inflating: unlock/flag
[host名]:/mnt/c/Users/user$ file ./unlock/flag
./unlock/flag: Microsoft Word 2007+
kaiinaba@TABLET-GRCEDDNQ:/mnt/c/Users/kaiinaba$
flagファイルは Word ファイルということなので flag.doc とでもリネームして、
Wordで開くと、白紙のファイルかと見えますが、文字の色が白なだけなので
文字色変えるなりすると… flagを入手できました。
SECCON{1s_th1s_passw0rd_ weak?}
このように暗号化zipは簡単に復号されてしまう可能性があるので
注意が必要、ということですね…AESを暗号化方式に採用するという対策もありますが…
とくにMacOSなんかは、平文ファイルとして .DS_Store ファイルを利用できてしまう
恐れがあるそうで・・・皆さんお気をつけてください。
それでは、今回はここまでとなります。
次はForensicsをやってみたいと思います。
Discussion