Wireshark and tcpdump

Wireshark

封包?数据帧?报文?

  • 封包列表
    • 捕获时间
    • 协议
    • 源、目的地址
  • 封包详细信息

常见协议:network_protocol

显示过滤器

针对已经捕获的报文进行过滤。 一条基本的表达式由过滤项、过滤关系、过滤值组成 ,例如:

过滤项 关系 过滤值
ip.src == 192.168.1.1
协  协议     确定值
议  字段

过滤项

  • 协议
  • 协议字段

常用字段

  • address
    • 源、目的 IP
    • 源、目的 MAC
    • 网段
  • port
    • 源、目的 IP
  • length
    • 报文长度
  • contains
    • 查询 payload 中的关键字

过滤关系

  • 大于
    • gt
    • >
  • 大于等于
    • ge
    • >=
  • 小于
    • lt
    • <
  • 小于等于
    • le
    • <=
  • 等于
    • eq
    • ==
  • 不等于
    • ne
    • !=

复合表达式

    • and
    • &&
    • or
    • ||
    • not
    • !
  • 异或
    • xor
    • ^^
  • 分片
    • [..]

过滤值

  • 应满足过滤项的格式

例子:

eth.src == 04:f9:38:ad:13:26
即筛选源 MAC 是 04:f9:38:ad:13:26 的包

eth.type == 0x00
筛选网络层使用 ip 协议的数据包

ip.src != 192.168.1.1
筛选源地址是 192.168.1.1 之外的数据包

ip.addr = 192.168.1.0/24
筛选出这一网段的数据包

http contains "xxx"
查询 http payload 报文中包含 xxx 字符串的包

http.request.method == GET
筛选 http 包中的 get 请求数据包

ip.src == 192.168.1.1 && tcp[13]&2
筛选源地址为 192.168.1.1 并且类型为 SYN 的数据包

捕获过滤器

提前设置好规则,只捕获符合过滤规则的报文。伯克利包捕获表达式: 一条基本的表达式由捕获项、捕获参数、捕获值组成 ,例如:

捕获项  参数   捕获值
ip  src host 192.168.1.1
协  数据       确定值
议  流向

捕获项

  • 协议
  • 数据流向

协议默认为所有协议,流向默认为 src or dst

捕获参数

  • host (default)
  • net
  • port

捕获值

应满足捕获项的格式

例子:

tcp src portrange 0-65535 and tcp dst port 80
捕获源端口为 0-65535 且目的端口为 80 的流量

vlan 10 and ip src net 192.168.1.0/24
捕获 vlan id 为 10 且源网段为 192.168.1.0/24 的所有流量

port 25 and portrange 110-143
捕获电子邮件流量

数据包解析

  • Protocol in frame

数据包整体架构,与五层模型相对应

  • Type

代表网络层应使用何种协议模块来处理

  • Protocol

代表传输层应使用何种模块来处理

  • Dst Port

代表应用层应使用的协议及标识连接符

  • User-Agent

用户标识

  • Server

中间件类型

追踪流 -> http 流

捕获远程主机数据包

  • 需要在被远程捕获的设备上安装 WinPcap,并且该程序运行此应用程序
  • 网络可达,默认 2002 端口

捕获->选项->管理接口->远程接口

认证方为 Windows 用户名及密码, 必须使用账密登录?

HTTPS 取证

  1. 用服务端的私钥 编辑->首选项->Protocol->TLS->RSA keys list
  2. 用客户端的私钥 通过设置环境变量截取浏览器的 master_secret, 进而实现解密 HTTPS 的目的,具体方式(Windows)环境变量中新建用户变量 SSLKEYLOGFILE=C:\path\sslkey.log 文件,之后再 Wireshark 中 TLS 配置中制定该文件位置即可

抓到的包可参照 SSL Handshake 阶段交换的信息 进行分析。

