強エンジニアになりたい大学生の日記

その日学んだことを日記程度に発信します。

ksnctf(11) known-plaintext attacks

ZIP de kure 150点

とりあえず解凍する。

$ unzip 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

known-plaintext attacks(既知平文攻撃)に弱いらしいので調べてみる。

暗号化されているファイル内に、既知のファイルがあれば、それをヒントに復号する方法。(

https://n-lab.site/?p=102

flag.htmlは答えだと思うので、Standard-lock-key.jpgで調べてみるとWikiにある。与えられたファイルは250KBなのでそれと同じサイズの画像を保存する

既知平文攻撃にはPkcrackを使う。Windows 64bit版はないらしいので素直にUbuntuを使う。ダウンロードしてコマンドを実行。

$ ./pkcrack -C hoge/flag.zip -c hoge/Standard-lock-key.jpg -p hoge/wikikaraotoshita.jpg -d getflag.zip

Files read. Starting stage 1 on Wed Aug  5 12:11:28 2020
Generating 1st generation of possible key2_255975 values...done.
Found 4194304 possible key2-values.
Now we're trying to reduce these...
Lowest number: 986 values at offset 248213
Lowest number: 948 values at offset 248202
Lowest number: 945 values at offset 247980
Lowest number: 928 values at offset 247965
Lowest number: 894 values at offset 247957
Lowest number: 883 values at offset 244764
Lowest number: 825 values at offset 244113
Lowest number: 820 values at offset 243180
Lowest number: 769 values at offset 243179
Lowest number: 758 values at offset 243175
Lowest number: 723 values at offset 243172
Lowest number: 702 values at offset 243171
Lowest number: 694 values at offset 243170
Lowest number: 657 values at offset 243162
Lowest number: 653 values at offset 243151
Lowest number: 652 values at offset 243149
Lowest number: 638 values at offset 243143
Lowest number: 621 values at offset 243106
Lowest number: 567 values at offset 243104
Lowest number: 546 values at offset 243103
Lowest number: 534 values at offset 243102
Lowest number: 510 values at offset 243073
Lowest number: 498 values at offset 243054
Lowest number: 476 values at offset 242992
Lowest number: 472 values at offset 242990
Lowest number: 396 values at offset 242989
Lowest number: 359 values at offset 242984
Lowest number: 321 values at offset 242983
Lowest number: 311 values at offset 242977
Lowest number: 310 values at offset 242939
Lowest number: 296 values at offset 242935
Lowest number: 270 values at offset 242934
Lowest number: 268 values at offset 242921
Lowest number: 244 values at offset 242915
Lowest number: 224 values at offset 242880
Lowest number: 215 values at offset 242879
Lowest number: 209 values at offset 242878
Lowest number: 188 values at offset 242877
Lowest number: 187 values at offset 242867
Lowest number: 186 values at offset 242866
Lowest number: 167 values at offset 242865
Lowest number: 164 values at offset 242670
Lowest number: 157 values at offset 242669
Lowest number: 141 values at offset 242655
Lowest number: 132 values at offset 242654
Lowest number: 112 values at offset 242652
Lowest number: 91 values at offset 242651
Done. Left with 91 possible Values. bestOffset is 242651.
Stage 1 completed. Starting stage 2 on Wed Aug  5 12:11:39 2020
Ta-daaaaa! key0=7adffffe, key1=468d5ff6, key2=259a116a
Probabilistic test succeeded for 13329 bytes.
Ta-daaaaa! key0=7adffffe, key1=468d5ff6, key2=259a116a
Probabilistic test succeeded for 13329 bytes.
Ta-daaaaa! key0=7adffffe, key1=468d5ff6, key2=259a116a
Probabilistic test succeeded for 13329 bytes.
Ta-daaaaa! key0=7adffffe, key1=468d5ff6, key2=259a116a
Probabilistic test succeeded for 13329 bytes.
Ta-daaaaa! key0=7adffffe, key1=468d5ff6, key2=259a116a
Probabilistic test succeeded for 13329 bytes.
Ta-daaaaa! key0=7adffffe, key1=468d5ff6, key2=259a116a
Probabilistic test succeeded for 13329 bytes.
Ta-daaaaa! key0=7adffffe, key1=468d5ff6, key2=259a116a
Probabilistic test succeeded for 13329 bytes.
Ta-daaaaa! key0=7adffffe, key1=468d5ff6, key2=259a116a
Probabilistic test succeeded for 13329 bytes.
Stage 2 completed. Starting zipdecrypt on Wed Aug  5 12:11:42 2020
Decrypting flag.html (250d8b78ce908fe210d7c091)... OK!
Decrypting Standard-lock-key.jpg (037d8119e2c2884a4a665d91)... OK!
Finished on Wed Aug  5 12:11:42 2020

出来上がったgetflag.zipを解凍するとflag.htmlが開ける。これでFlagゲット。

実際に適当なtxtファイルと画像一緒にパスワードを付けて圧縮して、それに対して実行してみてもうまくいった。面白い、、!