从Shiro反序列化到JWT攻击:用Wireshark解密特殊Web攻击的流量密码

从Shiro反序列化到JWT攻击:用Wireshark解密特殊Web攻击的流量密码

在Web安全攻防的战场上,流量分析常常是那个被低估的“幕后侦探”。当攻击者利用Shiro反序列化漏洞悄无声息地植入后门,或是通过篡改JWT令牌绕过身份验证时,这些行为在HTTP请求的汪洋大海中,就像披上了一层伪装。对于中高级安全研究人员和威胁狩猎团队而言,仅仅依赖传统的日志审计或端点检测,已经难以应对这些手法精巧、特征隐蔽的高级攻击。此时,Wireshark这类专业的网络协议分析工具,便成了我们透视攻击本质、捕获异常流量的“显微镜”。

这篇文章不是一篇简单的工具使用教程。我们将深入两个极具代表性的复杂攻击场景——Apache Shiro的反序列化漏洞利用和JSON Web Token (JWT)的算法篡改攻击。我们的目标,是教会你如何像法医一样,从看似正常的网络数据包中,提取出那些经过编码、加密或结构混淆的攻击载荷,并识别其独特的“指纹”。你将学习到的,不仅仅是几个Wireshark的过滤表达式,更是一套从流量捕获、特征提取、到解码分析和威胁确认的完整方法论。我们会探讨如何通过rememberMe字段的异常长度、JWT头部alg参数的微妙变化等非常规特征,在攻击发生的第一时间发出警报。文末,我们还将提供一个自制的漏洞环境流量样本包,供你动手实践,将理论转化为实战能力。

1. 理解攻击流量的“编码层”:Base64与加密的迷雾

在分析Shiro或JWT攻击流量之前,我们必须先拨开笼罩在原始攻击载荷之上的第一层迷雾:编码与加密。攻击者为了规避基础的字符串匹配检测,几乎无一例外地会对恶意载荷进行处理。Base64编码是最常见的“隐身衣”,它并非加密,而是一种将二进制数据转换为可打印ASCII字符的编码方式。在HTTP这类文本协议中传输二进制数据(如序列化对象、加密密文)时,Base64是标准选择。

提示:Wireshark内置了强大的解码功能。在数据包详情面板中,对包含Base64字符串的字段(如Cookie值)右键,选择“解码为...”(Decode As...),然后尝试“Base64”解码,可以快速查看其原始形态。

然而,对于Shiro反序列化这类攻击,事情要复杂得多。Shiro为了安全地存储用户身份信息,会对序列化后的对象进行AES加密,然后再进行Base64编码。因此,你在Cookie中看到的rememberMe值,是这样一个“三明治”结构:

原始恶意Java对象 -> Java序列化(二进制流) -> AES加密(密文) -> Base64编码(文本)

这意味着,直接从流量中搜索Runtime.exec()ProcessBuilder这类关键词是徒劳的。我们必须先识别出承载加密数据的“容器”(即超长的rememberMe值),然后理解其解密流程。下面是一个简化的概念性对比:

攻击类型原始载荷形态网络流量中的形态关键识别点
SQL注入可读的SQL语句URL编码后的SQL语句union, select, sleep, '等关键词
XSS可读的JavaScript代码URL编码后的HTML/JS标签<script>, alert, onerror=等标签或事件
Shiro反序列化序列化的Java对象Base64编码的AES密文rememberMe字段长度异常(通常>1000字符)
JWT算法篡改结构化的JSON头部/载荷Base64Url编码的字符串,以.分隔头部alg字段被改为none,或签名部分为空

这种根本性的差异,要求我们的分析思路从“关键词匹配”转向“异常行为识别”和“解码链还原”。

2. 狩猎Shiro反序列化:从超长Cookie到内存马

Apache Shiro框架的“记住我”(Remember Me)功能,其核心是将用户的认证信息序列化后加密存储在客户端的Cookie中。当漏洞存在时,攻击者可以构造恶意的序列化数据,在服务器反序列化时触发远程代码执行。在流量层面,这表现为一个特征极其明显的异常。

2.1 核心特征:异常的rememberMe长度

一个正常的“记住我”功能生成的Cookie值,经过加密和编码后,长度是相对固定且较短的。而一个包含完整利用链(例如CommonsCollections、Beanutils等)的反序列化攻击载荷,其长度会急剧膨胀。

