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(既知平文攻撃)に弱いらしいので調べてみる。
暗号化されているファイル内に、既知のファイルがあれば、それをヒントに復号する方法。(
)
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ファイルと画像一緒にパスワードを付けて圧縮して、それに対して実行してみてもうまくいった。面白い、、!