加密压缩包比你想象中的还不安全吗?
一、前言
你加密的压缩包比你想像中的还不安全!
哪怕对于信息安全人员来说,好多时侯给压缩包加上一个密码就以为的是万事大吉了。但事实是,好多情况下,你的加密压缩包,远远没有你想像的安全。
二、内容概要
往年进行ZIP已知明文功击,一般须要一个完整的明文文件。而本文讨论的功击方法只须要晓得加密压缩包内容的12个字节,即可进行功击破解增加了已知明文的功击难度。同时,结合各种已知的文件格式,更拓宽了ZIP已知明文功击的功击面。
三、正文3.1ZIP已知明文功击的通常借助
往年出现在网路安全大赛中的已知明文功击考点,或则大部份网上的文章linux系统命令,都须要晓得加密zip文件中的一个完整明文文件而且要求明文以相同的标准被压缩,这才有可能会功击成功。
虽然传统的已知明文功击要成功须要三个条件,在此我将条件列下来:
完整的明文文件
明文文件须要被相同的压缩算法标准压缩(也可理解为被相同压缩工具压缩)
明文对应文件的加密算法须要是ZipCryptoStore
第三点是我们实际应用中往往会被忽视的。因大赛中遇见的题目,都是提早设置好的。
·AES256-Deflate/AES256-Store加密的文件不适用于明文功击。
ZIP的加密算法大致分为两种ZipCrypto和AES-256,各自又分Deflate和Store。
ZipCryptoDeflate
ZipCryptoStore
AES-256Deflate
AES-256Store
ZipCrypto算是传统的zip加密方法。只有使用ZipCryptoDeflate/Store才可以使用ZIP已知明文功击进行破解。
传统的ZIP已知明文功击借助,windows下可以使用AZPR,linux下可以使用pkcrack。
3.2ZIP已知明文功击的深入借助
本文要阐述的功击方式并不须要晓得压缩文件中完整的明文,只需在已知加密压缩包中的少部份明文字节时即可进行功击破解。而各种文件都有其自身固定的文件格式,结合这类格式,极大扩充了ZIP明文功击的功击面。
具体要求如下:
起码已知明文的12个字节及偏斜,其中起码8字节须要连续。
明文对应的文件加密方法为ZipCryptoStore
该方式对于ZIP加密的算法有要求,明文对应的文件加密形式须要为ZipCryptoStore。经测试,Winrar(v5.80)、7zip(v19.00)默认状态下加密使用的就是AES256算法,直接排除。360压缩(v4.0.0.1220)、好压(v6.2)使用的是ZipCrypto,不固定使用Store或Deflate(假如要固定使用ZipCryptoStore算法加密,可以在压缩的时侯指定压缩形式为“存储”)。
以下破解用到的压缩包,都是经360压缩或则快压加密打包的。
3.2.1使用到的工具项目
bkcrack:
bkcrack安装:
aptinstallcmake-y
cmake.
make//在src下生成bkcrack文件
cpbkcrack/usr/sbin/bkcrack//作为系统命令使用
bkcrack常用参数:
-c提取的密文部份
-p提取的明文部份
-x压缩包内目标文件的偏斜地址部份已知明文值
-C加密压缩包
-ooffset-p参数指定的明文在压缩包内目标文件的偏斜量
在此我们不是“造轮子”,而是“使用轮子”,偏向于实操,借助已有的手段工具去解决现有的问题。话不多说,上实操案例。
3.3实操案例
案例中演示的压缩包等,都可在文末附件中下载。
3.3.1加密文本破解
文本类文件被加密成zip时,有很大的机率以ZipCryptoStore方法加密储存。
创建加密zip:
生成uuid,将字符串“flag{16e371fa-0555-47fc-b343-74f6754f6c01}”保存为flag.txt。之后用360压缩将文件添加为加密ZIP:flag_360.zip
功击破解:
采用8+4的方法提取部份已知明文来进行功击测试,
flag{16e371fa-0555-47fc-b343-74f6754f6c01}
我们借助以下这部份明文linux加密打包命令 zip,来进行功击破解:
*lag{16e3********************74f6********
——————————————————————————————————————-
#打算已知明文
echo-n”lag{16e3″>plain1.txt//连续的8明文
echo-n”74f6″|xxd//额外明文的十六补码格式,37346636
#功击
bkcrack-Cflag_360.zip-cflag.txt-pplain1.txt-o1-x2937346636
#因为时间较长,为避免终端终端造成破解中断,可以加点小方法
bkcrack-Cflag_360.zip-cflag.txt-pplain1.txt-o1-x2937346636>1.log&//后台运行,结果存入1.log
//加上time参数便捷估算爆破时间
timebkcrack-Cflag_360.zip-cflag.txt-pplain1.txt-o1-x2937346636>1.log&
//查看爆破进度
tail-f1.log
——————————————————————————————————————-
注:·-p指定的明文不须要转换,-x指定的明文须要转成十六补码
·提到的偏斜都是指“已知明文在加密前文件中的偏斜”。
长达近16分钟,成功得到密钥,这不是压缩包的加密密码,而是ZIP内部的三段密钥。
b21e5df4abab99aa943094308c336475
使用该密钥进行揭秘:
bkcrack-Cflag_360.zip-cflag.txt-kb212121ee55dfdfdf4abab99aa943094308c336475-dflag.txt
3.3.2借助PNG图片文件头破解
PNG文件头:
89504E470D0A1A0A0000000D49484452
满足,12个字节的要求。拿一张图片和一个flag.txt一起打包成加密ZIP压缩包:png4.zip
功击破解:
——————————————————————————————————————-
#打算已知明文
echo89504E470D0A1A0A0000000D49484452|xxd-r-ps>png_header
#功击
timebkcrack-Cpng4.zip-c2.png-ppng_header-o0>1.log&
tail-f1.log
——————————————————————————————————————-
历时近7分钟破解出密钥:e0be8d5d70bb31407e983fff
借助密钥揭秘文件:
bkcrack-Cpng4.zip-cflag.txt-ke0be8d5d70bb31407ee983983fff-dflag.txt
3.2.3借助压缩包格式破解
将一个名为flag.txt的文件打包成ZIP压缩包后,你会发觉文件名称会出现在压缩包文件头中,且偏斜固定为30。且默认情况下,flag.zip也会作为该压缩包的名称。
所以linux加密打包命令 zip,当一个加密压缩包中存在另一个ZIP压缩包时,且还能晓得或猜想该压缩包内的文件名称时,可以尝试进行已知明文功击。
将flag.zip与其他文件(选用一张图片)一起用快压打包成加密ZIP压缩包:test5.zip
已知的明文片断有:
·“flag.txt”8个字节,偏斜30
·ZIP本身文件头:504B0304,4字节
8+4,满足了破解的最低要求
功击:
————————————————————————————————————
echo-n”flag.txt”>plain1.txt//-n参数防止换行,不然文件中会出现换行符,造成功击失效
timebkcrack-Ctest5.zip-cflag.zip-pplain1.txt-o30-x0504B0304>1.log&
tail-f1.log
————————————————————————————————————-
得到密钥:
b21e5df4abab99aa943094308c336475
借助密钥揭秘:
bkcrack-Ctest5.zip-cflag.zip-kb212121ee55dfdfdf4abab99aa943094308c336475-dflag.zip
flag.zip可以直接成功揭秘。
但若果揭秘2.png,因为是ZipCryptodeflate加密的,所以揭秘后须要bkcrack/tool内的inflate.py脚本再度处理。
—————————————————————————————————————-
bkcrack-Ctest5.zip-c2.png-kb212121ee55dfdfdf4abab99aa943094308c336475-d2.png
python3inflate.py2_out.png
—————————————————————————————————————-
3.2.4EXE文件格式破解
EXE文件默认加密情况下linux系统应用,不太会以store形式被加密,但它文件格式中的的明文及其显著,宽度足够。假如加密ZIP压缩包出现以store算法储存的EXE格式文件,很容易进行破解。
大部份exe中都有这相同一段,且偏斜固定为64:
生成一个加密EXE的ZIP压缩包进行测试:nc64.zip
功击破解:
————————————————————————————————————--
#打算明文
echo-n”0E1FBA0E00B409CD21B8014CCD270726F6772616D2063616E6E6F7426E20696E20444F53206D6F64652E0D0D0A2000″|xxd-r-ps>mingwen
#功击
timebkcrack-Cnc64.zip-cnc64.exe-pmingwen-o64>1.log&
#查看进度
tail-f1.log
———————————————————————————————————
很快就解出了密钥:
b21e5df4abab99aa943094308c336475
揭秘:
bkcrack-Cnc64.zip-cnc64.exe-kb212121ee55dfdfdf4abab99aa943094308c336475-dnc64.exe
3.2.5流量包pcapng格式揭秘
这个有例题:垂钓城杯-量子加密
具体格式介绍及解法参考官方的writeup,已打包在附件中
加密算法都是Store
选用第二段文件头格式:
00004D3C2B1A01000000FFFFFFFFFFFFFFFF
功击:
——————————————————————————————————
echo-n”00004D3C2B1A01000000FFFFFFFFFFFFFFFF”|xxd-r-ps>pcap_plain1
timebkcrack-C3.zip-ccapture.pcapng-ppcap_plain1-o6
———————————————————————————————————-
揭密:
bkcrack-C3.zip-ccapture.pcapng-ke33a580cc0c96a811246d892-dout.pcapng
3.2.6网站相关文件破解
网站目录中参杂着大量类型的文件,哪怕被打包成加密ZIP,也很容易找到突破口。
比如:
robots.txt的文件开头内容一般是User-agent:*
html文件开头一般是
xml文件开头一般是
在此以web.xml为例,web.xml是网路程序中的一个很重要的配置文件。
常见xml文件头为:
网站目录肯定会涉及到多级目录,我们也同样进行模拟。在文件夹中创建一个二级目录“123”,并将一个web.xml装入该二级目录中,之后打包成加密ZIP。
功击:
———————————————————————————————————-
echo-n''>xml_plain
timebkcrack-Cxml.zip-c123/web.xml-pxml_plain-o0//注意相对路径
———————————————————————————————————-
功击成功:
揭密:
bkcrack-Cxml.zip-c123/web.xml-ke0be8d5d70bb31407ee983983fff-dweb.xml
3.2.7SVG文件格式破解
xml格式的文件不仅.xml以外,也包括.svg文件。SVG是一种基于XML的图象文件格式。
功击:
————————————————————————————————————-
//已知明文
echo-n'plain.txt
bkcrack-Csecrets.zip-cspiral.svg-pplain.txt-o0
———————————————————————————————————--
功击成功:
揭秘:
————————————————————————————————————
//揭秘Store算法直接揭秘即可
bkcrack-Csecrets.zip-cspiral.svg-kc4038591d55ffff449449dd3b0c696-dspiral_deciphered.svg
//揭秘deflate算法
bkcrack-Csecrets.zip-cadvice.jpg-kc4038591d55ffff449449dd3b0c696-dadvice.deflate
//该文件使用了deflate算法压缩的,解码下来的是Deflate的数据流,因而须将其解压缩。
python3inflate.pyadvice.jpg
————————————————————————————————————--
四、结尾4.1结语
以上这种案例只是给严打做个示范,打开你们的思路,实际可用的场景有许多。诸如一些CTF题目压缩包的非预期解,或则网路上资源的破解。
4.2注意点
已知的明文宽度越长,破解速率越快
图片、文本格式文件、压缩包是最容易以store算法被加密打包的
有时会出现功击得到了密钥,却未能揭秘正确文件的情况
存在rbkcrack项目,降低了部份支持
4.3附件下载
链接:
提取码:t2y4
4.4参考文章
文章转自:FreeBuf.COM-光通天下无患实验室BlusKing