流量分析

wireshark 介绍

Wireshark(前称 Ethereal)是一个网络封包分析软件

网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark 使用 WinPCAP 作为接口,直接与网卡进行数据报文交换

捕捉过滤器

数据经过的第一层过滤器, 它用于控制捕捉数据的数量,以避免产生过大的日志文件,用于决定将什么样的信息记录在捕捉结果中,需要在开始捕捉前设置

image.png
image.png

显示过滤器

在 CTF 中基本都是给一个数据包,所以基本都是用显示过滤器来筛选

基本语法

语法 protocol . string1 . string2 comparison operator value logical operations other expression
例子 http . request . method == “post” or icmp.type

string1 和 string2 是可选的,依据协议过滤时,可直接通过协议来进行过滤,也能依据协议属性值进行过滤

实际使用

打开一个数据包,点击** 表达式 **会看到很多字段

image.png
image.png
image.png
image.png

也可以直接输入 http 就会自动过滤

image.png
image.png

http.request.method==GET
这样就可以过滤用 GET 方式请求的数据

image.png
image.png

过滤数据

按照协议过滤:
snmp || dns || icmp

按照协议属性值:

ip.src == 10.230.0.0/16 显示来自 10..230 网段的封包

tcp.port == 25 显示来源或目的 TCP 端口号为 25 的封包

tcp.dstport == 25 显示目的 TCP 端口号为 25 的封包

http.request.method == “POST” 显示 post 请求方式的 http 封包

http.host == “example.com” 显示请求域名为 example.com 的 http 封包

内容过滤语法:

tcp contains “http” 显示 payload 中包含”http”字符串封包

http.request.url contains “online” 显示请求的 url 包含”online”的 http 封包

还有个 matches 来做正则匹配,以后补充

搜索字符串:ctrl+F 选择分组详情、字符串,然后输入想找的查找就可以

image.png
image.png

右键 -> 追踪 -> TCP 流,可以跟踪 TCP 会话的过程

image.png
image.png
image.png
image.png

有时候这里会有一些 zip、png、jpg 的信息,如果熟悉文件头的话一眼就能看出来,用下面的 save as…就可以保存成出来,然后用 winhex 保存成图片或压缩包

wireshark 着色规则

image.png
image.png

Tshark

在 wireshark 命令行里的工具
常用参数: -r 设置读取本地文件
-R

键盘流量分析

数据长度为八个字节

USB 流量分为键盘流量和鼠标流量。

键盘数据包的数据长度为 8 个字节,击键信息集中在第 3 个字节

映射关系

https://usb.org/sites/default/files/documents/hut1_12v2.pdf

可以用 tshark 命令可以将 leftover capture data 进行提取

tshark -r 流量包 -T fields -e usb.capdata > usbdata.txt

提取出来后根据映射关系还原即可

状态不好,以后再弄

wireshark 实战

《wireshark 与 metasploit 实战指南》学习

环境搭建

添加一个 w4sp-lab 用户
useradd -m w4sp-lab -s /bin/bash -G sudo -U
然后 passwd w4sp-lab ,设置好密码之后,使用 w4sp-lab 用户登录
把这个文件拷到虚拟机里面
w4sp-lab.zip

直接用我这个压缩包里的文件,我改好了,用 parrot 反正是安装成功了(虽然不稳定)

然后在文件夹里面:sudo python w4sp_webapp.py
等待安装就好了,成功以后有个 setup 点一下就成了下面这样了

中间人攻击

ARP 中间人攻击

首先 sudo python w4sp_webapp.py,把环境拉起来,然后访问 127.0.0.1:5000

在一个新的终端里面打开 msf(命令:msfconsole),使用:use auxiliary/spoof/arp/arp_poisoning
补充:打开 msf 的时候加个 sudo,不然待会
You don’t have permission to capture on that device (socket: Operation not permitted)

show options 看一下需要的参数,我们需要设置 DHOSTS 和 SHOSTS 以及 LOCALSIP(需要用 show advanced 查看)

image.png
image.png

在网络拓扑里面查看一下 我们攻击的目标 vic1 的 IP,set DHOSTS 192.100.200.167

image.png
image.png

在终端中查看一下我们的网关:set SHOSTS 192.100.200.1

