ctfshow-Misc入门

写在前面

后续提取图片中的flag均为脚本提取,部分flag提取出错需要人工再次核验哈~,flag提取演示

图片篇(基础操作)

misc1

flag在下载的图片上

在这里插入图片描述

在这里插入图片描述

misc2

将后缀名改为.png即可在图片上看到flag

在这里插入图片描述

misc3

推荐一款图片浏览器 Honeyview,直接可以查看bpg格式的图片

在这里插入图片描述

misc4

用 HxD 依次查看文件头,将后缀名依次改为 .png.jpg.bmp.gif.tif.webp,将内容拼接起来即可得到flag

在这里插入图片描述
在这里插入图片描述

图片篇(信息附加)

misc5

HxD 打开,拖到尾部即可发现flag

在这里插入图片描述

misc6

HxD 打开,搜索关键词 ctfshow 即可发现flag

在这里插入图片描述

misc7

HxD 打开,搜索关键词 ctfshow 即可发现flag

在这里插入图片描述

misc8

binwalk 查看图片发现隐藏图片,利用 foremost 提取出来

在这里插入图片描述
在这里插入图片描述

misc9

zsteg 查看图片,发现flag

在这里插入图片描述

zsteg (补充)

zsteg安装方法 (补充)

更换RubyGems的源
gem sources --remove https://rubygems.org/
gem sources --add https://gems.ruby-china.com/
gem sources -l
安装zsteg
git clone https://hub.fastgit.org/zed-0xff/zsteg.git 
cd zsteg
gem install zsteg

zsteg的使用方法 (常见)

查看帮助
zsteg -h

查看LSB信息
zsteg pcat.png

检测zlib
# -b的位数是从1开始的
zsteg zlib.bmp -b 1 -o xy -v

显示细节
zsteg pcat.png -v

尝试所有已知的组合
zsteg pcat.png -a

导出内容
zsteg -E "b1,bgr,lsb,xy" pcat.png > p.exe

更多的使用方法可以查看README.md

misc10

binwalk 查看图片,分离图片,查看数据块即可发现flag,需要注意的是zlib是PNG IDAT的可选压缩格式

在这里插入图片描述

misc11

binwalk 查看发现两个IDAT数据块,尝试删去第一个数据块,查看图片发现flag

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

misc12

zsteg查看图片提示数据块异常

在这里插入图片描述

测试后发现需要删掉前8个IDAT块

在这里插入图片描述

在这里插入图片描述

misc13

