【CTF 攻略】CTF比赛中关于zip的总结
【CTF 攻略】CTF比赛中关于zip的总结
分享到:
-->

本文首发于安全客,建议到原地址阅读,地址:http://bobao.360.cn/ctf/detail/203.html
前言
在CTF比赛的MISC和CRYPTO中,经常要和zip压缩包打交道,这里做一个zip方面的总结。
本文中用到的所有文件和工具都可在这个网盘中找到http://pan.baidu.com/s/1bWQxyA
目录
隐写篇
0x01. 通过进制转换隐藏信息
0x02. 在图片中隐藏压缩包(图种)
加密篇
0x03. 伪加密
0x04. 爆破/字典/掩码攻击
0x05. 明文攻击
0x06. CRC32碰撞
格式篇
0x07. 修改格式
0x01. 通过进制转换隐藏信息
这种方法比较简单,直接拿一道题讲解(题目来自ISCC 2017 Basic-04)。题目给了一个txt文档如下图

经过观察,所有数据都在16进制能表示的范围之内,因此先尝试使用十六进制编码解密,python脚本如下:

运行结果如下,虽然存在大量乱码,但还是能看到flag.txt,因此猜测txt中的这段字符是zip包的16进制表示(同时开头的PK也暗示这是一个zip包,PK是zip格式发明者Phil Katz的名称缩写,zip的前两个字母就用了PK)

导入到16进制编辑器中,这里用010editor做演示

导入后选择 Save As(快捷键 ctrl + shift + s),给新文件命名时加上后缀.zip,保存后发现zip文件是正常的,因此证明思路正确,此题的后续过程请继续阅读这篇文章

另:除了16进制的编码转换,有时还会遇到2进制编码的转换,思路相同,不再复述
0x02. 在图片中隐藏压缩包(图种)
这种方法大概是zip中最常见的,多用于在一张图片中隐藏一个压缩包,这种方法的原理是:以jpg格式的图片为例,一个完整的 JPG 文件由 FF D8 开头,FF D9结尾,图片浏览器会忽略 FF D9 以后的内容,因此可以在 JPG 文件中加入其他文件。
也以一道题为例为例(ISCC 2017 Basic-07),对于这种隐写最简单的方法是使用Kali下的binwalk进行检测,binwalk 图片名 如下,检测出图片中存在压缩包

分离这个压缩包也有至少两种方法:
1. 利用Linux下的foremost工具, foremost 图片名 如下,foremost默认的输出文件夹为output,在这个文件夹中可以找到分离出的zip(推荐使用这种方法,因为foremost还能分离出其他隐藏的文件)

2. 更简单粗暴的方法是直接把图片的后缀改为.zip,然后解压即可(这种方法虽然简单快速,但如果隐写了多个文件时可能会失败)

另:本题后续步骤为构造字典,爆破握手包
0x03. 伪加密
Zip伪加密与zip的文件格式有关(zip的格式详解请翻到本文的最后0x07部分),zip中有一位是标记文件是否加密的,如果更改一个未加密zip包的加密标记位,那么在打开压缩包时就会提示该文件是加密的。
对于伪加密有以下几种方法:
1. 在Mac OS及部分Linux(如Kali)系统中,可以直接打开伪加密的zip压缩包
2. 使用检测伪加密的ZipCenOp.jar,解密后如果能成功打开zip包,则是伪加密,否则说明思路错误
3. 使用16进制编辑器改回加密标记位
以HBCTF的一道题讲解这几种方法:

如上,尝试解压压缩包时提示有密码,根据题干:比爆破更好的方法推测为伪加密,用三种方法来解此题:
1. 用除windows外的系统直接打开压缩包
在Mac OS和部分Linux系统(如Kali)中,右键解压可直接打开伪加密的zip压缩包,笔者暂未明确何种Linux能打开伪加密压缩包,如有传授,不胜感激!
2. 使用ZipCenOp.jar(需java环境) 使用方法
|
1
|
java -jar ZipCenOp.jar r xxx.zip |

经ZipCenOp.jar解密后的压缩包可直接打开

推荐使用这种方法,最便捷
3. 用16进制编辑器修改加密标记位

如上图,修改加密标记位为00,保存,即可打开压缩包(关于zip文件的结构,请翻到本文最末0x07部分)
0x04. 爆破/字典/掩码攻击
把这三种归位一类是因为这三种方法在本质上都是逐个尝试,只不过待选密码的集合不同
1. 爆破:顾名思义,逐个尝试选定集合中可以组成的所有密码,知道遇到正确密码
2. 字典:字典攻击的效率比爆破稍高,因为字典中存储了常用的密码,因此就避免了爆破时把时间浪费在脸滚键盘类的密码上
3. 掩码攻击:如果已知密码的某几位,如已知6位密码的第3位是a,那么可以构造 ??a??? 进行掩码攻击,掩码攻击的原理相当于构造了第3位为a的字典,因此掩码攻击的效率也比爆破高出不少
对这一类的zip问题,推荐windows下的神器AZPR
举例如下:
1. 对爆破,以ISCC 2017 Basic-08为例,选定暴力攻击、字符集和长度后进行爆破


