(萌新笔记,多多关照,不足之处请及时提出。)
不定时更新~
目录
[thumbnail 隐写](#thumbnail 隐写)
[宽 / 高 一个有问题](#宽 / 高 一个有问题)
密码学相关
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博客
样本分析 | 整理了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进制
数据块
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并在找到时提取它们。
宽 / 高 一个有问题
根据题目提示高度正确,宽度有问题,而且是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看
加解密网站: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隐写,
RGB
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
拼接,反色,异或,标识,
QR码
压缩包分析
暴力破解
尽可能知道密码的组成。直接爆破!
掩码攻击: 攻击类型选择掩码,不知道的密码扣?
已知明文攻击
CRC碰撞
例:有很多个zip文件,CRC32的值也就有很多个。
GitHub - theonlypwner/crc32: CRC32 tools: reverse, undo/rewind, and calculate hashes
伪加密
rar伪加密:
CTF解题技能之压缩包分析基础篇 - FreeBuf网络安全行业门户
(大佬写得非常好了~)
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的值