好像所有的misc手都有一个自己的all in one笔记,于是乱炖一通√


加密及编码

URL编码

字符 编码 字符 编码 字符 编码
空格 %20 %21 %22
# %23 $ %24 % %25
& %26 %27 %28
%29 * %2A + %2B
, %2C - %2D . %2E
/ %2F : %3A ; %3B
< %3C = %3D > %3E
? %3F @ %40 [ %5B
\ %5C ] %5D ^ %5E
_ %5F ` %60 { %7B
| %7C } %7D ~ %7E

Base家族

常用的base表

1
2
3
4
5
6
7
8
9
10
11
12
base16                       flag         666C6167
base32[A-Z2-7] flag MZWGCZY=
base36 flag 727432
base58 flag 3cr9Ae
base64 flag Zmxh
base85 flag Ao(mg
base91 flag @iH<Z
base92 flag F#S<I
base100 flag 👝👣👘👞
base1024 flag
base2048 flag ڥڊװ
base65535 flag ꍦ鱡

base64的原理

第一步,将待编码的字符串各个字符转换为对应的ASCII码,并转换为8位二进制。

第二步,将得到的8位二进制序列分割为每6个一组(不足的末尾补0)

第三步,将每个6位二进制数列转换为十进制数字。

第四步,根据Base64编码对照表获得对应的值。

第五步,若编码所得字符串长非4倍,添一个或两个“=”补上

注意换表(要求字符不重复)。

base58

base58有两个常用表,一个是Bitcoin,另一个是Ripple。

Base64隐写

常见的Base64隐写题为一个txt文本文档,内含多个经过base64编码的字符串,用PuzzleSolver或随波逐流都可以解。

原理

在base64加密的第二步中添加的0字符会在进行base64解码时被舍弃,这意味着在这一步时添加的二进制值可以不全为0,且不影响解密结果(即使会改变”=“前最后一个字符的值)。

将所有被修改过的base64字符串结尾的二进制值提取出来组成一个二进制串,以8位分割并转为十进制值,最终十进制对应的ASCII字符串即为base64隐写结果。

AES加密

AES/DES/3DES加密过后开头总为U2FsdGVkX1,在base64解码后为Salted

手机键盘密码

即键盘九宫格,两种形式。

image-20250122224900327

1.如:A=21,E=32

特点是每组数字有且仅有两个,第一个范围为29,第二个范围为14

解密脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import re

DIC = ["", "", " abc", " def", " ghi", " jkl", " mno", " pqrs", " tuv", " wxyz"]


def encrypt_p_keyboard(string):
ciphertext = ""
string = string.replace(" ", "")
for i in string:
for j in DIC:
if i in j:
ciphertext += str(DIC.index(j)) + str(j.index(i)) + " "
break
else:
return -1
return ciphertext[:-1]


def decrypt_p_keyboard(string):
plaintext = ""
string = string.replace(" ", "")
test = re.findall("\d+", string)
if not test or test[0] != string:
return -1
ciphertext_lis = re.findall("\d{2}", string)
try:
for i in ciphertext_lis:
plaintext += DIC[int(i[0])][int(i[1])]
except:
return -1
return plaintext


if __name__ == '__main__':
ciphertext_ = encrypt_p_keyboard("keyboard")
plaintext_ = decrypt_p_keyboard(ciphertext_)
print(f"{plaintext_}: {ciphertext_}")


2.如:999 666 88 2 777 33 6 999 4 4444 777 555 333 777 444 33 66 3 7777

数字对应手机的每个键位,几个数字代表按几下。

MD5加密

MD5加密后的密文应该是纯数字+纯字符。

16位的MD5其实是取32位的8-24位。

在线爆破网址:

https://cmd5.com/

https://www.somd5.com/

emoji-aes

密文由一大串emoji表情组成,解密需要密钥。

在线解密网址:https://aghorler.github.io/emoji-aes/

1
2
3
明文:flag
密钥:key
密文:🙃💵🌿🎤🚪🌏🐎🥋🚫😆😍😂🐘🏎🌊🚪🍍🌉☺🥋😊😡☺😇🐘🏎👁😡🎅🤣😇😍✖🌉🔪❓🏹ℹ☺🍍📂😡☺🗒

注:base100也是一堆emoji表情。

flag=👝👣👘👞

词频分析/字频分析

有一大堆内容的文本。

词频分析在线网站:https://quipqiup.com/

字频分析可以随波逐流。

摩斯电码

由点(.)、横(.)、空格/斜杠(可无)组成。

当有些东西(包括但不限于大量压缩包的后缀名、多张图片的黑白等)有且只有三种时也可以考虑摩斯电码的情况。

维吉尼亚密码

若已知密文和key,则可以用赛博厨子。

对照表:

Vigenère_square.svg


图片

PNG文件结构

PNG文件结构很简单,主要有数据块(Chunk Block)组成,最少包含3个数据块及一个标识头:

HEX 数据 数据块名称 数据块符号 位置限制
89 50 4E 47 0D 0A 1A 0A PNG标识符 sig 开头
00 00 00 0D 49 48 44 52 文件头数据块 IHDR 第一块
图像数据块 IDAT 与其他IDAT连续
图像结束数据 IEND 最后一个数据块

一些其他数据块:

数据块符号 数据块名称 多数据块 可选否 位置限制
cHRM 基色和白色点数据块 在PLTE和IDAT之前
gAMA 图像γ数据块 在PLTE和IDAT之前
sBIT 样本有效位数据块 在PLTE和IDAT之前
PLTE 调色板数据块 在IDAT之前
bKGD 背景颜色数据块 在PLTE之后IDAT之前
hIST 图像直方图数据块 在PLTE之后IDAT之前
tRNS 图像透明数据块 在PLTE之后IDAT之前
oFFs (专用公共数据块) 在IDAT之前
pHYs 物理像素尺寸数据块 在IDAT之前
sCAL (专用公共数据块) 在IDAT之前
tIME 图像最后修改时间数据块 无限制
tEXt 文本信息数据块 无限制
zTXt 压缩文本数据块 无限制
fRAc (专用公共数据块) 无限制
gIFg (专用公共数据块) 无限制
gIFt (专用公共数据块) 无限制
gIFx (专用公共数据块) 无限制

PNG文件中,每个数据块由4个部分组成,如下:

名称 字节数 说明
Length (长度) 4字节 指定数据块中数据域的长度,其长度不超过(231-1)字节
Chunk Type Code (数据块类型码) 4字节 数据块类型码由ASCII字母(A-Z和a-z)组成的“数据块符号”
Chunk Data (数据块数据) 可变长度 存储按照Chunk Type Code指定的数据
CRC (循环冗余检测) 4字节 存储用来检测是否有错误的循环冗余码

通用思路

exif数据隐藏信息

利用exiftool批量查找exif信息。

1
>>exiftool *|grep flag

图片中间/末尾隐藏信息

010中间翻一翻。

盲水印隐写

一张图片

可以用隐形水印工具V1.2或者 WaterMark 来提取水印。

两张图片
1
2
3
先把要处理的图片拉入BlindWaterMark-master文件夹,然后使用如下命令
py bwmforpy3.py decode day1.png day2.png flag.png --oldseed
Tips:这里还会出现FFT(傅里叶盲水印):直接运行CTFD中的FFT.py

CRC错误/宽高隐写

爆破宽高后修改宽高。

F5图片隐写(刷新键)

利用F5-steganography。

1
java Extract Misc.jpg

steghide图片隐写

1
2
3
查看图片中嵌入的文件信息:steghide info out.jpg
有密码:steghide extract -sf out.jpg -p 123456
无密码:steghide extract -sf out.jpg 回车

outguess图片隐写

1
有密码:outguess -k "DuDuLu~T0_Ch3@t_THe_w0r1d" -r 2.jpg 3.txt

提取等像素点

1.使用PS。在PS中将宽高都修改为x分之一,并选择邻近硬边缘即可得到所需图片。

2.利用CTFD中的Get_Pixels.py。

1
2
3
4
py main.py -f arcaea.png -p 0x0+3828x2148 -n 12x12
py main.py -f 要解密的图片 -p 第一个像素点的XY坐标+最后一个像素点的XY坐标 -n 两个等距像素点的XY距离的差值
如果是等距离提取整张图片中所有像素点,要注意右下角那个点的位置XY都要减去一倍的距离
Tips:在PS中按F8就可以看到每个像素点的具体坐标了

PNG思路

LSB隐写

无密码

用zsteg梭一下,或者用stegsolve分析。

有密码(cloacked-pixel-master)

1
python2 lsb.py extract a.png flag.txt password

GIF

分帧

一帧帧看吧就。

帧间隔隐写(时间间隔隐写)

通过每一帧之间的时间不同来进行隐写。

用puzzlesolver可以梭一下。

好像还有个ubuntu下的identify可以用,但是还没试过。

1
identify -format "%T" flag.gif

二维码


音频

摩斯电码

可以直接看,也可以边听边打。

如果是单声道的可以试一试随波逐流一把梭。

SSTV慢扫描电视

1.RX-SSTV

1
2
3
4
1.点击Setup-Sound Control and Devices将默认输入设备和输出设备都设置为虚拟声卡line1
2.播放音频(最好不要用Au播放)
3.如果扫描出来的图片有错位,可以点击slant手动修改
4.退出RX-SSTV前要注意把默认的输入/输出设备改回原来的参数

2.github上的脚本

1
$ sstv -d audio_file.wav -o result.png

优点:不用播放音频。

缺点:调制方法较少。

电话音分析

用在线网站解码:http://www.dialabc.com/sound/detect/

或是使用windows下的软件:dtmf2num

1
.\dtmf2num.exe .\girlfriend.wav

对照表

72695ae62e76ee8ff841a9e79b3f3618

mp3stego

1
2
3
4
5
6
7
8
9
10
# Encode
encode -E data.txt -P pass sound.wav sound.mp3
data.txt里面放要隐写的txt信息 pass是解密时需要的密码
# Decode
decode -X -P pass sound.mp3
-X 是提取出隐写的文件
pass是解密时需要的密码
sound.mp3是待处理的MP3文件
# mp3stego可以使用无密码进行隐写
# 如果需要密码解密,但是没有密码,可以试试看音频中歌曲的名字(比如Canon)

deepsound

先用 deepsound 打开试一下,如果需要密码说明就是 deepsound 隐写,有密钥直接填入密钥解密即可。

silenteye

wav音频文件可能是 silenteye 隐写,可以拿默认密码 silenteye 解密试试看。

无线电调制(gnu)

wsl中输入gnuradio-companion打开,一般根据提供的grc文件逆一下即可。

PT2242信号

钥匙信号(PT224X) = 同步引导码(8bit) + 地址位(20bit) + 数据位(4bit) + 停止码(1bit)

例题:[SCTF2019]电单车

image-20250219192822916

短的为0,长的为1,可以打出:

0 011101001010101001100010 0 011101001010101001100010

flag为地址码:

flag{01110100101010100110}

steghide

1
steghide extract -sf out.wav

Sonic Visualiser

可以用来分析频谱图(spectogram)

Layer—>Add Spectogram

例题:[UTCTF2020]spectogram


TXT

不可见字符

零宽字符

通过零宽字符来加密文本,我们需要先将文本转成二进制的形式即只包含01,并使用空格将每个字符隔开,然后任选3个零宽字符分别用来表示“0”,“1”,“空格”,然后将所有的字符连接起来即可完成信息加密,在得到加密字符串后,我们还可以选择将其隐藏于正常的字符串中。

常见的零宽字符有:

image-20250210220955551

每一种基于零宽度字符的隐写都有自己的隐写方式及加密方式,所以可能用这一个工具(或脚本)加密过的字符串在另一个解密网站就无法成功解密。

在线解密网址:https://330k.github.io/misc_tools/unicode_steganography.html

SNOW隐写

snow 是一款在html嵌入隐写信息的软件,原理是通过在文本文件的末尾嵌入空格和制表位的方式嵌入隐藏信息,不同空格与制表位的组合代表不同的嵌入信息。

snow在ascii文本末尾隐藏数据,可以通过插入制表符和空格使数据在浏览器不可见。

snow最多添加7个空格,使每八列插入三位,文件中有许多制表符和空格。

snow隐写有宽度。

当notepad打开看见很多竖的时候考虑snow隐写。

例如:

image-20250206224023138

可以无密码破解,去掉-p即可。

1
.\SNOW.EXE -C -p 无情哈拉少zbc .\flag1.txt

在线解密网址:https://fog.misty.com/perry/ccs/snow/snow/snow.html

不可见字符代替摩斯密码/一连串不可见字符代替1和0

例:[WUSTCTF2020]spaceclub

image-20250210230735965

将长的一行转换为1,短的一行替换为0,就可以得到一串二进制编码。

image-20250210230844452

二进制转字节即可得到flag。

image-20250210231002174

ntfs

用NtfsStreamsEditor2扫描所在文件夹,然后导出可疑文件。

注意:如果是压缩包,一定要用winrar解压。


MS-Office

Word

1.全选更改颜色。

2.word的本质是压缩包。

3.与宏有关系的各种攻击与隐写。

4.利用行距的隐写(摩斯电码)。

PDF

挪走图片看见flag。


压缩包

zip文件结构

三部分:压缩文件源数据区 + 压缩源文件目录区 + 压缩源文件目录结束标志

文件源数据区(record)

HEX 数据 描述 010Editor 模板数据
50 4B 03 04 zip 文件头标记,看文本的话就是 PK 开头 char frSignature[4]
0A 00 解压文件所需 pkware 版本 ushort frVersion
00 00 全局方式位标记(有无加密) ushort frFlags
00 00 压缩方式 enum COMPTYPE frCompression
E8 A6 最后修改文件时间 DOSTIME frFileTime
32 53 最后修改文件日期 DOSDATE frFileDate
0C 7E 7F D8 CRC-32 校验 uint frCrc

文件目录区(dirEntry)

HEX 数据 描述 010Editor 模板数据
50 4B 01 02 目录中文件文件头标记 char deSignature[4]
3F 00 压缩使用的 pkware 版本 ushort deVersionMadeBy
0A 00 解压文件所需 pkware 版本 ushort deVersionToExtract
00 00 全局方式位标记(有无加密) ushort deFlags
00 00 压缩方式 enum COMPTYPE frCompression
E8 A6 最后修改文件时间 DOSTIME frFileTime
32 53 最后修改文件日期 DOSDATE frFileDate
0C 7E 7F D8 CRC-32 校验 uint frCrc

文件目录结束标志(endLocator)

50 4B 05 06 目录结束标记 char elSignature[4]
00 00 当前磁盘编号 ushort elDiskNumber
00 00 目录区开始磁盘编号 ushort elStartDiskNumber

常见报错及对应解决方法(借助010的模板功能)

(图片来自lunatic师傅的博客🥺)

1.该文件已损坏

修改源数据区或目录区的长度。

image-20250212211334732

2.CRC校验错误。

修改源数据区或目录区的压缩方式。

image-20250212211437627

伪加密

record中的frFlag位和dirEntry中的deFlag位用以标志压缩包是否加密,奇数为加密状态,偶数为未加密状态,可以通过修改这两个区的标志位做到压缩包伪加密。

不同压缩软件判断加密

解压工具 检测位置
BandZip deFlags
WinRAR deFlags
7-Zip frFlags

有些出题人会只修改一处的标志位,因此可以通过更换解压工具来解压此类伪加密。

CRC爆破

适用于压缩包内文件较小的时候,例如只有几个字节的时候,可以使用脚本爆破,注意有的脚本只能爆破zip压缩包

如果需要根据CRC值爆破明文的话可以参考这个项目:https://github.com/theonlypwner/crc32

1
python3 crc32.py reverse 0x7c2df918

明文攻击

条件

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

2.明文对应的文件加密方式为 ZipCrypto Store(部分deflate也可以)

3.进行明文攻击前要判断制作压缩包的压缩工具,然后对已知明文使用特定工具进行压缩,再进行明文攻击。

压缩工具 VersionMadeBy(压缩所用版本)
Bandzip 7.06 20
Windows自带 20
WinRAR 4.20 31
WinRAR 5.70 31
7-Zip 63

Advanced Archive Password Recovery

1.已知完整三段密钥时可用。

2.有和压缩包中的一样(CRC值一样)的文件时也可用该软件破解。

bkcrack

常用参数

1
2
3
4
5
6
7
8
9
-c 要解密的文件
-P 已知明文所在的压缩包
-p 已知的明文部分
-x 压缩包内目标文件的偏移地址 部分已知明文值
-C 加密压缩包
-o offset -p参数指定的明文在压缩包内目标文件的偏移量
-k 后面加破解出的三段密钥
-d 后面加解密后数据的保存位置
-U 修改压缩包密码并导出 bkcrack -C flag.zip -c hint.jpg -k afb9fee3 f8795353 f6de1d4e -U out.zip 114514

1.已知完整三段密钥。

可以用 -U 参数修改压缩包密码并导出。

1
$ bkcrack -C 00000218.zip -k ed3fb6a9 1c4a7211 c07461ed -U out.zip 111

2.已知相同文件。

1
2
3
4
5
6
7
8
9
$ bkcrack -C flag.zip -c hint.jpg -p hint.jpg -P hint.zip
bkcrack 1.5.0 - 2023-03-08
[14:37:27] Z reduction using 25761 bytes of known plaintext
100.0 % (25761 / 25761)
[14:37:29] Attack on 289 Z values at index 21821
Keys: afb9fee3 f8795353 f6de1d4e
100.0 % (289 / 289)
[14:37:29] Keys
afb9fee3 f8795353 f6de1d4e

3.已知部分明文

  • 利用明文文本进行破解。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #准备已知明文
    echo -n "lag{16e3" > plain1.txt #连续的8明文
    echo -n "74f6" | xxd #额外明文的十六进制格式,37346636
    #攻击,-o是偏移量
    bkcrack -C flag_360.zip -c flag.txt -p plain1.txt -o 1 -x 29 37346636
    #使用得到的秘钥进行解密:
    bkcrack -C flag_360.zip -c flag.txt -k b21e5df4 ab9a9430 8c336475 -d flag.txt
    # -p 指定的明文不需要转换
    # -x 指定的明文需要转成十六进制
    # 提到的偏移都是指 “已知明文在加密前文件中的偏移”。
  • 利用PNG图片头进行破解。

    1
    2
    3
    4
    5
    #准备已知明文
    echo 89504E470D0A1A0A0000000D49484452 | xxd -r -ps > png_header
    #攻击
    bkcrack -C png4.zip -c 2.png -p png_header -o 0
    bkcrack -C png4.zip -c flag.txt -k e0be8d5d 70bb3140 7e983fff -d flag.txt
  • 利用压缩包格式进行破解。

    将一个名为flag.txt的文件打包成ZIP压缩包后,发现文件名称会出现在压缩包文件头中,且偏移固定为30,则此时已知的明文片段有:“flag.txt” 8个字节,偏移30;ZIP本身文件头:50 4B 03 04 ,4字节,满足12字节的要求。

    有时“.txt”会影响破解结果,若利用此无法攻击成功,则去掉“.txt”再尝试。

    1
    2
    3
    4
    5
    6
    7
    8
    echo -n "flag.txt" > plain1.txt # -n参数避免换行,不然文件中会出现换行符,导致攻击失效
    bkcrack -C test5.zip -c flag.zip -p plain1.txt -o 30 -x 0 504B0304
    bkcrack -C test5.zip -c flag.zip -k b21e5df4 ab9a9430 8c336475 -d flag.zip
    # 但若想解密2.png,由于是ZipCrypto deflate加密的
    # 使用deflate算法压缩的文件,解码出来的是Deflate的数据流
    # 所以解密后需要bkcrack/tool内的inflate.py脚本再次处理
    bkcrack -C test5.zip -c 2.png -k b21e5df4 ab9a9430 8c336475 -d 2.png
    python3 inflate.py < 2.png > 2_out.png

流量分析


取证


其他

eml邮件

1.直接用txt打开分析。

2.用qq邮箱附件发送给自己。(钓鱼邮件说发就发?)

3.在线eml分析网站(还没成功过: ) )

木马

双击运行后火绒剑一把梭。(偷笑)

文件头尾

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
zip 文件头:50 4B 03 04 14 00 08 00
rar 文件头:52 61 72 21 (Rar!) 文件尾:C4 3D 7B 00 40 07 00
7z 文件头:37 7A BC AF 27 1C
png 文件头:89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52 文件尾:49 45 4E 44 AE 42 60 82
jpg 文件头:FF D8 FF E0 00 10 4A 46 49 46 00 01
gif 文件头:47 49 46 38 39 61(GIF89A)或 47 49 46 38 37 61(GIF87A) 文件尾:00 3B
Windows [Bitmap](https://so.csdn.net/so/search?q=Bitmap&spm=1001.2101.3001.7020) (bmp),文件头:42 4D
psd 文件头:38 42 50 53
TIFF (tif),文件头:49 49 2A 00
mp3 文件头:49 44 33 03 00 00 00 00
wav 文件头1:57 41 56 45
wav 文件头2:52 49 46 46 52 B7 01 00 57 41 56 45 66 6D 74 20
mov 文件头:00 00 00 20 66 74 79 70 71 74 20 20 20 05 03 00
swf 文件头:46 57 53 08 AC 43 00 00
gz 文件头:1F 8B 08 00
pyc的文件头:03 F3 0D 0A
CAD (dwg),文件头:41433130
Rich Text Format (rtf),文件头:7B5C727466
XML (xml),文件头:3C3F786D6C
HTML (html),文件头:68746D6C3E
Email [thorough only] (eml),文件头:44656C69766572792D646174653A
Outlook Express (dbx),文件头:CFAD12FEC5FD746F
Outlook (pst),文件头:2142444E
MS Word/Excel (xls.or.doc),文件头:D0CF11E0
MS Access (mdb),文件头:5374616E64617264204A
WordPerfect (wpd),文件头:FF575043
Postscript (eps.or.ps),文件头:252150532D41646F6265
Adobe Acrobat (pdf),文件头:255044462D312E
Quicken (qdf),文件头:AC9EBD8F
Windows Password (pwl),文件头:E3828596
AVI (avi),文件头:41564920
Real Audio (ram),文件头:2E7261FD
Real Media (rm),文件头:2E524D46
MPEG (mpg),文件头:000001BA
MPEG (mpg),文件头:000001B3
Quicktime (mov),文件头:6D6F6F76
Windows Media (asf),文件头:3026B2758E66CF11
MIDI (mid),文件头:4D546864
M4a,文件头:00000018667479704D3441