0%

CTF中misc的基本解题思路

ctf中misc的基本解题思路

图片

图片内容、图片分析、图片拼接、图片修复、EXIF、LSB

主要步骤

  1. 看属性详细信息

  2. 010editor或winhex或notepad++打开看有无特殊信息,然后搜索ctf、CTF、flag、key等关键字

    string、file命令(kali)

    1
    2
    strings test | grep -i flag 
    file 1.txt
  3. 检查图像的开头标志和结束标志是否正确,若不正确修改图像标志恢复图像,打开查看是否有flag或ctf信息,(往往gif属于动图,需要分帧查看各帧图像组合所得数据 若不是直接的ctf或flag信息 需要考虑将其解码)

  4. stegslove或者binwalk

  5. 修改高度png改IHDR、jpg改ffc2(16进制搜索)三个字节后的数据

  6. 根据对应格式使用响应隐写检测工具

  7. 看图片有无异常 盲水印 、f5、Lsb、guess、stegpy、steg、jphide、 stegdetect

JPG

特征

文件头标识(2 bytes):FF D8

文件结束标识(2 bytes):FF D9

Lsb

stegslove

IDAT隐写

使用pngcheck分析 pngcheck.exe -v file
判断异常IDAT串,使用winhex等工具创建新文件
根据创建后的新文件继续分析

修改高度

jpg改ffc2(16进制搜索)三个字节后的数据

stegdetect (win)

(检查jpg图片隐写方法,Stegdetect可以检测到通过JSteg、JPHide、OutGuess、Invisible Secrets、F5、appendX和Camouflage等这些隐写工具隐藏的信息)将图片复制到 stegdetect.exe 所在文件夹,打开 cmd输入

1
2
3
4
5
6
7
stegdetect.exe -tjopi -s 10.0 [stego_file]  
-s 修改检测算法的敏感度,该值的默认值为1。检测结果的匹配度与检测算法的敏感度成正比,算法敏感度的值越大,检测出的可疑文件包含敏感信息的可能性越大。
-t 设置要检测哪些隐写工具(默认检测jopi),可设置的选项如下:
j检测图像中的信息是否是用jsteg嵌入的。
o 检测图像中的信息是否是用outguess嵌入的。
p 检测图像中的信息是否是用jphide嵌入的。
i 检测图像中的信息是否是用invisible secrets嵌入的

steghide(win)

查看图片中嵌入的文件信息:

1
steghide info out.jpg

提取含有密码的隐藏内容:

1
steghide extract -sf out.jpg

提取不含有密码的隐藏内容:

1
steghide extract -sf out.jpg

steghide爆破密码

有些题目用steghide加密文件但是不给密码,此时就需要爆破,steghide本身并不支持爆破,需要一些其他的方法:

1
steg_brute.py -b -d [字典] -f [jpg_file]

需要安装的库:progressbar

1
pip install progressbar2

F5

(F5隐写,需要passwd)

kail下切换到F5-steganography,在java Extract运行命令:

1
java Extract 123456.jpg图片的绝对地址 -p 123456

outguess