image.png
image.png

把 LOCALSIP 设置为 本机的 ip:set LOCALSIP 192.100.200.191

打开 wireshark 抓包看一下
我。。卡死了

重新开一下,同时记录一下各个设备的 ip

w4sp_lab(本机) vic1(靶机) ftp2(另一网段的 ftp)
192.100.200.191 192.100.200.174 10.100.200.159

sudo setcap ‘CAP_NET_RAW+eip CAP_NET_ADMIN+eip’ /usr/bin/dumpcap
使用这条命令可以让 dumpcap 无需 root 权限即可使用原生 sockets

抓包,选择 w4sp-lab 那个

image.png
image.png

同时用 arp-scan -l 可以看到 vic1 的 MAC 地址是 ea:d6:b0:9a:94:10

image.png
image.png

正常的时候 ARP 流量是这样的,只有 vic1 这个机器不断地在询问

image.png
image.png

当我们进行 ARP 欺骗之后:

exploit 开始攻击(之前的图)

image.png
image.png
image.png
image.png

本机开始不断地向 vic1 发送假的信息(可以看到不停发送 arp 信息的就是本机)

image.png
image.png

同时,vic1 发送给另一个网段的 ftp 服务器的信息直接发到了我们这里

image.png
image.png

针对这种攻击,可以使用 arp -s 添加静态的 arp 表
arp -s 192.100.200.1 00:00:5e:00:01:ee

DNS 中间人攻击

通过篡改 DNS 流量,使得 DNS 响应把特定主机名解析给攻击者的机器,而不是主机名真正对应的机器
除非系统设置了静态 IP,否则 DNS 服务器的信息,是作为 DHCP 服务器的一个参数一起获得的

DHCP 协议工作步骤:

1、客户端发起一个”Discovery(发现)”广播:有没有 DHCP 服务器?
2、DHCP 服务器向客户端回一个”Offer(供应)”:你准备要这个 IP 嘛?
3、客户端对收到的 IP 地址发送”Request(请求)”:我准备要这个 IP!
4、DHCP 服务器最后回复”Acknowledgment(确认)”:这个 IP 归你了!

除了 IP 地址,DHCP 服务器还会提供其他信息,例如分配的 IP 可以保留多久(租期),同时也提供 DNS 服务器信息
我们打算用 msf 伪造我们的机器位假的 DHCP 和 DNS 服务器提供出去

先伪造 DHCP:
sudo msfconsole,然后 use auxiliary/server/dhcp

分别设置 DNSSERVER、SRVHOST 位本机 IP,NETMASK 设置为 255.255.255.0
set DNSSERVER 192.100.200.191 假的 DNS 服务器地址
set SRVHOST 192.100.200.191 假的 DHCP 服务器的地址
set NETMASK 255.255.255.0 网络掩码

image.png
image.png

再使用 use auxiliary/server/fakedns 来伪造 DNS 服务器

分别攻击参数
set TARGETACTION FAKE 对解析的域名采取什么动作,FAKE 表示假冒,如果想测试一下这个模块可以使用 BYPASS(放行)这样会转发给合法的 DNS 服务器
set TARGETDOMAIN ftp1.labs 希望解析的域名
set TARGETHOST 192.100.200.191 用于解析 DNS 查询的服务器

image.png
image.png

过一会就会收到每条 DNS 查询信息了

image.png
image.png

如果不想显示这些东西可以 jobs -l 看一下在运行的任务

image.png
image.png

然后 jobs -k 1(删掉 id 位 1 的任务)

image.png
image.png

然后 exploit -q 静默运行

image.png
image.png

可以看到 vic1 向我们的机器查询 ftp1.labs 的地址

image.png
image.png

我们的机器又告诉他 ftp1.labs 是在 192.100.200.191 也就是本机 ip

image.png
image.png

但问题是本机并没有 FTP 服务器,vic1 过来没人搭理他,我们需要再设置一个假的 FTP 服务器来捕获用户的身份信息

use auxiliary/server/capture/ftp,甚至不需要什么参数,直接 exploit 就可以了

image.png
image.png

这样就可以用 wireshark 找到他了

image.png
image.png

(然而 msf 的终端里也会显示)

