CTF-misc入门手册

CTF-misc入门手册

前言

虽然CTF比赛的赛制不断创新,但是赛题的本质并未发生太大变化。 要想在CTF比赛取得好成绩,就要理解各种赛制下各类题目的原理和 解题思路。在解题模式中,题目类型主要包括Web渗透、软件逆向工 程(也称为软件逆向分析,简称RE)、二进制程序漏洞利用 (PWN)、密码学(Cryptography,简称Crypto)、电子取证 (Forensics)、隐写(Steganography,简称Steg或Stega)、安全编程 (Professional Programming&Coding,简称PPC)、杂项 (Miscellaneous,简称MISC)等。

在CTF比赛的题目中,有相当一部分题目属于安全杂项类,这类题目也称为MISC(这个简称取自单词Miscellaneous的前四个字母, Miscellaneous有混合体、大杂烩的意思)。从广义上说,除了Web渗透、软件逆向分析、密码学以及二进制程序漏洞利用的题目,其余题目都可以归入安全杂项类。安全杂项类题目涉及广泛,包括但不限于: ❑信息搜集 ❑编码分析 ❑隐写 ❑网络流量分析 ❑日志分析 ❑电子取证

misc需了解的基本知识:

1.常见的文件头文件尾

https://www.cnblogs.com/start1/p/18595397

2.基础工具

  • Visual Studio CodeVSC微软公司于2015年4月30日发布的跨平台源代码编辑器,支持Windows、Linux和macOS系统,内置JavaScript、TypeScript及Node.js支持,并通过扩展生态系统覆盖C、C#、Java、Python、PHP、Go等编程语言及.NET、Unity等运行时环境。其中Hex Editor插件可以对文件进行十六进制读取,非常方便。

  • 010 Editor汉化破解版:010 Editor 是一款功能强大的专业文本和十六进制编辑器,旨在快速轻松地编辑计算机上任何文件的内容。它不仅可以编辑文本文件,还可以处理复杂的二进制文件。

  • 随波逐流编码工具: [随波逐流]CTF编码工具是一款专为网络安全、密码学及信息技术领域打造的离线集成利器,它旨在为用户提供一站式的编码解码解决方案,无需联网即可实现「编码 - 解码 - 隐写分析」全链路操作。

  • CyberChef:一个支持多达数百种操作,从基本的编码解码到复杂的数据分析,应有尽有。

  • stegsolve:一款强大的隐写术工具,主要用于分析和提取图像中的隐藏数据。它支持多种图片格式,能够显示图像的各个颜色通道,方便用户检测和分析LSB隐写信息。主要可以图片处理,查看图片信息、十六进制,lsb隐写信息提取,gif图片每帧提取。需要java环境

  • QR_Research二维码扫描工具:QR_Research 是一款专业的电脑二维码扫描软件,旨在帮助用户快速识别并抓取摄像头中的二维码。该软件支持全屏和区域抓取 QR 码,并能够显示 QR 的版本、纠错等级、掩码和内容信息。无论您是需要识别不同格式的二维码,还是希望获取二维码的详细信息,QR_Research 都能满足您的需求。

  • QRazyBox:一个基于 Web 的应用程序(一个工具包),用于分析和恢复损坏的 QR 码。QRazyBox 允许您通过使用类似 Paint 的编辑器重新绘制和重建 QR 码来恢复 QR 码。它还提供了几个子工具来帮助您更快、更高效地分析和恢复。

  • BlindWatermark: 盲水印工具,单文件exe下载【WaterMark

  • Wireshark • 深入 |下载:一种非常流行的网络封包分析工具,用于捕捉和解析各种网络数据包,并显示详细的网络封包信息。它广泛应用于网络故障排查、软件测试、网络协议学习等领域。

  • ARCHPRv4.54:一款专业的压缩包密码破解的工具软件,软件支持破解ZIP/PKZip/WinZip、RAR/winrar等不同格式的压缩加密文件。十分方便快捷,界面简约,布局直观清晰,操作简单,极易上手,是一款不可多得的利器。

  • ZipCracker: Hx0战队出品的一款功能强大的Zip密码破解工具。它集成了字典攻击、掩码攻击和CRC32碰撞等多种破解模式,并能自动修复伪加密文件。凭借其高性能与多功能的特点,ZipCracker已成为CTF比赛中的一把利器。

  • bkcrack:一个命令行工具,它实现了这种已知的明文攻击。 主要特点是:

    • 从密文和明文中恢复内部状态。
    • 使用内部状态删除或更改 ZIP 存档的密码。
    • 从内部状态恢复原始密码。
  • 7-ZIP:常见的文件压缩和解压软件,开源免费,界面简洁无广告

  • Audacity:Audacity 是一款免费、开源的音频编辑和录音工具

  • SSTV:慢扫描电视(Slow-scan television),简称SSTV,是业余无线电爱好者的一种主要图片传输方法,慢扫描电视通过无线电传输和接收单色或彩色静态图片,且完全不依赖网络。
    利用sstv软件进行音频转图像(注:配合虚拟声卡使用效果最佳)

  • DeepSound2.0:DeepSound 2.0 是一款专为 CTF(Capture The Flag)竞赛设计的文件隐藏工具,主要用于处理音频文件的加密。通过使用 DeepSound 2.0,用户可以将敏感数据隐藏在音频文件中,从而实现数据的保密和安全传输。

  • Mp3Stego

    在压缩过程中,MP3Stego会将信息隐藏在MP3文件中。数据首先被压缩、加密,然后隐藏在MP3比特流中。

    基本介绍和用法如下:

    encode -E hidden_text.txt -P pass svega.wav svega_stego.mp3
    decode -X -P pass svega_stego.mp3
    
  • BlueTeamTools: 蓝队分析研判工具箱,功能包括内存马反编译分析、各种代码格式化、网空资产测绘功能、溯源辅助、解密冰蝎流量、解密哥斯拉流量、解密Shiro/CAS/Log4j2的攻击payload、IP/端口连接分析、各种编码/解码功能、蓝队分析常用网址、java反序列化数据包分析、Java类名搜索、Fofa搜索、Hunter搜索等。

  • 瓦特工具箱(Steam++官网) - Watt Toolkit:一款免费的网络加速工具。什么!你说你只看到了steam,哎哟喂,没让你用来打游戏啊!访问GitHub较慢时可以开启GitHub网络加速服务来实现快速访问。