如何在Wireshark中快速定位?

  1. 捕获流量:在疑似攻击发生的时间段,对目标Web服务器的流量进行全量捕获。
  2. 应用过滤:使用显示过滤器聚焦HTTP协议和关键字段。
    # 过滤所有HTTP流量
    http
    # 更精确地,过滤包含Cookie头的请求,特别是向目标服务器发送的请求
    http.request and http.cookie contains "rememberMe" and ip.dst == <目标服务器IP>
    
  3. 长度筛查:Wireshark本身没有直接的字段长度过滤语法,但我们可以通过观察或使用tshark(命令行版本)进行辅助分析。在图形界面中,你可以添加自定义列来显示rememberMe值的长度。
    • 在数据包列表栏右键 -> “列设置”(Column Preferences) -> 点击“+”添加新列。
    • 字段名输入:http.cookie
    • 在数据包详情面板中,找到rememberMe=xxxx部分,右键该字段 -> “作为过滤器应用” -> “选中”。然后观察过滤出的请求,人工对比Cookie值的长度。一个长度超过2000甚至3000字符的rememberMe值,是极强的高危信号。

2.2 深度解码与验证

仅仅发现超长Cookie还不够,我们需要验证它确实是恶意的。由于Shiro使用了AES加密,我们需要密钥才能解密。在漏洞利用过程中,攻击者通常会先进行“密钥爆破”。因此,流量中可能先出现一系列携带不同rememberMe值的探测请求,这些请求的响应可能包含Set-Cookie: rememberMe=deleteMe(这是Shiro框架在解密失败时的默认行为)。

分析步骤进阶:

  1. 提取载荷:在Wireshark中,选中包含超长rememberMe的HTTP请求包,在详情面板中展开Hypertext Transfer Protocol -> Cookie字段,完整复制rememberMe参数的值(一串很长的Base64字符串)。
  2. 尝试Base64解码:使用本地工具(如Python、在线解码器需谨慎)进行Base64解码。如果解码成功,你得到的将是一段乱码的二进制数据,这正是AES加密后的密文。这证实了数据是经过加密的,而非简单的编码。
    import base64
    # 示例:将Wireshark中复制的值粘贴于此
    rememberMe_b64 = "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"
    # 尝试解码
    try:
        decoded_bytes = base64.b64decode(rememberMe_b64)
        print(f"Base64解码成功,得到 {len(decoded_bytes)} 字节的二进制数据。")
        # 打印前100个字节的十六进制,通常AES密文看起来是随机的
        print("头部十六进制:", decoded_bytes[:100].hex())
    except Exception as e:
        print(f"Base64解码失败: {e}")
    
    如果解码失败(抛出binascii.Error),说明字符串可能不是标准的Base64,或者包含了填充错误。这时需要检查字符串是否被URL编码或存在其他变形。
  3. 关联分析:结合漏洞利用时间线。观察在出现超长rememberMe请求之前,是否有大量携带较短但结构相似的rememberMe的请求(密钥爆破尝试)。之后,是否紧接着出现了与攻击者IP交互的、非正常的HTTP响应(如命令执行回显)或新的、异常的出站连接(如下一章要讲的反弹Shell)。

这种从“长度异常”到“编码验证”再到“行为关联”的分析链条,是狩猎Shiro反序列化攻击流量的核心。

3. 解剖JWT攻击:算法“隐身”与签名缺失

JWT作为一种流行的无状态身份验证令牌,其安全性依赖于签名的完整性。攻击者常通过篡改JWT头部(Header)中的算法声明(alg字段)来实施攻击。

3.1 JWT结构回顾与流量特征

一个标准的JWT由三部分组成,以点号.分隔:Header.Payload.Signature。每一部分都是经过Base64Url编码的JSON字符串。

  • Header: 声明令牌类型和签名算法,如 {"alg": "HS256", "typ": "JWT"}
  • Payload: 包含声明(Claims),如用户ID、过期时间等。
  • Signature: 对前两部分的签名,用于验证消息在传输过程中未被篡改。

在流量中,JWT通常出现在Authorization: Bearer <token>头或URL参数、Cookie中。攻击流量最显著的特征就隐藏在Header里。

3.2 “none”算法攻击的流量指纹

一种经典的攻击是将alg字段改为"none",宣称不使用任何算法进行签名。如果服务器配置不当,未能正确验证签名算法,就会接受这个被篡改的令牌。

