ZIP深入明文攻击
misc解题过程中会遇到一些明文攻击的题目,这里借鉴了大佬的博客(大佬),下面介绍一下我对深入明文攻击的理解:
1.想要实现深入明文攻击的条件:
- 至少已知明文的12个字节及偏移,其中至少8字节需要连续。
- 明文对应的文件加密方式为ZipCrypto Store,deflate也行,不过最后需要利用脚本实现图片转换
2.约束:
Winrar(v5.80)、7zip(v19.00)默认状态下加密使用的就是AES256算法,直接排除。360压缩(v4.0.0.1220)、好压(v6.2)使用的是ZipCrypto,不固定使用Store或Deflate(如果要固定使用ZipCrypto Store算法加密,可以在压缩的时候指定压缩方式为“存储”)。
3.使用的工具:bkcrack
bkcrack的安装:
bkcrack安装:
apt install cmake -y
cmake .
make //在src下生成bkcrack文件
cp bkcrack /usr/sbin/bkcrack //作为系统命令使用
也就是说在压缩文件满足一定的条件,且知道被加密文件的相关信息的情况下,可以解密。
湖湘杯 某取证题
这里看一下前半段flag的解密,pslist查看到存在wireshark,dumpfiles出来,foremost分离可以看到其中有一个压缩包内存在加密的两张图片。
这里查看一下zip的信息:使用7z压缩包
这里是jpg图片,利用jpg的文件头:FFD8FFE000104A4649460001
使用命令:
echo -n "FFD8FFE000104A4649460001" | xxd -r -ps >key
参数解释:
n: 不换行输出
xxd: 用于用二进制或十六进制显示文件的内容
r: 把xxd的十六进制输出内容转换回原文件的二进制内容。
p: 以 postscript的连续十六进制转储输出,这也叫做纯十六进制转储。
s: 从infile的绝对或者相对偏移量开始. + 表示相对于标 输入当前的位置 (如果不标准输入就没有意义了). – 表示从档桉末尾 (如果和 + 连用: 从标准输入当前位置) 向前数一些字符, 从那个地方开始. 如果没有 -s 选项, xxd 从当前位置开始.
得到解密key,利用key对压缩文件中的图片解密
time bkcrack -C 1.zip -c t.jpg -p key -o 0
参数解释:
bkcrack常用参数:
-c 提取的密文部分(也可以指定a.jpg)
-p 提取的明文部分
-x 压缩包内目标文件的偏移地址 部分已知明文值
-C 加密压缩包
-o offset -p参数指定的明文在压缩包内目标文件的偏移量
-time 加上time参数方便计算爆破时间
跑了10几分钟,可以得到解密密钥(并不是压缩解密密码)
b0a90b36 14dd97b9 f5d648cf
利用解密密钥解开a.jpg,得到a1.jpg,不过由于是inflate加密,无法直接看到,使用自带的inflate脚本可以看到
bkcrack -C 1.zip -c a.jpg -k b0a90b36 14dd97b9 f5d648cf -d a1.jpg
python3 inflate.py < a1.jpg > 2.jpg
这一题第二张图片(flag的后半段)通过命令搜索图片,一个个导出来即可得到,最后拼接起来即为flag
美团ctf(鱿鱼游戏)
- 首先可以看到这里的加密方法符合预期,同时表示暴力无法解决问题,提供了zip文件中的信息:flagornot.txt,可以尝试去使用深入明文解密
echo -n "flagornot.txt" > plain.txt 自己创建一个txt文件就可以
bkcrack -C 1.zip -c flagornot.zip -p plain.txt -o 30 -x 0 504B0304
参数解释:
n : 不换行输出
C :待解压缩包
c : 提取的密文部分
p : 利用的明文
o : 表示txt文件在压缩文件flagornot.zip中的偏移量,这里txt文件在zip文件中的偏移量都是30(随便找了两个可以看到都是一样的)
x : 表示flagornot.zip在总压缩文件中的偏移量
- 可以看到解出了解密必要的三个key:
683a571e f954e70c 49da18ac
- 下一步就是利用key进行解密
bkcrack -C 1.zip -c flagornot.zip -k 683a571e f954e70c 49da18ac -d 4.zip
利用得到的txt文件可以winrar压缩成zip包进行普通明文解密
尝试一下。
报错的原因是打开1.zip的是bandzip而不是winrar,winrar压缩过的才能明文解密,这里结果都是一样的,也就无伤大雅了。
- 对于图片和某取证题是一样的办法(图中3.jpg是之前得到的)
bkcrack -C 1.zip -c PinkSoldiers.jpg -k 683a571e f954e70c 49da18ac -d 2.jpg
python3 inflate.py <2.jpg> flag.jpg
- 再拿水印工具看一下即可得到flag:
结论:这里可以多去找找其他压缩包试试,一句话,没有绝对的安全
再次感谢大佬