03 过滤器详解:把噪音剥掉的看家本领

本章目录
  1. 两种过滤器:显示过滤器 vs 捕获过滤器
  2. 显示过滤器语法的四件套
  3. 高频字段速查表
  4. 常用套路式写法(直接抄)
  5. 过滤栏左右两个按钮 & 表达式框
  6. 几个新手极易踩的坑
  7. 小测验

显示过滤器 vs 捕获过滤器

显示过滤器(Display Filter)捕获过滤器(Capture Filter)
哪里设主界面顶部过滤栏(最常用)开始捕获前,Capture→Options
作用只"隐藏"不符合的包,不删除,数据还在捕获阶段就丢掉不符合的包
语法字段式,如 http.uri contains "a"类似 tcpdump/伯克利 BPF,如 tcp port 80
对 CTF 的意义几乎只用它——analyze 已采集好的文件时更不着调捕获仅当你自己抓包且要省空间时用
CTF 拿到的是现成 pcap,所以你要学的是显示过滤器。它改的是"视图",不会删数据——点过滤栏右侧那个 ✕ 就恢复显示全部。

显示过滤器语法的四件套

① 取字段:协议.子字段

写"哪个协议、取它哪个字段"。例如 http.request.uri = HTTP 请求里的 URI。

② 比较符

符号含义示例
==等于http.request.method == "GET"
!=不等于tcp.port != 443
> < >= <=大于/小于tcp.len > 1000
contains包含某子串(区分大小写)http.request.uri contains "SLEEP"
matches用正则匹配http.request.uri matches "user/[0-9]+"

③ 逻辑符:and / or / not / && / || / ! 和括号

把多个条件组合。括号用于改变优先级,和数学一样。

// 并且(两个都满足)
http and tcp.port == 80
// 或者(满足其一)
udp.port == 53 or dns.flags.response == 1
// 否定 / 排除某种包
not tcp.port == 443
// 组合 + 括号(看请求,且 URI 里带某个词)
http.request and (http.request.uri contains "admin")

④ 字面量写法

高频字段速查表(做流量题最常用)

类别字段含义 / 用途
HTTPhttp所有 HTTP 包(请求+响应)
http.request只要请求方向
http.request.uri请求的网址/URI(看攻击参数首选)
http.request.method方法:GET/POST/PUT/DELETE
TCP/UDP|IPtcp / udp按传输层协议看
ip.addr / ip.src / ip.dst看 IP;定位攻击来源/目标
连接tcp.stream整条 TCP 连接编号;tcp.stream eq 5 只看一条连接
端口tcp.port / udp.port按端口;如 MySQL=3306、FTP=21、DNS=53
DNSdns.qry.name查询的域名(DNS 带外题超有用)
加密|凭据tlsHTTPS/TLS 加密流量
-r(tshark) / 解密TLS 需用密钥解密,见 05 协议
数据库mysqlMySQL 协议流量(SQL 注入还原啊)
mssqlMSSQL 协议流量
文件|邮件|共享ftp smb smtp pop文件/邮件/共享协议,常用于"传文件/泄数据"
时间|长度|标记帧号/相对时间列/TCP 延迟盲注题判断"睡了 5 秒还是秒回"

想要任意字段?Wireshark 会自动补全:在过滤栏输入 http. 会弹出候选子字段,选一个回车即可。

常用套路式写法(直接抄)

# 只看 HTTP 全部
http

# 只看攻击者的请求(不含响应)
http.request

# 请求里网址包含某关键字(定位注入 / 越权一用一个准)
http.request.uri contains "SLEEP"
http.request.uri contains "/api/user"

# 只看返回 JSON 的响应
http.response && json

# 只看某台 IP 与我的通讯
ip.addr == "192.168.1.10"

# 只盯着一条 TCP 连接看(先 Find 得到流号)
tcp.stream eq 222

# 只看 MySQL 协议(数据库注入)
mysql

# 排除端口 7890 那种代理噪音
not tcp.port == 7890

过滤栏左右两个按钮 & 表达式框

几个新手极易踩的坑

区分大小写:contains 对大小写敏感。抓包里是 SLEEP(大写),你写 sleep 就搜不到。拿不准就两种都试。
字符串两端必须有引号:写 uri contains /api 会红。正确:uri contains "/api"。
布尔别加引号:http.request == "true" 是错的,写 http.request(存在即真)。
不是所有字段都要 .uri:先想"信息在响应体(json)还是请求 URL"。响应体找字段用 json 或导出对象,见 04 定位术。

小测验(可点选)

1️⃣ 想看"攻击者对 /api/v1/user 接口的请求",下面哪个过滤器是对的?
2️⃣ 只要"返回体是 JSON 的响应",正确的是?