CTF--Misc题型小结

(萌新笔记,多多关照,不足之处请及时提出。)

不定时更新~


目录

密码学相关

文件类型判断

file命令

文件头类型

strings读取

隐写术

尺寸修改

文件头等缺失

EXIF隐写

[thumbnail 隐写](#thumbnail 隐写)

文件分离&提取

binwalk

foremost

dd命令

zsteg

看hex!!!

gif

图像特征:

gif坐标:

word隐写

apng

bpg

png

hex特征

数据块

TweakPNG

pngcheck

[宽 / 高 一个有问题](#宽 / 高 一个有问题)

把IHDR块的CRC也改了,知道宽度大于900

jpg

修改高度

bmp

宽高计算:

JPHS

文本隐写:

盲水印

频域盲水印

JAVA盲水印

snow隐写

零宽度字符隐写

颜色通道

直接换通道

LSB

RGB

zsteg直接分析每个通道

MSB

BGR,RBG等等

音频隐写

DTMF

二维码

压缩包分析

暴力破解

已知明文攻击

CRC碰撞

伪加密

取证分析

流量分析

网络流量

USB流量

内存取证

其他知识面:


密码学相关

CyberChef

base家族隐写:

base32:

MZWGCZZINBQW6X3KNF2V6YTVL54W63THL5RDGMS7FE======

,url ,转图片,,,

随波逐流

编码,加密,古典密码 等等。。。

二进制 ,进制转换:

0122 061 1101011 0172 0122 0105 061 1011010 0127 0154 0144 0110 0122 1010100 1001110 1000101 0124 110000 064 0172 1010001 060 0144 1011010 0115 1101011 0122 0116 1010100 0153 1110000 1011000 1010010 060 1101100 1100001 0126 0106 1001110 1001110 0127 1101100 0160 1001000 0124 1010100 1001110 0105 1010010 060 065 0123 0126 0105 0144 0132 1001101 060 1010010 1001000 1010100 1010110 1110000 1011010 1010010 110000 110000 0172 1010010 0105 061 1001110 1010101 1101100 0122 1001000 0122 1010110 1110000 0125 0121 060 065 0123 1010110 1010101 1100100 1001110 1010111 0125 1010010 0110 0124 1101100 0112 0130 0122 061 0154 0141 1010110 0105 1010110 1001111 1010101 1101100 1010110 0110 0127 1010100 1001010 1000101 1010100 1010101 110001 1010011 0126 060 1100100 1010110 1001101 060 1010010 0110 0124 0126 0160 0141 0122 060 061 0141 1010110 1000101 061 1001111 1010011 0154 0122 1001000 0126 1010100 1001110 0105 1010010 110000 110001 1100001 0126 110000 1100100 0132 1010111 0126 1010010 1001000 0124 0154 1001010 1011001 1010100 0126 0105 071 0120 0124 060 111001 0120 1010100 110000 111101 

进制转换 - 在线工具

字符:字符 编码/解码 - 锤子在线工具

摩斯密码:
Morse Code Adaptive Audio Decoder | Morse Code World

盲文,原神文,天书,猪圈,佛,熊 等等等等


文件类型判断

file命令

file 文件


文件头类型

通过文件头判断文件类型

【CTF杂项】常见文件文件头文件尾格式总结及各类文件头_ctf常见文件头-CSDN博客

常见文件的文件头与文件尾 - K4ras - 博客园 (cnblogs.com)

样本分析 | 整理了527种文件格式类型的文件头 (参考使用)_文件头格式列表-CSDN博客



strings读取

strings xxx.png | grep ctf

strings * | grep ^ctf{.}$

strings * | grep ctf

直接显示出所有字符: (方便找)


隐写术

png 是无损压缩

bmp (无压缩的图片)

jpg 压缩很可能被破坏,有损压缩, 不能使用lsb隐写

尺寸修改

图片的宽高问题,CRC校验。

模板里面修改/再hex里面修改


文件头等缺失

【CTF杂项】常见文件文件头文件尾格式总结及各类文件头_ctf常见文件头-CSDN博客

常见文件的文件头与文件尾 - K4ras - 博客园

样本分析 | 整理了527种文件格式类型的文件头 (参考使用)_文件头格式列表-CSDN博客

给你个txt,打开后是乱码,看hex,其实是图片的文件头。

文件里面夹杂着其他文件的特征,通过提取进行补全,修改等等。

文件头真的没有。

PNG (png) 文件头:89504E47 文件尾:AE 42 60 82

jpg FFD8FFE1

bmp 424D

gif 47494638

tif 49492A00

AVI 文件

文件头:52 49 46 46 xx xx xx xx 41 56 49 20

文件尾:00 00 00 00

---改的时候有问题 ,--》改成png ,webp , jpg 等文件后缀都行!!

EXIF隐写

右键,属性,详细信息

exiftool:

坐标 ---》 字符 / hex

时间 ---》 时间戳 ---》hex


thumbnail 隐写

exiftool

exiftool misc.png --分析图片

exiftool -ThumbnailImage -b misc.png > flag.png --提取图片


文件分离&提取

binwalk

binwalk flag.txt

binwalk -e flag.txt

binwalk -e xxx.png --run-as=root

binwalk -D=jpeg 'xxx.jpg'

helloctfos@Hello-CTF:/mnt/c/HelloCTF/Toolkit/隐写工具/图片类/binwalk-2.3.4/build/scripts-3.10$ binwalk '/mnt/c/Users/HelloCTF_OS/Desktop/misc8/misc8.png'

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             PNG image, 900 x 150, 8-bit/color RGBA, non-interlaced
91            0x5B            Zlib compressed data, compressed
3892          0xF34           PNG image, 900 x 150, 8-bit/color RGB, non-interlaced
3954          0xF72           Zlib compressed data, default compression



dd if='/mnt/c/Users/HelloCTF_OS/Desktop/misc8/misc8.png' of=9999.png  bs=1 skip=3892
7741+0 records in
7741+0 records out
7741 bytes (7.7 kB, 7.6 KiB) copied, 27.3239 s, 0.3 kB/s

foremost

foremost xxx.png

-V-显示版权信息并退出
-t-指定文件类型。(-t jpeg,pdf...)
-d-启用间接块检测(对于UNIX文件系统)
-i-指定输入文件(默认为stdin)
-a-写入所有标头,不执行错误检测(损坏的文件)
-w-仅写入审核文件,不将任何检测到的文件写入磁盘
-o-设置输出目录(默认为输出)
-c-设置要使用的配置文件(默认为forest.conf)
-q-启用快速模式。在512字节边界上执行搜索。
-Q-启用静音模式。抑制输出消息。
-v-冗余模式。将所有消息记录到屏幕。

dd命令

半自动化,当文件自动分离出错或其他原因无法自动分离时,可以使用dd实现文件手动分离。

格式:

dd if=源文件 bs=1 of=目标文件名 skip=开始分离的字节数

dd if=xxx of=xxx bs=xxx count=xxx skip=xxx

--一个文件里有多个文件头(特征)

zsteg

zsteg 文件 --分析文件

zsteg -e extradata:0 misc.png > flag.txt --提取文件

zsteg -e 通道 xxx.png > xxx.txt (后面LSB用到)


看hex!!!

记事本打开/010打开看末尾,中间段等有没有关键信息。

010 , winhex ,

隔位取值:

gif

分帧,摩斯,特性,挤

gif图片分帧:

每一帧都有对应的图片。宽高

010 --- 模板 --- 发现 帧数

96 --》 FF

两个地方:一个是图片的 缩略图的高度 and 图片本体的高度。

要改就改两个地方的高度:!!!

图像特征:

使用 imagemagick工具:identify -format "%T " misc.gif

得到

37 37 36 36 36 37 37 37 37 37 36 37 36 36 37 37 36 36 37 37 36 37 37 37 36 36 37 37 37 37 36 37 36 36 36 37 37 36 37 37 37 37 37 37 37 36 37 37 37 37 37 37 37 36 37 37 36 37 37 36 37 36 37 36 37 37 36 36 37 36 36 37 37 37 36 36 36 36 37 37 36 36 36 37 36 37 37 36 36 37 36 37 37 36 36 37 37 36 37 37 36 36 37 37 36 36 37 37 37 36 36 37 36 37 37 37 36 36 37 36 37 37 36 37 36 37 37 37 36 36 37 37 36 37 37 36 36 36 37 36 36 37 37 36 37 37 37 37 37 36 36 36 37 36 37 37 36 36 37 36 37 36 37 37 36 36 37 36 36 37 37 36 37 37 36 36 37 37 37 36 36 36 37 37 36 36 37 36 36 36 37 37 37 36 36 37 36 37 37 36 37 37 36 36 37 37 36 36 37 37 37 37 36 36 36 36 37 36 37 37 37 36 36 37 37 37 36 36 37 36 37 37 37 36 36 36 37 36 37 37 36 36 36 37 37 37 37 36 36 36 36 37 36 37 37 36 36 36 36 36 37 37 36 37 36 36 36 37 37 36 37 36 37 36 37 37 37 36 36 37 37 37 37 37 37 36 37

---》 二进制数据!!! 替换就好了

gif坐标:

用gif每一帧的偏移量作为坐标来画图,这里gif的偏移量用identify命令,

apt-get install imagemagick

identify misc.gif > flag.txt

matplotlib脚本画图。


word隐写

显示隐藏的文字。


apng

是PNG的升级版,与GIF类似。

使用apng2gif转成GIF。(工具转成gif)

apngdis分解每一帧。

honeyview直接看每一帧。


apngdis 拆解图片,得到一堆文本,文本内容是每一帧之间的间隔。


bpg

BPG格式,全称"Better Portable Graphics"(更好的便携式图像),它是一个声称比现时最流行的JPEG压缩格式更优秀的图像压缩方案,由法国的程序员法布里斯·贝拉(Fabrice Bellard)于2014年创建。他将影像编码格式中的技术运用到了图像编码,以达至更理想的压缩比率,而不同于JPEG为提高压缩比而牺牲画质的方式。该影像编码格式基于高效率视频编码(HEVC)的帧内编码技术改良而成。

下载honeyview直接查看bpg图片:

Honeyview · Free Image Viewer · Download & Features


png

  • (固定)八个字节89 50 4E 47 0D 0A 1A 0A为png的文件头
  • (固定)四个字节00 00 00 0D(即为十进制的13)代表数据块的长度为13
  • (固定)四个字节49 48 44 52(即为ASCII码的IHDR)是文件头数据块的标示(IDCH)
  • (可变)13位数据块(IHDR)
    • 前四个字节代表该图片的宽
    • 后四个字节代表该图片的高
    • 后五个字节依次为:
      Bit depth、ColorType、Compression method、Filter method、Interlace method
  • (可变)剩余四字节为该png的CRC检验码,由从IDCH到IHDR的十七位字节进行crc计算得到。

hex特征

看文件头,IHDR CRC 值是否正确。

高 00 00 03 84,宽 00 00 00 96

  • (固定)八个字节89 50 4E 47 0D 0A 1A 0A为png的文件头

  • (固定)四个字节00 00 00 0D(即为十进制的13)代表数据块的长度为13

  • (固定)四个字节49 48 44 52(即为ASCII码的IHDR)是文件头数据块的标示(IDCH)

  • (可变)13位数据块(IHDR)

  • 前四个字节代表该图片的宽

  • 后四个字节代表该图片的高

  • 后五个字节依次为:

Bit depth、ColorType、Compression method、Filter method、Interlace method

  • (可变)剩余四字节为该png的CRC检验码,由从IDCH到IHDR的十七位字节进行crc计算得到。

求高:

import os
import binascii
import struct
 
misc = open("dabai.png","rb").read()
 
for i in range(1024):
    data = misc[12:20] +struct.pack('>i',i)+ misc[24:29]
    crc32 = binascii.crc32(data) & 0xffffffff
    if crc32 == 0x6d7c7135:
        print(i)
        print("hex:"+hex(i)) #转为16进制

求宽:

# -*- coding: utf8 -*-
import os
import binascii
import struct
 
misc = open("dabai.png","rb").read()
 
for i in range(1024):
    data = misc[12:16] +struct.pack('>i',i)+ misc[20:29]
    crc32 = binascii.crc32(data) & 0xffffffff
    if crc32 == 0x6d7c7135:
        print(i)
        print("hex:"+hex(i)) #转为16进制

数据块

PNG格式的数据结构-CSDN博客

TweakPNG

查看数据块是否有问题,

合并,删除等等

IDAT数据块

pngcheck

类似于pngcheck,主要检查一下数据块。

-7 打印文本块的内容,除了多于128个的字符,因为只有7位。
-f 即使在出现重大错误后仍强制继续。
-p 显示PLTE,tRNS,hIST,sPLT和PPLT的内容(可与-q一起使用)。
-q 安静地测试(仅输出错误)。
-s 在另一个文件中搜索PNG。
-t 显示tEXt块的内容(可与-q一起使用)。
-v test verbosely(打印大多数块数据)。
-x 搜索PNG并在找到时提取它们。

宽 / 高 一个有问题

CRC在线计算 (lddgo.net)

根据题目提示高度正确,宽度有问题,而且是png图片的前提下,我们知道这是考到了crc效验原理。

已知png图片的结构是如下的:

1、开头的0~7八个字节为png的文件头:89 50 4E 47 0D 0A 1A 0A (固定格式)

2、8~11四个字节:00 00 00 0D 表示头部数据块的长度为13(固定格式)

3、12~15四个字节:49 48 44 52 表示文件头数据块的标示(固定格式)

4、16~19四个字节:00 00 03 84表示图片的宽(不固定)

5、20~23四个字节:00 00 00 96表示图片的高(不固定)

6、24~28五个字节:08 02 00 00 00表示Bit depth(图像深度)、ColorType(颜色类型)、 Compression method(压缩方法)、 Filter method(滤波器方法)、Interlace method(隔行扫描方法)这五个字节不固定,均为可变数据

49 48 44 52 00 00 03 84 00 00 00 96 08 02 00 00 00

7、29~32四个字节:76 EC 1E 40(原宽高为图片的crc校验值由从第12个字节到第28个字节的十七位字节进行crc计算得到)

所以我们直接从12个字节开始复制到28字节结束,一共17个字节,粘贴到在线crc效验网站:CRC在线计算,选择hex内容格式、算法选择crc-32,再点击计算得到结果为09 DA D1 61 (原宽高所对应的正确的CRC)

然后再观察原图结构里的crc效验码为E1 4A 4C 0B(原宽高对应的错误的CRC),所以明显这是高度、宽度出错了。

脚本跑。。。


把IHDR块的CRC也改了,知道宽度大于900


jpg

修改高度


bmp

https://blog.csdn.net/qrsysterm/article/details/50629171

宽高计算:

举例说明, (根据提示本题的宽度是没问题的,所以只需要修改高度即可。)

右击属性可以看到目前像素是900 x 153=137700,而文件头占了53字节,文件结尾在675053字节处。

又因为每个像素点由三个字节(三基色)表示,每个字节控制一种颜色,分别为红、绿、蓝三种颜色。

所以文件真实像素大小为(675053-53)/3=225000。

高度=225000/900=250


exiftool 查看是多少字节

bmp共675056字节

目前像素是900x153=13700字节

文件结尾在675053处,真是像素大小:675053-53=225000 /900 = 真实宽度


十六进制打开文件,0x1c-0x1d是每像素比特数,18 00 即每像素占24位,3字节(bmp数据是小端序存储的,要倒过来看,即实际数据为 00 18)。

0x12-0x15是文件宽度,83 03 00 00,即900。

0x16-0x19是文件高度,96 00 00 00,即150。

0x22-0x25是图像数据的字节数,1A 87 06 00,即427802字节,去掉末尾补0的两个字节,实际是427800。

假设文件宽正常,高被修改了,那么一行数据字节为900*3=2700字节,bmp每行数据必须为4的倍数,否则需要补0 ,2700是4的倍数,无需再补0,计算实际高是427800/2700=158.4,不是整数,说明这个思路不对。

假设文件高正常,宽被修改了,那么一行是数据的字节应该是427800/150=2852,2852是4的倍数但不是3的倍数,说明末尾补了0, 2852/3得商为950,余数为2,说明一行有950个像素,末尾补了两个0,修改地址0x12-0x15为B6 03 00 00,打开图像得flag。


JPHS

JPEG 图像的信息隐藏软件 JPHS ,它是由 Allan Latham 开发设计实现在 Windows 和 Linux 系统平台针对有损压缩 JPEG 文件进行信息加密隐藏和探测提取的工具。

【隐写工具】【试一试?】jphide seek(JPHS) 使用方法,检测提示,附下载地址-CSDN博客

JPHS工具提取隐写数据,Stegdetect探测隐写方式和密码。


文本隐写:

文本隐写笔记 | 独奏の小屋


盲水印

单图

双图

文本盲水印

GitHub - chishaxie/BlindWaterMark: 盲水印 by python


频域盲水印

Misc 总结 ----隐写术之图片隐写(四) - 先知社区

JAVA盲水印

Releases · ww23/BlindWatermark · GitHub


snow隐写

需要密码

主要就是一段文本里有很多的空格和制表符。

零宽度字符隐写

(Zero-Width Space Steganography)

将隐藏消息编码和解码为不可打印/可读字符。

vim看

零宽度字符隐写 | Lazzaro

零宽度字符隐写(CTF)_零宽字符-CSDN博客

加解密网站:Unicode Steganography with Zero-Width Characters


颜色通道

三基色 + Alpha

在计算机图形学中,一个RGB颜色模型的真彩图形,用由红、绿、蓝三个色彩信息通道合成的,每个通道用了8位色彩深度,共计24位,包含了所有彩色信息。为实现图形的透明效果,采取在图形文件的处理与存储中附加上另一个8位信息的方法,这个附加的代表图形中各个素点透明度的通道信息就被叫做Alpha通道。

Alpha通道使用8位二进制数,就可以表示256级灰度,即256级的透明度。白色(值为255)的Alpha像素用以定义不透明的彩色像素,而黑色(值为0)的Alpha通道像素用以定义透明像素,介于黑白之间的灰度(值为30-255)的Alpha像素用以定义不同程度的半透明像素。因而通过一个32位总线的图形卡来显示带Alpha通道的图形,就可能呈现出透明或半透明的视觉效果。

0通道隐写,双图,xor

LSB...

直接换通道

stegsolve工具:

LSB

(最低有效位)

网络安全 - Lsb图片隐写 - 个人文章 - SegmentFault 思否

浅谈LSB隐写解题与出题-CSDN博客

LSB隐写,


RGB

RGB图像转三通道灰度图像 | CTF of Z2BNS

zsteg直接分析每个通道

zsteg -e 通道 xxx.png > xxx.txt

MSB

(keng~)

BGR,RBG等等

就要分析,多试!

0通道问题

xor


音频隐写

.flac

.wav

.mp3

---频谱,波形,01,摩斯,

--可以发现 类似 摩斯密码。( 长=- 短=. )

等等


DTMF

拨号隐写(你拨号时的声音)拨号音

(诺基亚手机按键)

三、音频隐写[Audacity、deepsound、dtmf2num、MMSSTV、虚拟声卡、MP3Stego]-CSDN博客

【工具】-Misc-DTMF2num 拨号音识别 | 青少年 CTF - 优秀文库

BUUCTF:[WUSTCTF2020]girlfriend-CSDN博客

dtmf工具下载网址:csdn - 安全中心


二维码

QRazyBox - QR Code Analysis and Recovery Toolkit

拼接,反色,异或,标识,

汉信码:在线汉信码识别器|汉信码识别SDK|汉信码SDK

QR码


压缩包分析

暴力破解

尽可能知道密码的组成。直接爆破!

掩码攻击: 攻击类型选择掩码,不知道的密码扣?

已知明文攻击


CRC碰撞

例:有很多个zip文件,CRC32的值也就有很多个。

GitHub - theonlypwner/crc32: CRC32 tools: reverse, undo/rewind, and calculate hashes

GitHub - kmyk/zip-crc-cracker


伪加密

rar伪加密:

CTF解题技能之压缩包分析基础篇 - FreeBuf网络安全行业门户

zip伪加密原理及操作_zip加密原理-CSDN博客

(大佬写得非常好了~)

zip:


取证分析

流量分析

tcp/http追踪流,上传流量,登录,过滤,统计,hacker工具的流量特征,

网络流量

http ,tcp,telnet,dns,

USB流量

键盘,鼠标,坐标,


内存取证

volatility:取证分析。

CTF Misc(2)内存取证基础以及原理,覆盖了大部分题型_ctf misc raw-CSDN博客

【MISC】Volatility取证分析工具 | 狼组安全团队公开知识库

内存取证-Volatility安装使用以及一些CTF比赛题目-CSDN博客

volatility -f easy_dump.img --profile=Win7SP1x64 filescan | grep "txt\|jpg\|png"

(文件导出)
volatility -f easy_dump.img --profile=Win7SP1x64 dumpfiles -Q 0x000000002408c460 -D ./ -u
-Q:指定文件在内存中的地址。-D:指定文件导出的地址。-u:指定原文件名导出

/volatility -f easy_dump.img --profile=Win7SP1x64 memdump -p 2616 -D ./
(进程导出)

kit : 追溯密码

veracrypt:https://www.veracrypt.fr/en/Downloads.html

磁盘加密软件

DiskGenius: 数据恢复软件


其他知识面:

GitHub - AabyssZG/Raster-Terminator: CTF之光栅图秒杀器

条形码扫描

...没见过怎么办??? 百度呀!!!

gnuplot模块画图

拼图:montage

zlib解压:

import zlib
s = '789C4BCB494CAF4E4B36324D4E4A324FB230B534B54C4B35303637B63032314CB4344B4A33324EA90500E9E20B5FD01C6808'  # hex数据
b = bytes.fromhex(s)
flag = zlib.decompress(b)
print(flag)

爆破hash:

import hashlib
def md5(s):
    return hashlib.md5(s).hexdigest()
for i in range(1, 9999999):
    if md5(str(i)).startswith('bf5ede'):
        print i
#找到md5前6位是bf5ede的值

相关推荐
2201_753929247 分钟前
密码学简介
安全
lqqjuly24 分钟前
深度学习基础知识-残差网络ResNet
网络·人工智能·深度学习
瑕、疵39 分钟前
全面解析:网络协议及其应用
网络·网络协议
中云DDoS CC防护蔡蔡42 分钟前
棋牌游戏防ddos攻击,高防IP好用吗?
运维·服务器·游戏·网络安全·ddos
技术小赵42 分钟前
外贸独立站的四大引流推广策略
大数据·网络·经验分享
gengjianchun44 分钟前
clickhouse 安装配置
服务器·网络·clickhouse
乐茵安全1 小时前
windows基础
windows·安全·网络安全
螺蛳粉只吃炸蛋的走风1 小时前
网络编程IO多路复用之poll模式
网络·c++·面试·poll·阻塞与非阻塞