相关课程 ## 杂项的基本解题思路

文件操作与隐写

文件类型识别

file命令

​ 当文件没有后缀名或者有后缀名而无法正常打开时,根据识别出的文件类型来修改后缀名即可正常打开文件。

使用场景:不知道后缀名,无法打开文件。

格式:file 文件名

010 editor

​ 通过010editor程序可以查看文件头类型,根据文件头类型判断出文件类型。

使用场景:windows下通过文件头信息判断文件类型

文件类型 文件头
JPEG (jpg) FFD8FFE1
PNG (png) 89504E47
GIF (gif) 47494638
TIFF (tif) 49492A00
Windows Bitmap (bmp) 424DC001
ZIP Archive (zip) 504B0304
RAR Archive (rar) 52617221
Adobe Photoshop(psd) 38425053
Rich Text Format (rtf) 7B5C727466
XML (xml) 3C3F786D6C
HTML (html) 68746D6C3E
Adobe Acrobat (pdf) 255044462D312E
Wave (wav) 57415645
pcap(pcap) 4D3C2B1A
文件头残缺/错误

​ 通常文件无法正常有两种情况,一种是文件头部残缺,另一种是文件头部字段错误。针对文件头部残缺的情况,使用010editor可以添加相应的文件头;针对头部字段错误,可以找一个相同类型的文件进行替换。

使用场景:①文件头部残缺或文件头部字段错误无法正常打开文件;②用file命令查看文件类型的时候,显示data,说明文件头残缺或错误了。

文件分离操作

Binwalk工具

​ Binwalk是Linux下用来分析和分离文件的工具,可以快速分辨文件是否由多个文件合并而成,并将文件进行分离。如果分离成功会在目标文件的目录。(如果文件中含有压缩包,那么binwalk分离过程中,会自动将压缩文件解压出来)

同目录下生成一个形如_extracted的文件目录,目录中有分离后的文件。

用法:

分析文件:binwalk 文件名

分离文件:binwalk -e 文件名

foremost

​ 如果binwalk无法正确分离出文件,可以使用foremost,成功执行后,会在目标文件的文件目录下生成我们设置的目录,目录这种会按文件类型分离出文件。(分离后会对各种文件进行分类,压缩包的文件不会解压出来,分离后还会生成一个日志文件)

用法:foremost 文件名 -o 输入目录名

dd

​ 当文件自动分离出错或者因为其他原因无法自动分离时,可以使用dd实现文件手动分离。(可能在文件中,jpg的一部分在开头,另一部分在结尾,它们不是相连的)

格式:

1
2
3
4
5
6
7
8
dd if=输入文件 of=输出文件 [bs=块大小] [count=块数量] [skip=跳过的块数] [seek=跳到的块数]
# 参数说明
if=file # 输入文件名,缺省为标准输入
of=file # 输出文件名,缺省为标准输出
bs=bytes # 同时设置读写块的大小为bytes,可代替ibs和obs
count=块数 # 指定要处理的块的数量。
skip=跳过的块数 # 从输入文件开头跳过的blokcs个块后再开始复制
seek=跳到的块数 # 指定在输出文件中跳过多少块,以便在文件的中间开始写入。

例子:

1
2
3
4
5
6
7
8
9
10
# 1.txt内容:1234567890abcdefg

dd if=1.txt of=2.txt bs=5 count=1
# 2.txt内容:12345

dd if=1.txt of=3.txt bs=5 count=2
# 3.txt内容:1234567890

dd if=1.txt of==4.txt bs=5 count=3 skip=1
# 4.txt内容:67890abcdefg
010editor

除了使用dd外,还可以使用010editor实现文件手动分离,将目标文件拖入010editor中,找到要分离的部分,选中->Selection->Save Selection。

010editor将16进制字符文件转换文件

(1)将16进制字符文件保存在一个文件中

(2)打开010editor,选择010editor import Hex

(3)观察文件类型,再选择另存为

文件合并操作

Linux下的文件合并

格式:cat 合并的文件 > 输出的文件

完整性检测:linux下计算文件md5

格式:md5sum 文件名

Windows下的文件合并

格式:copy /B 合并的文件 输出的文件

完整性检测:windows下计算文件md5

格式:certutil -hashfile 文件名 md5

文件内容隐写

文件内容隐写,就是直接将KEY以十六进制的形式写在文件中,通常在文件的开头或结尾部分,分析时通常重点观察文件开头和结尾部分。如果在文件中间部分,通常搜索关键字KEY或者flag来查找隐藏内容。

工具:Winhex/010editor

