全程Kali linux---CTFshow misc入门(25-37)

news/2025/2/3 22:33:16/

第二十五题:

提示:flag在图片下面。

直接检查CRC,检测到错误,就直接暴力破解。

暴力破解CRC的python代码。

import binascii
import struct

def brute_force_ihdr_crc(filename):
    # 读取文件二进制数据
    with open(filename, 'rb') as f:
        data = f.read()
    
    # 定位 IHDR 块的位置(跳过PNG签名和长度字段)
    ihdr_start = 8 + 4  # 8字节签名 + 4字节长度字段
    ihdr_type = data[ihdr_start:ihdr_start+4]  # 应为 b'IHDR'
    if ihdr_type != b'IHDR':
        print("[-] IHDR chunk not found!")
        return
    
    # 提取原始宽高和其他参数(假设宽度和高度各占4字节)
    width_bytes = data[ihdr_start+4 : ihdr_start+8]   # 篡改后的宽度
    height_bytes = data[ihdr_start+8 : ihdr_start+12] # 篡改后的高度
    other_params = data[ihdr_start+12 : ihdr_start+17] # 后续5字节参数
    
    # 提取存储的 CRC 值(位于IHDR数据块末尾)
    stored_crc_bytes = data[ihdr_start+17 : ihdr_start+21]
    stored_crc = struct.unpack('>I', stored_crc_bytes)[0]  # 大端解析

    print(f"[*] 目标 CRC: {hex(stored_crc)}")
    print(f"[* 原始篡改尺寸: 宽度={struct.unpack('>I', width_bytes)[0]}, 高度={struct.unpack('>I', height_bytes)[0]}")

    # 遍历可能的宽高范围(根据实际情况调整范围)
    max_width = 2000  # 假设宽度最大可能到2000像素
    max_height = 2000 # 假设高度最大可能到2000像素
    print(f"[*] 开始暴力破解宽高范围: 1-{max_width} x 1-{max_height}...")

    for width in range(1, max_width + 1):
        for height in range(1, max_height + 1):
            # 构造 IHDR 数据块(类型码 + 宽高 + 其他参数)
            ihdr_data = b'IHDR' + struct.pack('>I', width) + struct.pack('>I', height) + other_params
            # 计算 CRC
            computed_crc = binascii.crc32(ihdr_data) & 0xFFFFFFFF
            if computed_crc == stored_crc:
                print(f"\n[+] 成功匹配!真实宽高: {width}x{height}")
                print(f"    CRC: {hex(computed_crc)}")
                return
    
    print("[-] 未找到匹配的宽高组合,请扩大范围或检查参数!")

if __name__ == '__main__':
    brute_force_ihdr_crc('misc26.png')  # 替换为你的文件名

ctfshow{494f611cc5842dd597f460874ce38f57}

第二十六题:

加上高度“ 25e ”得到ctfshow{94aef125e087a7ccf2e28e742efd704c}

第二十七题:

修改高度

ctfshow{5cc4f19eb01705b99bf41492430a1a14}

第二十八题:

修改高度后使用Stegsolve查看

ctfshow{59c8bc525426166b1c893fe12a387fd7}

第二十九题:

ctfshow{03ce5be6d60a4b3c7465ab9410801440}

第三十题:

提升说正确的宽度是950,我们在010里修改一下就可以得到flag了。

ctfshow{6db8536da312f6aeb42da2f45b5f213c}

第三十一题:

使用010打开复制FF3A结束 所有字节是487253 减去文件头53个字节后再除3(RGB 每个像素由3个字节),最后再除150(高度)得到1082.6666666666667,即宽带为1082。

ctfshow{fb09dcc9005fe3feeefb73646b55efd5}

第三十二题:

ctfshow{685082227bcf70d17d1b39a5c1195aa9}

第三十三题:

ctfshow{03070a10ec3a3282ba1e352f4e07b0a9}

第三十四题:

这是python的脚本 用来修改宽度,每修改一个就保存一个,在出来的结果中使用肉眼找到正确的图片

这种方法只能在win系统下使用,利用windows忽略crc检验码的特性来完成题目,kali系统下我目前找不到平替的方法。

import zlib
import struct
filename = "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(name,"wb")
        im = all_b[:16]+struct.pack('>i',i)+all_b[20:]
        f1.write(im)
        f1.close()