HxD查看发现图片尾部存在可疑数据,观察发现{前面那一串字符从第一位开始每隔一位选取一个字符,连起来就是ctfshow,编写脚本提取flag

s="631A74B96685738668AA6F4B77B07B216114655336A5655433346578612534DD38EF66AB35103195381F628237BA6545347C3254647E373A64E465F136FA66F5341E3107321D665438F1333239E9616C7D"
flag=""
for i in range(0,len(s),4):
    flag += s[i]
    flag += s[i+1]
print(flag)

misc14

binwalk查看图片,发现JPEG图片,foremostbinwalk无法成功提取,用HxD打开搜索文件头手动提取
在这里插入图片描述

在这里插入图片描述

misc15

HxD打开搜索关键词 ctfshow 即可发现flag

在这里插入图片描述

misc16

binwalk查看图片,发现额外数据,用binwalk -e提取出来,查看提取出来的文件发现flag

在这里插入图片描述

misc17

binwalk提取出来的东西解不出,尝试 zsteg,根据提示提取信息得到PNG图片,查看图片发现flag

在这里插入图片描述

在这里插入图片描述

misc18

exiftool 查看图片,flag在标题、作者、照相机和镜头型号里

在这里插入图片描述

misc19

exiftool 查看图片,flag在主机上的文档名里

在这里插入图片描述

misc20

exiftool 查看图片,flag在评论里

在这里插入图片描述

misc21

exiftool 查看图片,将序列号686578285826597329转字符得到hex(X&Ys),分别将X/Y ResolutionX/Y Position转成hex,然后拼接起来,flag为ctfshow{e8a221498d5c073b4084eb51b1a1686d}

在这里插入图片描述

misc22

直接查看图片没有发现什么,但是用 Honeyview浏览缩略图时发现数据

在这里插入图片描述

利用 MagicEXIF 查看图片,flag为ctfshow{dbf7d3f84b0125e833dfd3c80820a129}

在这里插入图片描述

misc23

exiftool看一下发现有好几个历史时间,History Action中有提示

在这里插入图片描述

将给出的四个时间的时间戳转换出来,分别hex后拼在一起,转换地址

在这里插入图片描述

misc41

提示中的F001是突破点,HxD 查看图片发现有有大量F001组成了某种形状

在这里插入图片描述

F001出现过的位置中所有十六进制的值单独截取出来,每四位分隔开,把F001替换成0,其他值替换成空格,得到一张含有flag的图片,这里也可以采用CyberChef来解决问题,flag为ctfshow{fcbd427caf4a52f1147ab44346cd1cdd}

图片篇(文件结构)

misc24

HxD查看一下图片,文件头占了53个字节,文件尾的位置在675053字节处 (后面两个字节是windows的”补0”),因为每个像素点由3个字节 (十六进制码6位) 表示,每个字节负责控制一种颜色,分别为蓝(Blue)、绿(Green)、红(Red),所以文件真实的像素大小为:(675053-53)/3=225000

在这里插入图片描述
在这里插入图片描述

题目给的图片是900*150=135000个像素大小

在这里插入图片描述

尝试后发现这题的宽度是对的,所以正确的高度是225000/900=250,将高度改成

在这里插入图片描述
在这里插入图片描述

misc25

TweakPNG查看图片发现图片的CRC值不对,猜测应该是修改了宽高,用脚本跑一下看看

在这里插入图片描述

在这里插入图片描述

根据脚本计算出来的值修改宽高,保存后即可看到flag

在这里插入图片描述
在这里插入图片描述

misc26

TweakPNG查看图片发现图片的CRC值不对,和上一题一样用脚本跑一下看看

在这里插入图片描述
在这里插入图片描述

根据脚本计算出来的值修改宽高,保存后即可看到flag

在这里插入图片描述
在这里插入图片描述

misc27

根据提示,猜测依旧是修改图片高度,将高度改高后即可发现flag

在这里插入图片描述
在这里插入图片描述

misc28

根据提示,猜测依旧是修改图片高度,将高度改高后即可发现flag,但是需要注意从预览图中能看到flag,但是直接打开看不到,可以使用图片编辑器或者Stegsolve打开

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

misc29

GIF有很多帧,将每一帧的高度都改高后,用Stegsolve查看,在第八帧即可发现flag

在这里插入图片描述

misc30

根据提示修改BMP图片宽度即可发现flag

在这里插入图片描述
在这里插入图片描述

misc31

根据题给描述,计算正确宽度

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

misc32

根据题给描述,计算出正确的高宽

import zlib
import struct

# 同时爆破宽度和高度
filename = "misc32.png"
with open(filename, 'rb') as f:
    all_b = f.read()
    data = bytearray(all_b[12:29])
    n = 4095
    for w in range(n):
        width = bytearray(struct.pack('>i', w))
        for h in range(n):
            height = bytearray(struct.pack('>i', h))
            for x in range(4):
                data[x+4] = width[x]
                data[x+8] = height[x]
            crc32result = zlib.crc32(data)
            #替换成图片的crc
            if crc32result == 0xE14A4C0B:
                print("宽为:", end = '')
                print(width, end = ' ')
                print(int.from_bytes(width, byteorder='big'))
                print("高为:", end = '')
                print(height, end = ' ')
                print(int.from_bytes(height, byteorder='big'))

在这里插入图片描述

修改宽高保存后即可看到flag
在这里插入图片描述
在这里插入图片描述

misc33

根据题给描述,计算出正确的高宽

在这里插入图片描述

修改宽高保存后即可看到flag

在这里插入图片描述
在这里插入图片描述

misc34

利用脚本把生成的所有图片都保存下来了,观察哪个是正常的

import zlib
import struct
filename = r"C:\Users\95235\Downloads\misc34\misc34.png"
with open(filename, 'rb') as f:
    all_b = f.read()
    #w = all_b[16:20]
    #h = all_b[20:24]
    for i in range(901,1200):
        name = str(i) + ".png"
        f1 = open(r"C:\Users\95235\Downloads\misc34\\" + name,"wb")
        im = all_b[:16]+struct.pack('>i',i)+all_b[20:]
        f1.write(im)
        f1.close()

在这里插入图片描述

misc35

先把图片基础的高度调高一点(高度在600,宽度在993-1000这个范围内都可以得到flag),才能看到flag

import zlib
import struct
filename = r"C:\Users\95235\Downloads\misc35\misc35.jpg"
with open(filename, 'rb') as f:
    all_b = f.read()
    #w = all_b[159:161]
    #h = all_b[157:159]
    for i in range(901,1200):
        name = str(i) + ".jpg"
        f1 = open(r"C:\Users\95235\Downloads\misc35\\" + name,"wb")
        im = all_b[:159]+struct.pack('>h',i)+all_b[161:]
        f1.write(im)
        f1.close()

在这里插入图片描述

misc36

和上一题一样先把图片基础的高度调高一点,脚本爆破即可,用照片编辑器查看gif文件

import zlib
import struct
filename = r"C:\Users\95235\Downloads\misc36\misc36.gif"
with open(filename, 'rb') as f:
    all_b = f.read()
    for i in range(920,951):
        name = str(i) + ".gif"
        f1 = open(r"C:\Users\95235\Downloads\misc36\\" + name,"wb")
        im = all_b[:38]+struct.pack('>h',i)[::-1]+all_b[40:]
        f1.write(im)
        f1.close()

在这里插入图片描述
在这里插入图片描述

misc37

Stegsolve查看,flag在8、14、21、31、34帧中,拼接起来即可

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

misc38

题目所给的是apng图片,可以使用APNG Disassembler来把每一帧分离出来,9、17、36、40帧中藏有flag

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

misc39

这里是利用不同帧之间的间隔时间来隐写的,利用identify来处理该GIF图片

安装命令:
sudo apt-get install imagemagick

提取命令:identify -format "%T " misc39.gif > 1.txt,得到的一串36和37

在这里插入图片描述

把37换成1、36换成0,得到长度为287的二进制字符串,由于无法整除8,考虑7位一组,转换成字符得到flag

在这里插入图片描述

misc40

文件识别为apng文件,使用工具APNG Disassembler,flag在记录详细信息的txt文件中,用脚本把flag提取出来

在这里插入图片描述

在这里插入图片描述

misc42

根据提示,用tweakpng打开图片,发现IDAT块的长度很可疑,有一部分IDAT块的长度转换为字符是ctfshow,将后面的接着转换成字符即可得到flag

在这里插入图片描述
在这里插入图片描述

misc43

根据题给描述,先用tweakpng打开分析一下图片,发现报了一堆错,使用pngdebugger分析,发现所有IDAT块的crc32值都是错误的

在这里插入图片描述

将错误的IDAT块的crc-code提取出来,拼接起来转字符串即可得到flag

在这里插入图片描述

import binascii
def hex_to_str(s):
    hex = s.encode('utf-8')
    str_bin = bin
    str_bin = binascii.unhexlify(hex)
    return str_bin.decode('utf-8')

s = 'E59387E593A62E63746673686F777B36656232353839666666663565333930666536623837353034646263303839327D'
hex_to_str(s)

misc44

根据提示,用PNGDebugger打开,把信息导入到txt文件中

在这里插入图片描述

利用脚本把CRC OK的替换成1,CRC FAILED替换成0,注意先把前十行的内容删去,再把最后四行删去

在这里插入图片描述

misc45

根据题给描述,猜测是文件转换,测试后发现转成.bmp格式后,用binwalk提取即可,看大师傅的blog发现考察点是png和bmp像素点的读取方式

在这里插入图片描述
在这里插入图片描述

misc46

根据题给描述,搜索后猜测应该是画图之类的,先提取出GIF的详细信息

identify misc46.gif > message.txt 

在这里插入图片描述

观察得到的信息,其中0+0、174+49、196+47这些是偏移量,用其来进行画图

坐标提取:

f = open(r"C:\Users\95235\Downloads\misc46\message.txt","r")
x = f.readlines()
f.close()

f = open(r"C:\Users\95235\Downloads\misc46\out.txt","w")
for i in x:
    f.write(i.split("+")[1])
    f.write(" ")
    f.write(i.split("+")[2][:2])
    f.write("\n")
f.close()

根据得到的点坐标进行绘图

在这里插入图片描述

在这里插入图片描述

misc47

测试后发现是apng格式,解题的思路是根据每一个IDAT块前面的一个fcTL块中包含的水平垂直偏移量

在这里插入图片描述

import struct
from PIL import Image
import matplotlib.pyplot as plt
f = open(r'C:\Users\95235\Downloads\misc47\misc47.png','rb')
c = f.read()
c = c[c.index(bytes.fromhex('6663544C00000001')):]
pp = []
for i in range(1,1124,2):
    start = c.index(bytes.fromhex('6663544C0000')+struct.pack('>h',i))
    fc = c[start:start+30]
    print(fc[18:20],fc[22:24])
    print(struct.unpack('>h',fc[18:20])+struct.unpack('>h',fc[22:24]))
    pp.append(struct.unpack('>h',fc[18:20])+struct.unpack('>h',fc[22:24]))
img = Image.new('RGB',(400,70),(255,255,255))
for i in pp:
    new = Image.new('RGB',(1,1),(0,0,0))
    img.paste(new,i)
plt.imshow(img)
plt.show()

在这里插入图片描述

misc48

010 editor打开,发现提示统计FF的数量再减去1、ctfshow{}中包含32个字符

在这里插入图片描述

因为flag长度是32位,所以只需要统计前32个段就行

0 12 11 0 7 10 13 13 9 0 9 13 0 13 6 0 10 9 2 1 0 1 10 8 11 5 12 7 2 2 3 10

分别转换成hex即可

s = [0,12,11,0,7,10,13,13,9,0,9,13,0,13,6,0,10,9,2,1,0,1,10,8,11,5,12,7,2,2,3,10]
f = '0123456789abcdef'
flag = 'ctfshow{'
for i in range(len(s)):
    flag += f[s[i]]
flag += '}'
print(flag)

misc49

010 editor打开,FFE后面的就是flag的值

在这里插入图片描述

图片篇(颜色通道)

misc50

由于是颜色通道篇的,很自然想到用Stegsolve查看一下,

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 12
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: kbd-misc-2.5.1是一个Linux操作系统下的键盘输入处理工具包,它包含了一些常用的工具和驱动程序,如loadkeys、dumpkeys、kbd_mode等。这些工具可以帮助用户配置和管理Linux系统下的键盘输入设备,包括设置键盘映射、键盘布局、键盘模式等。同时,kbd-misc-2.5.1还提供了一些驱动程序,如atkbd、ps2mouse等,用于支持各种类型的键盘和鼠标设备。kbd-misc-2.5.1是一个开源项目,它的源代码可以在GitHub上免费获取和更新,支持多种Linux发行版和硬件平台。 ### 回答2: kbd-misc-2.5.1 是一个开源软件包,其中包含了一些与键盘和输入设备有关的工具和驱动程序。这个软件包是在Linux内核中使用的,并提供了一些用于处理和管理键盘和输入设备的功能。 kbd-misc-2.5.1 软件包中的一些主要功能包括: 1. 键盘驱动程序:这个软件包提供了一些用于驱动各种类型的键盘的驱动程序。这些驱动程序允许操作系统与键盘进行通信,接收来自键盘的输入,并将其发送给应用程序。 2. 控制台工具:kbd-misc-2.5.1 还包含了一些用于控制台显示的工具。这些工具可以配置控制台的字体、颜色和布局等属性,提供了一些命令行工具来管理控制台的显示内容。 3. 输入法支持:该软件包还提供了对输入法的支持。它包含了一些输入法引擎和库文件,可以将输入法的功能集成到系统中,并提供输入法切换和输入法配置等功能。 4. 键盘映射:kbd-misc-2.5.1 还提供了一些工具和配置文件,用于定义键盘的映射规则。这允许用户自定义键盘的按键功能,以满足个人偏好或特定需求。 总之,kbd-misc-2.5.1 是一个用于处理和管理键盘和输入设备的开源软件包。它提供了一些驱动程序、工具和配置文件,允许用户自定义键盘和控制台的设置,并提供输入法支持和键盘映射功能。 ### 回答3: kbd-misc-2.5.1 是一个用于 Linux 操作系统的桌面键盘和控制台控制工具集。 kbd-misc-2.5.1 提供了一系列实用程序和工具,用于访问和管理 Linux 系统中的键盘和控制台。其中包括一些用于控制键盘布局和映射的工具,以及一些用于处理键盘输入的实用程序。这些工具可以帮助用户在 Linux 系统中调整和定制键盘的功能和行为。 kbd-misc-2.5.1 还包含一些用于控制台中显示的字符和图形的程序。这些程序可以提供更丰富的字符和图形显示效果,使控制台界面更加美观和易于使用。 该工具集还提供了一些用于处理输入事件和生成键盘事件的库和驱动程序。这些库和驱动程序可以与操作系统内核进行交互,以实现键盘输入的捕获和处理。 总的来说,kbd-misc-2.5.1 是一个功能丰富的工具集,用于在 Linux 系统中控制和定制键盘和控制台的功能和行为。它提供了一些实用程序、工具、库和驱动程序,帮助用户充分利用键盘和控制台的功能,提高系统的易用性和个性化定制能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值