图片隐写术

图片文件隐写

Firework

使用010editor打开文件时会看到文件头部中包含firework的标识,通过firework可以找到隐藏图片。

Exif

Exif按照JPEG的规格在JPEG中插入一些图像/数字相机的信息数据以及缩略图像,可以通过与JPEG兼容的互联网浏览器/图片浏览器/图像处理等一些软件来查看Exif格式的图像文件,就跟浏览通常的JPEG图像文件一样。

Windows下:图片右键属性,查看exif或查看详细信息,在相关选项卡中查找flag1信息。

Linux下:使用工具exiftool,命令行:exiftool 图片

Stegsolve

当两张jpg图片外观、大小、像素都基本相同时,可以考虑进行结合分析,即将两个文件的像素值进行XOR、ADD、SUB(SUB操作存在操作顺序,即结果可能不一样,所以需要试两次)等操作,看能否得到有用的信息,StegSolve可以方便的进行这些操作。

使用场景:两张图片信息基本相同

图片文件隐写——LSB
Stegsolve

打开文件->Analyse->Data Extract

zsteg工具

kali下

安装:gem install zsteg

检测LSB隐写:zsteg 图片

(对比Stegsolve,zsteg在检测隐写的时候,会把所有选项的结果给出来)

Stegsolve:

zsteg:

wbstego4工具

不仅可以针对图片(一般针对bmp文件),还能针对pdf

对于不是bmp的图片,(画图工具可以转换)可以先转换成bmp,再导入到wbstego4里面。

python脚本处理

将以下脚本放在kali中运行,将目标文件放在脚本同目录下,修改脚本中的文件名,运行即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#coding:utf-8
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

不用脚本的做法:将图片转成png后用Stegsolve查看通道。

TweakPNG

TwekPNG是一款简单易用的PNG图像浏览工具,它允许查看和修改一些PNG图像文件的元信息存储。

使用场景:文件头正常却无法正常打开文件,利用TweakPNG修改CRC

例子:

有时CRC没有错误,但是图片的高度或者宽度发生了错误,需要通过CRC计算出正确的高度或者宽度。

如图,一般宽高crc都在这个位置。

1
2
3
4
5
6
7
8
9
10
11
12
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
# 下面是当前的crc值(不是正确的)
if crc32 == 0xcbd6df8a:
print (i, j)
print ("hex", hex(i), hex(j))
Bftools

bftools用于解密图片信息。

使用场景:在windows的cmd下,对加密的图片文件进行解密

格式:

1
2
3
Bftools.exe decode braincopter 要解密的图片 -output 输出文件

Bftools.exe run 上一步输出的文件
SilentEye

silenteye是一款可以将文字或者文件隐藏到图片的解密工具。

使用场景:windows下打开silentEye工具,对加密的图片进行解密。

例子:

使用silentEye程序打开目标图片,点击image->decode,点击decode,可以查看隐藏文件,点击保存即可。

如果需要密码,勾选encrypted data,输入密码和确认密码,点击decode再解密。

JPG图像加密

1)Stegdetect工具探测加密方式

Stegdetect程序主要有分析JPEG文件。因此用Stegdetect检测到通过JSteg、JPHide、OutGuess、Invisible Secrets、FS、appendX 和Camousflage等这些隐写工具隐藏的信息。

格式:stegdetect xxx.jpg

有的时候识别可能是错误的,这时候需要调高敏感度。

stegdetecct -s 敏感度 xxx.jpg

2)Jphide

Jphide是基于最低有效位LSB的JPEG格式图像隐写算法。

例:

Stegdetect提示jphide加密时,可以用Jphs工具进行解密,打开jphswin.exe,使用open.jpeg打开图片,点击seek,输入密码盒确认密码,在弹出文件框中选择要保存的解密文件位置即可,结果保存成txt文件。

3)Outguess

outguess一般用于解密文件信息。

使用场景:Stegdetect识别出来或者题目提示是outguess加密的图片

该工具需编译使用:./configure && make && make install

格式:outguess -r 要解密的文件 输出结果的文件

4)F5

F5一般用于解密文件信息

使用场景:Stegdetect识别出来时F5加密的图片或题目提示是F5加密的图片

进入F5-steganography_F5目录,将图片文件拷贝至该目录下,从CMD进入该目录

格式:Java Extract 要解密的文件 -p 密码

运行结束后我们可以直接在目录下的output.txt中看到结果

二维码处理

1.找到二维码扫描工具CQR.exe打开图片,找到内容字段

