参考文献

  • WireShark数据包分析实战(第三版)

理论

监听网络线路

在交换式网络中进行嗅探

  • 在一个交换式网络中从一个目标设备捕获网络流量的基本方法有四种:端口镜像,集线器接出(hubbing out),使用网络分流器ARP缓存污染攻击.
  • 使用端口镜像,必须能够通过命令行或Web管理界面来访问目标设备所连接的交换机,并且该种交换机必须支持端口镜像的功能以及有一个空闲的端口.
通用端口
制造商 命令
思科 set span <source port> <destination port>
凯创 set port mirroring create <source port> <destination port>
北电 port-mirroring mode mirror-port <source port> monitor-port <destination port>

集线器输出

  • 需要将目标设备和分析系统分段到同一网络段中,然后把它们直接插入到一个集线器上.

  • 操作步骤

    • 找到目标设备所连接的交换机,并将目标设备连接网线从交换机拔掉.
    • 将目标设备的网线插入到你的集线器上.
    • 使用另一个网线,将你的嗅探分析器也连接到集线器上.
    • 从你的集线器连接一根网线到交换机上,将集线器连接到网络上.
  • 这样操作完成后,目标设备和你的嗅探分析器连接到了同一个广播域中,所有从你的目标设备流入流出的网络流量都将在集线器中广播,从而让嗅探分析器可以捕获到这些数据包.

网络分流器

  • 网络分流器是一个硬件设备,可以将它放置在网络布线系统的两个端点之间,来捕获这两个端点之间的数据包.
  • 网络分流器又分为2种基本类型:聚合的和非聚合的.这两种分流器都是安置在两个设备之间来嗅探所有流经的网络通信的.

ARP缓存污染

ARP查询过程
  • 连接到以太网网络上计算机的ARP查询过程,是从一台计算机想要与另一台进行通信是开始的.发起通信的计算机首先检查自己的ARP缓存,查看它是否已经有对方IP地址对应的MAC地址.
  • 如果不存在,它将往数据链路层广播地址FF:FF:FF:FF:FF:FF发送一个ARP广播请求包,作为一个广播数据包,它会被这个特定的以太网广播域上的每一台计算机接收,这个请求包会问道:“某某IP地址的MAC地址是什么?”
  • 没有匹配到IP地址的计算机会简单的丢弃这个请求包.而目标计算机则选择答复这个数据包,通过ARP应答告知它的MAC地址.此时发起通信的计算机就获取到了数据链路层的寻址信息,便可以利用它与远端计算机进行通信,同时将这些信息保存在ARP缓存中,来加速以后的网络访问.
ARP缓存污染
  • ARP缓存污染也被称为ARP欺骗,是一种在交换网络中监听流量的高级方法,这种方法通过发送包含虚假MAC地址(第二层)的ARP消息,来劫持其他计算机的流量.
  • 它通常由攻击者使用,向客户端系统发送虚假地址和数据包,来获取特定的网络流量,或者对目标进行拒绝服务攻击(Dos),然而它可以是一种在交换式网络中捕获目标系统数据包的方法.

实操

使用显示过滤器

  • 协议过滤器
    • arp: 显示所有ARP流量,包括免费ARP,APR请求和ARP应答
    • ip: 显示所有IPv4流量,包括所有IPv4头部嵌入式的包(如ICMP目标不可达的数据包,返回ICMP头后进入IPv4头部)
    • ipv6: 显示所有IPv6流量,包括IPv4包和有IPv6头部嵌入式的包
    • tcp: 显示所有基于TCP的流量数据
  • 应用过滤器:
    • bootp: 显示所有DHCP流量(基于BOOTP)
    • dns: 显示所有DNS流量,包括基于TCP传输和UDP的DNS请求和响应
    • tftp: 显示所有TFTP(简单文件传输协议)流量
    • http: 显示所有HTTP命令,响应和数据传输包.但是不显示TCP握手包,TCP确认包或TCP断开连接的包
    • icmp: 显示所有ICMP流量
  • 字段存在过滤器
    • bootp.option.hostname: 显示所有DHCP流量,包含主机名(DHCP是基于BOOTP)
    • http.host: 显示所有包含HTTP主机名字段的HTTP.该包通常是有客户端发给一个web服务器的请求
    • ftp.request.command: 显示所有FTP命令数据,如USER,PASS,或RETR命令
  • 特有的过滤器
    • tcp.analysis.flags: 显示所有与TCP标识相关的包,包括丢包,重发或者零窗口标志
    • tcp.analysis.zero_window: 显示被标志的包,来表示发送方的缓冲空间已满.

过滤器使用

显示一个地址范围的数据
1
ip.addr > 192.168.11.1 and ip.addr  < 192.168.11.200
显示一个子网IP的数据
1
2
3
4
# 显示IP地址从10.3开始的源IP地址字段和目标IP地址字段的所有数据
ip.addr == 10.3.0.0/16
# 显示IP地址从10.3开始的源IP地址字段和目标IP地址字段的数据,除了10.3.1.1地址
ip.addr == 10.3.0.0/16 and !ip.addr == 10.3.1.1
过滤显示单一的TCP/UDP会话
  • Packet List面板中右键单击任何一个包,并依次选择Conversation Filter|TCP命令
1
(ip.addr eq 112.91.141.205 and ip.addr eq 192.168.11.60) and (tcp.port eq 37941 and tcp.port eq 57227)

使用Chrome生成SSLKeyLogFile抓取HTTPS数据包

1
2
3
4
5
// 启动Chrome时指定生成SSLKeyLogFile
# /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --ssl-key-log-file=/Users/holelin/data/wireshark/tls.log

// 验证文件内容是否被生成
# tail -1000f /Users/holelin/data/wireshark/tls.log
  • 打开Wireshark-->Perferences-->Protocols-->TLS