在Wireshark中识别此类攻击:

  1. 过滤与定位:首先过滤出携带JWT的请求。
    # 查找Authorization头中包含Bearer的请求
    http contains "Bearer"
    # 或者查找包含常见JWT结构(三个由点分隔的Base64块)的请求
    http matches "eyJ[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]*"
    
  2. 提取与解码:选中数据包,在详情面板中找到完整的JWT字符串。将其复制出来,以.为分隔符拆分成三部分。
  3. 解码Header:对第一部分(Header)进行Base64Url解码(注意:JWT使用Base64Url,与标准Base64略有不同,但Python的base64.urlsafe_b64decode可以处理)。这是最关键的一步。
    import base64
    import json
    
    # 从流量中提取的JWT
    jwt_token = "eyJhbGciOiJub25lIn0.eyJpYXQiOjE1MjYxMzE0MTEsImV4cCI6MTcwMjExMzQxOSwiYWRtaW4iOiJmYWxzZSIsInVzZXIiOiJUb20ifQ."
    # 注意:示例攻击载荷没有第三部分签名
    parts = jwt_token.split('.')
    if len(parts) >= 2:
        # 解码Header
        header_b64url = parts[0]
        # 补足可能的'='填充
        header_b64url += '=' * ((4 - len(header_b64url) % 4) % 4)
        try:
            header_json = base64.urlsafe_b64decode(header_b64url).decode('utf-8')
            header_dict = json.loads(header_json)
            print(f"解码后的JWT Header: {header_dict}")
            if header_dict.get('alg', '').upper() == 'NONE':
                print("*** 警报:检测到JWT 'none' 算法攻击! ***")
        except Exception as e:
            print(f"解码失败: {e}")
    
    运行上述代码,如果输出中alg字段为"none",那么这几乎可以断定是一次攻击尝试。
  4. 检查签名缺失:同时,观察JWT字符串是否只有两部分(Header.Payload.),缺失了第三部分签名,这也是alg: none攻击的常见形式。

3.3 密钥混淆攻击与弱密钥爆破

除了none攻击,还有密钥混淆攻击(如服务器使用RS256算法,但攻击者尝试使用HS256算法并搭配公钥进行签名)。在流量中识别这类攻击更为困难,因为它需要一个有效的签名。但我们可以关注一些间接特征:

  • 频繁的令牌重放:同一个客户端在短时间内提交了大量不同但结构相似的JWT,可能是在进行暴力破解或测试。
  • Payload篡改:解码JWT的第二部分(Payload),观察其中的声明(如useradminrole)是否被修改为高权限值。虽然签名可能有效,但如果密钥强度弱或被破解,这种篡改就会成功。这需要结合业务逻辑判断。

注意:直接在网络流量中解密JWT的Payload是分析的必要步骤,但这涉及用户隐私。请确保你的分析环境是授权的测试或安全研究环境,切勿在生产环境的用户数据上随意进行。

4. 构建威胁狩猎工作流与实战样本分析

掌握了单个攻击的特征后,我们需要将其系统化,融入日常的威胁狩猎(Threat Hunting)流程。这不仅仅是事后分析,更是主动发现潜在威胁。

4.1 基于Wireshark的主动狩猎策略

你可以创建一套自定义的Wireshark显示过滤器,作为你的“狩猎规则集”,在捕获流量时实时高亮可疑会话:

# 组合过滤器:寻找潜在的Shiro攻击
http.cookie contains "rememberMe" and frame.len > 1500
# 解释:包含rememberMe字段且整个数据帧长度异常大(因为Cookie值很长)

# 组合过滤器:寻找潜在的JWT none攻击
http.authorization contains "Bearer" and (http.authorization contains "eyJ" and (http.authorization contains "alg.none" or http.authorization matches "eyJ[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]{0,10}"))
# 解释:包含Bearer令牌,且令牌头部解码后可能包含"none"算法,或签名部分极短/缺失

将这些过滤器保存为色彩规则,让可疑流量在列表中自动以醒目的颜色(如红色)显示。

4.2 实战:分析自制漏洞环境流量样本

为了让你获得第一手经验,我们准备了一个集成了Shiro 550反序列化漏洞和JWT脆弱性测试点的自制Web应用环境。你可以在授权环境下部署并重现攻击,同时使用Wireshark捕获全过程流量。

