第一部分:为什么 Wireshark 能捕获到密码?

核心原因在于 网络协议的工作方式网络通信的加密与否

wireshark 网站密码
(图片来源网络,侵删)

明文传输(不安全,但依然存在)

很多网络协议在设计之初就没有考虑加密,或者使用了可以被轻易破解的加密方式,当这些协议传输数据时,用户名和密码就是明文,就像寄一封没有信封的信。

常见的明文或弱加密协议:

  • HTTP (HyperText Transfer Protocol):这是最常见的一个,当你访问一个网址,如果地址栏是 http:// 而不是 https://,那么你在这个网站上输入的所有信息,包括用户名和密码,都会以明文形式在网络上传输。
    • 如何识别:在 Wireshark 的过滤栏中输入 http,你就能看到所有 HTTP 流量,如果你看到一个 POST 请求,并且它的载荷里看起来像 username=admin&password=123456,那么密码就被捕获了。
  • FTP (File Transfer Protocol):文件传输协议,用户名和密码在登录时也是明文传输。
  • Telnet (Telecommunication Network):远程终端协议,几乎所有内容,包括你敲的每一个字符,都是明文传输。
  • SMTP (Simple Mail Transfer Protocol):发送邮件的协议,在未加密的情况下,认证信息可能是明文。
  • 一些旧版或配置不当的协议:如 SNMP v1/v2c、TFTP 等。

加密传输(安全,但仍有风险)

绝大多数正规网站(如银行、社交、电商网站)都使用 HTTPS (HTTP Secure),HTTPS 在 HTTP 的基础上增加了一层 SSL/TLS 加密

  • HTTPS 的工作原理:它使用非对称加密(公钥/私钥)来安全地交换一个“会话密钥”,然后后续的所有通信都使用这个对称的“会话密钥”进行加密,这样即使别人截获了数据包,没有密钥也无法解密。
  • 为什么 Wireshark 有时还能看到密码?
    1. 中间人攻击:这是最关键的一点,如果你在自己的电脑上安装了 Wireshark,那么你的电脑就是通信的“中间人”,HTTPS 的安全依赖于受信任的证书颁发机构,如果你在浏览器中手动安装了一个由你自己的代理服务器或工具签发的“根证书”,你的电脑就会信任这个证书,这样,攻击者的代理就可以:
      • 拦截你的 HTTPS 请求。
      • 用自己的证书伪装成真正的服务器(google.com)。
      • 与你的浏览器建立加密连接。
      • 再用同样的证书与真正的 google.com 服务器建立加密连接。
      • 这样一来,它在中间就可以完美地“解密”并查看你发送的所有数据,包括密码,它再重新加密后发送给真正的服务器,整个过程你毫无察觉,Wireshark 也能捕获到解密后的明文数据。
    2. Wireshark 的“解密”功能:Wireshark 本身不能解密 HTTPS,但它可以配置一个 (pre)-master-secret log 文件,这个文件是浏览器在与服务器建立 SSL/TLS 连接时,用于生成会话密钥的原始材料,如果你能让浏览器(通过修改其启动参数)将这个 secret log 保存下来,然后告诉 Wireshark 这个 log 文件的位置,Wireshark 就可以实时解密该浏览器的所有 HTTPS 流量,这通常用于开发者调试,但一旦 log 文件泄露,所有加密通信都将暴露无遗。

第二部分:如何使用 Wireshark 捕获密码(仅用于学习和测试)

⚠️ 重要声明:未经授权监控他人的网络流量是违法行为,请仅在你拥有所有权或明确授权的网络上进行测试。

wireshark 网站密码
(图片来源网络,侵删)

捕获明文协议的密码(如 HTTP)

这是最简单的演示。

  1. 准备工作:在一台电脑上运行 Wireshark,确保你要访问的网站是 HTTP 协议(可以自己用 Python 的 http.server 模块快速搭建一个简单的 HTTP 服务器并包含一个登录表单)。
  2. 开始捕获:在 Wireshark 的接口列表中选择你正在使用的网络接口(如 Wi-Fi以太网),然后点击开始捕获。
  3. 执行操作:在另一台设备(或同一台)上访问该 HTTP 网站,并输入一个用户名和密码进行登录。
  4. 分析数据包
    • 回到 Wireshark,停止捕获。
    • 在过滤栏中输入 http,只显示 HTTP 流量。
    • 找到包含 POST 请求的数据包(通常是登录请求)。
    • 右键点击该数据包,选择 Follow -> TCP Stream
    • 在弹出的窗口中,你会清晰地看到完整的 HTTP 请求,包括 usernamepassword 字段及其值。

