最基本隐写
kali-Linux模式下,使用file命令(不知道后缀名,打开文件),知道文件后缀
winhex程序:windows下通过文件头识别文件,(使用工具010Editor查看)
jpg | FFD8FFE1 |
---|---|
png | 89504E47 |
gif | 47494638 |
bmp | 424DC001 |
zip | 504B0304 |
rar | 52617221 |
-
文件内容隐写:用010Editor查看,先浏览一下有可能在最后有flag。
文件头残缺或错误
用file命令查看不到文件类型,只回复data
-
使用010Editor在文件头纠正修改。
文件分离
Binwalk工具:Linux下分析和分离的工具
binwalk 文件名:分析文件
binwalk -e 文件名:分离文件
foremost工具:如果binwalk不成功,可以用foremost。将文件复制到kali里(会分类放到对应文件夹里)
foremost 文件名 -o 输出目录
count 是要到哪几块,skip就是跳到哪开始要
以foremost的题目为例:
winhex:手动分离(用010Editor就行,更简单)
-
给16进制的.txt也可以用010Editor查看,知道文件头名,另存后修改后缀。
文件合并
Linux | windows |
---|---|
cat 合并文件 > 输出文件 | copy /B 合并的文件 输出的文件 |
完整性检测 | 完整性检测 |
** md5sum 文件名** | certutil-hashfile 文件名 md5(也可以是其他的) |
-
会给合并成功的标志 例如:md5合并后如果一样说明合并正确
-
合并后打不开,小心文件头残缺 利用file查看。再用010Editor修改文件头。
图片隐写的常见方法总结
-
细微的颜色差别
-
GIF图的多帧隐藏
-
颜色通道隐藏
-
不同帧图信息隐藏
-
不同帧对比隐藏
-
-
Exif信息隐藏
-
图片修复
-
图片头修复
-
图片尾修复
-
CRC校验修复
-
长,宽,高度修复
-
-
最低有效位LSB隐写
-
图片加密
-
Stegdetect
-
outguess
-
Jphide
-
F5
-
图片文件隐写
filework(类似PS,但没PS强大)
Exif
相当于查看文件属性,看详情信息。
Exiftool工具可以更加方便的读取和修改Exif的信息
使用 sudo apt-get install libimage-exiftool-perl 命令安装
exiftool + 文件名、
盲水印
傅里叶变换实现了从空域或时域到频域的转换。整个转换过程可以理解为,先将原图进行二维傅里叶变换生成频谱图,然后将水印编码,生成编码后的水印,叠加之后获得含水印的频谱图,最后经过二维傅里叶逆变换得到含水印的图像。
要提取盲水印,只需要先把原图和带水印的图经过二维傅里叶变换转换为频谱图,然后频域相减,最后根据原来的水印编码方式进行解码。
在CTF中我们可以使用Blind waterMark(GitHub - chishaxie/BlindWaterMark: 盲水印 by python) 附加和提取图片中的盲水印,使用Audacity等工具提取音频的频谱图获取盲水印。
Stegsolve
-
也可能另一张图片在所给图片(用记事本打开)的最下边链接里
-
也要注意顺序,多试几遍
-
得出来的二维码要注意,这不是正常的,还需要颜色取反处理,就电脑自带的画图软件就可以。(彩色的有可能是多个二维码放一起了)
LSB
Stegsolve工具:这个工具需要自己去选组合
例题
Zsteg:把所有组合的情况全部展示
wbsteg04工具:解密通过lsb加密的图片(.bmp的图片)
-
一般有6个步骤
-
也可以用Zsteg直接解密
有无密码,没有就直接next
保存到另一个地方里,自己创建,或者直接输入,软件会自己创建
下边就直接next就可以,等待破解。
打开是乱码再用010Editor打开,可以看到flag
-
python脚本解密(kali里要有python的环境)
-
这题也可以转成.png再用Stegsolve工具打开,换通道也可以
import PIL.Image def foo(): im = PIL.Image.open('01.bmp') #放文件名 im2 = im.copy() pix = im2.load() width, height = im2.size for x in range(0, width): for y in range(0, height): if pix[x,y]&0x1 == 0: pix[x,y]=0 else: pix[x,y]=255 im2.show() pass if __name__ == '__main__': foo() print('ok') pass
CRC校验错误
TweakPNG
-
CRC错误
-
CRC没错,但宽,高错了(例如给了一半的二维码,按上述修改CRC图片没变)
-
也可以用filework直接看图层,尝试一下
import os import binascii import struct crcbp = open("2.png", "rb").read() for i in range(1024): for j in range(1024): data = crcbp[12:16] + struct.pack('>i', i) + struct.pack('>i', j) + crcbp[24:29] crc32 = binascii.crc32(data) & 0xffffffff if crc32 == 0xcbd6df8a: print(i,j) print("hex", hex(i), hex(j))
Windows下Bftools
Windows下SilentEye
二维码处理
例题
取反后用stegsolve打开,换不同通道,依次扫描(看到是DES加密,密钥,密文)
在线加密解密工具解密就可以 (在线加密解密 - chahuo.com)
了解
Stegdetect
音频隐写
主要工具:
-
MP3 :MP3Stego
-
音频频谱:Audacity
视频隐写
视频隐写是一种以视频为信息载体的隐写方式。CTF题目一般是将某些图片隐藏在视 频中,在图片中隐藏其他信息,因此首要任务是从视频中提取图片。
使用ffmpeg命令逐帧提取图片。
ffmpeg -i test.mp4 -r 30 image-%3d.jpg
text.mp4:被提取的视频文件。
-r 30:每秒提取30帧,一般是24帧。
image-%3d:文件命名格式是image-001.jpg。
ffmpeg -i test.mp4 -r 30 -t 4 image-%3d.jpg
-t:取t 时刻的帧。
ffmpeg -i test.mp4 -r 30 -ss 00:00:20 image-%3d.jpg
-ss:截取帧的初始时间。
ffmpeg -i test.mp4 -r 30 -ss 00:00:20 -vframes 10 image-%3d.jpg
-vframes: 截取帧的数量。
提取到隐藏图片之后继续从图片方向解题即可。
PDF隐写
-
PDF文件头添加额外信息
-
PDF中图片下还有图片
攻防世界 misc :pdf 多种方法(均有效)_攻防世界pdf-CSDN博客
DOC隐写
-
更改压缩包内的内容
-
将字体设置为不易被察觉的颜色或隐藏文字