2.如果二维码某个定位角被覆盖了,该工具有时候也可以自动识别,如果识别失败,需要使用PS或画图工具将另外几个角的定位符移动到相应的位置,补全二维码。

3.如果某个二维码的定位点中间是白色,可能被反色了,使用画图工具将颜色反色(画图打开图片,点击选择,右键图片,即有反色按钮)回来再扫描即可。

压缩文件处理

压缩文件分析

伪加密

如果压缩文件是加密的,或文件头正常但解压缩错误,首先尝试文件是否为伪加密。zip文件是否加密是通过标识符来显示的,在每个文件的文件目录字段有一位专门标识了文件是否加密,将其设置为00表示该文件未加密,如果成功则表示文件为伪加密,如果解压出错说明文件为真加密。

操作步骤:

使用010editor打开压缩文件,找到文件头第9第10个字符,将其修改为0000。

1)使用010editor打开文件搜索16进制504B0102,可以看到每个加密文件的文件头字段。

2)从50开始计算,第9、10个字节为加密字段,将其设置为0000即可变成无加密字段。(50 4B 01 02这里算4个字符了)

3)RAR文件由于有头部校验,使用伪加密时打开文件会出现报错,使用010editor修改标志位后如报错消失且正常解压缩,说明是伪加密。使用010editor打开RAR文件,找到第24个字节,该字节尾数为4表示加密,0表示无加密,将尾数改为0即可破解伪加密。

暴力破解

通常我们可以使用ARCHPR.exe工具破解zip文件

使用场景:windows下加密过的zip文件

1)攻击类型选择暴力破解,在范围位置根据提示选择暴力破解范围选项设置暴力破解包含的类型、开始于和结束于选项具体范围,如果没有定义则全范围暴力破解。点击打开选择要破解的文件,点击开始进行破解。建议使用1~9位的数字密码,以及系统自带的英文字典作为密码字典。

记得设置长度

攻击类型——明文,如果告诉了压缩包的一些内容,就可以使用明文攻击。

2)攻击类型选择掩码可以进行复杂的暴力破解,比如知道密码前3位是abc,后3位是数字,则在攻击类型选择掩码,在掩码处输入abc???,暴力范围选择选择所有数字,打开要破解的文件,点击破击。此时???的部分会被我们选择的暴力破解范围中的字符代替。

明文攻击

明文攻击指知道加密的ZIP中部分文件的明文内容,利用这些内容推测出密钥并解密ZIP文件的攻击方法,相比于暴力破解,这种方法在破解密码较为复杂的压缩包时效率更高。

使用场景:已知加密的zip部分文件明文内容

例:假设一个加密的压缩包中有两个文件readme.txt和flag.txt,其中flag.txt的内容是我们希望知道的内容,而我们拥有readme.txt的明文文件,使用上述两个文件即可进行明文攻击。

操作:

1.将readme.txt的明文文件进行压缩,变成readme1.zip

2.打开archpr,攻击类型选择明文,明文文件路径选择readme1.zip(即将明文文件不加密压缩后的文件),加密的文件选择要破解的文件,点击开始,破解成功后会获得密码。

注意事项

有时不一定能破解出文件口令,但是能够找到加密密钥等信息,可以直接将文件解密,点击确定保存解密后的文件即可。

使用该方法需要注意两个关键点:

  • 明文文件压缩后的CRC值域加密压缩包中的文件一致
  • 明文文件的压缩算法需要与加密压缩文件的压缩算法一致

RAR文件格式

有时候给出的RAR文件的头部各个字块会故意给错导致无法识别。

zip暴力破解工具:ziperello

流量取证技术

流量包文件分析

通常比赛中会提供一个包含流量数据的PCAP文件,有时候也会需要选手们先进行修复或重构传输文件后,再进行分析。

  • 总体把握
    • 协议分级
    • 端点统计
  • 过滤筛选
    • 过滤语法
    • Host,Protocol,contains,特征值
  • 发现异常
    • 特殊字符串
    • 协议某字段
    • flag位于服务器
  • 数据提取
    • 字符串取
    • 文件提取

总的来说比赛中的流量分析可以概括为以下三个方向:

  • 流量包修复
  • 协议分析
  • 数据提取
WireShark过滤器

利用wireshark本身的强大的报文过滤器,帮助我们筛选出想要的报文。

常用的过滤命令:(注:以下命令的==和eq可互相替换)

1.过滤IP,如源IP或者目标x.x.x.x

1
ip.src eq x.x.x.x or ip.dst eq x.x.x.x 或者ip.addr eq x.x.x.x

2.过滤端口