(kali图片隐写+可需要可不要passwd

1
2
outguess -r /root/angrybird.jpg(绝对路径) 123.txt(信息存放的文本)
outguess -k 12345 -r 2.jpg out.txt -k后接密码 -r后接解密图片 输出文件

PNG

特征

文件头标识(8 bytes):89 50 4E 47 0D 0A 1A 0A

文件结束:00 00 00 00 49 45 4E 44 AE 42 60 82

修改高度

010打开修改

tweakpng.exe打开图片提示IDHRcyc错误,表示文件尺寸被修改,且未修改crc值

XOR

1.binwalk分析出两张图片

2.用stegslove打开选择image combiner 选择XOR

3.根据XOR后的结果继续分析

zsteg(kali)

zsteg可以检测PNG和BMP图片里的隐写数据(lsb隐写、zlib、openstego等),一般来讲用 zsteg 解密的文件都为bmp文件

1
zsteg 图片名

BlindWaterMark (盲水印,kali)

第一种 正常的bwm

打开 bwm.py 所在文件夹(桌面),在文件夹中打开终端

1
2
3
4
# 1.png 为无水印原图
# 2.png 为有盲水印的图
# flag.png 为解出来的图片
> python bwm.py decode 1.png 2.png flag.png

第二种 频域盲水印

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
40
41
42
43
44
45
import cv2
import numpy as np
import random
import os
from argparse import ArgumentParser
ALPHA = 5
def build_parser():
parser = ArgumentParser()
parser.add_argument('--original', dest='ori', required=True)
parser.add_argument('--image', dest='img', required=True)
parser.add_argument('--result', dest='res', required=True)
parser.add_argument('--alpha', dest='alpha', default=ALPHA)
return parser
def main():
parser = build_parser()
options = parser.parse_args()
ori = options.ori
img = options.img
res = options.res
alpha = options.alpha
if not os.path.isfile(ori):
parser.error("original image %s does not exist." % ori)
if not os.path.isfile(img):
parser.error("image %s does not exist." % img)
decode(ori, img, res, alpha)
def decode(ori_path, img_path, res_path, alpha):
ori = cv2.imread(ori_path)
img = cv2.imread(img_path)
ori_f = np.fft.fft2(ori)
img_f = np.fft.fft2(img)
height, width = ori.shape[0], ori.shape[1]
watermark = (ori_f - img_f) / alpha
watermark = np.real(watermark)
res = np.zeros(watermark.shape)
random.seed(height + width)
x = range(height / 2)
y = range(width)
random.shuffle(x)
random.shuffle(y)
for i in range(height / 2):
for j in range(width):
res[x[i]][y[j]] = watermark[i][j]
cv2.imwrite(res_path, res, [int(cv2.IMWRITE_JPEG_QUALITY), 100])
if __name__ == '__main__':
main()

使用

1
python pinyubwm.py --original 1.png --image 2.png --result out.png

查看 out.png 即可,如果无法得到正常图片,可将 1.png2.png 调换位置再次尝试

lsb的py脚本解密(lsb隐写+需要passwd)

F:\CTF\CTF工具合集\脚本\cloacked-pixel-master

使用

1
python lsb.py extract [stego_file] [out_file] [password]

pngcheck(检查IDAT块_win)

pngcheck.exe 所在文件夹打开cmd

1
pngcheck.exe -v 123.png

可检查 png 的 IDAT 块是否有问题相关题目可参考: https://blog.csdn.net/u010391191/article/details/80818785

有关解题脚本可参考 FzWjScJ 师傅的blog: http://www.fzwjscj.xyz/index.php/archives/17/

WebP

安装(kali中)apt install webp需要的时候按 Y 即可

使用

cwebp - 编码器工具:可将png转为web

1
cwebp 1.png -o 2.webp

dwebp - 解码器工具:可将webp转为png

1
dwebp 1.webp -o 2.png

vwebp - 查看器工具:可直接查看webp格式图片

1
vwebp 1.webp

webpinfo - 格式查看工具:可打印出WebP文件的块级结构以及基本完整性检查

1
webpinfo 1.webp

exiftool(查看图片exif信息)

1
2
3
4
exiftool 1.jpg # 显示图片所有信息
exiftool 1.jpg | grep flag # 查看图片有关‘flag’字符的信息
exiftool * #查看此文件夹所有图片信息
exiftool -b -ThumbnailImage attachment.jpg >flag.jpg # 提取缩略图*

GIF

特征

文件头标识(6 bytes):47 49 46 38 39(37) 61 即GIF89a

其他

  • bgp

文件头:425047FB

在线网站查看即可:https://webencoder.libbpg.org/show.html

音频

1.有key mp3steg

在MP3stego文件夹中打开cmd,然后将 Decode.exe 拖到命令行里,将要解密的文件放在文件夹中

1
2
3
encode -E hidden_text.txt -P pass svega.wavsvega_stego.mp3

Decode.exe -X -P pass(密码) svega_stego.mp3(要拷贝到目录下) //解码

2.分析声道audacity

3.010打开

steghide(wav隐藏信息)

使用方法在本文jpg的介绍中

wav

优先考虑lsb隐写,使用silenteye工具

m4a文件头

00 00 00 20 66 74 79 70 4D 34 41 20 00 00 00 00

视频

逐帧分割

video to pic.exe或者ffmpeg.exe

其他

视频中的音频、视频放到010中查看

压缩包

1.尽量用winrar避免异常

2.看属性

3.伪加密

修复工具:

  • winrar修复
  • ZipCenOp.jar(win)

找到所在文件夹,在地址栏输入cmd

1
java -jar ZipCenOp.jar r 文件名

4.暴力破解

5.明文攻击

6.crc32碰撞

7.多个压缩文件合并 cat 文件名(按需) > 保存文件名

其他

pyc文件相关

uncompyle6(pyc文件反编译)

1
uncompyle6 test.pyc > test.py

Stegosaurus(pyc隐写_win)

版本:Python 3.6 or later

使用在 stegosaurus.py 所在文件夹打开cmd,输入:

1
python stegosaurus.py -x [pyc_file]

DTMF

在线工具http://dialabc.com/sound/detect/

本地工具 tdmf ton decoder

https://pas-products.com/download.html免费版有限制

pcap文件修复

winpcapfix工具• 在线修复• https://f00l.de/hacking/pcapfix.php

乐符解密

https://www.qqxiuzi.cn/bianma/wenbenjiami.php?s=yinyue

linux光盘文件(ext3)

linux挂载光盘,使用notepad或者strings、file命令来搜索关键词

1
2
strings test | grep -i flag 
find | grep 'flag' 或 find -name 'flag*'

mount命令挂载文件

pdf

1
2
pdfinfo 文件名 #查看pdf属性
pdftotext 文件名 #导出文本

und/detect/

本地工具 tdmf ton decoder

https://pas-products.com/download.html免费版有限制