MISC:流量包取证(pcap文件修复协议分析数据提取)

Posted 小哈里

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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信息

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

HTTPS
HTTPs = HTTP + SSL / TLS. 服务端和客户端的信息传输都会通过 TLS 进行加密,所以传输的数据都是加密后的数据

hack-dat-kiwi-ctf-2015:ssl-sniff-2
打开流量包发现是 SSL 加密过的数据, 导入题目提供的server.key.insecure, 即可解密

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 

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 包看到明文流量

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


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 中的数据, 筛选具体报文形式\\w4,.asis.io
    tshark -r forensic_175_d78a42edc01c9104653776f16813d9e5 -T fields -e dns.qry.name -e dns.flags|grep 8180|awk 'if ($1~/\\w4,.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

以上是关于MISC:流量包取证(pcap文件修复协议分析数据提取)的主要内容,如果未能解决你的问题,请参考以下文章

MISC:流量包取证(pcap文件修复协议分析数据提取)

有关流量分析和内存取证的

[Misc] 取证分析/隐写学习

Wireshark流量分析软件解析pcap格式数据包的每条数据流是否双向传输的?

Wireshark流量分析软件解析pcap格式数据包的每条数据流是否双向传输的?

将PCAP转换为Json文件的神器:joy(安装篇)