捕获解密后的 HTTPS 密码(需要配置)

这需要更多步骤,通常用于企业内部安全审计或开发者调试。

  1. 获取 SSL/TLS 密钥日志文件
    • Firefox: 在地址栏输入 about:config,搜索并设置 security.ssl.keylog_filename 为一个你指定的文件路径,如 C:\temp\sslkeylog.txt
    • Chrome/Chromium: 创建一个快捷方式,在“目标”栏末尾添加参数:--log-net-log="C:\temp\netlog.json" --ssl-key-log-file="C:\temp\sslkeylog.txt"
  2. 配置 Wireshark
    • 打开 Wireshark,进入 Edit -> Preferences
    • 导航到 Protocols -> TLS
    • (Pre)-Master-Secret log filename 字段中填入你刚才设置的密钥日志文件路径(如 C:\temp\sslkeylog.txt)。
  3. 开始捕获和解密
    • 启动 Wireshark 开始捕获。
    • 打开你配置好密钥日志的浏览器,访问一个 HTTPS 网站并登录。
    • Wireshark 会自动读取密钥日志文件,并实时解密 HTTPS 流量,你可以像分析 HTTP 一样,通过 Follow -> TLS 来查看解密后的应用层数据,其中可能包含密码或令牌。

第三部分:最重要的——如何保护你的密码不被捕获

了解了攻击原理,防御就变得清晰了。

对个人用户而言

  • 始终使用 HTTPS:养成检查网址栏的习惯,确保你访问的网站地址以 https:// 开头,并且旁边有一个锁形图标,现代浏览器会自动将 HTTP 流量重定向到 HTTPS。
  • 不要使用公共 Wi-Fi 进行敏感操作:咖啡馆、机场、酒店的公共 Wi-Fi 是最不安全的,黑客可以轻易地进行中间人攻击,捕获你所有的明文流量,如果必须使用,请务必连接 VPN (Virtual Private Network),VPN 会在你的设备和 VPN 服务器之间建立一个加密隧道,即使你连接了公共 Wi-Fi,你的所有流量也是加密的,黑客只能看到你连接了 VPN 服务器,而看不到你具体在访问什么网站。
  • 使用强密码和双因素认证 (2FA/MFA)
    • 强密码:即使密码被捕获,复杂的密码也能增加破解的难度。
    • 双因素认证:这是最重要的防线!即使黑客通过 Wireshark 或其他手段盗取了你的密码,没有你的手机验证码、认证器 App 动态码或指纹等第二重验证,他们也无法登录你的账户。2FA 能让你在很大程度上高枕无忧。
  • 保持软件更新:浏览器和操作系统的更新通常包含安全补丁,可以修复已知的安全漏洞。
  • 安装可靠的杀毒软件和防火墙:防止恶意软件在本地安装根证书或进行其他网络窃听活动。

对网站开发者而言

  • 强制使用 HTTPS:通过 HSTS (HTTP Strict Transport Security) 头,强制浏览器始终与你的服务器建立 HTTPS 连接,防止降级攻击。
  • 禁用不安全的协议:在服务器上禁用 FTP、Telnet、HTTP 等明文协议。
  • 使用安全的密码哈希算法:即使数据库泄露,也要确保存储的密码是经过加盐哈希处理的(如 Argon2, bcrypt, scrypt),而不是明文或简单的 MD5/SHA1。
  • 使用安全的 Cookie 设置:设置 SecureHttpOnly 标志,防止 Cookie 被窃取。
特性 明文协议 (HTTP) 加密协议 (HTTPS)
密码安全性 极低,任何能捕获网络包的人都能看到 ,但存在中间人攻击风险
Wireshark 捕获 非常简单,直接查看即可 需要特殊配置(如中间人攻击或提供密钥日志)
如何防御 避免使用,强制网站升级到 HTTPS 使用 HTTPS + 2FA + VPN

核心思想:Wireshark 是一个强大的网络分析工具,它反映的是网络流量的真实面貌,密码是否安全,不取决于 Wireshark,而取决于数据在传输时是否被妥善加密,作为用户,养成使用 HTTPS 和开启 2FA 的习惯,是保护自己密码最有效的方法。

wireshark 网站密码
(图片来源网络,侵删)