V0W's Blog

CTF中常见隐写术套路

字数统计: 1,853阅读时长: 8 min
2018/10/22 Share

0x00 前言

最近有几场比赛,正好当做准备和复习总结,于是有了本文。本文总结了CTF竞赛中的常见的隐写术的套路和思路。本篇文章不过多的阐述隐写的原理,需要的可以百度看看。

0x01 工具

1.1 binwalk,dd,foremost命令

linux下binwalk命令常用于分析隐写文件,dd命令和foremost命令用于提取文件。

常用命令:

1
2
binwalk xx.jpg			# 查看文件的隐藏信息
binwalk -e xx.jpg # 自动提取隐藏文件

常用命令:

1
2
3
4
5
6
$ dd if=123456cry.jpg of=2.zip skip=19560 bs=1
### if为输入的文件 of为输出的文件 skip为开始偏移量 bs为同时设置读入/输出的块大小为bytes个字节
### 通常需要先利用binwalk来确定偏移量,dd命令进行手动提取
29424+0 records in
29424+0 records out
29424 bytes (29 kB, 29 KiB) copied, 0.0604124 s, 487 kB/s

常用命令:

1
2
3
4
5
foremost 123456cry.jpg
foremost 123456cry.jpg -T
- T 表示用时间戳命名文件(防止命名重复)
foremost -v -i baozou_new.jpg -o /root/Desktop/xx
-i 输入文件 -o 输出文件-路径 -v在屏幕上显示详细信息

有时binwalk直接提取文件时,容易弄错偏移量导致文件出现问题,可以通过foremost 和dd命令进行提取。

1.2 winhex 和 01editor等二进制工具

此类为二进制工具,在自动分析工具分析不出来时,只能利用此类工具判断文件头和文件尾,从而得到相应的文件边界,然后提取出来。

###

1.3 StegSolve

一款基于Java 的集成型隐写解密工具,对于LSB隐写和多通道的查看非常有效,还可以和别的图片比较和运算。

mark


一般来说,上面几个工具就够用了,但是很多CTF如果想考脑洞的话,上述工具并不够,下面介绍一些其他隐写工具,可能不全、、、

1.4 steghide

一般隐藏一些txt文本

官网地址:http://steghide.sourceforge.net/documentation.php
在文件中隐藏数据

1
steghide –embed -cf /root/Desktop/1111.jpg -ef /root/Desktop/embeddate

检查图片中隐藏的信息

1
2
steghide info /root/Desktop/1111.jpg
steghide extract -sf background.jpg

1.5 F5-steganography

F5隐写

1
2
3
git clone https://github.com/matthewgao/F5-steganography
cd F5-steganography
java Extract ../123456.jpg -p 123456

后会生成output.txt文件,里面就有flag了

1.6 mp3stego

mp3stego 下载链接

主要用于mp3隐写,一般就是在mp3里面隐藏一段文本,需要密码
使用非常简单

1
2
加密:encode -E hidden_text.txt -P pass svega.wav svega_stego.mp3
解密:decode -X -P pass svega_stego.mp3

1.7 Audacity

下载链接

一般用于分析mp3或者其他音乐文件的波形。通过波形做一些转换,得到flag。

1.8 BrainTools

下载链接:https:pan.baidu.com/s/1Mo0FS_DVVXbcOgUtEQfclg 密码:i6xb

1
2
bftools.exe decode braincopter doge.png --output --dogeout.png
bftools.exe run --dogeout.png

mark

1.9 盲水印

github上的项目

Usage

Usage: python bwm.py <cmd> [arg...] [opts...]
  cmds:
    encode <image> <watermark> <image(encoded)>
           image + watermark -> image(encoded)
    decode <image> <image(encoded)> <watermark>
           image + image(encoded) -> watermark
  opts:
    --debug,          Show debug
    --seed <int>,     Manual setting random seed (default is 20160930)
    --alpha <float>,  Manual setting alpha (default is 3.0)

需要相应的py包和依赖。

1.10 LSB密写工具cloacked-pixel

github项目地址

Hide

1
2
3
4
5
6
$ python lsb.py hide samples/orig.jpg samples/secret.zip p@$5w0rD
[*] Input image size: 640x425 pixels.
[*] Usable payload size: 99.61 KB.
[+] Payload size: 74.636 KB
[+] Encrypted payload size: 74.676 KB
[+] samples/secret.zip embedded successfully!

Extract