点击开始,进行爆破,如下图,在4ms内就找到了密码为BIT

另:此题后续为简单的base64解密;爆破在密码长度小于6位时较快,因此如果在7位之内没有爆破出结果时,基本就可以考虑换个方法了;此题的正规解法是培根密码的转换
2. 字典,还以之前的ISCC 2017 Basic-07举例,从图片中分离出一个加密的zip压缩包,爆破无果后考虑字典攻击(可从网上下载字典,但大多数题目需要自己构造字典,文末的网盘连接里提供了常见的字典)

字典攻击的结果如下图,在字典选择合适的情况下,用很短的时间就能找到密码

继续以此题为例,解压后的压缩包有一个txt文档和一个握手包,txt内容如下:

因此可知握手包的密码为ISCC****的形式(*代表大写字母或数字),自己写程序构造字典

运行此程序得到字典如下:

之后用aircrack-ng来选中字典跑除握手包的密码如下图,不再详述

3. 掩码攻击,以ISCC 2017 Misc-06为例,题目给了一个jpg图片,用0x02中的方法分离出加密的压缩包,根据题目提示:注意署名, 构造????LiHua的掩码(?可在自己定义的字符集中任意选择)进行掩码攻击,如下图:

攻击结果如下,只耗费了很少的时间就找到了密码

0x05. 明文攻击
明文攻击是一种较为高效的攻击手段,大致原理是当你不知道一个zip的密码,但是你有zip中的一个已知文件(文件大小要大于12Byte)时,因为同一个zip压缩包里的所有文件都是使用同一个加密密钥来加密的,所以可以用已知文件来找加密密钥,利用密钥来解锁其他加密文件,更详细的原理请读者自行谷歌
举个例子,已知 明文攻击.zip 中存在的文件 明文.txt,
因此将 明文.txt 压缩,这里需要判断明文压缩后的CRC32是否与加密文件中的一致,若不一致可以换一个压缩工具。

攻击过程如下:

点击开始,很快就恢复了密码

另:当明文的大小比较小时,攻击速度会比较慢;即使有时没有恢复密码,也可以使用明文攻击,最后点保存还是能得到压缩包里内容的。
0x06. CRC32碰撞
CRC32:CRC本身是“冗余校验码”的意思,CRC32则表示会产生一个32bit(8位十六进制数)的校验值。
在产生CRC32时,源数据块的每一位都参与了运算,因此即使数据块中只有一位发生改变也会得到不同的CRC32值,利用这个原理我们可以直接爆破出加密文件的内容
还是以之前HBCTF伪加密那道题为例,另一种解法就是CRC32碰撞,打开压缩包,可以看出压缩文件 flag6位数
的CRC32值为0x9c4d9a5d

因此写出碰撞的脚本如下:

要特别注意
|
1
|
if (binascii.crc32(str(i)) & 0xffffffff) == crc: |
在 Python 2.x 的版本中,binascii.crc32 所计算出來的 CRC 值域为[-2^31, 2^31-1] 之间的有符号整数,为了要与一般CRC 结果作比对,需要将其转为无符号整数,所以加上& 0xffffffff来进行转换。如果是 Python 3.x 的版本,其计算结果为 [0, 2^32-1] 间的无符号整数,因此不需额外加上& 0xffffffff 。
脚本的运行结果如下,即为压缩文件的内容:

再举另一个bugku中的例子,下载下来的文件是68个压缩包,并且根据binwalk的检查结果,每个压缩包里都有一个大小为4个字节,名为out.txt的压缩文件

用如下的脚本碰撞出所有压缩包中的数据:


此题较为繁琐,之后的步骤不再展开
另:限于CPU的能力,CRC碰撞只能用于压缩文件较小的情况
0x07. 修改格式
这种情况花样较多,难以做一个详细的总结,因此只列举最常见的缺少文件头或文件尾。
放一个zip文件格式讲的较清楚的链接,通过对zip文件格式的了解,可以解释之前伪加密的问题,同时也可以对缺少文件头或文件尾有更直观的认识。

如上为正常zip,缺头zip和缺尾zip的binwalk扫描结果,根据扫描结果用16进制编辑器添加文件头或文件尾,即可修复zip。
总结
Zip不仅是我们生活中常用到的一种文件格式,在CTF中也经常遇到,这里做了一个关于CTF中zip的总结,如果对读者有帮助,鄙人不胜荣幸。