3.常用的刷题网站

4.大佬博客

Super_Snow_Sword大帅哥的豪华宫殿

提问的智慧

一.编码篇

编码篇幅由于过长,且内容相对简单,直接参考下列博客即可。

博客资料:

记得收藏、推荐、关注哦~

目前遇到过的编码 - Anaxa - 博客园

30余种加密编码类型的密文特征分析 - 梦见雨 - 博客园

CTF中的一些图形密码 - 梦见雨 - 博客园

二.图片篇

图片隐写思路:

1. 查看图片的属性是否藏了东西,一定要使用能够查看exif信息的工具,PNG格式的话使用TweakPNG等工具判断是否存在PNG宽高隐写
2. 使用010 Editor、strings等工具发现插入隐藏信息
3. 使用StegSolve、zsteg等工具发现隐写隐藏信息
4. 使用binwalk、foremost等工具提取隐藏信息
5. 使用steghide、盲水印提取等工具提取特定工具隐藏信息,如果有提示最好,没有提示只能一个个尝试了,注意jpeg和png等不同格式的图片文件使用的工具也不一样
jpeg:steghide——outguess——
png:zsteg——cloacked-pixel——BlindWaterMark-master——kindred-adds/BlindWaterMarkplus

1.查看图片属性信息(EXIF)

有时候一些信息会隐藏在文件的属性详细信息中,这个简单的细节往往被忽略。

image-20240919002824284

2.判断图片类型

常见的文件头和特征如下:

文件类型 文件头 文件尾 特征
JPEG (jpg) FFD8FF FF D9 ÿØÿà
PNG (png) 89504E47 AE 42 60 82 .PNG...
GIF (gif) 47494638 00 3B GIF89a
ZIP Archive (zip) 504B0304 50 4B 05 06 PK..
RAR Archive (rar) 52617221 Rar!...
7Z 377ABCAF271C 7z¼¯'

有些文件可能不能直接打开,那是可能因为文件头或者文件名可能被修改了,只需要观察文件字节内容将其替换为正确的文件头或文件名后缀即可

image-20251111181253739

这是一个exe程序,我们将它拖入winhex(或010 Editor)里查看

image-20251111181317398

可以观察到正确的文件名后缀应该为PNG,将admin.exe改为admin.png即可打开图片

image-20251111182351753

其余的可以多去看看常见的文件头文件尾,还有一些常见的文件结构~

3.图片文件字节内附加其他内容

图片字节包含字符串

原理:直接将信息写入图片结束符后面,图片识别程序不会识别后面的代码,所以信息能够被隐藏

010Editor 打开文件时,一般隐藏的信息会藏在文件尾部(大部分情况),有时候也直接搜索文本flag,ctf,key等关键词或使用Linux的strings命令

image-20240919002347396

图片字节中包含其他文件

通过cmd的copy命令,可以将文件隐藏在图片里,我们需要从图片中提取文件,这也是ctf经常考的点

图片文件尾可以添加一些其他的16进制文件,可以提供观察ASCII字符进行判断(例如图片结束符后面出现pk则有可能出现压缩包)

image-20251111174149394

利用[随波逐流]CTF编码工具也可以快速分析文件是否隐藏其他信息,如果存在其他文件可以直接使用binwalk或formost进行文件分离提取。

binwalk指令

分析图片

binwalk imag_file

image-20251111174457220

进行分离

binwalk -e imag_file --run-as=root

image-20251111174531828

formost提取文件指令
foremost imag_file
foremost imag_file -o file  //-o:指定输出的文件夹

image-20251111175216258

4.图片宽高隐写

对于图片,通过010Editor 打开可以直接修改宽高,但如果要恢复原始比例就需要用到CRC校验码了,涉及到CRC撞库,需要写脚本来实现,并且当源文件过大,则难以枚举

PNG图片的宽高

内容 含义
89 50 4E 47 0D 0A 1A 0A png的文件头(固定)
00 00 00 0D 十进制为13,代表头部数据块的长度为13
49 48 44 52 ASCII码为IHDR,表明数据块为IHDR
00 00 02 58 图片高度(4bit)(不固定)
00 00 02 58 图片宽度(4bit)(不固定)
08 06 00 00 00 依次为Bit depth、ColorType、 Compression method、 Filter method、Interlace method(共5bit)(不固定)
BE 66 98 DC CRC校验码(4bit)(固定)

