Java安全——CC3
嗯,用户让我帮忙总结一下这篇文章的内容,控制在一百个字以内。首先,我需要仔细阅读文章,理解它的主要观点和重点。 文章主要讲的是Java安全中的一个漏洞利用方法,叫做CC3CC3。它的目标是找到除了invokeTransformer和Runtime#exec之外的其他命令执行漏洞点。具体来说,作者提到了TemplatesImpl#newTransformer和TrAXFilter#TrAXFilter这两个方法。 接下来,文章详细描述了主要的逻辑步骤。首先,使用动态类加载方法defineClass来加载恶意类。这里找到了TemplatesImpl类,并利用它的一系列逻辑来加载恶意外部类。然后,尝试使用TemplatesImpl的公有方法newTransformer作为出口点,调用构造好的TemplatesImpl类下的newTransformer方法,从而实现链路逻辑。 在过程中,作者提到了一些关键点,比如通过反射设置字段值,并且确保恶意类继承AbstractTranslet以满足后续实例化的条件。此外,还提到了构造恶意类时需要注意的一些细节。 最后,文章还附带了免责声明,强调技术信息仅供参考,并提醒读者遵守相关法律法规,在实际应用前充分测试和评估。 总结一下,这篇文章详细介绍了如何利用TemplatesImpl#newTransformer方法实现命令执行漏洞的利用过程,并强调了相关注意事项和技术细节。 </think> 这篇文章探讨了Java安全中的一个漏洞利用方法CC3CC3,旨在寻找除invokeTransformer与Runtime#exec之外的命令执行漏洞点。通过分析TemplatesImpl#newTransformer和TrAXFilter#TrAXFilter的方法,文章展示了如何利用动态类加载机制defineClass来加载恶意外部类,并通过反射设置字段值以实现漏洞链路逻辑。最终强调了在构造恶意类时需继承AbstractTranslet以确保实例化成功。 2026-1-29 09:2:15 Author: www.freebuf.com(查看原文) 阅读量:1 收藏

freeBuf

主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

Java安全-CC3

CC3的目的是为了找到除invokeTransformerRuntime#exec之外的可以实现命令执行的漏洞点

TemplatesImpl#newTransformerTrAXFilter#TrAXFilter

一、主要逻辑

1.危险调用点

这里用到了之前所学的动态类加载方法defineClass,但是大部分直接实现的defineClass方法都私有的

经过寻找,我们找到了TemplatesImpl

image-20260124171321899

于是可以使用他的一系列逻辑加载我们的恶意外部类

2.TemplatesImpl#newTransformer

尝试使用一个公有方法调用defineClass

defineTransletClasses这个方法调用了defineClass

image-20260124172036610

将其加载参数改为恶意类

byte[] code = Files.readAllBytes(Paths.get("D:\\小川\\code\\javasec\\CC1\\target\\classes\\CC1\\HelloTranslet.class"));

setFieldValue(obj, "_bytecodes", new byte[][] {code});

此方法依旧为private,又找到getTransletInstance方法

image-20260124172537360

但是需要满足图中的条件,通过反射设置

setFieldValue(obj, "_name", "HelloTemplatesImpl");
setFieldValue(obj, "_tfactory", new TransformerFactoryImpl());

_tfactory这个参数会在TemplatesImpl反序列化的时候自行赋值

image-20260124173107692

此方法依旧为private,于是找到了公开的newTransformer

image-20260124173716487

这里就是最终的出口点,我们只需要调用构造好的TemplatesImpl类下的newTransformer方法,即可成功实现链路逻辑,加载恶意外部类

但是还有一点需要注意defineTransletClasses方法在加载完类后,会判断,从而影响下一步getTransletInstance的类的实例化

image-20260124174304831

所以为了保证逻辑不出问题,我们在构造恶意类时需要继承与常量类,并且实现需要的方法

public class HelloTranslet extends AbstractTranslet {

尝试打通,后面具体的调用方法,我们暂时用CC6TiedMapEntry实现

byte[] code = Files.

免责声明

1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。

2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。

3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。

已在FreeBuf发表 0 篇文章

本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)


文章来源: https://www.freebuf.com/articles/web/468833.html
如有侵权请联系:admin#unsafe.sh