image.png
image.png

攻击相关

NMAP

本机 攻击机(ftp1)
192.100.200.191 192.100.200.172

使用 nmap 对 ftp1 进行扫描…
实在太卡了,这里就用 kali 扫 DC-5 抓包分析吧
141 是 kali 的 IP,163 是 DC-5 的 IP

全连接方式(-sT)

使用 TCP 连接,与每个端口都进行完整的三次握手
如果目标端口开启:首先 kali 向目标发送 [SYN],然后目标返回 [SYN,ACK],kali 再发送 [ACK] 与 [RST,ACK]

image.png
image.png

如果目标端口未开启:攻击方发起 [SYN] 包,然后攻击方返回 [RST,ACK]

image.png
image.png

半连接方式(-sS)

SYN 扫描,默认就是这样的
如果端口是开着的,首先 kali 发一个 [SYN],目标回一个 [SYN,ACK],kali 再回一个 [RST]

image.png
image.png

如果是端口没有开,kali 发一个 [SYN],目标返回一个 [RST,ACK]

image.png
image.png

秘密扫描 TCPFIN(-sN、-sF、-sX)

如果端口存在:kali 发送一个 [FIN],啥都不返回,Linux 会丢弃这个包,而 Windows 会返回一个 RST 包(可以用来判断系统)

image.png
image.png

如果不存在:kali 发送一个 [FIN] 包,Linux 与 Windows 都会返回一个 [RST] 包

image.png
image.png

秘密扫描 TCPACK(-sA)

这种方式可以检测目标是否采用了数据包状态检测技术防火墙
发送一个 [ACK],如果目标主机中回复 [RST] 则证明没有采用防火墙

image.png
image.png

漏洞利用

因为涉及到 Metasploitable 这个靶机,先 docker pull w4sp/labs:sploitable 拉下来,省的待会点击开启的时候在等,点击那个 start sploit 记录一下靶机的 IP:10.100.200.135

image.png
image.png

然后启动 msf 进行攻击,使用 VSFTPD 漏洞
use exploit/unix/ftp/vsftpd_234_backdoor

设置攻击目标 IP,然后开始攻击
set RHOST 10.100.200.135

有时候建立不起来连接,多试几次

image.png
image.png

使用过滤器 ip.addr==10.100.200.135 过滤一下,可以看到我们连接后执行的命令和返回的结果

image.png
image.png
image.png
image.png

从 TCP 流里观察正向 shell

kali:192.100.200.114
metasploitable:10.100.200.156

use exploit/multi/misc/java_rmi_server
set RHOST 10.100.200.156
set PAYLOAD java/meterpreter/bind_tcp

我们使用 blind_tcp 方式的 meterpreter shell,在第一阶段,meterpreter shell 会在目标机器上监听一个 TCP 端口,等着 msf 连上去,把剩余的 payload 发过去。本质上说,就是我们在目标机器上创建了一个服务程序,然后我们再去连接到这个 shell 上,获得完整的 shell

image.png
image.png

在 wireshark 里查看一下,因为我们攻击的是 1099 端口的 java RMI 服务,所以可以直接过滤一下
tcp.port==1099,然后右键追踪流看一下具体的流量

image.png
image.png

可以看到,在我们本机的 8080 口,下载了一个 .jar 文件

image.png
image.png

可以过滤一下 8080 端口的流量,追踪流

image.png
image.png

然而我去过滤 4444 端口的时候,找不到 shell 交流的过程

从 TCP 流里观察反向 shell

有点没用…

解密 SSL/TLS

要用 浏览器 和 wireshark 同时运行,电脑跑不起来,告辞

USB 和 wireshark

Linux 下捕获 USB 流量

linux 内核的 usbmon 模块支持 USB 实时抓包功能,usbmon 能够捕获经过 USB 总线的数据包

sudo modprobe usbmon
lsmod | grep usbmon

这时候打开 wireshark 就会看到

image.png
image.png

每一个编号对应着一个 usb 设备,可以通过 lsusb 来看一下系统正在用的 USB 设备

image.png
image.png

这里可以看到 003 后面写着 鼠标(Mouse) 这是 vmware 为虚拟机提供的鼠标输入设备