ctfshow-红包题第五弹

题目下载:https://www.lanzoui.com/i9e23fi
下载打开之后发现是一个MP3文件,猜测有音频隐写

但是在多次尝试之后,并没有发现有音频隐写。
那还是老方法:用010打开该压缩包,发现压缩包里有JPG文件头 :FF D8 FF

将FF D8 FF以下内容复制后新建并保存后,发现是一张图片

再次使用010打开此图片,下拉过程中发现一些奇怪字符

猜测该图片有隐写,在kail中使用steghide命令
steghide extract -sf 2.JPG

使用弱口令 :123456
发现成功了,导出一个文档,打开后发现是base64加密

对base64解密后发现是一个网址 :https://www.lanzous.com/i9dpjxe
发现直接打开打不开,可以先打开 https://www.lanzoui.com/i9e23fi,
然后将后缀替换成19dpjxe就可以打开
下载打开后发现是一大段的16进制

将文本里的内容以16进制的格式复制到010中

发现一大堆的坐标,应该要用到rgb脚本转化为图片
先将010中的坐标导出,直接上python脚本
import re
str_ = ""
str_list = []
with open('a.txt') as f:
for i in f.readline():
str_ += i
if (str_[-1] == ")"):
str_ = "".join(re.findall("\(.*\)", str_))
str_list.append(str_.strip('(').strip(')'))
str_ = ""
with open('rgb.txt', 'w') as f:
for i in str_list:
f.write(i + '\n')
运行结果:

接着就是把rgb转化成图像了(网上直接找现成的,x和y就是上面的坐标,从0开始算所以是72和74)
from PIL import Image
x = 72 #x坐标 通过对txt里的行数进行整数分解
y = 74 #y坐标 x * y = 行数
im = Image.new("RGB", (x, y)) #创建图片
file = open('rgb.txt') #打开rbg值的文件
#通过每个rgb点生成图片
for i in range(0, x):
for j in range(0, y):
line = file.readline() #获取一行的rgb值
rgb = line.split(", ") #分离rgb,文本中逗号后面有空格
im.putpixel((i, j), (int(rgb[0]), int(rgb[1]), int(rgb[2]))) #将rgb转化为像素
im.save('flag.jpg')
运行后得到一张颠倒的二维码

使用PS将二维码重新进行拼图得到:

使用QR Research扫描二维码得到flag


浙公网安备 33010602011771号