【ctfshow】红包题第一弹(gif动图提取base64编码)
参考了这位师傅的博客,写的很详细
CTF show 红包题第一弹_yu22x的博客-CSDN博客z
主要是学到了个新脚本:
import os
import zipfile
def zips(): #处理压缩包
for i in range(1,87):
zip_file = zipfile.ZipFile(str(i)+'.zip')
zip_list = zip_file.namelist() #获取压缩包中的文件
for f in zip_list:
zip_file.extract(f, './a') #将压缩文件放入‘a’文件夹下
zip_file.close()
def base(): #处理图片中的base64
flag=""
for i in range(1,87):
path ="a/"+ str(i)+".jpg"
num = os.path.getsize(path) #获取图片的大小
f = open(path,'rb')
f.seek(int(num)-100)
s = f.read(100) #读取最后100个字节
flag+=bytes.decode(s)
f.close()
f1 = open('flag.txt','w')
f1.write(flag)
if __name__=="__main__":
zips()
base()
要注意的就是:
压缩包要和py文件放在同一个目录下
可以多尝试几个解码网站
ctfshow-stega10
打开之后是一张图片
这个base64我没有发现,还是不够敏锐
之后得到压缩包
文件信息处的CRC比较可疑
考虑到是:CRC爆破获得密码
脚本:
import string
import binascii
s=string.printable
c =[0xF3B61B38,0xF3B61B38,0X6ABF4A82,0X5ED1937E,0X09b9265b,0x84b12bae,0x70659eff,0x90b077e1,0x6abf4a82]
password = ''
for crc in c:
for i in s:
if crc==(binascii.crc32(i.encode())&0xffffffff):
password =password + i
print(password)
得到密码:
447^*5#)7
解开后就是常规的图片倒置,脚本倒置之后得到二维码,扫描之后得到flag
stega11
jpg的文件头,FF D8
jpg的文件尾, FF D9
浅浅记录一下一个常见知识,还有这串隐蔽的字符
看到奇怪的字符都把注意力放到上面的D@DD编码,但其实flag在下面的base32编码
misc4
文档问题可以改后缀,关注一下这个目录下的文件
【ctfshow】红包题第五弹(图片隐写+rgb色素点绘图)
参考博客:ctfshow-红包题第五弹_admin_9111的博客-CSDN博客
首先下载题目拿到一个zip附件。里面是一个mp3,一般情况下都会直接对mp3进行隐写分析,单这道题有一个小坑点:mp3里并没有可用信息,相反,zip可以foremost分理处一张图片(吸取教训)
steghide可以对图片进行检测
steghide info .\xx.jpg #检测文件
steghide extract -sf .\xx.jpg #分离文件
(弱密码一般可以猜测123456)
得到flag.txt
aHR0cHM6Ly93d3cubGFuem91cy5jb20vaTlkcGp4ZQ==
base64解码:
https://www.lanzous.com/i9dpjxe
可能需要一点经验积累,蓝奏云应该是lanzoui
访问网址https://www.lanzoui.com/i9dpjxe
下载得到附件zip
这也是我需要积累的一个点:这些数字0-f都有出现,于是猜测是16进制
16进制转文本
脚本格式化,整理成坐标
还是不会写脚本,于是这里借鉴师傅们的:
import re
# 正则规则 [1-9][0-9]{1,2}匹配三位数和两位数 \s匹配空格
f1 = open('002.txt','w+')
reg = re.compile(r'[0-9]*,\s[0-9]*,\s[0-9]*')
with open('001.txt') as f:
data = f.read()
f.close()
result = reg.findall(data)
for i in result:
print(i)
f1.write(i + '\n')
rgb色素点
from PIL import Image
x = 72 # x坐标 通过对txt里的行数进行整数分解
y = 74 # y坐标 x * y = 行数
im = Image.new("RGB", (x, y)) # 创建图片
file = open('D:\**\002.txt') # 打开rbg值的文件
# 通过每个rgb点生成图片
for i in range(0, x):
for j in range(0, y):
line = file.readline() # 获取一行的rgb值
rgb = line.split(", ") # 分离rgb,文本中逗号后面有空格
if(rgb[0]):
im.putpixel((i, j), (int(rgb[0]), int(rgb[1]), int(rgb[2]))) # 将rgb转化为像素
im.save('D:\**\flag.jpg') # 也可用im.save('flag.jpg')保存下来
得到一张图片:
强行拼图:
居然还是可以扫描的,得到flag:flag{ctf_show_fight}