本文由 安全客 原创发布,如需转载请注明来源及本文地址。
本文地址:http://bobao.360.cn/ctf/detail/203.html
【CTF 攻略】CTF比赛中关于zip的总结的更多相关文章
- 【网易官方】极客战记(codecombat)攻略-地牢-焰中舞动
关卡连接: https://codecombat.163.com/play/level/fire-dancing 用循环节省输入并拯救英雄! 简介: 左 右 起舞,避开火球. 使用 while tru ...
- Linux Shell脚本攻略:shell中各种括号()、(())、[]、[[]]、{}的作用
技巧小结: 字符串比较用双中括号[[ ]]:算数比较用单中括号[ ]——左右留空格 算数运算用双小括号(( )) :shell命令及输出用小括号( )——左右不留空格 快速替换用花括号{ }——左右留 ...
- 用C#制作PDF文件全攻略
用C#制作PDF文件全攻略 目 录 前 言... 3 第一部分 iText的简单应用... 4 第一章 创建一个Document 4 第一步 创建一个Document实例:... 5 第二步 ...
- c++小学期大作业攻略(二)整体思路+主界面
写在前面:如果我曾经说过要在第一周之内写完大作业,那……肯定是你听错了.不过如果我在写的时候有攻略看的话应该可以轻松地在4~5天内做完,然后觉得写攻略的人是个小天使吧(疯狂暗示).出于给大家自由发挥的 ...
- Metasploit渗透使用攻略
msf关于tomcat口令暴力猜解模块 use auxiliary/scanner/http/tomcat_mgr_login show options set rhosts 192.168.2.14 ...
- 图文详解:阿里宠儿【小兔】RabbitMQ的养成攻略
- 在net安装程序中部署oracle客户端全攻略
在net安装程序中部署oracle客户端全攻略 主要的是要做三件工作: 打包文件,写注册表,注册环境变量说明:我的oracle版本为9, 在2000 advanced server 上测试通过,可以正 ...
- webBrowser中操作网页元素全攻略
原文 webBrowser中操作网页元素全攻略 1.获取非input控件的值: webBrowser1.Document.All["控件ID"].InnerText; 或webBr ...
- EhLib DBGridEh组件在Delphi中应用全攻略总结(转)
EhLib DBGridEh组件在Delphi中应用全攻略总结(转) http://blog.sina.com.cn/s/blog_94b1b40001013xn0.html 优化SQL查询:如何写出 ...
随机推荐
- Android Studio INSTALL_FAILED_UID_CHANGED 错误
错误发生于:启动调试时应用安装失败,提示"INSTALL_FAILED_UID_CHANGED". 出现此问题的原因大多是APK卸载不彻底造成冲突. 解决方案: 分别进入 /dat ...
- 2013-8:SDCE大会笔记
百度移动云三大开发框架:Clouda,SiteApp,AppBuilder MBaaS解决高性能Server很难的问题 百度开放云的区域运营服务于创业者 Pinterest架构变迁: 互联网就是把线下 ...
- WiderG的博客皮肤
我的Skin 还是亮出自己的Blog定制代码吧: 其实也不是完全自己写的(有抄袭),也不大懂这方面的知识,代码冗长,逻辑不清,加载缓慢,见谅喽
- [开源]基于ffmpeg和libvlc的视频剪辑、播放器
[开源]基于ffmpeg和libvlc的视频剪辑.播放器 以前研究的时候,写过一个简单的基于VLC的视频播放器.后来因为各种项目,有时为了方便测试,等各种原因,陆续加了一些功能,现在集成了视频播放.视 ...
- Android 源码中的设计模式
最近看了一些android的源码,发现设计模式无处不在啊!感觉有点乱,于是决定要把设计模式好好梳理一下,于是有了这篇文章. 面向对象的六大原则 单一职责原则 所谓职责是指类变化的原因.如果一个类有多于 ...
- UED团队规范设计参考及建议
公司产品线逐渐增多,变动频繁且并行开发,常常需要设计与开发能够快速的做出响应.同时这类产品中有存在很多类似的页面以及组件,可以通过抽象得到一些稳定且高复用性的内容.通过模块化的解决方案,降低冗余的生产 ...
- 重温《STL源码剖析》笔记 第一章
源码之前,了无秘密. --侯杰 经典的书,确实每看一遍都能重新收获一遍: 第一章:STL简介 STL的设计思维:对象的耦合性极低,复用性极高,符合开发封闭原则的程序库. STL的价值:1.带给我们一套 ...
- zlib 压缩输出缓冲区 overflow 问题
[TOC] 问题 后台服务传包太大时,我们框架可以使用 zlib 库对响应进行压缩:在这次服务调试过程中,使用 zlib compress2 以 Z_BEST_COMPRESSION 模式进行压缩时, ...
- DOM4J熟知
什么是解析xml 系统最终会从xml中读取数据. 读取的过程就是解析. CRUD ==> 增删改查 ==> create read update delete ==> 解析指的就是读 ...
- 小隐隐于野:基于TCP反射DDoS攻击分析
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 作者:腾讯DDoS安全专家.腾讯云游戏安全专家 陈国 0x00 引言 近期,腾讯云防护了一次针对云上某游戏业务的混合DDoS攻击.攻击持续了 ...