image-20251109192315253

image-20251109192344684

png图片宽高爆破脚本

import zlib
import struct
import argparse
import itertools

args = input("请输入图片地址:")
bin_data = open(args, 'rb').read()
crc32key = zlib.crc32(bin_data[12:29]) # 计算crc
original_crc32 = int(bin_data[29:33].hex(), 16) # 原始crc


if crc32key == original_crc32: # 计算crc对比原始crc
    print('宽高没有问题!')
else:
    input_ = input("宽高被改了, 是否CRC爆破宽高? (Y/n):")
    if input_ not in ["Y", "y", ""]:
        exit()
    else:
        for i, j in itertools.product(range(4095), range(4095)): # 理论上0x FF FF FF FF,但考虑到屏幕实际/cpu,0x 0F FF就差不多了,也就是4095宽度和高度
            data = bin_data[12:16] + struct.pack('>i', i) + struct.pack('>i', j) + bin_data[24:29]
            crc32 = zlib.crc32(data)
            if(crc32 == original_crc32): # 计算当图片大小为i:j时的CRC校验值,与图片中的CRC比较,当相同,则图片大小已经确定
                print(f"\nCRC32: {hex(original_crc32)}")
                print(f"宽度: {i}, hex: {hex(i)}")
                print(f"高度: {j}, hex: {hex(j)}")
                exit(0)

例如

示例题目:BUUCTF在线评测#大白

将height值改为679后保存即可

image-20251201203625683

也可以使用[随波逐流]CTF编码工具直接进行png图片的宽高的爆破与修复。


JPG图片的宽高

对于jpg图片的宽高隐写一般比较少

image-20251111172011117

jpg图片可以直接通过010Editor的模块插件修改X或Y值进行图像恢复(比如下图将WORD_X_image的值修改为640就可以正常显示图片内容了)

image-20251111172352400


BMP图片的宽高

BMP图片的宽高也是第二行的前四位为宽,后四位为高

image-20251111173429404

5.图片盲水印

直接使用工具WaterMark进行图片盲水印提取即可

image-20251111183802196

6.图片LSB隐写

lsb隐写题在ctf中也经常考到,LSB即为最低有效位,我们知道,图片中的图像像素一般是由RGB三原色(红绿蓝)组成,每一种颜色占用8位,取值范围为0x00~0xFF,即有256种颜色,一共包含了256的3次方的颜色,即16777216种颜色。而人类的眼睛可以区分约1000万种不同的颜色,这就意味着人类的眼睛无法区分余下的颜色大约有6777216种。

image-20251111183946116

LSB隐写就是修改RGB颜色分量的最低二进制位也就是最低有效位(LSB),而人类的眼睛不会注意到这前后的变化,每个像数可以携带3比特的信息。

image-20251111184027695

上图我们可以看到,十进制的235表示的是绿色,我们修改了在二进制中的最低位,但是颜色看起来依旧没有变化。我们就可以修改最低位中的信息,实现信息的隐写

示例:BUUCTF在线评测

image-20251111184357718

Stegsolve工具分析

使用stegsolve打开图片,按右方向键查看各通道显示的图像。

图像处理主要是analyse这个模块,主要有这四个功能:

File Format: 文件格式,查看图片的具体信息

Data Extract: 数据抽取,提取图片中隐藏数据

Frame Browser: 帧浏览器,主要是对GIF之类的动图进行分解,动图变成一张张图片

Image Combiner: 拼图,图片拼接


通过一个个通道查看,发现R0,G0,B0的顶部都隐藏了一些信息,最明显的特征就是观察通道时顶部出现明显噪声

image-20251111184603754image-20251111185447873

可以通过Data Extract功能进行信息提取

image-20251111184839559

发现这个图片的RGB信道里藏了另外一张PNG图片,使用save bin提取即可

还有些题目可能直接就是可以提取出需要的字符串(具体通道勾选需要根据实际情况进行判断),例如:

image-20251111190115683

zsteg(专用于PNG/BMP)

zsteg是针对PNG图⽚的专业隐写⼯具,功能强⼤到令⼈惊叹。它能⾃动检测24种不同的隐写⽅法,⽀持从各种位平⾯组合中提取数据,特别好用~

在kali中直接使用以下命令进行安装

sudo gem install zsteg
zsteg image.png

自动扫描多种LSB模式,输出隐藏内容。
img
使用zsteg一把梭也可以看到隐藏的文件,如果其中包含可能有用的字符串也会突出显示(如标红)

image-20251114163106103

随波逐流

直接将文件拖入随波逐流即可自动分析,后面可以使用随波逐流自带的LSB提取或使用Stegsolve

image-20251111192937873

其他

有些也会直接将二维码之类的的信息放在信道里,分析信道的时候注意观察即可

7.GIF动图

GIF图片常考的考点一般就是GIF帧分离,这里可以使用

Stegsolve工具的Frame Browser: 帧浏览器,主要是对GIF之类的动图进行分解,动图变成一张张图片

为了方便也可以使用随波逐流的gif动图分解帧

image-20251111194237576

