标签:解压 argv filename ctf file under bsp open 尺寸
首先分析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图片为
给人感觉就是二维码,我们尝试解开其他
当然还不能忘了扫一扫
标签:解压 argv filename ctf file under bsp open 尺寸
原文地址:https://www.cnblogs.com/bmjoker/p/8907858.html