流量分析
Wireshark的使用
Wireshark抓包原理
Wireshark使用的环境大致分为两种,一种是电脑直连互联网的单机环境,另外一种就是应用比较多的互联网环境,也就是连接交换机的情况。
「单机情况」下,Wireshark直接抓取本机网卡的网络流量;
「交换机情况」下,Wireshark通过端口镜像、ARP欺骗等方式获取局域网中的网络流量。
- 端口镜像:利用交换机的接口,将局域网的网络流量转发到指定电脑的网卡上。
- ARP欺骗:交换机根据MAC地址转发数据,伪装其他终端的MAC地址,从而获取局域网的网络流量。
Wireshark抓包页面介绍
先来看看wireshark的页面
协议分级统计表
Wireshark 的 协议分级统计表(Protocol Hierarchy Statistics)是通过 协议栈分层解析 生成的,其分级逻辑遵循网络通信的 OSI 模型 或 TCP/IP 协议栈,从底层到上层逐层拆解数据包。
协议分级的核心逻辑
(1) 分层依据
Wireshark 会按以下顺序解析每个数据包,并统计各层协议的占比:
1 | 1. **物理层**(如 Ethernet、Wi-Fi) |
(2) 统计规则
按分组百分比
:统计某协议在所有数据包中出现的频率。
- 例如:
TCP 占 99.45%
表示 99.45% 的包包含 TCP 头。
- 例如:
按字节百分比
:统计某协议在所有字节中的占比(含下层协议头开销)。
- 例如:
HTTP 占 56.3%
表示 HTTP 及其载荷占总流量的 56.3%。
- 例如:
Wireshark过滤器语法
参考文章:https://www.cnblogs.com/-wenli/p/13096718.html
官方文档:https://www.wireshark.org/docs/man-pages/wireshark-filter.html
比较运算符
1 | eq, == 等于 |
举个例子
1 | http.request.method eq "POST" |
当然,一个字段在给定帧中可能出现不止一次。在这种情况下,相等性可以是严格的(所有字段必须匹配条件)或不严格的(任何字段必须匹配条件)。
1 | eq, any_eq, == 任何字段必须相等 |
运算符“any”或“all”可以与任何比较运算符一起使用,例如
1 | all http.request.method == "POST" |
需要注意的是,“any”和“all”修饰符优先于“=”和“any_eq”等比较运算符。
搜索和匹配运算符
contains运算符
1 | contains 协议、字段或切片是否包含值 |
关于contains:“contains”运算符允许过滤器搜索以字符串表示的字符序列或以字节数组表示的字节序列。“contains”运算符左侧的类型在任何隐式或显式转换后必须与右侧的类型相当。
例如我们希望搜索包含file_put_contents的HTTP协议流,可以使用以下过滤器
1 | http contains "file_put_contents" |
matches, ~运算符
1 | match,~ 字符串是否匹配给定的不区分大小写的 |
“matches”或“~”运算符允许将过滤器应用于指定的 Perl 兼容正则表达式 (PCRE2)。该正则表达式必须是双引号括起来的字符串。“matches”运算符的左侧必须是字符串,可以是隐式或显式转换为字符串的非字符串字段。默认情况下,匹配不区分大小写。
常见的过滤函数
1 | upper(string-field) - 将字符串字段转换为大写 |
此时就可以看到,当upper() 和 lower() 在执行不区分大小写的字符串比较时很有用。例如结合matches
1 | upper(http.request.method) == "POST"//将http.request.method的结果转化成大写后进行比较 |
http模式过滤
过滤1:http.request
1 | 1:http.request.method -> 用于筛选特定 HTTP 请求方法的流量。 |
过滤2:http.response
1 | 1.http.response.code -> 用于匹配 HTTP 响应的状态码(如 200、404、500 等)。 |
IP模式过滤
过滤1:ip.src和ip.dst
- ip.src:用于筛选 IP 数据包的源地址(Source IP Address)。
1 | ip.src == 192.168.162.188 |
- ip.dst:用于筛选 IP 数据包的目的地址(Source IP Address)。
1 | ip.dst == 192.168.162.188 |
过滤2:ip.addr
ip.addr 可以匹配数据包的源IP地址或目标IP地址,它会同时检查源IP和目标IP,只要其中一个匹配就会显示该数据包。
1 | ip.addr == 192.168.162.188 |
过滤3:
TCP模式过滤
过滤1:tcp.connection.synack
tcp.connection.synack 是 Wireshark 中用于分析 TCP 连接建立过程的一个特殊过滤器。它主要用于识别 TCP 三次握手中的 SYN-ACK 包。
这个过滤器用于显示 TCP 连接建立过程中的 SYN-ACK 数据包。
过滤2:tcp.dstport和tcp.srcport
- tcp.dstport(目标端口):
- 用于过滤特定目标端口的 TCP 数据包
- 示例:tcp.dstport == 80 (显示所有发往 HTTP 默认端口的数据包)
- tcp.srcport(源端口):
- 用于过滤特定源端口的 TCP 数据包
- 示例:tcp.srcport == 443 (显示所有来自 HTTPS 默认端口的数据包)
过滤3:tcp.port
- 基本功能:
- 匹配源端口或目标端口中的任何一个
- 等同于 (tcp.srcport or tcp.dstport)
- 使用示例:
- tcp.port == 80 这会显示所有源端口或目标端口为 80 的 TCP 数据包
- 多端口过滤:
- tcp.port in {80, 443, 8080} 这会显示端口为 80、443 或 8080 的所有 TCP 数据包
- 范围过滤:
- tcp.port >= 1024 and tcp.port <= 49151 显示所有使用注册端口范围的 TCP 数据包
ifconfig命令
ifconfig
(Interface Configurer)是 Linux/Unix 系统中用于查看和配置网络接口(网卡)信息的经典命令。
什么是内网ip
内网(内部网络,也称为私有网络或局域网 LAN)是指在一个组织、家庭或特定范围内建立的封闭网络环境,不直接暴露在公共互联网上。内网中的设备可以互相通信,但通常需要通过网关(如路由器、防火墙)才能访问外网(Internet)。
内网ip的范围
内网设备通常使用 RFC 1918 定义的私有 IP 地址范围,这些地址在互联网上不可路由:
- **
10.0.0.0/8
**(10.0.0.0
~10.255.255.255
) - **
172.16.0.0/12
**(172.16.0.0
~172.31.255.255
) - **
192.168.0.0/16
**(192.168.0.0
~192.168.255.255
)
IPv4 地址分类
在早期的 IPv4 分类中,IP 地址被分为 A、B、C、D、E 五类,其中 C 类地址 适用于小型网络:
类别 | IP 范围 | 默认子网掩码 | 适用场景 |
---|---|---|---|
A 类 | 1.0.0.0 ~ 126.255.255.255 |
255.0.0.0 |
大型企业、运营商 |
B 类 | 128.0.0.0 ~ 191.255.255.255 |
255.255.0.0 |
中型企业、校园网 |
C 类 | 192.0.0.0 ~ 223.255.255.255 |
255.255.255.0 |
小型局域网 |
D 类 | 224.0.0.0 ~ 239.255.255.255 |
无(组播地址) | 视频会议、流媒体 |
E 类 | 240.0.0.0 ~ 255.255.255.255 |
保留(实验用途) | 未分配 |
常见webshell工具流量特征
哥斯拉流量
哥斯拉流量是指使用哥斯拉(Godzilla)WebShell工具进行攻击时产生的网络流量。哥斯拉是一种功能强大的WebShell工具,常用于渗透测试和网络攻击。它的流量具有特定的特征,我们可以通过分析这些特征来检测和防御哥斯拉攻击。