Wireshark 抓明文密码:选对网卡 + 过滤器 + 协议分层全解析
网络安全实战 90 天 · Week 1 破冰 · 难度 ★★★ 进阶 | 关键词:Wireshark 抓包 明文传输 HTTP 网络嗅探
上一篇用 Burp 抓到密码,那是"代理"的功劳------请求本来就经过它。这篇换一种更底层的方式:不配任何代理,直接用 Wireshark 在网络层嗅探,把数据包从网卡上原样捞下来。重点讲清三件事:网卡怎么选、过滤器怎么写、协议分层怎么展开。
一、Burp 和 Wireshark 的区别
两者都能看到明文密码,但原理完全不同,适用场景也不一样:
| 对比项 | Burp Suite | Wireshark |
|---|---|---|
| 工作方式 | 中间人代理,主动介入 | 网卡嗅探,被动旁观 |
| 是否需要配置 | 两端都要配代理 | 不需要任何配置 |
| 能否修改请求 | 能(这是核心能力) | 不能,只能看 |
| 能否看到 HTTPS 明文 | 能(装了 CA 证书) | 不能,TLS 加密后是乱码 |
| 适用场景 | Web 漏洞测试 | 协议分析、流量取证 |
一句话总结:Burp 是主动参与的中间人,Wireshark 是躲在旁边的旁观者。旁观者的优势是"不需要目标配合"------只要能碰到流量就能抓。
二、启动 Wireshark 并选网卡
Kali 里用 sudo 启动(抓包需要原始套接字权限):
启动 Wireshark
bash
sudo wireshark
启动后第一屏就是网卡列表,这是整个实验最关键的选择。选错网卡,后面什么都抓不到。

| DVWA 部署位置 | 流量实际走哪 | 应该选的网卡 |
|---|---|---|
| 本机 Docker(127.0.0.1) | 本机环回 | lo |
| Host-Only 虚拟机 | 虚拟网卡 | ens33 / eth0 |
| 桥接或 NAT | 物理/虚拟网卡 | 对应网卡名 |
本文的 DVWA 是用 Docker 起在本机的,访问地址是 127.0.0.1,所以流量走的是环回接口,必须选 lo。如果这时候选了 ens33,抓半天一个 HTTP 包都不会有。
三、重现登录动作
选好网卡开始抓包,然后在浏览器里访问 DVWA 登录页,用 admin / password 正常登录一次。
关键 抓包前一定要把 Firefox 的代理关掉,让它直连 127.0.0.1。否则流量会先经过 Burp 再转发,Wireshark 抓到的是"浏览器↔Burp"这一段,虽然也能看到密码,但端口和路径会和真实情况不一致,容易把结论搞混。

四、用过滤器定位目标流量
刚打开抓包时列表是滚动的,几百上千个包混在一起没法看。用显示过滤器收窄范围:
显示过滤器
text
http # 只看 HTTP 协议
http.request.method == "POST" # 只看 POST 请求
过滤之后,找到那一行登录请求:
抓到的三条关键记录
text
1258 127.0.0.1 → 127.0.0.1 HTTP POST /login.php HTTP/1.1
1260 127.0.0.1 → 127.0.0.1 HTTP 302 Found
1262 127.0.0.1 → 127.0.0.1 HTTP GET /index.php HTTP/1.1
三行的顺序很有信息量:先 POST 提交凭据 → 服务器返回 302 重定向 → 浏览器再 GET 首页。302 就是"登录成功,请去首页"的信号。

五、展开协议分层,找到明文密码
点中那条 POST 请求,下方的详情面板会按协议逐层展开:
协议分层结构
text
Frame ← 物理层信息:抓包时间、包长度
Ethernet II ← 以太网帧头:源/目的 MAC
Internet Protocol v4 ← IP 层:源/目的 IP
Transmission Control Protocol ← TCP 层:源/目的端口
Hypertext Transfer Protocol ← HTTP 层:请求头
HTML Form URL Encoded ← 表单数据:真正的密码在这
展开最底层的 HTML Form URL Encoded,就能看到表单字段的键值对:
明文凭据
text
Form item: "username" = "admin"
Form item: "password" = "password"
这就是整条链路的终点。数据从浏览器发出,经过 TCP/IP 封装,在网络上是完全透明的------任何能接触到这段流量的人,都能用同样的方式读到它。

六、踩坑记录
坑 1:选错网卡,抓到零个 HTTP 包
最常见的问题。DVWA 跑在 127.0.0.1 上,这是本机环回地址,流量根本不经过物理网卡。如果选了 ens33 或 eth0,抓到的全是无关的背景流量,一个 HTTP 都不会有。
判断方法很简单:先明确"我要抓的流量走哪条路"。本机服务走 lo,跨机器走对应网卡。不确定就先都抓一遍,看哪个有数据。
坑 2:Burp 还开着,流量被拆成两段
我第一次做这个实验时,Burp 的代理没关。结果 Wireshark 抓到的是 Firefox 发给 Burp 的请求(目标端口 8080),而不是发给 DVWA 的请求(目标端口 80)。虽然内容一样,但端口不对,而且多了一层无关转发,看协议分层时会多出一段。
解决:抓包前把浏览器代理关掉,让它直连目标。
坑 3:流量太多,找不到目标包
不做过滤的话,列表几秒钟就刷出上千行。必须用显示过滤器。常用的几个够用了:
| 过滤器 | 作用 |
|---|---|
| http | 只看 HTTP 协议 |
| http.request.method == "POST" | 只看 POST 请求 |
| ip.addr == 192.168.56.102 | 只看与某 IP 相关的流量 |
| tcp.port == 80 | 只看 80 端口 |
| tcp.port == 8080 | 只看 8080 端口(Burp 代理) |
| http contains "password" | 内容包含 password 的包 |
| !arp and !dns | 排除 ARP 和 DNS 噪音 |
坑 4:找不到 HTML Form URL Encoded 这一层
有时展开 HTTP 层后只有请求头,看不到表单数据。两个原因:
-
选的不是 POST 请求。GET 请求的参数在 URL 里,不在请求体,所以没有表单层。
-
看错了面板。详情面板分三块(Packet Details / Packet Bytes),表单数据在中间那块,需要继续往下展开 HTTP 节点。
还有个更快的办法:右键那条包 → Follow → HTTP Stream,直接把整个请求和响应拼成可读文本。
七、常用快捷键
| 快捷键 | 功能 |
|---|---|
| Ctrl + E | 开始 / 停止抓包 |
| Ctrl + F | 在当前结果中查找 |
| Ctrl + Shift + O | 跳到下一个包 |
| Ctrl + Alt + Shift + R | 重新开始抓包 |
八、小结
-
Wireshark 是被动嗅探,不需要目标配合,但看不到加密后的内容。
-
网卡选择是第一道门槛:本机服务走 lo,跨机器走实际网卡。
-
显示过滤器能把上千个包收窄到几条,是必备技能。
-
HTTP 明文传输意味着密码在网络上是裸奔的,这就是必须上 HTTPS 的根本原因。
下一篇把 HTTP 和 HTTPS 放在一起对比抓包,看看加密之后 Wireshark 到底还能看到什么。