1
2
3
4
5
6
$ python lsb.py extract samples/orig.jpg-stego.png out p@$w0rD 
[+] Image size: 40x425 pixels.
[+] Written extracted data to out.

$ file out
out: Zip archive data, at least v1.0 to extract

1.11 Strings命令

strings使用方法

strings命令在对象文件或二进制文件中查找可打印的字符串。字符串是4个或更多可打印字符的任意序列,以换行符或空字符结束。 strings命令对识别随机对象文件很有用。

选项:

  • -a –all:扫描整个文件而不是只扫描目标文件初始化和装载段
  • -f –print-file-name:在显示字符串前先显示文件名
  • -t –radix={o,d,x} :输出字符的位置,基于八进制,十进制或者十六进制
  • -e –encoding={s,S,b,l,B,L} :选择字符大小和排列顺序:s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit

Tips 我们使用strings + 文件名字的命令即可

0x02 图片隐写的常见思路

2.1 简单套路

  1. 右键属性在备注等地方可能出现提示信息
  2. winhex打开或者记事本打开,在末尾或者头或者中间会有提示信息
  3. png图片可以调整图片高度和宽度,可能在边上有隐藏信息。
  4. stgesolve改变偏移量,或许也能发现一些信息哦

2.2 附加式的图片隐写

在附加式的图片隐写术中,我们通常是用某种程序或者某种方法在载体文件中直接附加上需要被隐写的目标,然后将载体文件直接传输给接受者或者发布到网站上,然后接受者者根据方法提取出被隐写的消息,这一个过程就是我们这里想提到的附加式图片隐写。

而在CTF赛事中,关于这种图片隐写的大概有两种经典方式,一是直接附加字符串,二是图种的形式出现。

附加字符串的形式有很多,主要利用strings就可以查看,往往会看出一些东西。

还有很多的隐写本质上都是附加一段字符串:steghide、F5隐写、MP3stego、BrainTools(Brainfuck隐写)

图种式的应该也是很常见的了,不多说了,利用binwalk。

2.3 基于文件结构的图片隐写

这里一般都是图片文件里面隐藏着一个压缩包之类的。或者图片里面还隐藏着图片。

往往需要通过binwalk和winhex查看才能看出来。

2.4 基于LSB的隐写

LSB原理我就不多说了。LSB隐写一般有两种:一种是在各个0通道的数据组合成为新的文件如txt,zip等等。还有一种是0通道的数据只是一段字符串,即cloacked-pixel形式。

一般来说,stegsolve查看各色0通道都是类似的数据点阵,又和原图片形状不太像,往往就是LSB了。

mark

2.5 双图

双图一般有这么几种解法:

  1. 运算,对,两张图的运算

    图的本质就是三维或者一维矩阵嘛,两张图的话,往往通过一些如SUB(减法)XOR(异或)等运算,可以得到一些其他的信息。

  2. 盲水印

0x03 一般步骤

  1. 属性,记事本,winhex看看有没有提示信息
  2. binwalk foremost看看
  3. stegsolve 各个通道看看,符合LSB就提取试试
  4. 上面步骤都没发现什么信息的话,就在看看题目的提示,结合提示去找找相应的资料和隐写术

0xFF 参考链接

Misc 总结 —-隐写术之图片隐写(一)

Misc 总结 —-隐写术之图片隐写(二)

Misc 总结 —-隐写术之图片隐写(三)

Misc 总结 —-隐写术之图片隐写(四)

CATALOG
  1. 1. 0x00 前言
  2. 2. 0x01 工具
    1. 2.1. 1.1 binwalk,dd,foremost命令
    2. 2.2. 1.2 winhex 和 01editor等二进制工具
    3. 2.3. 1.3 StegSolve
    4. 2.4. 1.4 steghide
    5. 2.5. 1.5 F5-steganography
    6. 2.6. 1.6 mp3stego
    7. 2.7. 1.7 Audacity
    8. 2.8. 1.8 BrainTools
    9. 2.9. 1.9 盲水印
      1. 2.9.1. Usage
    10. 2.10. 1.10 LSB密写工具cloacked-pixel
    11. 2.11. 1.11 Strings命令
  3. 3. 0x02 图片隐写的常见思路
    1. 3.1. 2.1 简单套路
    2. 3.2. 2.2 附加式的图片隐写
    3. 3.3. 2.3 基于文件结构的图片隐写
    4. 3.4. 2.4 基于LSB的隐写
    5. 3.5. 2.5 双图
  4. 4. 0x03 一般步骤
  5. 5. 0xFF 参考链接