8.Steghide 工具隐写(带密码)

⚙️ 什么是Steghide?

steghide 是一款强大的隐写工具,可以将任意文件嵌入 JPEG/BMP 图像中,并支持密码保护。

嵌入示例(出题人操作):
steghide embed -cf image.jpg -ef secret.txt -p "ctf2025"
如何检测?

先用 filebinwalk 检查是否有异常。

然后尝试提取:

steghide extract -sf image.jpg

会提示输入密码。

密码怎么找?

  • 尝试空密码(直接回车)

  • 查看图片名、作者、注释等线索

  • 使用字典爆破(rockyou.txt字典位于kali的/usr/share/wordlists路径下,使用前需自行解压):

    stegcracker image.jpg /usr/share/wordlists/rockyou.txt
    

🛠️ 工具推荐:stegcracker(自动爆破工具)

9.PNG图片结构

文件头:89504E47                      文件尾:AE 42 60 82
PNG文件,我们会发现,文件的结尾12个字符看起来总应该是这样的:

00 00 00 00 49 45 4E 44 AE 42 60 82

一般可以认为,PNG的前16字节为

89504E470D0A1A0A0000000D49484452

不难明白,由于数据块结构的定义,IEND数据块的长度总是0(00 00 00 00,除非人为加入信息),数据标识总是IEND(49 45 4E 44),因此,CRC码也总是AE 42 60 82。

imgimg

img

给大家举个例子:

PNG图像:321*332分辨率 321->00 00 01 41 332->00 00 01 4C (也可以搜索十六进制找到标志位)

也可以根据位直接找到标志位,就是IHDR的后面4字节00 00 01 41为宽度 再后4字节00 00 01 4C为长度

img

89 50 4E 47 0D 0A 1A 0A 是PNG头部署名域,表示这是一个PNG图片
00 00 00 0D 描述IHDR头部的大小。

10.PNG图片位深度

PNG图片的位深度(Bit Depth)是指图像中每个像素通道(如红、绿、蓝或灰度)用来表示颜色信息的二进制位数。它直接影响图像的色彩丰富度、渐变平滑度和文件大小。以下是位深度的具体作用:


(1). 决定颜色数量
  • 位深度越高,可表示的颜色越多

    。例如:

    • 8位/通道(如24位真彩色PNG):每个通道(R/G/B)有256种可能值(2⁸),组合后约1677万种颜色(256³),适合普通照片。
    • 16位/通道(如48位PNG):每通道65536种值(2¹⁶),颜色数量远超人类视觉分辨能力,适合专业摄影或医学成像。
    • 1位(二值图):仅黑白两色,用于简单图形(如LOGO)。

(2). 影响渐变平滑度
  • 低位深度可能导致色带(Banding),即在颜色过渡区域出现阶梯状断层。高位深度(如16位)能呈现更细腻的渐变,尤其在阴影或天空等平滑区域。

(3). 透明度控制(Alpha通道)
  • PNG支持透明度,其Alpha通道的位深度决定透明度的精细度:
    • 8位Alpha:256级透明度(半透明效果自然)。
    • 1位Alpha:仅完全透明或不透明(如简单剪贴画)。

(4). 文件体积
  • 位深度越高,单个像素数据量越大,文件体积也越大。例如:
    • 24位PNG(8位/通道)比48位PNG(16位/通道)体积小一半。
    • 但PNG采用无损压缩,实际体积可能比理论值小。

(5). 专业用途需求
  • 医学/科研图像:需要16位保存高动态范围数据。
  • HDR或后期处理:高位深度避免编辑时信息丢失。
  • 网页/UI设计:通常8位足够,兼顾质量和加载速度。

