wireshark学习笔记
wireshark学习笔记
环境
本机环境比较复杂,还开着网课,微信啥的,所以实验大多是在kali中做的。
虚拟网络环境
eNSP+kali虚拟机+Centos7虚拟机
eNSP的安装
华为eNSP模拟器(Enterprise Network Simulation Platform)是华为官方推出的一款强大的图形化网络仿真工具平台,eNSP模拟器主要对企业网路由器、交换机、WLAN等设备进行软件仿真,从而得以完美地呈现真实设备部署实景
以前是免费使用的,现在只有华为合作商才能继续使用eNSP,这边提供一个链接给需要的师傅:
链接:https://pan.baidu.com/s/1xZvt9epagcF2JMdClw2S9Q
提取码:ko7e
安装前需要先下载WinPcap,Wireshark,VirtualBox才能进行安装。
通过eNSP与VMware相连
eNSP中的云,可以将虚拟设备与外部真实网络相连,可以借此建立与真实一样的实验环境。
- 在VMware中将kali虚拟机设置为NAT模式
- 在云中添加一个udp和一个与VMwareNetwork Adapter Vment8连接的端口。
环境搭建完之后,我们就可以在虚拟主机的命令行中ping通虚拟机
数据过滤
伯克利包过滤(BPF)
BPF(Berkeley Packet Filter)采用与自然语言相近的语法,利用语法构造字符串确定保留具体符合规则的数据包而忽略其他数据包。
BPF基元
现在,构造一个BPF过滤器的最简单的办法就是使用BPF“基元”来指定协议、协议元素或者其他抓包规则。基元通常是由一个id(名称或序号)再加上一个或多个限定符组成的。
- type限定符:规定了id名或id序号指的是哪种类型的数据,可能的type有host、net、prot和protrange
- dir限定符:规定了流量是从id流进还是流出的(或两种兼有)。可能的dir有src、dst、ser or dst、src and dst、addr1、addr2、addr3和addr4
- Proto限定符:规定了所匹配的协议。可能的proto有:ether、fddi、tr、wlan、ip、ip6、arp、rarp、decnet、tcp和udp
举例
IP地址为192.168.1.1 host 192.168.1.1 ip.addr == IP地址
源IP地址为192.168.1.1 src host 192.168.1.1 ip.src == IP地址
目的IP地址为192.168.1.1 dst host 192.168.1.1 ip.dst == IP地址
目标端口为80 dst port 80
ARP欺骗
ARP全称为Address Resolution Protocol,即地址解析协议。ARP欺骗属于中间人攻击,通过发送网关ip和自己的MAC地址,修改目标主机的ARP缓存表实行网关欺骗。通过同样的方式让网关误以为自己是目标主机,从而实现中间人攻击。
可以使用工具Arpspoof,快速实现arp欺骗。
命令格式:
arpspoof [-i 指定使用的网卡] [-t 要欺骗的目标主机] [-r] 要伪装的主机
我们可以使用如下命令监听192.168.169.132与192.168.169.2之间的通讯
root@kali:~# arpspoof -i eth0 -t 192.168.169.132 192.168.169.2
因为ARP协议中规定主机只要收到一个ARP请求之后,不会去判断这个请求的真伪,就会直接将请求中的IP地址和硬件地址添加到ARP表中。如果之前有了相同的IP地址,就对其进行修改。
查找网络发生延迟的位置
建立一个可访问远程HTTP服务器的仿真网络
建立如下的仿真网络拓扑:
客户端配置:
DNS配置并添加一条目标网站的DNS记录:
将三个路由器配置动态路由协议rip。
分析不能上网的原因
可能导致不能上网的原因
正常情况下我们可以按如下步骤进行故障排除:
- 检查用户所用设备的网卡是否正常启动
- 检查用户所用设备上每个网卡的IP地址、子网掩码、默认网关配置是否正确
- 用户所在网络的ARP协议是否正常工作,例如公网的MAC地址是否正确
- 检查用户所在网络的DNS协议是否正常工作
- 检查用户所使用的具体网络服务协议是否正常工作
DHCP协议相关
DHCP的消息一共8种
消息类型编号 | 消息类型 | 描述 |
---|---|---|
1 | DHCP Discover | 客户端用来寻找DHCP服务器 |
2 | DHCP Offer | DHCP服务器用来响应DHCP DISCOVER报文,此报文携带了各种配置信息 |
3 | DHCP Request | 客户端请求配置确认,或者续借租期 |
4 | DHCP Decline | DHCP客户端收到DHCP服务器回应的ACK报文后,通过地址冲突检测发现服务器分配的地址冲突或者由于其他原因导致不能使用,则发送Decline报文,通知服务器所分配的IP地址不可用。 |
5 | DHCP ACK | DHCP服务器收到Request报文后的确认响应 |
6 | DHCP NAK | DHCP服务器收到Request报文后的拒绝响应 |
7 | DHCP Release | 客户端要释放地址时用来通知服务器(单播) |
8 | DHCP Inform | PC单独请求域名、DNS这些参数的时候 |
如果一台机器正常启动的话,最先捕获到的两个数据包分别为DHCP Discover和DHCP Offer数据包,然后是 DHCP Request和DHCP ACK数据包。
我们可以通过过滤来显示特定类型的DHCP数据包:
bootp.option.dhcp == 5
同时也可以通过如下过滤显示异常的DHCP数据包:
bootp.option.dhcp == 4 || bootp.option.dhcp == 6 || bootp.option.dhcp == 7
网络路径的连通性
分析离开网关之后的数据包,我们可以用到traceroute工具。在windows系统中,traceroute工具的命令为tracert。
这个工具利用了数据包中TTL值的特性,每经过一个路由器,TTL值就会减一,当路由器接收到TTL值为0的数据包就会将其丢弃,并向数据包的源地址发送一个ICMP报文。
利用这个特性,traceroute向目标地址发送TTL值不断递增的报文,先将TTL设置为1,到达第一个路由器就被丢弃,并向源地址发送ICMP报文。程序就通过ICMP判断中转站的IP。接着把TL设置为2,获得第二个中转路由器的IP。
或者可以去下载一个PingPlotter,这个工具比系统自带的要更强大,还可以自定义发送数据包的大小。
链路层的攻击
针对交换机的常见攻击方式:
- MAC地址欺骗攻击
- MAC地址泛洪攻击
- STP操纵攻击
- 广播风暴攻击
发起MAC地址泛洪攻击
泛洪攻击简单来讲就是发送大量数据帧给交换机,导致交换机CAM表爆满,从而退化成集线器,以此监听他人流量。
可以使用kali内置的macof工具,macof加参数?可以查看这个工具的具体使用方法。
也可以直接输入macof
MAC泛洪攻击防御方式:可以在交换机中限制每个端口的MAC地址数量,攻击者只能从某一个端口进入,这样无论如何攻击者都无法填满整个CAM表。
TCP连接的建立方式
TCP三次握手
1.第一次握手
(1)客户端产生一个初始序列号(ISN),但在默认情况下,wireshark中不会显示序列号的真实值。
(2)客户端将要发送的数据包中的tcp.flags.syn位设置为1
(3)客户端将要发送的数据包中tcp.flags的其余位设置为0
(4)客户端将设置要发送的数据包中tcp.window_size的值,其目的是向服务端提供自己当前缓冲区的大小。
(5)客户端会根据实际设置tcp.options,例如最大片段大小(MSS)、No-Operation(NOP)、window scale、timetamps和SACK permitted等值
然后客户端将设置好的数据包发送给服务端
2.第二次握手
(1)服务器产生一个ISN值,将要发送的数据包中tcp.seq的值设置为这个ISN值
(2)服务器将接收到的数据包中的初始序列号加1,然后将这个值赋值给要发送的数据包中的tcp.ack位
(3)服务器将数据包中tcp.window_size_value的值设置为8192
(4)服务器将数据包中的tcp.falgs.syn和tcp.falgs.ack的值都设置为1
(5)设置要发送的数据包中的tcp.opyions的值来回应客户端
发送数据包
3.第三次握手
现在已经成功交换信息,两者可以建立TCP连接了。
(1)客户端将收到的数据包中的ISN加1之后,tcp.seq加1。
(2)将数据包中tcp.flags.ack==1
(3)设置要发送的数据窗口大小
UDP协议
UDP是一个设计极其简洁的协议,控制选项较少,因此在传输过程中延迟小、传输效率高。我们平时使用的QQ也是选用了UDP作为传输层协议。
UDP 的首部格式
用户数据报 UDP 有两个字段:数据字段
和首部字段
。首部字段很简单,只有8个字节,由四个字段组成,每个字段都是两个字节
首部字段
源端口
源端口号。在需要对方回信时。不需要时可用全0目的端口
目的端口号。这在终点交付报文时必须使用长度
UDP 用户数据报的长度,其最小值是8(仅有首部)检验和
检测 UDP 用户数据报在传输中是否有错。有错就丢弃
伪首部
UDP 用户数据报首部中检验和的计算方法有些特殊。在计算检验和时,要在 UDP 用户数据报之前增加 12 个字节的伪首部
。所谓“伪首部”是因为这种伪首部并不是 UDP 用户数据报真正的首部。只是在计算检验和时,临时添加在 UDP 用户数据报前面,得到一个临时的 UDP 用户数据报。检验和就是按照这个临时用户数据报来计算的。伪首部既不向下传也不向上递交,而仅仅是为了计算检验和