ctf-b站笔记
B站网安课程
Misc
文件操作与隐写
文件类型识别
- file命令
- 使用场景:不知道后缀,无法打开文件
- winhex
- 使用场景:windows下通过文件头信息判断文件类型
- 遇到题目给个.png文件,但是打不开,通过
file
命令识别发现是data的情况,需要修复。- 通过010 Editor在文件加上对应头部就行。
010 Editor
遇到都是16进制编码的文本,可以通过import hex导入。
文件分离操作
Binwalk工具
用法:
分析文件: binwalk filename
分离文件: binwalk -e filename
formost
- 如果Binwalk没办法分离,可以使用它
用法:
Foremost filename -o dir
dd
- 如果是分块的话,前两个工具都不管用,就使用它把。
用法:
1
2dd if =1.txt of=4.txt bs=5 count=3 skip=1
# inputfile outputfile blocksize如果我们不知道文件分成几块合适的话,需要借助binwalk分析
文件合并操作
Linux下
1
2
3cat a b c ... > dist
完整性检查
md5sum filenameWindows下
1
2
3
4
5copy /B a+b+c dist
# 如果前缀一样
copy /B prefix* dist
# 完整校验
certutil -hashfile filename md5
图片隐写
细微颜色区别
GIF图多帧隐藏
- 颜色通道隐藏
- 不同帧图信息隐藏
- 不同帧对比隐写
Exif信息隐藏
通过属性可以看到信息
图片修复
- 图片头修复
- 图片尾修复
- CRC校验修复
- 长、宽、高修复
最低有效位LSB隐写
图片加密
- Stegdetect
- outguess
- Jphide
- F5
Firework:
使用010 Editor打开文件时会看到文件头包含firework标识,通过firework可以找到隐藏图片。
Stegsolve:
两张图片之间做运算XOR/SUB/ADD
可以组合猜测LSB,但是每次都需要手动点击
Zsteg:
直接排列组合所有LSB结果
wbstego4:
可以解密.bmp/pdf文件,需要先转bmp
python脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15import PIL.Image
def foo():
im = PIL.Image.open('01.bmp')
im2 = im.copy()
pix = im2.load()
wid,hei = im2.size
for x in xrange(0,wid):
for y in xrange(0,hei):
if pix[x,y]&0x1 == 0:
pix[x,y]=0
else:
pix[x,y]=255
im2.show()
passTweakPNG:
- CRC错误
它可以修改和查看一些PNG图像文件的元信息存储,我们需要通过该软件修改,搜索软件提示错误值的crc值替换成正确的即可。
- 图片宽高错误
需要通过CRC计算出正确的宽高
1
2
3
4
5
6
7
8
9
10
11import binascii
import struct
crc_current = '0x08ec7edb' # 目前的就行,不是提示的正确的
crcbp = open('xxx.png','rb').read()
for i in range(1024):
for j in range(1024):
data = crcbp[12:16] + struct.pack('>i',i)+struct.pack('>i')+crcbp[24:29]
crc32 = binascii.crc32(data) & 0xffffffff
if crc == crc_current:
print(i,j)
print(hex(i),hex(j))
图片加密
Bftools
在win下用于对加密过的图片进行解密操作
SilentEye
可以将文字文件隐藏到图片,或者对图片进行解密的工具
Stegdetect
主要用于检测图片使用哪些隐写工具隐藏信息
Jphide
基于最低有效位LSB的图像隐写算法
Outguess
图像隐写算法
F5
图像隐写算法
CQR
二维码处理
二维码处理:
- 补全,可能二维码的方块被挡住了,我们需要讲起补全即可
- 取反:使用画图工具的反色 功能
- 如果是彩色图片可以用Stegsolve查看颜色通道进行扫码,如果还没办法扫出来可以先反色再扫。
压缩文件处理
判断什么加密方式
伪加密:
压缩源文件数据区的全局方式位标记应当为 00 00 (50 4B 03 04 14 00 后)
且压缩源文件目录区的全局方式位标记应当为 09 00 (50 4B 01 02 14 00 后)
真加密:
压缩源文件数据区的全局方式位标记应当为09 00 (50 4B 03 04 14 00 后)
且压缩源文件目录区的全局方式位标记应当为09 00 (50 4B 01 02 14 00 后)
伪加密
使用场景: 伪加密文件
操作方法:使用winhex打开压缩文件,找到文件头第九第十个字符,将其修改为0000
1.使用winhex打开文件搜索16进制504B0102,可以看到每个加密文件的文件头字段。
RAR文件由于有头部校验,使用伪加密时打开文件会出现报错,使用winhex修改标志位后如报错消失目正常解压缩,说明是伪加密。使用winhex打开RAR文件,找到第24个字节,该字节尾数为4表示加密,0表示无加密,将尾数改为0即可破解伪加密
暴力破解
通常我们可以使用ARCHPR.exe工具来破解rar文件,用Ziperello来破解zip
使用场景:windows下加密过的zip文件
攻击类型选择暴力破解,在范围位置根据提示选择暴力破解范围选项设置暴力破解包含的类型开始于和结束于选项具体范围,如果没有定义则全范围暴力破解。点击打开选择要破解的文件,点击开始进行破解。建议使用1~9位的数字密码,以及系统 自带的英文字典作为密码字典。
攻击类型选择掩码可以进行复杂的暴力破解比如知道密码前3位是abc,后3位为数字,则在攻击类型选择掩码,在掩码处输入acb???,暴力范围选项选择所有数字,打开要破解的点击,点击破解。此时?? ?的部分会被我们选择的暴力破解范围中的字符代替。
有时不一定能破解出文件口令,但是能够找到加密密钥等信息,可以直接将文件解密,点击确定保存解密后的文件
使用该方法需要注意两个关键点:
1、有一个明文文件,压缩后CRC值与加密压缩包中的文件一致。
2、明文文件的压缩算法需要与加密压缩文件的压缩算法一致。文件分析
有时候给的RAR文件头部各个字块会故意给错导致无法识别(隐藏文件)
字段 大小 作用 HEAD CRC 2 字节 所有块或块部分的CRC HEAD TYPE 1 字节 块类型 HEAD FLAGS 2 字节 块标记 HEAD SIZE 2 字节 块大小 #如果块标记的第一位被置1的话,还存在 ADD SIZE 4 字节 可选结构 - 增加块大小 那么,文件块的第3个字节为块类型,也叫头类型
头类型是0x72表示是标记块
头类型是0x73表示是压缩文件头块
头类型是0x74表示是文件头块
头类型是0x75表示是注释头
流量分析
CTF 比赛中,流量包的取证分析是另一项重要的考察方向。
通常比赛中会提供一个包含流量数据的PCAP 文件,有时候也会需要选手们先进行修复或重构传输文件后,再进行分析。
总体把握
- 协议分级
- 端点统计
过滤筛选
- 过滤语法
- Host,Protocol,contains,特征值
发现异常
- 特殊字符串
- 协议某字段
- flag 位于服务器中
数据提取
- 字符串取
- 文件提取
总的来说比赛中的流量分析可以概括为以下三个方向:
- 流量包修复
- 协议分析
- 数据提取
常用的过滤命令:
过滤IP,如源IP或者目标
1
2
3ip.src eq x.x.x.x or ip.dst eq x.x.x.x
# 或者
ip.addr eq x.x.x.x过滤端口
1
2
3
4tcp.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过滤协议
1
tcp/udp/arp/icmp/http/ftp/dns/ip...
过滤MAC
1
eth.dst == xx:xx:...
包长度过滤
1
2
3
4udp.length == 26 # 这个长度是指udp本身固定长度8加上udp下面那块数据包之和
tcp.len >=7 #指的是ip数据包(tcp下面那块数据),不包括tcp本身
ip.len == 94 #除了以太网头固定长度14,其他都算ip.len,即从ip本身到最后
frame.len == 119 #整个数据包长度,从eth开始到最后http模式过滤
1
2
3
4
5
6
7
8
9http.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"协议分析
Statistics->Protocal Hierarchy
Apply as filter->selected
流汇聚
选中一条后,追踪流
- HTML中直接包含重要信息
- 上传或者下载文件内容,通常包含文件名、hash值等关键信息,常用POST请求上传
- 一句话木马,POST请求,内容包含eval,使用base64加密
数据提取
自动提取
文件->导出对象-》http
手动提取内容
点击想要的数据包,选定media type的位置
右键->导出分组字节流
文件->出分组字节流
选择保存二进制
无线wifi流量包
- 用aircrack-ng检查cap包:
aircrack-ng xxx.cap
- 跑字典
aircarck-ng xxx.cap -w pass.txt
- 用aircrack-ng检查cap包:
USB流量
键盘
可以将该域的值在主面板上显示,键盘数据包的数据长度为8个字节,击键信息集中在第3个字节,每次key stroke都会产生一个keyboard event usbpacket .
a. 第一种方法:导出分组解析结果->为csv
b. 第二种方法:使用ws提供的命令行工具,apply as column 然后tshark
tshark -r usb1.pap -T fields -e usb.capdata > usbdata.txt
c. 用脚本去分析
鼠标
鼠标流量与键盘流量不同,鼠标移动时表现为连续性,与键盘的离散性不一样。但是实际鼠标产生的数据是离散的。所以同样可以把数据抓取出来,构成二维坐标画出轨迹。
鼠标数据包的数据长度为4个字节,第一个字节代表按键,当取0x00时,代表没有按键;为0x01时,代表按左键,为0x02时,代表当前按键为右键。
第二个字节代表左右偏移;当值为正时,代表右移多少像素。当值为负时,代表左移多少像素。
同理,第三个字节代表上下偏移。用脚本去画出鼠标的图
HTTPS流量包文件分析
Preferences->Protocols->SSL->Edit RSA keys list
Crypto
编码:
- ASCII
- BASE64:
- 特征:文本末尾出现1到2个**==**
- URL:
- 就是一个字符的ascii码的十六进制,需要在前面加%。
- 特征:%
- Unicode
- 特征:\uxx
- js
- 使用浏览器输入eval()
加密
- 对称加密
- DES
- AES
- 非对称加密
- RSA
- ECA
- 对称加密