(6).常见PNG位深度示例:
位深度 类型 典型用途
1位 二值图(黑白) 图标、简笔画
8位(索引色) 256色 低色彩图形(如GIF替代)
24位(8位/通道) 真彩色(RGB) 普通照片、网页图片
32位(8位/通道+Alpha) RGB+透明度 复杂透明效果(如UI元素)
48位(16位/通道) 高动态范围RGB 专业摄影、印刷
(7).示例题目
[NSSRound#3 Team]funnypng

image-20250326193003210

下载题目附件,得到一张图片,如下:

funnypng

利用StegSolve进行分析发现在这个图片的Red 0通道处发现半张二维码,另一半好像是被隐藏了

image-20250326200726987

然后通过查看文件详细信息,发现这张图片的位深度为48

image-20250326193524860

因此可以说明在48位PNG中,每个颜色通道(R/G/B)是16位的(0-65535),但通常实际数据可能仅使用高8位(前256级),而低8位可能隐藏信息。

利用脚本进行图片的低8位通道提取

import png
file = input('请输入16位通道png文件路径:')
img = png.Reader(file)
imginfo = img.read()
print(imginfo)
w, h, imgdata = imginfo[:3]

data = []
for linedata in imgdata:
    line = []
    for d in linedata:
        line.append(d%(2**8))
    data.append(line)

outfile = input('请输入输出文件路径:')
with open(outfile+'front.png', 'wb') as f:
    img2 = png.Writer(width=w, height=h, greyscale=False, bitdepth=8)
    img2.write(f, data)

print('低8位通道分离完成, 请查看文件: %sfront.png'%outfile)

将分离出来的图片放到StegSolve里面继续分析,可以看到在Blue 0通道有另外一半二维码

image-20250326201531967

可以利用截图工具将两个半张二维码进行截获保存,然后利用在线图片合并工具进行两张图片合并

pictures

11.破损或遮挡的图片识别

可以发现上面示例提取并合并的二维码有小部分被遮挡住了,通过了解可以利用下面这个网站进行破损的二维码读取:QRazyBox - QR Code Analysis and Recovery Toolkit

离线版下载:QRazyBox:

进入网站选择下面选项进行二维码导入

image-20250326202452119

然后选择Tools功能

image-20250326202635767

使用第一个工具

image-20250326202723696

然后就可以进行'破损的'二维码信息读取

image-20250326202910798

最终可以得到需要的信息(如:flag:NSSCTF{fbef863db8331e8c63f73d7a04c1cf5b}

12.F5隐写

jpeg/jpg文件,是一种使用DCT频域来描述的一个图像的文件格式,而F5隐写算法,就是针对jpeg/jpg格式文件在频域的隐写术

使用的工具:F5-steganography

如果使用java17测试运行会报错,更换java版本为java8之后可正常运行(需要老版本的Java环境,版本太高可能运行不了)

用法

首先进入解压的文件夹下,在已解压的文件夹下打开终端窗口

运行 java Extract .\待解压的图片名.jpg

如存在密码则使用以下命令

java Extract 待解压的图片名.jpg -p you_password

解密完成后,工具会在当前目录生成一个名为output的文件,其中包含提取出的隐藏信息

img

想练习的话可以去看看moectf2024的ez_F5题目

三.压缩包篇

1.zip压缩包基本结构

实例

img

压缩源文件数据区:
50 4B 03 04:这是头文件标记(0x04034b50)
14 00:解压文件所需 pkware 版本
00 00:全局方式位标记(有无加密) 头文件标记后2bytes
压缩源文件目录区:

50 4B 01 02:目录中文件文件头标记(0x02014b50)

3F 00:压缩使用的 pkware 版本

14 00:解压文件所需 pkware 版本
00 00:全局方式位标记(有无加密,伪加密的关键) 目录文件标记后4bytes
压缩源文件目录结束标志:
50 4B 05 06:目录结束标记

压缩包文件字节尾数据隐藏

在压缩包的文件目录结束标志后面可以像图片字节隐藏信息一样,添加其他的内容,比如可以添加一些文件或字符串(可能为加密压缩包的密钥或提示)

image-20251113202616606

2.压缩包密码暴力破解

主要使用工具:ARCHPR

在一些场景,我们经常会碰到加密了的压缩包文件(需要使用或购买密码来解锁压缩包),最好的工具是通过软件破解:Advanced Archive Password Recovery简称“ARCHPR” 是一款 Windows 下的加密压缩文件密码破解恢复工具。

可以实现暴力破解、字典破解。

(1)、暴力破解

这种方式尝试用各种字符的组合,逐一尝试密码是否正确。

例如一个长度为10个字符、包含大小写字符、数字、特殊符号的密码。根据不同的机器性能进行暴力破解需要耗时数月甚至数年以上。现实中,恐怕谁也不会花费如此长时间进行这样一项操作。简单一句话理解就是,穷举所有可能的密码去一个一个试试!

image-20251113162400013

(2)、密码字典破解

密码字典中包含了人们常用的各种密码组合,使用此种方式,破解耗时范围在几分种至几小时内,而破解成功率高达90%以上。需要注意的是,使用密码字典破解,最关键的因素在于密码字典本身,字典文件中包含的密码组合越合理、质量越高,破解的成功率越高。简单一句话理解就是,使用一批有规律、常用的密码去试,这种速度非常快!

image-20251113162443092

小技巧

练习CTF题的时候推荐先进行8位以下纯数字爆破,如果无结果可以使用kali自带的一个密码本,使用前记得先将txt文档解压出来,然后进行密码爆破

/usr/share/wordlists/rockyou.txt.gz

3.zip伪加密判断

全局方式位标记

全局方式位标记的四个数字中只有第二个数字对其有影响,其它的不管为何值,都不影响它的加密属性!
第二个数字为奇数时 –>加密
第二个数字为偶数时 –>未加密

辨别zip是真加密还是伪加密

(1)无加密

压缩源文件数据区的全局加密应当为00 00 (504B0304两个bytes之后)
且压缩源文件目录区的全局方式位标记应当为00 00(504B0304四个bytes之后)

img

(2)伪加密

压缩源文件数据区的全局加密应当为00 00
且压缩源文件目录区的全局方式位标记应当为09 00

img

(3)真加密

压缩源文件数据区的全局加密应当为09 00
且压缩源文件目录区的全局方式位标记应当为09 00 !

img

自动检测并破解zip压缩包伪加密工具

ZipCracker-main:这款工具具备识别"伪加密"Zip文件的能力,并能自动进行修复。因此,它非常适合在CTF比赛中使用。不过这个工具也不是万能,有些情况下还是需要自行分析压缩包结构。

使用方法

1.伪加密识别及修复

python3 ZipCracker.py test01.zip

image-20251113135956783

2.暴力破解-内置字典

python3 ZipCracker.py test02.zip

image-20251113140027908

3.暴力破解-用户自定义字典

我们为您提供了2种用户自定义字典的加载方式:

  1. 若您仅想加载单个字典,您可以选择直接加载您的自定义字典,如下图所示:
python3 ZipCracker.py test02.zip YourDict.txt

image-20251113140115494

  1. 若您有多个字典,也可以选择直接加载您的字典所在目录,脚本会依次加载目录下所有字典,直到找到最终密码,如下图所示:
python3 ZipCracker.py test02.zip YourDictDirectory

image-20251113140208166

image-20251113140236187

4.暴力破解-CRC32碰撞

python3 ZipCracker.py test03.zip

image-20251113140941901

5.暴力破解-掩码攻击

当您已知密码的部分结构时(例如,公司名+年份),掩码攻击是最高效的破解方式。您可以使用特殊占位符来定义密码的格式,从而极大地缩小密码搜索范围。

掩码占位符规则:

占位符 代表的字符集
?d 数字 (0-9)
?l 小写字母 (a-z)
?u 大写字母 (A-Z)
?s 特殊符号 (!@#$等)
?? 问号 ? 自身
python3 ZipCracker.py test04.zip -m '?uali?s?d?d?d'

上述命令会尝试破解密码结构为: 一个大写字母 + 'ali' + 一个特殊符号 + 三个数字 (例如 Kali@123, Bali#756 等) 的ZIP文件。

image-20251113140326511


本工具仅提供给安全测试人员进行安全自查使用,用户滥用造成的一切后果与作者无关,使用者请务必遵守当地法律 本程序不得用于商业用途,仅限学习交流。

4.zip压缩包明文加密

(1)已知文件明文攻击

条件:

1.完整的明文文件

2.明文文件需要被相同的压缩算法标准压缩(也可理解为被相同压缩工具压缩)

3.明文对应文件的加密算法需要是 ZipCrypto Store

ZIP的加密算法大致分为两种ZipCrypto和AES-256,各自又分Deflate和Store。

ZipCrypto Deflate
ZipCrypto Store
AES-256 Deflate
AES-256 Store

ZipCrypto算是传统的zip加密方式。只有使用ZipCrypto Deflate/Store才可以使用 ZIP已知明文攻击进行破解。

使用7Zip打开压缩包,即可看到加密算法

或者通过7Zip的命令行工具

7z l -slt yourfile.zip

①已知加密压缩包中的一个文件

确定相同文件就是比对crc32的值(可以把得到与压缩包内名称相同的文件进行压缩,观察crc32的值)
​ 初步判断可以是比对文件大小,和文件name,这个文件一定要保证完全一致。
​ 攻击需要至少12字节的已知明文,其中至少8个必须是相连的,连续的已知明文越大,攻击越快。

②在进行明文攻击时,压缩算法一定要相同

比如可能提示你存储,快速啥的,这就要在压缩已知文件时的压缩方式选存储等等,还有就是算法(这里可以多种压缩软件都试试, 比如winrar、7-z、好压等)使用ZipCrypto的加密条目容易受到已知明文攻击。

以上算是完成了明文攻击的准备条件,接下来上工具!

举个例子🌰:
①可以得到压缩包密码

比如这里有个压缩包,但是我不知道密码

image-20241207163002363

但是假设我们得到了压缩包里面的hint.txt文件,并且得知该文件的内容与压缩包内的一致,然后可以打开压缩包观察里面的CRC值和压缩算法,我们需要将已知的hint.txt文件压缩为相同的值

image-20241207163426828

经过压缩hint.txt文件后得到了一个CRC值和压缩算法与加密压缩包相同的压缩包

image-20241207163842739 image-20241207163933185

然后我们就可以尝试进行明文攻击了

image-20241207164155192

开始之后我们等待一会就可以得到这个压缩包的密码了,如果等待时间太长(比如要几个小时甚至几天)可能说明你构造的明文压缩包不正确

最后可以得到压缩包密码为:asdfghjk

image-20241207165437123

用密码解压后可以看到被加密的文件

image-20241207173339440


②直接得出没有加密的压缩包

这里有个裂开的flag

image-20241223224157489

压缩包里面有个和外面一模一样的flag1.txt文件

image

然后去构造一个压缩包,这里用7-zip进行构造

image image

然后利用工具进行明文攻击

image-20241223230935843

然后你会发现它等下一直在攻击,这个情况就需要过个什么10分钟左右直接点击停止攻击,然后就会弹出以下界面

image-20241223231910540

这个时候就说明你成功了!
然后点击确定就会让你进行保存文件,这个就是已经解密了的压缩包

image-20241223232035223

打开之后可以看到压缩包里面的文件没有加密了,文件也可以正常打开

image-20241223232317289

(2)已知字节明文攻击

压缩包明文攻击之已知明文攻击 - 梦见雨 - 博客园

已知明文攻击主要利用大于 12 字节的一段已知明文数据进行攻击,从而获取整个加密文压缩包的数据。也就是说,如果我手里有一个未知密码的压缩包和压缩包内某个文件的一部分明文(不一定非要从头开始,能确定偏移就行),那么我就可以通过这种攻击来解开整个压缩包。

条件:

实现这种明文攻击的条件如下

至少已知明文的12个字节及偏移,其中至少8字节需要连续。

明文对应的文件加密方式为ZipCrypto Store

利用:

一般在CTF中,考法是比较固定的,题目一般是一个加密的压缩包,但是不对目录加密,可以看到里面的文件,通过其他条件获取到里面的其中一个文件,然后实施明文攻击,这种攻击不在赘述,我们来研究一下根据一部分文件数据如何进行明文攻击

工具:bkcrack:

bkcrack常用参数:

-c 提取的密文部分
-p 提取的明文部分
-x 压缩包内目标文件的偏移地址  部分已知明文值
-C 加密压缩包
-o offset  -p参数指定的明文在压缩包内目标文件的偏移量

明文.txt中存放连续8字节以上的十进制明文即可,附加明文需要4字节以上的十六进制明文

bkcrack -C 加密压缩包 -c 明文攻击文件 -o 明文偏移量 -p 明文.txt -x 附加明文偏移量 附加明文(16进制)

解密压缩包,已获得key,长度为24位

bkcrack -C 加密压缩包 -c 明文攻击文件  -k key -D 移除加密压缩包名

破解密码

bkcrack.exe -k key -r 明文密码长度 字符选项

明文密码长度,写法支持如下
<min>..<max>
<min>..
..<max>
<max>

字符选项
?l:小写字母,包含 abcdefghijklmnopqrstuvwxyz
?u:大写字母,包含 ABCDEFGHIJKLMNOPQRSTUVWXYZ
?d:数字,包含 0123456789
?s:特殊字符,包含 !"#$%&'()*+,-./:;<=>?@[\]^_{|}~
?a:字母和数字,等同于 ?l?u?d,即 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
?p:可打印的ASCII字符,等同于 ?l?u?d?s,即abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!"#$%&'()*+,-./:;<=>?@[\]^_{|}~
?b:所有字节,包含 0x00 - 0xff(所有可能的字节值)

同时支持指定-b 自己指定字符集,语法为
bkcrack.exe -k 55a37839 cabb7ffe cf3806aa -l 16.. -b 0123456789abcdef

明文密码制作key

bkcrack --password 明文密码

多线程

-j, --jobs <count>          Number of threads to use for parallelized operations

但是经过测试,还是不指定多线程,使用单线程总体表现更好,CPU都给我干满了。

以PNG文件为例

用的是zip传统加密,同时可以看到压缩包内部是png文件,而png文件头的16字节是固定的,这时候就可以使用已知明文攻击的方法解开压缩包

需要使用的是bkcrack,png头对于png本身的偏移量是0,所以构造攻击命令

echo 89504E470D0A1A0A0000000D49484452 | xxd -r -ps > png_header.hex
bkcrack -C flag.zip -c flag.png -p png_header.hex -o 0 >1.log

echo 89504E470D0A1A0A0000000D49484452 | xxd -r -ps > png_header.hex这个命令是将89504E470D0A1A0A0000000D49484452以16进制的信息保存到png_header.hex中,也可以直接使用010进行构造

image-20251113185011398

然后跑个几分钟就可以得到密钥

ab7d8bcd 6ce75578 4de51c12

然后拿来提取文件

bkcrack -C flag.zip -c flag.png -k ab7d8bcd 6ce75578 4de51c12 -d flag.png

这样就可以成功得到flag.png

再举个例子🌰:

我们来个有难度的吧,就以EXE文件已知字节进行解密吧,其他文件类型原理类似

很多的EXE文件,在第64字节开始,会有连续的64字节的固定数据

称为DOS存根(不绝对,因为此处可以修改)

0E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0D0A2400

我们现在有一个压缩包,里面有明文.exe文件和flag.txt

image-20251113192651582

我们先将上面的DOS存根的字节内容保存到一个文件里面(需以16进制的形式存入,可以使用010或者命令行),我这里保存到了test.hex里(下面是vsc安装Hex Editor插件后使用十六进制打开的界面)

image-20251113194342700

尝试破解

bkcrack.exe -C flag.zip -c 明文.exe -o 64 -p test.hex

大概几分钟之后就可以跑出密钥为eec878a3 6808e48f 3aa41bd8

image-20251113194731279

然后利用得到的keys进行解密,以下命令可以直接移除压缩包的密钥并保存为flag1.zip文件

bkcrack -C flag.zip -c 明文.exe  -k eec878a3 6808e48f 3aa41bd8 -D flag1.zip

注意-D后面为移除密码之后的压缩包名,不能与原加密压缩包名称相同

image-20251113200555860

打开flag1.zip压缩包可以发现文件已经不需要密码了,可以直接打开

image-20251113201622830

四.音频篇

1.摩尔斯密码与音频隐写

在MISC题中打开音频文件若是能听到“滴答”的声音,可以猜测是摩尔斯电码有关

一般不会有这种题,因为没有技术含量还浪费时间

使用工具Audacity 看音频长短,再对照摩斯密码进行还原

image-20251114141305425

提取出来内容为“..-. .-.. .- –. .. … .- .. .-. .-. ..- -.. -.. . .-.”

这里就不还原为英文字母了,可以使用随波逐流快速解码

2.频谱图

使用工具:Audacity
文件类型:wav
直接左侧选择查看多视图或频谱图即可

image-20251114163641107

通过观察频谱图可获取隐藏信息,如果简单的话就可能直接get flag了

image-20251114153744955

image-20251114153827622

3.音频带key的隐写

傻瓜式操作,知道这个软件就可以解出来,不知道就解不出。这两种隐写不一定需要key,但是有key一定要考虑这两种隐写。

音频文件隐写

使用工具:DeepSound

使用找到的密码可以获得隐藏的文件

image-20251114184115044

输入正确的password即可得到需要的信息

音频LSB隐写

使用工具:silenteye-便携版

SilentEye是一个跨平台的应用程序设计,可以轻松地使用隐写术,在这种情况下,可以将消息隐藏到图片或声音中。它提供了一个很好的界面,并通过使用插件系统轻松集成了新的隐写算法和加密过程。

image-20251114174016707

也可以用于隐藏文件,比如下图可以利用正确的密码进行decode得到flag.txt文件

image-20251114181608146

4.SSTV隐写

特征:一般音频里面会出现滴滴嗒嗒的声音,但并不是音频摩斯密码那种

示例:

F-hacker CTF(2024 geek challenge复现)#乌龟 - 梦见雨 - 博客园

F-hacker CTF(2024 geek challenge复现)#电影院 - 梦见雨 - 博客园

具体操作为:

先安装虚拟声卡,如何去电脑设置里面将虚拟声卡打开,我这边Line1就是虚拟声卡,勾选上就行,如果不使用虚拟声卡的话很容易被外界干扰,导致提取的图片转化不清晰,使用完成之后记得调回原来设置,不然就不能正常使用麦克风和扬声器了

image-20251114190343145

然后将SSTV软件打开,播放需要转换的音频文件,软件就会自动识别并进行转换了

image-20250316154509522

五.流量分析篇

网络流量分析

网络分析工具对指定网卡进行数据包捕获,方便工作人员监测网络流量情况。

而pcap格式就是网络分析工具保存的网络数据包,是捕获的从网卡发送或者接收的每一个数据包的离线网络流量。

我们想要踏入这一部分的内容,首先我们应该熟悉网络协议的基础知识和OSI七层网络参考模型:https://www.bilibili.com/video/BV1EU4y1v7ju?vd_source=69c558b0c7be97607c79afbd75bd1f7c

我希望能够从题目入手,带大家对这方面的内容进行深入理解

回到题目,我们知道了pcap格式是网络分析工具保存的文件,那么我们应该拥有网络分析的工具。我们将重点介绍wireshark,这不仅是题目名,更是非常重要的网络分析工具。

wireshark

WireShark是非常流行的网络封包分析工具,可以截取各种网络数据包,并显示数据包详细信息。常用于开发测试过程中各种问题定位。官网下载地址:Wireshark · Download

首先我们用wireshark打开pacp文件:

image-20240717104745678

花花绿绿的一大片数据包,我们应该从何处入手?

数据包分析思路

1. 观察分组数(wireshark右下角),如果分组数量较大我们就进行协议分级进行分析,数量较小就逐个人工查看(数量小协议分级效果不明显,但还是可以优先协议分级减小工作量)
2. 根据协议分级的结果,我们优先分析数量多占比高的协议流量,分析过程根据题目不同思路也有所不同
3. 如果协议分级中有文件传输协议或是有传输媒体文件内容优先进行导出,一定要使用foremost工具进行辅助
4. 如果没有思路就搜索“flag”“ctf”等关键词
5. 涉及到攻击的流量就只能逐个追踪TCP流查看了

wireshark功能一:协议分级

对数据包按TCP/IP协议栈从底层向高层逐层进行统计,显示每个协议的数据包数、字节数以及各协议所占的百分比。

image-20240717105644790

image-20240717110357369

我们可以发现应用层HTTP协议占比最高,应该优先分析。

wireshark功能二:显示过滤器

决定哪些数据包被显示,在显示过滤器中输入表达式,使过滤规则生效。

在前面我们已经找到了需要显示过滤来分析的HTTP协议,因此我们在协议分级窗口中选中HTTP协议作为过滤器应用:

image-20240717110806356

image-20240717111219998

这样我们就显示过滤了HTTP协议相关的数据包,可以看见左上方的应用显示过滤器的输入框内容也添加了”http“,现在只有29个数据包了,我们即将开始逐个分析。

HTTP协议数据包分析

HTTP协议介绍:https://www.bilibili.com/video/BV1zb4y127JU?vd_source=69c558b0c7be97607c79afbd75bd1f7c

HTTP数据包分析:HTTP数据包详解 - dream_fly_info - 博客园 (cnblogs.com)

wireshark功能三:数据包分析

在左下角的TCP/IP协议栈解析窗口我们可以以更清晰的格式分析协议的消息结构,我们逐个分析,发现第三个POST请求包的URL加密信息里面找到了“password”字段:

image-20240717112649809

题目说管理员的密码即是答案,因此使用flag{}包起提交即可

考点:网络流量分析、理解HTTP协议数据包结构

补充:CTF流量分析解题钻空

我们明白要分析HTTP协议后,直接在显示过滤器中查找包含”flag“字段的数据包有时候能直接找到我们想要的东西:

image-20240717113113906

键盘鼠标USB流量一把梭

USB键盘/鼠标流量分析工具

posted @ 2025-11-13 22:17  梦见雨  阅读(113)  评论(0)    收藏  举报