misc隐写题目总结,方便后续使用到的时候能找到,所以记录一下。
万变不离其宗,对于隐写除了特征明显的,其他其实就是一个一个试,那这个文章就把隐写汇总一下,以后就对着这个文章一个一个试!!
隐写基本分为四种吧,图片(PNG,JPG,GIF),音频(MP3,wav),office(word,excel表格)
图片(PNG,JPG,GIF)
F5隐写
- JPG
- 需要密码
全称是F5-steganography
java Extract “待提取的图片路径”
1.进入该文件夹后,需要将隐写的图片复制到文件夹里然后在空白处打开终端
2.java Extract图片的绝对路径是/123.jpg -p 123(这个-p后面输入的是密码,多半题目密码就是图片名,还有一定要用绝对路径)
3.这个时候在文件夹中找到并打开output.txt文件即可得到
outguess
- 密码可有可无
- JPG
加密
outguess -k 12345 -d 1.txt 1.jpg 2.jpg
# -k后接密码
# -d后接要隐藏的内容
解密
右键打开终端
outguess -k 12345 -r 2.jpg out.txt
不需要密码的情况如下
outguess -r 2.jpg out.txt
stegdetect[jpg利器!!!]
仅实用JPG,存在误报自己合理判断
该工具会自动检测比较常规的JPG隐写,提高效率
https://www.bookofnetwork.com/2576/download/Download-Stegdetect-software-for-PC-free
stegdetect.exe -tjopi -s 10.0 1.jpg
stegdetect.exe -tjopi -s 10.0 [stego_file]
-s 修改检测算法的敏感度,该值的默认值为1。检测结果的匹配度与检测算法的敏感度成正比,算法敏感度的值越大,检测出的可疑文件包含敏感信息的可能性越大。
-t 设置要检测哪些隐写工具(默认检测jopi),可设置的选项如下:
j 检测图像中的信息是否是用jsteg嵌入的。
o 检测图像中的信息是否是用outguess嵌入的。
p 检测图像中的信息是否是用jphide嵌入的。
i 检测图像中的信息是否是用invisible secrets嵌入的。
使用这个检测比较常见的结果是[stego_file]:jphide(***),这个可以用stegbreak来爆破密码【当然,复杂的密码还是需要去寻找】
stegbreak -r rules.ini -f password.txt -t p [stego_file]
#password.txt为自带字典
Loaded 1 files...
[stego_file]:jphide[v5](password)
解出来密码之后win上用Jphswin这个工具就可以解出来
steghide工具
- JPG
将post.txt文件隐藏到xxx.jpg中:
steghide embed -cf xxx.jpg -ef post.txt -p 123456(不加-p参数 不设置密码 )
从xxx.jpg解出post.txt:
steghide info out.jpg //查看图片中嵌入的文件信息
steghide extract -sf out.jpg //提取不含有密码的隐藏内容
steghide extract -sf xxx.jpg (图片路径)-p 123456(-p 密码) //提取含有密码的隐藏内容
steghide也可以用来爆破密码:
需要shell脚本:`#bruteStegHide.sh
#!/bin/bash
for line in `cat $2`;do
steghide extract -sf $1 -p $line > /dev/null 2>&1
if [[ $? -eq 0 ]];then
echo 'password is: '$line
exit
fi
done
用法:
./1.sh test.jpg passwd.txt
passwd.txt也需要自己生成,kali即可
crunch
比如要生成六位数字,那命令就是
crunch 6 6 0123456789 > passwd.txt
【第一个6是最短长度,第二个6是最长长度】
剩下的密码就出来了。
盲水印
俩个相同的图片,冲就完了
工具or copy jo本
工具不多说,jo本就bwm.py就行
# 1.png 为无水印原图
# water.png 为水印图
# 2.png 为有盲水印图
> python bwm.py encode 1.png water.png 2.png
频域盲水印
比赛的话题目基本会说是数字水印,然后就可以试试这个
确信是这个考点,但是解不出来可以试试调换俩图的顺序
python pinyubwm.py --original secret1.png --image secret0.png --result out.png
lsb解密
这个最简单的就是直接用Stegsolve然后调通道即可得到结果,但是复杂点的就是需要password
python lsb.py extract [stego_file] [out_file] [password]
zsteg隐写
kali
#查看图片全部信息
zsteg -a 1.png
#提取固定通道的内容并保存
zsteg -e b8,a,lsb,xy 1.png -> out.png
pngcheck【没思路就可以看看图片IDAT块】
用该工具查看IDAT块是否都是正常分配,不是的话基本就是考点了
正常情况下IDAT块是按顺序相同大小分配,不会出现上个块还没用完就直接用下个块
pngcheck.exe -v 123.png
如果的确有问题,可以试试一个师傅写的脚本
IDAT_data数据就是IDAT和CRC之间的数据 【hex范围:49444154–D9CFA5A8】
import zlib
import binascii
IDAT = "IDAT_data".decode('hex')
result = binascii.hexlify(zlib.decompress(IDAT))
print (result.decode('hex'))
print (len(result.decode('hex')))
WebP转换
kali
cwebp - 编码器工具:可将png转为webp
cwebp 1.png -o 1.webp
dwebp - 解码器工具:可将webp转为png
dwebp 1.webp -o 1.png
vwebp - 查看器工具:可直接查看webp格式图片
vwebp 1.webp
webpinfo - 格式查看工具:可打印出WebP文件的块级结构以及基本完整性检查
webpinfo 1.webp
exiftool
查看图片exif信息
exiftool 1.jpg # 显示图片所有信息
exiftool 1.jpg | grep flag # 查看图片有关‘flag’字符的信息
exiftool * # 查看此文件夹所有图片信息
exiftool -b -ThumbnailImage attachment.jpg >flag.jpg # 提取缩略图
文件分离工具(binwalk,foremost)
binwalk
binwalk -D “archive:zip” -D “image:jpg” hehe.jpg 可以直接分离文件
也可以使用dd命令分离文件,如:
dd if=hehe.jpg of=hehe1.zip bs=1 skip=54163
foremost的使用
先用foremost -h
检查一下是否已经安装,若安装之后会显示
$ foremost [-v|-V|-h|-T|-Q|-q|-a|-w-d] [-t <type>] [-s <blocks>] [-k <size>]
[-b <size>] [-c <file>] [-o <dir>] [-i <file]
-V - 显示版权信息并退出
-t - 指定文件类型. (-t jpeg,pdf ...)
-d -打开间接块检测 (针对UNIX文件系统)
-i - 指定输入文件 (默认为标准输入)
-a - 写入所有的文件头部, 不执行错误检测(损坏文件)
-w - 向磁盘写入审计文件,不写入任何检测到的文件
-o - 设置输出目录 (默认为为输出)
-c - 设置配置文件 (默认为 foremost.conf)
-q - 启用快速模式. 在512字节边界执行搜索.
-Q - 启用安静模式. 禁用输出消息.
-v - 详细模式. 向屏幕上记录所有消息。
使用方法就是将图片放进foremost目录下,输入命令:
foremost -i xxx.jpg
在目录下会出现一个output文件夹,结果就在里面。
zbarimg(命令行扫码)
kali
usage: zbarimg [options] <image>...
scan and decode bar codes from one or more image files
options:
-h, --help display this help text
--version display version information and exit
-q, --quiet minimal output, only print decoded symbol data
-v, --verbose increase debug output level
--verbose=N set specific debug output level
-d, --display enable display of following images to the screen
-D, --nodisplay disable display of following images (default)
--xml, --noxml enable/disable XML output format
--raw output decoded symbol data without converting charsets
-1, --oneshot exit after scanning one bar code
-S<CONFIG>[=<VALUE>], --set <CONFIG>[=<VALUE>]
set decoder/scanner <CONFIG> to <VALUE> (or 1)
--nodbus disable dbus message
批量扫码的话会用到这个工具
#!/bin/sh
for i in ./test/test-*.png;
do
#echo $i
zbarimg -q --raw -Sbinary $i >> out
done;
-q
:安静模式,只输出扫码内容--raw
:输出原始数据,不经过任何处理与字符转换
bftools(可以从图片解brainfuck)
bftools.exe decode braincopter flag.png > 1.txt
bftools.exe run 1.txt > 2.png
bftools.exe decode brainloller 2.png > 3.txt
bftools.exe run 3.txt
PNG最后一试
这个再试不过来可以下班了
import os
import binascii
import struct
crcbp = open("2a.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)
拼图
kali装了
以最稀碎的最麻烦的开始,这样比较全面
montage工具
montage 输入文件路径 -tile 长宽数量 -geometry 拼图间隙 输出路径
示例: montage ./*.png -tile 8X6 -geometry +0+0 flag.png
使用这个即可将碎片图片重组,但是是无序重组,还需要用算法来恢复图片,也就是用到gaps工具
gaps工具
gaps run 预处理图片路径 输出路劲 --参数
示例:gaps run ./image.png f.png --generations=40 --population=120 --size=70
然后图片就重组好了【重组不好基本就是size没算对,算对了很快就重组好了】
命令记录
gaps --image=out.jpg --generations=50 --population=120 --size=50
--image 指向拼图的路径
--size 拼图块的像素尺寸
--generations 遗传算法的代的数量
--population 个体数量
--verbose 每一代训练结束后展示最佳结果
--save 将拼图还原为图像
音频(MP3,wav)
First Of All
首先根据音频去听一下,从而粗略确定是哪种音频隐写,因为对于简单的题目通过听音频的反馈可以猜出是哪种考点
摩斯电码------有间隔的长短电波
SSTV------连续刺耳的电波
拨号隐写------123456789
AudacityPortable
打开音频see,频谱see
deepsound【有key试这个】
wav文件
没key也可以试试,不是一定need key
当然也可以用john破解密码
python /usr/share/john/deepsound2john.py 1.wav >flag.txt
john flag.txt
john flag.txt --show
拨号隐写
就是之前老年机的那种按键声音
kali里面带的dtmf即可
dtmf 音频文件名
SSTV
慢扫描
kali里面的工具qsstv
MP3隐写
# 隐藏信息
# —E 读取隐藏信息文件的内容,-P 设置密码
encode.exe -E hidden_text.txt -P pass 1.wav 1.mp3
# 解密信息
decode.exe -X 1.mp3 -P pass
steghide[适用于wav]
有时候音频也可试试这个解密
摩斯音频解密
mp3orwav
音频有一段刺啦音就可以试试这个,摩斯自动提取
https://morsecode.world/international/decoder/audio-decoder-expert.html
office(word,excel表格)
SNOW隐写【空格制表符隐写】
着重强调一下这个隐写,罕见,但是只要考就想不到,2023楚慧杯就有个这个MISC,当时没想到,亏
SNOW.exe -C -p password 1.txt
注:这里可能会把隐藏的数据放到word里面,但是不能直接用snow解密word,需要将数据提取到txt再解密
stegsnow(空白字符隐写)
kali
-C : 加密时压缩数据,解密时解压数据
-f [message-file] : 将该文件中的内容隐藏在输入文本文件中
-m [message-string] : 将该字符串隐藏在输入文本文件中
-p [password] : 加解密可用密钥
以"hello world"作为密钥,将infile文件中的"I am lying"压缩隐藏在outfile中
stegsnow -C -m "I am lying" -p "hello world" [infile] [outfile]
提取上述加密的信息
stegsnow -C -p "hello world" [outfile]
pyc隐写
Stegosaurus
kali里面有
压缩包隐写
也就是伪加密系列吧
注意注释,可能有时候有hint
其次就是压缩包的常见出题操作,比如伪加密,或者掩码爆破,明文爆破这几种最为常见,其他罕见的我也没见过就遇到了再补充吧
伪加密
ZIP
压缩源文件数据区
50 4B 03 04:这是头文件标记 (0x04034b50)
14 00:解压文件所需 pkware 版本
00 00:全局方式位标记(判断有无加密)
08 00:压缩方式
5A 7E:最后修改文件时间
F7 46:最后修改文件日期
压缩源文件目录区
50 4B 01 02:目录中文件文件头标记 (0x02014b50)
1F 00:压缩使用的 pkware 版本
14 00:解压文件所需 pkware 版本
00 00:全局方式位标记(判断是否为伪加密)
08 00:压缩方式
5A 7E:最后修改文件时间
F7 46:最后修改文件日期
压缩源文件目录结束标志
50 4B 05 06:目录结束标记
00 00:当前磁盘编号
00 00:目录区开始磁盘编号
01 00:本磁盘上纪录总数
01 00:目录区中纪录总数
59 00 00 00:目录区尺寸大小
3E 00 00 00:目录区对第一张磁盘的偏移量
00 00:ZIP 文件注释长度
判断是否是伪加密的方法
全局方位标记的四个数字中只有第二个数字对其有影响,其它的不管为何值,都不影响它的加密属性,即:
第二个数字为奇数时 –>加密
第二个数字为偶数时 –>未加密
有个很快捷的方式来判断到底是不是伪加密
先搜504b03041400【搜不到从右往左逐字减】,然后看这后边的俩数字的第一个数字的个位数是奇数还是偶数,
再搜504b010200001400【搜不到从右往左逐字减】,然后看这后边的俩数字的第一个数字的个位数是奇数还是偶数,
然后上边不是说了,是奇数就是加密是偶数就是未加密,如果你搜到的这俩数字不一致,意思就是一个奇数一个偶数,那就是伪加密,改成偶数即可,通常习惯改成0.
然后说句实在话,在比赛过程中也不用去真的这样细节的去看数据来判断是不是伪加密,直接放爆破工具里面爆,伪加密的话爆破直接报错显示不是加密,那不就是伪加密了,然后还有几种方法可以提取出来伪加密的文件
(1)用binwalk-e 直接分
(2)在kali系统中,可以直接打开伪加密zip文件
(3)检测伪加密的工具ZipCenOp.jar
(4)也可试试WinRAR直接修复压缩包
当然如果这方法都不行,回归最基础,就手动改数据肯定可以。
RAR
rar压缩包伪加密就更好识别了
找第24个字节,该字节尾数为4表示加密,0表示无加密,将尾数改为0即可破解伪加密
【第七列第二行的个位数】
明文攻击
需要注意明文攻击的压缩包算法必须是ZipCrypto Store
如果是AES-256 Deflate AES-256 Store 这两种压缩算法是不能明文攻击的
掩码攻击不多说,懂得都懂,明文攻击最常见的思路也是最根本的要求就是得有一个加密压缩包里面有的文件,然后通过这个文件去明文攻击压缩包,再难点的就是加密压缩包里面有个很常见的文件名,然后通过在网上找到这个文件【指相同CRC的】或者自己构造空置的相同文件名的文件【也就是空格填充,但是这种明文攻击起来很费时间】。
然后第二种就是空格填充的话用到了一个工具bkcrack,用这个工具去爆,命令如下【见2023春秋杯冬季赛’明文混淆‘这题】
D:\CTF\bkcrack-1.5.0-win64\bkcrack-1.5.0-win64>bkcrack.exe -C D:\game\MISC\明文混淆\明文混淆_aa760d446aaae9033ba325b5a324cb7b.zip -c LICENSE.txt -p D:\game\MISC\明文混淆\LICENSE.txt
bkcrack 1.5.0 - 2022-07-07
[18:33:31] Z reduction using 5 bytes of known plaintext
100.0 % (5 / 5)
[18:33:31] Attack on 1042869 Z values at index 6
Keys: 7163444a 203b76b0 17de1387
86.5 % (902027 / 1042869)
[19:05:27] Keys
7163444a 203b76b0 17de1387
获得key之后再用ARCHPR的明文攻击功能里面输入对应的密钥,右边有个按钮直接可以通过密钥去解密压缩包。
异或爆破偏移
xortool(猜测xor加密的密码长度及值)
kali
xortool (-x) -c 20 123.txt
#-x:代表文件内容为十六进制
#-c:后加出现频率最高的字符,文本内容一般是空格(20),二进制文件一般是00
123.txt保存密文
mimikatz(抓取lsass密码)
将 1.dmp 文件放在 mimikatz.exe 所在目录下,关闭杀软后打开 mimikatz.exe
执行下边的命令
privilege::debug
sekurlsa::minidump lsass.dmp
sekurlsa::logonpasswords full