CTF MISC解题思路总结篇
Posted Dalean.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CTF MISC解题思路总结篇相关的知识,希望对你有一定的参考价值。
本文章适合入门,高手就不需要看了
本人自己总结,不足勿喷,感谢!!!希望可以帮到你!!
工具包在最下方链接中
判断文件类型
文件操作
判断文件类型
若不知道后缀名,无法打开文件
File 命令(linux)
语法 :
file 文件名
识别为jpeg图片
winhex工具(windows)
一个十六进制编辑器
通过查看文件头判断文件类型(最好记得一些常见的,看到就要反应过来)
文件头残缺/错误
此时无法判断文件类型
需要使用winhex,010ediert,notepadd++对文件头进行修改或者添加
没修改前 使用flie 命令查看会显示data
如
文件分离操作
binwalk工具(Linux)
可以快速分辨文件是否有多个文件组成,并对其进行分离(发现压缩包会自动解压)
语法:
分析文件 binwalk 文件名
分离文件 binwalk -e 文件名
Foremost
当binwalk无法正常分离可以使用foremost将目标文件分解到我们设置的目录下
并按文件类型给分类。
语法
Foremost 文件名 -o 输出目录名
dd(较少用)
当文件自动分离出错或者因为其他原因无法自动分离
语法
dd if=源文件 of=目标文件名 bs=1 count=读多少块 skip=开始分离的额字节数
参数说明
if=file #输入文件名,缺省为标准输入
of=file #输出文件名,缺省为标准输出
bs=bytes #同时设置读写快大小为bytes,可替代ibs和obs。
skip=blocks #从输入文件开始跳过blocks个块后开始复制
例如
源文件为1234567890abcdefg
winhex
windows下可以利用winhex程序进行分离,找到要分离的部分手动复制分离即可
010Editor
比winhex方便,自动划分了文件头啥的,做伪加密很方便,同时可以右键直接保存成文件
文件合并操作
linux下文件合并
语法 cat 合并文件名 > 输出的文件
这类题一般会给出md5值来让你验证是否合成正确
完整性检测: Linux下计算文件的md5:
语法:md5sum 文件名
windows下文件合并
语法: copy /B 合并的文件(文件间用加号来连接) 输出的文件
完整性检测:
windows下计算文件md5
certutil -hashfile 文件名 md5
文件隐写
直接将key写在文件中,再文件的开头或者结尾部分,若写在文件中间,需要通过搜索查找
windows下查找隐写内容
1 winhex/010Editor
2 Notepad++
图片隐写的常见隐写方法
查看图片不同通道:
(像素三原色RGB)工具:stegsolve
GIF图多帧隐藏工具:
stegsolve、Photoshop、firework,部分在线网站有时候也蛮好用的(这里就不给出来了)
(1)颜色通道隐藏
(2)不同帧图信息隐藏
(3)不同帧对比隐藏
Exif信息隐藏工具:
windows上右击打开图片属性
图片修复 工具 winhex
(1)图片头修复
(2)图片尾修复
(3)CRC校验修复
(4)长、宽、高度修复
最低有效位LSB隐写 工具:stegsolve、zsteg、wbstego4
LSB(最低有效位)
LSB替换隐写基本思想是用嵌入的秘密信息取代载体图像的最低比特位原来的七个高位平面与代替秘密星系的最低平面合成隐藏信息的新图形。Stegsove是最常用的工具,有时zsteg更方便
图片隐写常用工具(具体用法)
Our Secret
一款用于文件加密的软件
Firework
查看隐写的图片文件,多帧gif啥的都可以使用此工具查看
Stegsove
两张图片大小外观像素等基本相同时可以考虑对两个文件进行像素RGB值 XOB ADD SUB等操作,查看是否有有用的信息
数据提取功能
zsteg工具(Linux)
需要下载
语法:
gem install zsteg
再使用
语法:
zsteg 文件名
例如:会将最低有效位的数据显示出来
wbsteg04工具
解密lsp加密的文件,注意他所要求的文件类型,得到解密之后的文件
python脚本处理
此时脚本文件要与目标文件放在同一目录下 运行python即可,这个对编程有一定要求
TweakPNG工具
使用场景:文件头正常但无法打开文件,可用此工具修改CRC校验值
一款简易用的PNG图像浏览工具,允许查看和修改一些PNG图像文件的元信息储存。
例如:
也有可能是高度和宽度错误,发现改了crc也打不开,此时需要利用crc去计算长和宽并利用16进制编辑器去修改
Bftools (windows)
用于解密图片信息
语法:Bftools.exe decode braincopter 需要解密的文件名称 -output 输出文件名
Bftools.exe run 上一步的输出文件名
SilentEye(Windows)
一款将文字或者文件隐藏到图片中的解密工具
stegdetect工具探测加密方式(jpg文件)
语法:
stegdetect xxx.jpg
stegdete -s 敏感度(检测更准确) xxx.jpg
jphide
基于最低有效位LSP的JPEG格式图像隐写算法
Outguess
使用场景:Stegdetect识别出来或题目说是outguess加密的图片
语法:
outguess -r 要解密的文件名 输出的文件名
该工具需要编译后使用
./configure&&make&&make install
F5
使用场景:Stegdetect识别出来或题目说是F5加密的图片
语法:
java Exrtact 要解密的文件 -p 密码
CQR.exe
使用场景:对二维码处理
若某一部分被覆盖,该工具有时候可以自动识别,如果识别失败需要用ps
或者画图等工具补全(其实可以用手机微信)
若二维码颜色反了,中间为白或者颜色不对则需要画图工具取反色(不能是画笔状态,要选择状态),再扫描
音频隐写
一般使用Audacity处理
有些隐写藏在波形图中 例如攻防世界攻防世界 很普通的Disco_Dadeln。的博客-CSDN博客
有些隐写藏在频谱图中 例如攻防世界的intoU攻防世界 intoU 详细思路_Dadeln。的博客-CSDN博客
还可能需要调整采样率信息才会显示完全
压缩文件处理
1.伪加密
使用场景:文件为伪加密文件
操作方法:使用十六进制编辑器打开文件
zip无加密
压缩源文件数据区的全局加密应当为00 00
且压缩源文件目录区的全局方式位标记应当为00 00
假加密
压缩源文件数据区的全局加密应当为00 00
且压缩源文件目录区的全局方式位标记应当为09 00
真加密
压缩源文件数据区的全局加密应当为09 00
且压缩源文件目录区的全局方式位标记应当为09 00
zip 将从504B0102 后面的九,十位为00 00
rar 将24位改为00
2.暴力破解
通常用ARCHPR.exe来破解zip
使用场景:windows下破解加密过的
zip文件
(1)攻击类型 选择暴力破解,暴力破解文件
一般适合于压缩包解密没给任何提示,在这之前要先判断是不是伪加密,这种方法如果密码数位较多消耗时间较长,除非没有其他办法,不建议长时间去暴力破解一个题
(2)攻击类型 选择掩码 可以进行更复杂的暴力破解
比如知道前三位是abc,后三位位数字,则选择攻击类型为掩码,在掩码处输入abs???,破解范围为数字开始破解,???将会被数字代替进行破解 例如攻防世界的再见李华
(3)攻击类型 明文攻击
明文攻击指知道加密的zip文件的部分明文内容,利用这些内容推测处密钥并解密zip报文的攻击方法。
相比于暴力破解这种方法在破解复杂密码是效率更高。
有时破解不了口令,但能找到加密秘钥,可以直接将文件解密,点击保存解密后的文件
使用明文攻击时注意
1.明文文件压缩后CRC值与加密压缩包中的文件一致
2.明文文件要锁算法要与加密压缩文件的压缩算法一致
3.RAR文件格式错误,导致解压不完全
有时候给出的RAR文件的各个头部会故意给错无法识别出文件
流量取证技术
通常比赛会提供PCAP文件
总体把握:
- 协议分级
- 站点统计
过滤筛选:
- 过滤语法
- Host,Protocol,contains,特征值
发现异常:
- 特殊字符串
- 协议某字段
- flag位于服务器中
数据提取:
- 字符串取
- 文件提取
总的来说比赛中的流量分析可以概括为以下三个方向:
- 流量包修复
- 协议分析
- 数据提取
工具Wireshark的使用
过滤器
常用的过滤命令:
1,过滤ip,如源ip或者目标x.x.x.x ip.src eq(==) x.x.x.x or ip.dst eq(==) x.x.x.x 或者 ip.addr eq(==) x.x.x.x
2.过滤端口
tcp.port ==80
tcp.dstport==80只显示tcp协议目标端口为80的流量包
tcp.srcport==80只显示tcp协议源端口为80的流量包
tcp.port>=1 and tcp.port<=80
3.过滤协议
tcp/udp/arp/icmp/http/ftp/ip等
4.过滤Mac
eth.dst == mac地址
5.包长度过滤
udp.length==26 这个长度是指udp本身长度8加数据包长度之和
tcp.len >=7 指ip数据包,不包括tcp本身
ip,len 除固定长度14
frame.len==119 从eth到最后
6.http模式过滤
http.request.method =="get" 筛选http get请求
http.request.method =="post"筛选http post请求
http.request.url =="/img/logo-edu.gif"筛选访问链接的请求
http contains "get"
http contains "http/1"
http contains "flag" 包内包含flag
tcp contains "flag"
7.协议分级 看数据包主要传什么
8.流汇聚 将http或tcp流汇聚查看其内容(部分题目flag就藏在里面)
9.数据提取 导出传输文件内容
文件->导出对象——>http
无线流量
aircrack-ng 检查cap包
语法:
aircrack-ng xxx.cap
使用 aircrack-ng xxx.cap 字典名 爆破WiFi钥匙
usb键盘流量
原来数据部分在数据包中需要设置为列
leftover capture data中值与具体键位的对应关系
可以参考
csv也为一种表格形式,将数据保存为表格
用写好的Python脚本将数据含义输出
键盘流量脚本
import os
os.system("tshark -r test.pcapng -T fields -e usb.capdata > usbdata.txt")
normalKeys = "04":"a", "05":"b", "06":"c", "07":"d", "08":"e", "09":"f", "0a":"g", "0b":"h", "0c":"i", "0d":"j", "0e":"k", "0f":"l", "10":"m", "11":"n", "12":"o", "13":"p", "14":"q", "15":"r", "16":"s", "17":"t", "18":"u", "19":"v", "1a":"w", "1b":"x", "1c":"y", "1d":"z","1e":"1", "1f":"2", "20":"3", "21":"4", "22":"5", "23":"6","24":"7","25":"8","26":"9","27":"0","28":"<RET>","29":"<ESC>","2a":"<DEL>", "2b":"\\t","2c":"<SPACE>","2d":"-","2e":"=","2f":"[","30":"]","31":"\\\\","32":"<NON>","33":";","34":"'","35":"<GA>","36":",","37":".","38":"/","39":"<CAP>","3a":"<F1>","3b":"<F2>", "3c":"<F3>","3d":"<F4>","3e":"<F5>","3f":"<F6>","40":"<F7>","41":"<F8>","42":"<F9>","43":"<F10>","44":"<F11>","45":"<F12>"
shiftKeys = "04":"A", "05":"B", "06":"C", "07":"D", "08":"E", "09":"F", "0a":"G", "0b":"H", "0c":"I", "0d":"J", "0e":"K", "0f":"L", "10":"M", "11":"N", "12":"O", "13":"P", "14":"Q", "15":"R", "16":"S", "17":"T", "18":"U", "19":"V", "1a":"W", "1b":"X", "1c":"Y", "1d":"Z","1e":"!", "1f":"@", "20":"#", "21":"$", "22":"%", "23":"^","24":"&","25":"*","26":"(","27":")","28":"<RET>","29":"<ESC>","2a":"<DEL>", "2b":"\\t","2c":"<SPACE>","2d":"_","2e":"+","2f":"","30":"","31":"|","32":"<NON>","33":"\\"","34":":","35":"<GA>","36":"<","37":">","38":"?","39":"<CAP>","3a":"<F1>","3b":"<F2>", "3c":"<F3>","3d":"<F4>","3e":"<F5>","3f":"<F6>","40":"<F7>","41":"<F8>","42":"<F9>","43":"<F10>","44":"<F11>","45":"<F12>"
nums = []
keys = open('1.txt')#你的文本文件
for line in keys:
#print(line)
if len(line)!=17: #首先过滤掉鼠标等其他设备的USB流量
continue
nums.append(line[0:2]+line[4:6]) #取一、三字节
#print(nums)
keys.close()
output = ""
for n in nums:
if n[2:4] == "00" :
continue
if n[2:4] in normalKeys:
if n[0:2]=="02": #表示按下了shift
output += shiftKeys [n[2:4]]
else :
output += normalKeys [n[2:4]]
else:
output += '[unknown]'
print('output :' + output)
usb鼠标流量分析
鼠标流量表现为连续性,与键盘离散性不同,同样需要吧数据抓出来,在二维坐标内显示轨迹
导出数据方法与键盘流量的方法相同,导出后用python跑出坐标
鼠标流量分析脚本
nums = []
keys = open('data.txt','r') //此处更改数据导出的文件名
posx = 0
posy = 0
for line in keys:
if len(line) != 12 :
continue
x = int(line[3:5],16)
y = int(line[6:8],16)
if x > 127 :
x -= 256
if y > 127 :
y -= 256
posx += x
posy += y
btn_flag = int(line[0:2],16) # 1 for left , 2 for right , 0 for nothing
if btn_flag == 1 :
print posx , posy
keys.close()
接着用gnuplot工具把图画出来
语法(linux下):
gnuplot 进入工具
plot “上一步导出的坐标文件”
https流量包分析
https=http+TLS
http:80 https:443
https流量经过TLS协议加密,需要导入key(题目会提示)才能看到原始的http流量
导入key后,出现http数据包,就可以进行追踪流等其他操作了
感谢阅读!!!
ctf工具包 提取码:ctf6
以上是关于CTF MISC解题思路总结篇的主要内容,如果未能解决你的问题,请参考以下文章