ctfshow misc record
ctfshow misc record
cvestone菜狗杯
misc
损坏的压缩包
考察点:文件不符改后缀
先丢到binwalk分析,发现是由png和zlib文件组成的,再丢到winhex,发现文件头 就是png的而不是zip的,那很显然要改文件后缀成.png,然后flag就在图上了,提取文字即可
迷之栅栏
考察点:010editor比较文件功能、栅栏密码
解压后发现是两张图,让我们找不同,联想到010editor有这样的功能,
丢进去,工具–比较文件: 点最下面的差异,就可以自动定位到不同的地方
cfhwfaab2cb4af5a5820}
tso{06071f997b5bdd1a
然后题目名提示是栅栏密码,那就解密一下, 偏移量从1开始试:
你会数数吗
考察点:010editor直方图分析
找了个wp,发现是让我们数每个字母出现的次数,利用010editor里的工具–直方图(Histogram),
倒数第二列是字符出现次数,点击一下让它倒序排列(由多到少),结果flag就出来了。。。
你会异或吗
考察点:py脚本利用异或恢复文件
是个损坏图片,丢到010中分析,发现文件头根本不是png的,然后结合题目提示
神秘数字:0x50,题目名字又和异或有关,那就自然而然联想到分别把文件头的八个部分和0x50进行异或运算,发现最终结果就是png正确的文件头格式:
正好就是
0x89504E47
那么就可以通过写python脚本,利用文件操作模块,对损坏图片文件整体进行异或运算,得到正常的png图片文件,如下:(python3)
1 | f=open("misc5.png",'rb') |
最后发现flag就在恢复后的图片里: 利用图片提取文字功能即可。
萌新
misc
隐写4
考察点:word文字隐写
打开word是图片,猜测是图片隐写,但是提示中说图片没用,那就是word隐写了 wps里,文件 –>选项 –> 视图 –>(显示)隐藏文字打勾
杂项5
考察点:段落正则匹配处理
下载txt,打开后得到以下文本:
1 | 小明如愿以偿的打开了压缩包,可是眼前的文字自己只能认识FBI,其他的都不认识,而且屏幕出现了一句话,你能帮小明找到这句话的意思吗? |
其实一眼望去文本就不对劲了,不符合规范英文的书写方式,比如不会出现chiLd
,mAny
,oF
这样子,很容易让人混淆,而且加上文中出现{}
,那么提示就很明显了,找出里面大写字母。
首先假设{
前面就是FLAG
,那么我们就找出{}
里面的大写字母然后再来拼接,找出{CTFSHOWNB}
,剩下就是FLAG{CTFSHOWNB}
。
不过这种办法太费劲了,有更快办法
一个是把长文复制到WORD(365)
里面,使用替换功能,勾选通配符,查找内容为[a-z.,-\ ]
(根据文本内容发现有标点符号空格),替换为留空,直接将所有小写字母,标点符号,空格替换(删除),输出FLAG{CTFSHOWNB}
。
还有一个就是利用在线正则表达式工具:https://www.mklab.cn/utils/regex
匹配规则:[A-Z{}]
,勾选全局匹配,复制文本到匹配结果,下面匹配组就出来了,然后到word里面替换段落标记,输出FLAG{CTFSHOWNB}
最后一个借助菜鸟教程里面的教学工具:https://www.runoob.com/try/try.php?filename=tryjsref_regexp5
替换掉文本,修改匹配规则,同样也可以得到结果。
这道题考的,我觉得是细心,经验
杂项6
考察点:压缩包zip伪加密
必要前置知识:
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:扩展记录长度
压缩源文件目录区: 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:局部头部偏移量
压缩源文件目录结束标志: 50 4B 05 06:目录结束标记 00
00:当前磁盘编号 00 00:目录区开始磁盘编号 01 00:本磁盘上纪录总数 01
00:目录区中纪录总数 59 00 00 00:目录区尺寸大小 3E 00 00
00:目录区对第一张磁盘的偏移量 00 00:ZIP 文件注释长度
––––––––––––––––我是分割符–––––––––––––– 先把flag.zip丢到winhex分析:
我们看到上图,红色框的
50 4B
是压缩源文件数据区的头文件标记,它对应的红色框的08 00
并不影响加密属性。
绿色框的50 4B
是压缩源文件目录区
,它对应的绿色框的09 00
影响加密属性,当数字为奇数是为加密,为偶数时不加密。
因此我们更改标志位保存即可:
然后该位置就被修改为了
08 00
,然后ctrl+s保存
然后就可以打开压缩包了: 还可以使用
ZipCenOp.jar
将flag.zip和ZipCenOp.jar都放在同一文件夹 在命令行中执行以下命令:
java -jar ZipCenOp.jar r flag.zip
然后直接打开压缩包查看flag.txt即可。(选择WinRAR这款加压缩软件打开)
(未完待续)杂项8
考察点:利用py脚本爆破图片分辨率
首先先查看图片尺寸,记录下来,然后丢到winhex,把记录下来的尺寸给转化成十六进制,然而修改了几次之后都发现不行,因为原图的宽高被修改破坏了,得找到准确的宽高!因此可以用python脚本爆破出来,参考如下: https://www.cnblogs.com/Flat-White/p/13515090.html 或者这个,但是不知道为什么两个都跑不出来:
1 | # -*- coding: utf-8 -* |