1
2
3
4
tcp:port eq 80 or udp.port eq 80
tcp.dstport == 80 # 只显示tcp协议的目标端口为80
tcp.srcport == 80 # 只显示tcp协议的源端口为80
tcp.port >= 1 and tcp.port <= 80

3.过滤协议

1
tcp/udp/arp/icmp/http/ftp/dns/ip......

4.过滤MAC

1
eth.dst == A0:00:00:04:C5:84  # 过滤目标mac

5.包长度过滤

1
2
3
4
udp.length == 25  # 这个长度是指udp本身固定长度8加上udp下面那块数据包之和
tcp.len >= 7 # 指的是ip数据包(tcp下面那块数据),不包括tcp本身
ip.len == 94 # 除了以太网头固定长度14,其他都算是ip.len,即从ip本身到最后
frame.len == 119 # 整个数据包长度,从eth开始到最后

6.http模式过滤

1
2
3
4
5
6
7
8
9
http.request.method == "GET"
http.request.method == "POST"
http.request.uri == "/img/logo-edu.gif"
http contains "GET"
http contains "HTTP/1."
http.request.method == "GET" && http contains "User-Agent:"
http contains "flag"
http contains "key"
tcp contains "flag"

不知道具体字段,用contains

Wireshark协议分级

统计->协议分级

作用:大致让你知道这个包里面主要有什么

根据数据包特征进行筛选

比如查看数据包的时候,有的数据包有某种特征,比如有http(80)。就可以筛选出这种特征出来。

右键->作为过滤器应用->选中

Wireshark流汇聚

在关注的http数据包或tcp数据包中的选择流汇聚,可以将HTTP流或TCP流汇聚或还原成数据,在弹出的框中可以到数据内容。

HTTP流:

右键一个包,选中追踪流,选择方式(因为HTTP流也是TCP流,HTTP协议是基于TCP协议的,选择HTTP流更准确些)

常见的HTTP流关键内容:

1.HTML中直接包含重要信息

2.上传或下载文件内容,通常包含文件名、hash值等关键信息,常用POST请求上传

3.一句话木马,POST请求,内容包含eval,内容使用base64加密

Wireshark数据提取

1.使用Wireshark可以自动提取通过http传输的文件内容。

文件->导出对象->HTTP

2.Wireshark可以手动提取文件内容

点击想要的数据包,如下图选定meida type的位置

右键->导出分组字节流 或者 点击菜单栏 文件->导出分组字节流,在弹出的框中将文件保存成二进制文件。

可以通过分析导出的文件大小来分析(比如某个包特别大,可能是上传或下载了什么东西)

无线流量包跑密码

无线wifi流量包

aircrack-ng工具进行wifi密码破解

1.用aircrack-ng检查cap包:aircrack-ng xxx.cap

handshake:表示是握手包

BSSID:路由器的MAC地址

ESSID:WIFI名字

一般在设置路由器的时候有一个是否要广播ESSID,选择是别人就能扫描到你的WIFI,如果否的话,你自己要连WIFI就需要输入名字再连。

2.用aircrack-ng跑字典进行握手包破解:aircrack-ng xxx.cap -w pass.txt

USB流量包文件分析

USB流量

USB流量也是流量分析题的考察点,一般考察的流量设计键盘击键,鼠标移动与点击,存储设备的明文传输通信,USB无线网卡网络传输内容等。

USB协议的数据部分在Leftover Capture Data域之中。

右键leftover capture data -> 应用为列。

USB键盘流量抓取分析

Leftover Capture Data中值与具体键位的对应关系,可参考:Universal Serial Bus HID Usage Tables - USB-IF53页~59页

Leftover Capture Data数据提取方式1:

在得到的csv文件的Leftover Capture Data可以将数据复制出来。此方式为通用复制数据方法。

文件->导出分组解析结果->为CSV,导出保存成一个.csv文件

Leftover Capture Data数据提取方式2:

使用Wireshark提供的命令行tshark,可以将Leftover Capture Data数据单独复制除了。

tshark -r usb1.pcap -T fields -e usb.capdata > usbdata.txt

windows下:找到安装目录下的tshark程序

linux下:在命令行运行,会报一个警告(没啥)

USB鼠标流量抓取分析

鼠标流量与键盘流量不同,鼠标移动时表现为连续性,与键盘的离散性不一样。但是实际鼠标产生的数据是离散的,所以同样可以把数据抓取出来,构成二维坐标画出轨迹。

HTTPS流量包文件分析

HTTPS流量是经过TLS协议加密过的,需要导入key才能看到原始的HTTP流量。