ctfshow{03e102077e3e5de9dd9c04aba16ef014}

第三十五题:

与三十四题一样,只能在win系统下使用,kali暂无平替方法。

import os
import binascii
import struct
bp = open("misc35.jpg", "rb").read()    
for i in range(901,1500):
    #根据题目给的图片格式修改后缀
    image_name='test/misc35/'+str(i)+'.jpg'
    image=open(image_name,"wb")
    #png
    #data=bp[:16] + struct.pack('>i', i)+bp[20:24]+bp[24:]#png
    #jpg
    data=bp[:157]+bp[157:159] + struct.pack('>h', i)+bp[161:]  #jpg
    image.write(data)
    image.close()

ctfshow{ca35201ca9ed607e5a68f44ef573fbc3}

第三十六题:

与三十四题一样,只能在win系统下使用,kali暂无平替方法。

import os
import binascii
import struct
bp = open("misc36.gif", "rb").read()    
#for i in range(901,1500):
for i in range(920,951):
    #根据题目给的图片格式修改后缀
    image_name='test/misc36/'+str(i)+'.jpg'
    image=open(image_name,"wb")
    #png
    #data=bp[:16] + struct.pack('>i', i)+bp[20:24]+bp[24:]#png
    #jpg
    #data=bp[:157]+bp[157:159] + struct.pack('>h', i)+bp[161:]  #jpg
    #gif
    data=bp[:38]+ struct.pack('>h', i)[::-1]+bp[40:42] +bp[42:]#gif
    image.write(data)
    image.close()

ctfshow{1ebf739f832906d60f57436b8179166f}

第三十七题:

第8、13、20、30、33个图都有部分flag,需要一个一个提取。

ctfshow{2056782cd57b13261dcbbe3d6eecda17}


http://www.ppmy.cn/news/1569069.html

相关文章

城市道路车辆自行车摩托车公交车检测数据集VOC+YOLO格式5236张5类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):5236 标注数量(xml文件个数):5236 标注数量(txt文件个数):5236 …

在K8S中,pending状态一般由什么原因导致的?

在Kubernetes中,资源或Pod处于Pending状态可能有多种原因引起。以下是一些常见的原因和详细解释: 资源不足 概述:当集群中的资源不足以满足Pod或服务的需求时,它们可能会被至于Pending状态。这通常涉及到CPU、内存、存储或其他资…

Python 数据分析 - Matplotlib 绘图

Python 数据分析 - Matplotlib 绘图 简介绘图折线图单线多线子图 散点图直方图条形图纵置横置多条 饼图 简介 Matplotlib 是 Python 提供的一个绘图库,通过该库我们可以很容易的绘制出折线图、直方图、散点图、饼图等丰富的统计图,安装使用 pip install…

机器人抓取与操作经典规划算法(深蓝)——2

1 经典规划算法 位姿估计:(1)相机系位姿 (2)机器人系位姿 抓取位姿:(1)抓取位姿计算 (2)抓取评估和优化 路径规划:(1)笛卡…

DeepSeek-R1 论文. Reinforcement Learning 通过强化学习激励大型语言模型的推理能力

论文链接: [2501.12948] DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning 实在太长,自行扔到 Model 里,去翻译去提问吧。 工作原理: 主要技术,就是训练出一些专有用途小模型&…

高效流式大语言模型(StreamingLLM)——基于“注意力汇聚点”的突破性研究

论文地址:https://arxiv.org/pdf/2309.17453 github地址:https://github.com/mit-han-lab/streaming-llm 1. 研究背景与挑战 随着大语言模型(LLMs)在对话系统、文档摘要、代码补全和问答等领域的广泛应用,如何高效且准…

CSS 溢出内容处理:从基础到实战

CSS 溢出内容处理:从基础到实战 1. 什么是溢出?示例代码:默认溢出行为 2. 使用 overflow 属性控制溢出2.1 使用 overflow: hidden 裁剪内容示例代码:裁剪溢出内容 2.2 使用 overflow: scroll 显示滚动条示例代码:显示滚…

外部网关协议BGP考点

高频考点,中考次数:25次 这类知识采用背诵的方式,可以更快速地备考。 BGP是边界网关协议,是外部不是内部网关协议(是不同自治系统的路由器使用的协议)一个BGP系统的发言人使用TCP(不是UDP&…