MISC:流量包取证(pcap文件修复、协议分析、数据提取)
1、流量包修复
这个方向的考点较少
- 当我们用 wireshark 打开流量包时,如果遇到报错,可以试着修复一下再去开。
- pcapfix在线修复工具:http://f00l.de/hacking/pcapfix.php
pcapfix的离线版本:https://github.com/Rup0rt/pcapfix/tree/devel
2、协议分析
总体把握:协议分级+端点统计
过滤筛选:过滤语法+Host,Protocol,contains,特征值
发现异常:特殊字符串+协议某字段+flag 位于服务器中
2.1 wireshark基本操作
根据总体信息迅速把握流量包总体特征, 搞清楚 做什么?
1、捕获过滤器
在捕获里设置
2、显示过滤器(语法)
(1)IP过滤:如ip.addr == 192.168.76.26 and icmp , ip.src ==192.168.104.10, ip.dst==192.168.104.10,
(2)协议过滤:如TCP, 注意http和icmp要小写
(3)端口过滤:如 tcp.port == 80 || udp.port == 80
(4)逻辑运算符:如 && || !
(5)方法过滤:http.request.method==GET ,注意GET要大写
(6)数据包内容过滤:data contains "abcd"
PS:Info列是wireshark组织的说明列并不一定是该数据包中的原始内容
3、分组窗口(协议分析)
选定的数据包的分协议层展示(存在底色的是因为wireshark开启校验和验证而该层协议校验和又不正确所致)
以IP层为例:每一行就对应该层协议的一个字段;中括号行是前一字段的说明。
(1)Frame: 物理层的数据帧概况
(2)Ethernet II: 数据链路层以太网帧头部信息
(3)Internet Protocol Version 4: 互联网层IP包头部信息
(4)Transmission Control Protocol: 传输层T的数据段头部信息,此处是TCP
(5)Hypertext Transfer Protocol: 应用层的信息,此处是HTTP协议
4、二进制源数据
最后一个窗口是选定的数据包的2进制源数据。
左侧是十六进制表示右侧是ASCII码表示。另外在中间窗口中选中某层或某字段,该窗口对应位置也会被高亮。
5、统计分析
(1)Protocol History(协议分级):捕捉文件包含的所有协议的树状分支,可以为分析数据包的主要方向提供依据
(2)Conversation(对话):发生于一特定端点的 IP 间的所有流量。 查看收发大量数据流的 IP 地址。如果是你知道的服务器(你记得服务器的地址或地址范围),那问题就解决了;但也有可能只是某台设备正在扫描网络,或仅是一台产生过多数据的 PC。 - 查看扫描模式(scan pattern)。这可能是一次正常的扫描,如 SNMP 软件发送 ping 报文以查找网络,但通常扫描都不是好事情
(3)EndPoints(端点):列出了 Wireshark 发现的所有 endpoints 上的统计信息
(4)HTTP请求:好用的统计HTTP信息
- 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
2.2 一些例题(各种协议)
HTTP
江苏省领航杯 - 2017:hack
总体观察可以得出: 以HTTP和192.168.173.134为主
详细观察:这是一个在sql注入-盲注时产生的流量包
flag 的方向: 提取出所有的 url 后, 用python辅助得到盲注结果
提取 url: tshark -r hack.pcap -T fields -e http.request.full_uri|tr -s '\n'|grep flag > log
- 1
- 2
- 3
- 4
- 5
HTTPS
HTTPs = HTTP + SSL / TLS. 服务端和客户端的信息传输都会通过 TLS 进行加密,所以传输的数据都是加密后的数据
hack-dat-kiwi-ctf-2015:ssl-sniff-2
打开流量包发现是 SSL 加密过的数据, 导入题目提供的server.key.insecure, 即可解密
- 1
- 2
FTP
默认情况下 FTP 协议使用 TCP 端口中的 20 和 21 这两个端口,其中 20 用于传输数据, 21 用于传输控制信息。
但是,如果采用主动模式,那么数据传输端口就是 20 ;
如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定。
DNS
DNS 通常为 UDP 协议。 查询包只有头部和问题两个部分, DNS 收到查询包后,根据查询到的信息追加回答信息、授权机构、额外资源记录,并且修改了包头的相关标识再返回给客户端。
BSides San Francisco CTF 2017 : dnscap.pcap
发现全部为 DNS 协议, 查询名为大量字符串([\w\.]+)\.skullseclabs\.org
通过 tshark -r dnscap.pcap -T fields -e dns.qry.name > hex提取后,利用 python 转码:
import re
find = ""
with open('hex','rb') as f:
for i in f:
text = re.findall(r'([\w\.]+)\.skull',i)
if text:
find += text[0].replace('.','')
print find
发现几条关键信息:
根据发现的 dnscat, 在qry.name中去除其余字段, 只留下 data 快, 从而合并数据, 再从 16 进制中检索89504e.....6082提取png, 得到 flag
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
WIFI
802.11 是现今无线局域网通用的标准, 常见认证方式有
不启用安全, WEP, WPA/WPA2-PSK(预共享密钥), PA/WPA2 802.1X (radius 认证)
Deauth 攻击:因为WIFI管理数据帧没有被加密,导致攻击者可以伪造管理帧,从而让攻击者可以任意发送“取消认证”数据包来强行切断AP与客户端的连接。用户体验到的状态就是连接不上对于的WIFI了。(路由器支持802.11w协议可以加密管理帧)
实验吧: shipin.cap
从大量的Deauth 攻击基本可以判断是一个破解 wifi 时的流量攻击
同时也成功发现了握手包信息, 接下来跑密码
linux : aircrack 套件
windows : wifipr ,速度比 esaw 快
得到密码88888888在 wireshark 中Edit -> Preferences -> Protocols -> IEEE802.11 -> Edit以key:SSID形式填入即可解密 wifi 包看到明文流量
- 1
- 2
- 3
- 4
- 5
- 6
- 7
USB
鼠标协议:每一个数据包的数据区有四个字节,第一个字节代表按键,当取 0x00 时,代表没有按键、为 0x01 时,代表按左键,为 0x02 时,代表当前按键为右键。
第二个字节可以看成是一个 signed byte 类型,其最高位为符号位,当这个值为正时,代表鼠标水平右移多少像素,为负时,代表水平左移多少像素。
第三个字节与第二字节类似,代表垂直上下移动的偏移。
键盘协议:键盘数据包的数据长度为 8 个字节,击键信息集中在第 3 个字节。根据 data 值与具体键位的对应关系可以参考ctf-wiki. 可从数据包恢复出键盘的案件信息
USB 协议的数据部分在 Leftover Capture Data 域之中
在 Mac 和 Linux 下可以用 tshark 命令可以将 leftover capture data 单独提取出来,命令如下:
tshark -r example.pcap -T fields -e usb.capdata //如果想导入usbdata.txt文件中,后面加上参数:>usbdata.txt
Windows 下装了 wireshark 的环境下,在 wireshark目录下有个 tshark.exe
tshark.exe -r example.pcap -T fields -e usb.capdata //如果想导入usbdata.txt文件中,后面加上参数:>usbdata.txt
命令语法参考:
https://www.wireshark.org/docs/man-pages/tshark.html
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
3、数据提取
数据提取:字符串取+文件提取
这一块是流量包中另一个重点, 通过对协议分析, 找到了题目的关键点, 如何提取数据成了接下来的关键问题。
wireshark
- 自动分析:file -> export objects -> http
- 手动分析:file->export selected Packet Bytes
tshark(wireshark命令行版)
- 命令
tshark -r **.pcap –Y ** -T fields –e ** | **** > data
通过-Y过滤器 (与 wireshark 一致), 然后用-T filds -e配合指定显示的数据段 (比如 usb.capdata)
-e后的参数不确定可以由 wireshark 右击需要的数据选中后得到 - 一个例子:
鼠标协议中数据提取
tshark -r capture.pcapng -T fields -e usb.capdata > data2.txt
- 一个例子
采用 tshark 进行提取,提取 dns 中的数据, 筛选具体报文形式\w{4,}.asis.io
tshark -r forensic_175_d78a42edc01c9104653776f16813d9e5 -T fields -e dns.qry.name -e dns.flags|grep 8180|awk '{if ($1~/\w{4,}.asis.io/) print $1}'|awk -F '.' '{print $1}'|tr -d '\n' > png
//打印http协议流相关信息
tshark -s 512 -i eth0 -n -f 'tcp dst port 80' -R 'http.host and http.request.uri' -T fields -e http.host -e http.request.uri -l | tr -d '\t'
注释:
-s: 只抓取前512字节;
-i: 捕获eth0网卡;
-n: 禁止网络对象名称解析;
-f: 只捕获协议为tcp,目的端口为80;
-R: 过滤出http.host和http.request.uri;
-T,-e: 指的是打印这两个字段;
-I: 输出到命令行界面;
//实时打印当前mysql查询语句
tshark -s 512 -i eth0 -n -f 'tcp dst port 3306' -R 'mysql.query' -T fields -e mysql.query
注释:
-R: 过滤出mysql的查询语句;
//导出smpp协议header和value的例子
tshark -r test.cap -R '(smpp.command_id==0x80000004) and (smpp.command_status==0x0)' -e smpp.message_id -e frame.time -T fields -E header=y >test.txt
注释: -r: 读取本地文件,可以先抓包存下来之后再进行分析; -R: smpp...可以在wireshark的过滤表达式里面找到,后面会详细介绍; -E: 当-T字段指定时,设置输出选项,header=y意思是头部要打印; -e: 当-T字段指定时,设置输出哪些字段; >: 重定向;
//统计http状态
tshark -n -q -z http,stat, -z http,tree 注释: -q: 只在结束捕获时输出数据,针对于统计类的命令非常有用; -z: 各类统计选项,具体的参考文档,后面会介绍,可以使用tshark -z help命令来查看所有支持的字段;
http,stat: 计算HTTP统计信息,显示的值是HTTP状态代码和HTTP请求方法。 http,tree: 计算HTTP包分布。 显示的值是HTTP请求模式和HTTP状态代码。
//抓取500个包提取访问的网址打印出来
tshark -s 0 -i eth0 -n -f 'tcp dst port 80' -R 'http.host and http.request.uri' -T fields -e http.host -e http.request.uri -l -c 500
注释: -f: 抓包前过滤; -R: 抓包后过滤; -l: 在打印结果之前清空缓存; -c: 在抓500个包之后结束;
//显示ssl data数据
tshark -n -t a -R ssl -T fields -e "ip.src" -e "ssl.app_data"
//读取指定报文,按照ssl过滤显示内容
tshark -r temp.cap -R "ssl" -V -T text 注释: -T text: 格式化输出,默认就是text; -V: 增加包的输出;//-q 过滤tcp流13,获取data内容
tshark -r temp.cap -z "follow,tcp,ascii,13"
//按照指定格式显示-e
tshark -r temp.cap -R ssl -Tfields -e "ip.src" -e tcp.srcport -e ip.dst -e tcp.dstport
//输出数据
tshark -r vmx.cap -q -n -t ad -z follow,tcp,ascii,10.1.8.130:56087,10.195.4.41:446 | more
注释: -t ad: 输出格式化时间戳;
//过滤包的时间和rtp.seq
tshark -i eth0 -f "udp port 5004" -T fields -e frame.time_epoch -e rtp.seq -o rtp.heuristic_rtp:true 1>test.txt 注释: -o: 覆盖属性文件设置的一些值;
//提取各协议数据部分
tshark -r H:/httpsession.pcap -q -n -t ad -z follow,tcp,ascii,71.6.167.142:27017,101.201.42.120:59381 | more
- 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
- 46
- 47
文章来源: gwj1314.blog.csdn.net,作者:小哈里,版权归原作者所有,如需转载,请联系作者。
原文链接:gwj1314.blog.csdn.net/article/details/126929391
- 点赞
- 收藏
- 关注作者
评论(0)