MISC琐记

【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}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值