图片取证

  1. 利用 http contains xxx 定位到请求图片的包
  2. 追踪 TCP/HTTP
  3. 以原始数据 Sava as 为文件
  4. 使用文本编辑器去除报文头
  5. 改后缀名为图片
wireshark_jepg_obtain_evidence_1.png
wireshark_jepg_obtain_evidence_2.png

AIM 取证

类比于聊天软件的取证分析。

Wireshark 支持 AIM 解密,右键 -> decode as -> TCP port 443 … AIM,即可解密 AIM 数据包。

wireshark_aim_obtain_evidence_1.png

前置问题

  • What is the name of Ann’s IM buddy?
  • What was the first comment in the captured IM conversation?
  • What is the name of the file Ann transferred?
  • What is the magic number of the file you want to extract(first four bytes)?
  • What was the MD5sum of the file?
  • What is the secret recipe?

1

解密 AIM 数据包后,找到协议为 AIM Message 的数据包

wireshark_aim_obtain_evidence_2.png

Buddy 为 Sec558user1

2

从 1 中的包中的 Message Block 中可以得到第一条消息的内容,即

ValueMessage: Here's the secret recipe... I just downloaded it from the file server. Just copy to a thumb drive and you're good to go &gt;:-)

3

输入 data 进行筛选,跟踪 TCP 流,找到文件名

wireshark_aim_obtain_evidence_3.png

文件名为 recipe.docx

4

选择 Ann 发送的数据,以原始数据 save as -> recipe.bin

wireshark_aim_obtain_evidence_4.png
wireshark_aim_obtain_evidence_5.png

magic number 为 50 4B 03 04

5

计算文件 MD5。

6

删除 magic number 之前的数据,另存为 docx 文件即可

wireshark_aim_obtain_evidence_6.png

邮件取证

以 SMTP 为例子,若要解决用户认证,如果没加密的话可根据 334 状态码可以找到用户名和密码, base64 解码后就可得到用户名和密码

YW5uQGFiYy5kZWY=
YWRtaW4=

base64 解码后得到

ann@abc.def
admin
wireshark_email_obtain_evidence_1.png

邮件基本信息、正文

wireshark_email_obtain_evidence_2.png

邮件附件

wireshark_email_obtain_evidence_3.png

附件

tcpdump

Linux 系统下的抓包程序,数据包流程: packet -> tcpdump -> iptables -> application -> iptables -> tcpdump -> packet

tcpdump <option> <proto> <dir> <type>

常用参数:

Argument ­­ Caption
-i [interface]   指定网络接口(网卡)
-n   不进行主机解析,还可以 -nn, -N
-c [cnt] --count 指定抓取的包数
-w [file.pcap] --write 将抓到的包写入指定文件
-r [file.pcap] --read 读取抓包文件
-t   时间的显示,还可以 -tt, -ttt, -tttt
-v --verbose 详细输出,还可以 -v, -vv, -vvv
-x   数据包头部显示为十六进制,还可以 -x, -xx, -X, -XX
-Q [in,out,inout] --direction 指定入方向或出方向或不限
-A   以 ASCII 码显示数据包
-l   基于行的输出
-q   简洁地打印输出
-s [number]   指定截取的字节数,为 0 表示截取全部报文
-S   使用绝对序列号
-C [file-size]   保存到文件中时检查此文件的大小,超过就另建文件
-F [file]   使用文件中的内容作为过滤表达式
-D   列出可用网络接口
-e   每行打印输出将包含数据包的数据链路层头部信息
-E   解密 IPsec 数据
-L [interface]   列出指定网络接口所支持的数据链路层
-Z [user]   抓包时受权限的限制
-d   打印易读格式,还可以 -dd, -ddd ,分别为 C ,十进制

捕获过滤器可以抓取符合条件的数据包。

还有一些关键字可以使用,如:

  • if: 网络接口名
  • proc: 进程名
  • pid: 进程 pid
  • svc: service class
  • dir: 方向 in, out
  • eproc: effective process name
  • epid: effective process ID
湘ICP备19014083号-1