【问鼎杯】3

编程入门 行业动态 更新时间:2024-10-09 14:18:52

【问鼎杯】3

【问鼎杯】3

0x01序

这题CTF题目是2015/11/28问鼎杯线下的一题题目,当时在这题上卡了好久。。其实主要是因为自己JPG数据格式不熟,并且没有准备相关资料导致的,所幸比赛的最后还是做了出来,这次放这个writeup是因为赛后自己想出了更完美的解题方式,所以记录一下。

0x02题目描述

给出一堆数据,该数据中隐藏着flag信息,请从中提前出flag。
Download it!

0x03 解题思路

首先用binwalk识别一下文件类型

发现偏移0x6000处存在JPG文件。

提取出该文件

dd if=3-2 skip=24576 bs=1 of=1.jpg


打开文件。。然并软。。

文件似乎有问题,我们用stega查看一下

文件扫描线结束后存在大量垃圾数据。。

首先把之后的垃圾数据去掉,保存至一个文件里面 我这里命名为 1

这边第一个思路的是去掉导致扫描线结束的数据。

如果扫描线遇到ff字节的数据,则判断下一个字节是否为00否则结束扫描线。

写个脚本把垃圾数据中所有导致扫描线结束的字节改过来。。

file_hex=''
with open('1','rb') as f:file_hex = f.read()
file_hex = list(file_hex)
new_file=[]
i = 0
ko=1
while(i<len(file_hex)):if(file_hex[i]=='\xff' and file_hex[i+1]!='\x00'):ko=0elif(file_hex[i]=='\xff' and file_hex[i+1]=='\x00'):ko=1new_file.append(file_hex[i])elif(ko==1):new_file.append(file_hex[i])i+=1
new_file = ''.join(new_file)
with open('2','w') as f:f.write(new_file)

修改图片的长度(JPG数据格式)

FF C0之后3个字节开始是图片高度,占两个字节,然后是图片宽度,占两个字节

然后将处理后的垃圾数据拼接回原图片,希望它能够继续扫描出所有数据

这是什么鬼!?

好吧,换另一个思路,模糊测试。脚本如下

file_hex=''
file_old = ''
with open('0.jpg','r') as f:file_old = f.read()
file_old = list(file_old)with open('1','r') as f:file_hex = f.read()
file_hex=list(file_hex)
i=1
while(i<len(file_hex)):file = []file.extend(file_old)with open(str(i)+'.jpg','w') as f:file.extend(file_hex[i:len(file_hex)])file = ''.join(file)f.write(file)i+=1

在第1740张图发现flag,即偏移1740个字节,这里是此处flag区域刚好全为有效数据。。万一运气不好,遇到里面也存在垃圾数据。那该怎么办?(或许我可以先用脚本处理完垃圾数据后,再模糊测试?

更多推荐

【问鼎杯】3

本文发布于:2024-03-23 01:52:38,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1739058.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!