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

embedded/2025/2/4 0:03:15/

第二十五题:

提示: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/embedded/159316.html

相关文章

UE5 蓝图计划 - Day 2-3:执行流与事件

在 Unreal Engine 5 的蓝图系统中,执行流(Execution Flow) 和 事件(Events) 是构建游戏逻辑的核心基础。通过执行流,蓝图可以按照特定的顺序运行节点逻辑;而事件则是蓝图的触发器,能…

局域网文件互传:手机与电脑的便捷传输利器

这是一款可在局域网内实现手机与电脑之间文件互传的软件,由吾爱作者y4h3z4精心开发。它是一款绿色单文件版软件,体积小巧,仅780K,无需安装,双击即可直接使用。 左上角“电脑根目录”可以选择需要传输到手机的文件夹。当…

第七篇:数据库备份与恢复

第七篇:数据库备份与恢复 目标读者: 本篇文章适合那些希望掌握数据库管理与数据安全的学习者,特别是开发人员、运维工程师、数据库管理员等。通过掌握数据库备份与恢复技术,能够确保数据的安全性和可靠性,并有效应对…

实战技巧:如何快速提高网站收录的多样性?

本文转自:百万收录网 原文链接:https://www.baiwanshoulu.com/54.html 快速提高网站收录的多样性是一个综合性的任务,需要从多个方面入手。以下是一些实战技巧,帮助你实现这一目标: 一、优化网站结构与内部链接 建立…

Node.js下载安装及环境配置

目录 一、下载 1. 查看电脑版本,下载对应的安装包 2. 下载路径下载 | Node.js 中文网 二、安装步骤 1. 双击安装包 2. 点击Next下一步 3. 选择安装路径 4. 这里我选择默认配置,继续Next下一步(大家按需选择) 5. 最后inst…

飞牛NAS新增虚拟机功能,如果使用虚拟机网卡直通安装ikuai软路由(如何解决OVS网桥绑定失败以及打开ovs后无法访问飞牛nas等问题)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 飞牛NAS虚拟机安装爱快教程 📒🛠️ 前期准备🌐 网络要求💾 下载爱快镜像🚀 开始安装💻 开启IOMMU直通🌐 配置网络🚨 解决OVS网桥绑定失败以及打开ovs后无法访问飞牛nas等问题➕ 创建虚拟机🎯 安装ikuai💻 进…

ARM内核:嵌入式时代的核心引擎

引言 在当今智能设备无处不在的时代,ARM(Advanced RISC Machines)处理器凭借其高性能、低功耗的特性,成为智能手机、物联网设备、汽车电子等领域的核心引擎。作为精简指令集(RISC)的典范,ARM核…

websocket实现聊天室应用,包括文字和图片上传_websocket onmessage怎么接收客户端的图片

可以看到,服务端使用的是PrintWriter,等于说是将 写在浏览器里面客户端代码: function changeNumber(num) { //服务端返回的字符串调用的方法 document.getElementById("number").innerHTML num; } 注意changeNumber(num)这个函…