样本分析任务清单:

  1. 定位Shiro攻击流

    • 在捕获的pcap文件中,过滤出所有HTTP请求。
    • 按照2.1节的方法,寻找rememberMe字段长度异常的请求。
    • 尝试对其中一个超长值进行Base64解码,确认其为二进制密文。
    • 观察该请求前后的流量,是否能找到攻击者进行密钥爆破的尝试(大量rememberMe值不同但长度相近的请求)?
    • 攻击成功后,是否在后续流量中发现了攻击者执行的命令(如whoamiipconfig的回显)或发起的反向连接?
  2. 定位JWT攻击流

    • 过滤所有包含Authorization: Bearer或Cookie中含有JWT的请求。
    • 提取几个JWT令牌,使用3.2节的Python脚本或在线工具(在隔离环境)解码其Header。
    • 是否找到了alg被改为none的令牌?
    • 对比攻击前后的令牌,Payload中的用户权限(如admin: false 变为 admin: true)是否发生了变化?
  3. 综合关联分析

    • 尝试在Wireshark中使用“追踪TCP流”(Follow TCP Stream)功能,查看一次完整攻击会话的明文通信(对于未加密的HTTP)。
    • 统计攻击源IP在短时间内发起的请求频率、访问的异常路径(如从未见过的API端点)。
    • 将你的分析发现,按照时间线整理成一份简单的安全事件报告。

通过亲手分析真实的攻击流量样本,你会对编码、加密在攻击中的实际作用,以及Wireshark在解密这些“流量密码”中的强大能力,有更深刻和直观的理解。这种从流量层面洞察威胁的能力,将使你在面对日益复杂的网络攻击时,多了一份笃定和从容。

「LLM那些事」系列第 4 篇《上下文窗口的边界》,文章连接:https://blog.csdn.net/houwenjin/article/details/163999753。 演示什么:在「预测」Sheet 的黄色格子里输入一句话(默认「来泡一杯」),四个「模型」——分别只统计最后 1 / 2 / 3 / 4 个字的 n-gram 查表——同时预测下一个字。同一个输入,看的上下文越长,候选越少、预测越确定: ┌────────────────┬──────────┬───────────────┬──────┐ │ 只看最后几个字 │ 用的前缀 │ 候选下一字数 │ 预测 │ ├────────────────┼──────────┼───────────────┼──────┤ │ 1 个 │ 杯 │ 3(茶/子/水) │ 模糊 │ ├────────────────┼──────────┼───────────────┼──────┤ │ 2 个 │ 一杯 │ 2(茶/水) │ 收窄 │ ├────────────────┼──────────┼───────────────┼──────┤ │ 3 个 │ 泡一杯 │ 1(茶) │ 确定 │ ├────────────────┼──────────┼───────────────┼──────┤ │ 4 个 │ 来泡一杯 │ 1(茶) │ 确定 │ └────────────────┴──────────┴───────────────┴──────┘
源码下载地址: https://pan.quark.cn/s/a4b39357ea24 笔记本的散热风扇管理 ---------------------------------------- 09 November 2006. 对于版本20061109的变更概述如下: 1) ACPI CA核心子系统:在源操作数是一个操作区域的场景下,对负载ASL操作符进行了优化。仅需映射操作区域内存,而不是执行逐字节读取。 (区域必须为SystemMemory类型,见下文。)修正了源操作数为区域字段的负载ASL操作符问题。也允许缓冲区对象作为源操作数。 BZ 480 解决了负载ASL操作符允许源操作数为任意类型操作区域的问题。现被限制为仅SystemMemory类型的区域,符合ACPI规范。 BZ 481 对新表管理器代码进行了额外的清理和优化。AcpiEnable将在所有必需的ACPI表未加载时失败(FADT, FACS, DSDT)。 BZ 477 在acobject.h中添加了#pragma pack(8/4),以确保此头文件中的结构始终编译为对齐。ACPI_OPERAND_OBJECT已被手动优化为对齐,并在字节打包时无法工作。示例代码和数据大小:这些是Microsoft Visual C++ 6.0 32位编译器生成的、与操作系统无关的acpica.lib的大小。调试版本的代码包含调试输出跟踪机制,具有更大的代码和数据大小。上一个版本:非调试版本:78.1K代码,17.1K数据,95.2K总计 调试版本:155.4K代码,63.1K数据,218.5K总计 当前版本:非调试版本:77.9K代码,17.0K数据,94.9K总计 调试版本:155.2K代码,63.1K数据,...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值