5.zip隐写术
首先分析pcapng,来得到flag.
先亮出下载地址:http://ctf5.shiyanbar.com/misc/LOL/LOL.pcapng
由于这是.pcapng,需要下载 wireshark 来进行数据包的分析
我们查询一下http协议流,应为http协议是超文本传输协议的缩写,是用于从服务器传输超文本到本地浏览器的传送协议

发现有两个upload的上传点,我们分别来分析一下数据流


发现有个LOL.zip文件,我们保存下来为.zip后缀名。(另一个为LOL.docx,里面是一张图片和一句话
这个文件是一个误导,重点在zip文件,所以本文不在进行docx的分析,直接从zip开刀)

解压发现是要密码的,可能这里很多人会认为解压密码隐藏在文档里面的图片里,然后去做图片隐写,
但是这并不是一个正确的方向。

看了别人的wp,用winhex分析压缩源文件目录区知道是伪加密,
第一种方法是:
直接用工具解密。得到四个文本文件。

第二种方法是:
把导出后的LOL.zip文件拉近winhex中来分析
分析前先听我来科普一下....这个zip文件的构成:
一个 ZIP 文件由三个部分组成: 压缩源文件数据区+压缩源文件目录区+压缩源文件目录结束标志
压缩源文件数据区:
50 4B 03 04:这是头文件标记(0x04034b50)
14 00:解压文件所需 pkware 版本
00 00:全局方式位标记(有无加密)
08 00:压缩方式
5A 7E:最后修改文件时间
F7 46:最后修改文件日期
16 B5 80 14:CRC-32校验(1480B516)
19 00 00 00:压缩后尺寸(25)
17 00 00 00:未压缩尺寸(23)
07 00:文件名长度
00 00:扩展记录长度
6B65792E7478740BCECC750E71ABCE48CDC9C95728CECC2DC849AD284DAD0500
压缩源文件目录区:
50 4B 01 02:目录中文件文件头标记(0x02014b50)
3F 00:压缩使用的 pkware 版本
14 00:解压文件所需 pkware 版本
00 00:全局方式位标记(有无加密,这个更改这里进行伪加密,改为09 00打开就会提示有密码了)
08 00:压缩方式
5A 7E:最后修改文件时间
F7 46:最后修改文件日期
16 B5 80 14:CRC-32校验(1480B516)
19 00 00 00:压缩后尺寸(25)
17 00 00 00:未压缩尺寸(23)
07 00:文件名长度
24 00:扩展字段长度
00 00:文件注释长度
00 00:磁盘开始号
00 00:内部文件属性
20 00 00 00:外部文件属性
00 00 00 00:局部头部偏移量
6B65792E7478740A00200000000000010018006558F04A1CC5D001BDEBDD3B1CC5D001BDEBDD3B1CC5D001
压缩源文件目录结束标志:
50 4B 05 06:目录结束标记
00 00:当前磁盘编号
00 00:目录区开始磁盘编号
01 00:本磁盘上纪录总数
01 00:目录区中纪录总数
59 00 00 00:目录区尺寸大小
3E 00 00 00:目录区对第一张磁盘的偏移量
00 00:ZIP 文件注释长度
综上,也就是说,当压缩源文件目录区的全局方式位标记被更改,就会限制Zip文件的可读性
所以,我们就会想到,修改后的话,就会改变Zip文件的可读性了
从百度上找到的资料说,全局方式位标记如果第二位是偶数,那么就不加密,反之,如果是奇数的话,就是加密的
那我们就可以通过WinHex将09 00 -->修改为--> 00 00,就能成功得到里面的文件了。

修改完成后点击保存,发现可以成功免密解压

当我们先打开一个解压后的文件11.txt ,发现文件是以 8950.... 开头的文件夹,

果然是png图片,这样的话,我们推理应该是png图片被hex16编码
在这里感谢是是s1ye老哥提供的python代码,实现了hex16还原png图片的操作
#-*- coding:utf8 -*-
import sys
import os def conversion(hex):
cipher = hex
name = raw_input('input filename:')
open(name, "wb").write(cipher.decode("hex"))
print "file path:",os.path.abspath(name) def usage():
print '[*] conversion for hex'
print '[*] usage:'
print ' hex.py hex'
print ' hex.py filename.txt'
print '[*] -*-by s1ye-*-' def main():
if len(sys.argv)<2:
usage()
else:
if sys.argv[1].split('.')[-1] == 'txt':
with open(sys.argv[1]) as f:
data = f.read()
conversion(data)
else:
conversion(sys.argv[1]) if __name__ == '__main__':
main()

成功解的1.png图片为

给人感觉就是二维码,我们尝试解开其他

当然还不能忘了扫一扫

