2024 四川省大学生信息安全技术大赛 安恒杯 部分 WP

文章目录

一、前言

WP不完整,仅供参考!

除WEB外,其余附件均已打包完毕,在这里也是非常感谢师傅的附件支持!

123网盘下载:

https://www.123pan.com/s/q2J1jv-vRJvd?提取码:0905
提取码:0905

二、MISC

unzip-png

解题思路

附件下载,得到一个txt,打开仔细观察不难发现这个头部有点像zlib的头部(789c),可能有的师傅刷题刷的少,zlib是什么他不知道,不过没关系哈,这里我们也简单说说:

zlib文件

我们在分析文件时,789C 是 zlib 数据流 的一个特征性的起始字节,我们可以通过这些字节来识别它是 zlib 格式的压缩数据。这是因为 zlib 压缩流的开头包含一个压缩头部,并且其中的前两个字节具有特殊的含义。

  1. zlib 头部格式

zlib 数据流的头部由两个字节组成,具体格式如下:

  • 第一个字节(8位):压缩方法和信息(CMF,即 Compression Method and Flags
  • 第二个字节(8位):额外的标志和校验值(FLG,即 Flags
  1. 具体含义
  • 78 :第一个字节 78 的前四位 0111 表示使用 DEFLATE 压缩算法(zlib 默认使用 DEFLATE),后四位表示压缩窗口大小。
  • 9C :第二个字节 9C 代表某种默认设置,且最后5位是用来计算校验和(FCHECK)的。
  1. 常见的 zlib 头部

zlib 文件头的常见前两字节是:

  • 78 01:表示最低压缩级别,几乎不压缩
  • 78 9C:表示默认压缩级别(常见,压缩比和速度均衡)
  • 78 DA:表示最高压缩级别(压缩率最高,但速度较慢)

TXT文本

当然这里如果一时半会看不出是zlib也没有关系,我们可以直接请出我们的工具:cyberchef

https://cyberchef.org/

哎,这里有的师傅可能就有疑问了,比赛不是离线的嘛?怎么还可以使用在线工具呢?因为人家"cyberchef"本来就是可供本地下载离线解码!

cyberchef下载

直接将1.txt拖进去即可,cyberchef会自动识别并且帮助解码(当然只能识别出一些简单的,复杂一些的就需自己分辨了)

最后经过一次"From Hex"解码,以及"Detect File Type"也是成功识别出是zlib文件(这里全程是cyberchef自动识别出的)

那既然已知晓是zlib,这里我们直接将用于自动识别文件的Detect File Type进行替换Zlib Inflate即可

直接在cyberchef的搜索栏中查找关键词zlib就能发现,接着选中Zlib Inflate进行拖动至Recipe中进行解码即可,最后看见89 50 4E 47就熟悉多了吧?

最后导出解码的数据,保存即可:

哎,那这里有的师傅可能就要急了,他可能会直接将刚刚导出的download.dat直接改一个后缀,修改为download.png,以为就能直接显示图片,但其实并不是这样操作的:

在cyberchef中,导出的数据都是原数据,这是什么意思呢?通俗易懂来说,你就只是单纯导出了89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52这一串数字,人家并不会直接帮你转换为png图片(也并不是单纯修改后缀为png那么简单),当然我们可以选中导出的download.dat使用010打开分析一下

这样一打开来进行查看,跟普通的png图片是不是少了些什么?那我们到底要怎么做呢,其实也很简单,这里以010为例,我们可以直接新建一个十六进制的文件,将刚刚得到的数据复制并且"Ctrl+shift+v"粘贴至新建的十六进制的文件中:

得到

最后Ctrl+s保存为1.png即可,这时候我们再去打开图片,会发现还是什么也看不见:

那既然不能正常显示,肯定是图片数据出现了问题,那我们接着返回010中仔细观察一下:

那这里我们首先来简单的了解一下PNG图片的组成部分;

一个 PNG 图片 一般由多个部分组成,主要包括几个关键的 数据块(chunk) ,其中最常见的部分有 IHDRIDAT 块。

PNG 文件的主要组成部分:

  1. 文件签名(PNG Signature)

    • PNG 文件以一个 8 字节的固定签名开始,标识文件是 PNG 格式。
    • 这个签名的十六进制值是 89 50 4E 47 0D 0A 1A 0A
  2. 数据块(Chunks): PNG 文件接下来的部分由一系列数据块组成,每个数据块有其特定的功能。每个数据块包含四部分:长度、类型、数据和 CRC 校验。

    常见的数据块有:

    • IHDR(Image Header Chunk)

      • 这是 PNG 图片的头部,它是第一个数据块,包含图片的基本信息,比如宽度、高度、位深度、颜色类型、压缩方法、滤波器方法和交错方法。
      • IHDR 块非常重要,任何 PNG 图片都必须有一个 IHDR 块。
      • 大小通常是 13 字节。
    • PLTE(Palette Chunk,调色板块)

      • 用于定义图像的调色板(仅在使用调色板的 PNG 图片中出现)。这部分包含索引颜色值。
    • IDAT(Image Data Chunk)

      • IDAT 块包含图像的压缩数据 ,可以有多个 IDAT 块。PNG 使用 zlib/DEFLATE 算法对图像数据进行压缩。
      • IDAT 块的数据在解压后会还原为图像的像素数据。
    • IEND(Image End Chunk)

      • 标志着 PNG 文件的结束,IEND 是最后一个数据块。
      • 没有数据内容,只有一个结束标志。

其他数据块(可选):

  • tEXt / zTXt / iTXt:用于存储文本信息,比如作者、版权等。
  • gAMA:用于定义图像的伽马值。
  • tIME:用于记录图像的修改时间。

小结:

  • IHDR 是 PNG 文件的头部数据块,定义了图像的基本信息。
  • IDAT 是存储图像压缩数据的主要部分,通常会有多个 IDAT 块。
  • IEND 是结束块,标志着 PNG 文件的结束。

所以,IHDR 和 IDAT 都是 PNG 图片的重要组成部分,IHDR 提供基本信息,而 IDAT 主要包含压缩后的图像数据。

所以这里我们重新使用010打开1.png,就会发现原本IDAT的位置被CTF2/CTF1所占据了!

那这里我们肯定是要将CTF2/CTF1替换为IDAT,所以这里我们直接将IDAT进行Hex编码进行最后进行插入!

得到:49 44 41 54

进行替换

最后Ctrl+s进行保存,打开图片:

发现打开是可以打开了,但是奇怪的是什么也没有,如果有的师傅靠自己做到这里,其实已经很好了,因为后面这一步有点考验脑洞了,为什么这样说呢?如果在修改IDAT之前有观察仔细的师傅会发现他是CTF2在前CTF1在后,那这能代表什么嘛?其实就是变相的在告诉你:我chunk数据块弄反了,你要改回来!

那如果这里实在想不到呢?想不到就出不来呗~

那这里我们可以直接新建一个十六进制文件,将文件头部(chunk[0])先复制过去:

得到:

将chunl[2]复制过去:

得到:

接着再将chunl[1]复制过去:

最后再将图片的尾部一一进行复制粘贴补全即可,Ctrl+s进行保存2.png,打开2.png即可发现:

最后得出一张图片,一眼看过去就感觉宽高有一些问题,当然如果不确定我们可以直接丢进工具:随波逐流中进行分析一下,或者kali,它们都是可以自动校验png图片的CRC:

这里我是直接丢进随波逐流中(当然也可以自己手动修改一下宽高):

最后它会直接帮你修复原本的png图片宽高,打开即可发现flag:

至此;

flag{d01adf92-f7a8-7fc6-c89f-0e6cf6f68e6a}
拓展

Detect File Type简介

在 CyberChef 工具中,Detect File Type 是用来自动检测输入文件或数据的类型的操作。它通过分析输入的二进制数据或文本,识别出该数据的格式或文件类型。

工作原理:

  • 文件头检测:它会首先分析文件的头部,查找已知文件类型的标识(魔数)。
  • 模式匹配:通过匹配已知文件结构的特征,判断文件的格式。
  • 内容分析:有些情况下,它可能会分析文件的整体内容特征,比如文本编码或压缩格式。

示例:

  • 如果输入一个 PNG 图片文件,CyberChef 的 Detect File Type 会识别出 "PNG image"
  • 如果输入一个 ZIP 压缩文件,它会显示 "ZIP archive"
  • 如果输入一段 zlib 压缩数据,它也可能检测出 "zlib compressed data"
第47张图片

解题思路

附件下载,得到一张图片jpg图片:

我们使用010打开简单分析一下:

往下翻一些很快就发现一个可能是ROT47的编码

不是很了解的ROT47编码特征的师傅也没关系,这里我们正好来一起简单说说:

ROT47 的编码特征:

  1. 字符范围 :ROT47 对应的字符集是 33-126 的 ASCII 字符,包含可打印的符号、数字、字母和一些标点符号,总共有 94 个字符。

    • 例如,常见的字母 (A-Z, a-z)、数字 (0-9)、标点符号(如 !, @, #, &, *)等都在此范围内。
  2. 字符旋转 :每个字符通过向右"旋转"47个位置来编码。如果超出126,就从33重新开始。这意味着编码和解码是对称的,即同一个函数可以用于编码和解码。

  3. 对称加密:类似于 ROT13,ROT47 的编码和解码方式是相同的,因此加密一次后,再加密一次就会还原成原始文本。

例子:

  • A(ASCII 65)通过 ROT47 编码后变成 r(ASCII 114)。
  • !(ASCII 33)通过 ROT47 编码后变成 P(ASCII 80)。
  • HELLO 编码后会变成 w6==@.

那从7=28Lf6f63347\7c7d\67gb\6dc7\a7b6g3g4b5ad编码中哪里能看出是ROT47呢?

  1. 字符范围
  • 字符串中的字符包括 数字 (如 7, 2, 6)、字母 (如 L, f, g, b)以及 符号 (如 =, \, a\7c7d等),这些字符都在 ASCII 33 到 126 之间,这是 ROT47 处理的字符范围,因此符合 ROT47 的字符集要求。
  1. 字符混淆
  • 由于 ROT47 是对字符进行位移(47个位置)的替换编码,该字符串是由混合的字母、数字、符号构成的,这是 ROT47 加密后的典型表现。正常文本被 ROT47 编码后,会出现类似这种"乱码"样的形式。
  1. 非对称性内容
  • ROT47 编码后字符会出现符号、字母和数字交错的情况。这是由于 ROT47 对可打印字符范围内的所有字符(包括字母、符号、数字)进行统一的位移,导致字符分布看起来无规律。
  1. 可解码还原
  • 如果这个字符串是经过 ROT47 编码的,它可以通过再次应用 ROT47 进行解码,还原成原始的明文内容。由于 ROT47 的加密和解密是对称的,同样的函数可以解码出明文。

最后其实如果实在不明白的还有一点就是,这个题目的名称也可以看出一点,当然如果有脑洞的话是可以想出的,毕竟题目名都叫:第47张图片

或者直接将整张文件拖进去进行ROT47解码也是可以发现的:

至此;

flag{7e7ebbcf-f4f5-ef83-e54f-2f3e8b8c3d25}
重要的文件

解题思路

暂无

三、WEB

推荐(baozongwi师傅的):

四川省赛2024------web

四、CRYPTO

暂无,附件已打包完毕,可自取

五、REVERSE

暂无,附件已打包完毕,可自取

相关推荐
?3333327 分钟前
CTFHub Web进阶-PHP-Bypass disable_function攻略
开发语言·安全·web安全·php
hking11131 分钟前
upload-labs关卡记录12
web安全·php
ai产品老杨2 小时前
报警推送消息升级的名厨亮灶开源了。
vue.js·人工智能·安全·开源·音视频
网安-轩逸2 小时前
基于ISO 21434的汽车网络安全实践
web安全·汽车·php
亚远景aspice2 小时前
亚远景-ISO 21434标准下的汽车网络安全测试:全面要求与实施策略
网络·web安全·汽车
为几何欢3 小时前
【hackmyvm】soul靶机wp
安全·网络安全·渗透·hackmyvm·hmv
云云3218 小时前
云手机服务器如何做到群控多台手机的?
服务器·线性代数·安全·智能手机·矩阵
m0_748255269 小时前
前端安全——敏感信息泄露
前端·安全