Szarny.io

There should be one-- and preferably only one --obvious way to do it.

ksnctf 19. ZIP de kure の writeup

問題リンク

ksnctf - 19 ZIP de kure

f:id:Szarny:20170826203028p:plain

調査

問題文にはZipが1個落ちているだけです.
とりあえずunzipしてみます.

root@kali:~/Desktop# unzip flag.zip 
Archive:  flag.zip
Hint:
- It is known that the encryption system of ZIP is weak against known-plaintext attacks.
- We employ ZIP format not for compression but for encryption.
[flag.zip] flag.html password: 
   skipping: flag.html               incorrect password
   skipping: Standard-lock-key.jpg   incorrect password

パスワードを求められましたが,わかるわけないのでそのままEnter.
この時点で中身はflag.htmlとStandard-lock-key.jpgだとわかります.加えて,Hintに既知平文攻撃に対して弱い!と書いてあるので早速やってみましょう

既知平文攻撃

前提として,既知平文攻撃は

暗号化前の平文の一部及び、その暗号化の結果が分かる場合、それをヒントに鍵を算出する攻撃方式。
一部のZIP暗号化DLLにこの攻撃に対する脆弱性が存在する。


既知平文攻撃とは(Known Plaintext Attack) | 【サイバー攻撃大辞典】 より引用

です.

そして,この攻撃を行うツールとしてpkcrackがありますので,今回はこれを用います.

オプション 引数
-c 平文が分かる暗号化されたファイルの名前
-p -cで指定した平文のファイル
-C 暗号化されたzipファイル
-d 解読に成功した際に作成されるファイル名

もちろんこの攻撃を行うためにはファイルの平文が必要なのですが,flag.htmlがわかってたらそもそも問題にならないので,Standard-lock-key.jpgを探します.

ググったら一発で出てきました.(有名なファイルなんでしょうか?)

早速ツールにかけてみます.

root@kali:~/Desktop# /bin/pkcrack-1.2.2/src/pkcrack -c Standard-lock-key.jpg -p Standard-lock-key.jpg -C flag.zip -d answer.zip
Files read. Starting stage 1 on Sat Aug 26 20:43:05 2017
Generating 1st generation of possible key2_255975 values...done.
Found 4194304 possible key2-values.
Now we're trying to reduce these...

(略)

Stage 2 completed. Starting zipdecrypt on Sat Aug 26 20:43:27 2017
Decrypting flag.html (250d8b78ce908fe210d7c091)... OK!
Decrypting Standard-lock-key.jpg (037d8119e2c2884a4a665d91)... OK!
Finished on Sat Aug 26 20:43:27 2017

成功しました!
あとは解読されたzipファイルをunzipすれば,無事Flagをゲットできました.

f:id:Szarny:20170826204819p:plain

おわりに

わりとポイントが高かったので難しいのかと思ったら,ツールにかけると案外簡単にできてしまいました(;^_^A
確かに What anyone uses is actually secure? ですね!