5.zip隐写术的更多相关文章
- ZIP文件伪加密
题目给出图片,那当然是从图片下手啦! 首先下载图片,在Linux系统下用binwalk工具打开,果然不出所料,里面藏有文件! 用dd把它分解出来! 'txt' 格式的文件提取出来!会看到一个Zip压缩 ...
- Wooyun隐写术总结
之前还没有见到drops上有关于隐写术的总结,我之前对于隐写术比较有兴趣,感觉隐写术比较的好玩.所以就打算总结总结一些隐写术方面的东西.写的时候,可能会有错误的地方,请不吝赐教,谢谢. 本篇章中用到的 ...
- 南京邮电大学CTF隐写术部分Writeup
女神 听说这是女神的私房照,里面藏着flag哦 http://115.28.150.176/misc1.jpg 这个链接居然打不开,摔!万念俱灰!主办方可否给力点! P.S.为了方便日后学习,暂时列下 ...
- 实验吧 ---- 隐写术之so beautiful so white
因为好久没有写博客,所以今天本宝宝要弥补这个过错,一下子更新许多文章,希望各位小伙伴能够原谅,以后我会加倍努力的! 这一次主要都是实验吧里面的 关于隐写术方面的知识,后续我会上传一些解密工具,希望能够 ...
- CTF之图片隐写术解题思路
参考大佬的博客:https://blog.csdn.net/a_small_rabbit/article/details/79644078 深有感触,觉得写得比较全,因此将此篇文章记录在此方便以后用得 ...
- 【CTF】图片隐写术 · 修复被修改尺寸的PNG图片
前言 今天我们想来介绍一下关于图片隐写相关处理,以及修复被修改尺寸的PNG图片. 关于PNG图片的相关处理,是CTF Misc图片隐写术中极为基础的一项操作,笔者这里是想要提一些做题过程中发现的小技巧 ...
- ZIP压缩算法详细分析及解压实例解释
最近自己实现了一个ZIP压缩数据的解压程序,觉得有必要把ZIP压缩格式进行一下详细总结,数据压缩是一门通信原理和计算机科学都会涉及到的学科,在通信原理中,一般称为信源编码,在计算机科学里,一般称为数据 ...
- 记一个mvn奇怪错误: Archive for required library: 'D:/mvn/repos/junit/junit/3.8.1/junit-3.8.1.jar' in project 'xxx' cannot be read or is not a valid ZIP file
我的maven 项目有一个红色感叹号, 而且Problems 存在 errors : Description Resource Path Location Type Archive for requi ...
- 最好的.NET开源免费ZIP库DotNetZip(.NET组件介绍之三)
在项目开发中,除了对数据的展示更多的就是对文件的相关操作,例如文件的创建和删除,以及文件的压缩和解压.文件压缩的好处有很多,主要就是在文件传输的方面,文件压缩的好处就不需要赘述,因为无论是开发者,还是 ...
随机推荐
- 九度OJ 1018:统计同成绩学生人数 (基础题)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:8807 解决:4651 题目描述: 读入N名学生的成绩,将获得某一给定分数的学生人数输出. 输入: 测试输入包含若干测试用例,每个测试用例的 ...
- Flask:web表单
客户端发送的所有通过POST发出的请求信息都可以通过request.form获取.但是如果我们要生成表单的HTML代码和验证提交的表单数据那么就需要采用另外的方法.Flask-WTF扩展可以把处理we ...
- 负载均衡,会话保持,session同步(转)
一,什么负载均衡一个新网站是不要做负载均衡的,因为访问量不大,流量也不大,所以没有必要搞这些东西.但是随着网站访问量和流量的快速增长,单台服务器受自身硬件条件的限制,很难承受这么大的访问量.在这种情况 ...
- 复制一个带random指针的链表
一个单链表,其中除了next指针外,还有一个random指针,指向链表中的任意某个元素.如何复制这样一个链表呢? 通过next来复制一条链是很容易的,问题的难点在于如何恰当地设置新链表中的random ...
- (C)位字段(bit-field)
位字段(bit-field) 在存储空间很宝贵的情况下,有可能需要将多个对象保存在一个机器字中,一种常用的方法是:使用类似于编译器符号表的单个二进制位标志集合,外部强加的数据格式(如设备接口等寄存器) ...
- cinder挂载卷的过程原理
LVM名称介绍 PV:物理磁盘 VG:卷组,多个PV可以组成一个VG,一个VG可以划分成多个LV(逻辑卷). PP:物理区块,将一个VG逻辑的划分成连续的小块. LP:逻辑区块,若干个PP组成一个LP ...
- Linux 下使用C语言 gets()函数报错
在Linux下,使用 gets(cmd) 函数报错:warning: the 'gets' function is dangerous and should not be used. 解决办法:采用 ...
- JavaScript中双叹号(!!)作用示例介绍
http://www.jb51.net/article/48881.htm 经常看到这样的例子: var a: var b=!!a; a默认是undefined.!a是true,!!a则是false, ...
- CentOS 7 设置自定义开机启动,添加自定义系统服务
详细文档,http://www.linuxidc.com/Linux/2015-04/115937.htm 摘自: http://www.centoscn.com/CentOS/config/2015 ...
- Linux学习之路(二)文件处理命令之下
分区格式化: 一块分区想要使用的话,要格式化.格式化主要有两个工作,1,把分区分成等大小的数据块,每个数据块一般为4KB.2在分区之前建一个分区表,给第一个文件建一行相关数据,在分区表里保存了它的io ...