Skip to content

Latest commit

 

History

History
48 lines (39 loc) · 2.93 KB

File metadata and controls

48 lines (39 loc) · 2.93 KB

Xalan XString 调用toString(XalanXStringToString1)

  • 类别:common 别名:— 优先级:—
  • 作者:—
  • 依赖xalan:xalan:2.6.0(独立 xalan 库,非 JDK 内置)

作用

Equals → ToString 桥接构件,与 XStringToString1 完全同源,唯一区别是载体来自独立的 xalan 库——org.apache.xpath.objects.XString(而非 JDK 内置的 com.sun.org.apache.xpath.internal.objects.XString)。用于目标 classpath 引入了独立 xalan 而非依赖 JDK 内部类的场景。

链接标签

  • 入口 tagsEquals —— 承接「会调用 equals()」的上一环。
  • 衔接 nextTagsToString —— 之后接由 toString() 触发的下游 gadget。
  • excludes:无。

源码剖析

// import org.apache.xpath.objects.XString;   // 注意:独立 xalan 包名,非 com.sun.*
public Object getObject() throws Exception {
    XString xString = new XString("");
    return xString;
}

@Override
public Object invoke(GadgetContext context, GadgetChain chain) throws Exception {
    Object obj2 = chain.doCreate(context);
    Object obj1 = this.getObject();
    Object[] objects = new Object[]{obj1, obj2};
    return objects;
}
  • 反编译头部注释 Could not load the following classes: org.apache.xpath.objects.XString 属正常现象(本机缺少独立 xalan 依赖,不影响逻辑)。
  • getObject 直接 new XString(""),构造空串的独立 xalan XString;其 equals(Object) 与 JDK 内置版语义相同——最终 this.str().equals(obj2.toString()),对入参调用 toString()
  • invoke 封装同族一致:Object[]{obj1=xalan XString, obj2=内层对象},交由上游 Equals 环,反序列化时 obj1.equals(obj2)obj2.toString(),链切换到 ToString 触发环。

参数(@Param)

本类无 @Param,无用户可配字段。

适用版本与原理要点

  • 依赖 xalan:xalan:2.6.0,使用独立 xalanorg.apache.xpath.objects.XString。当目标不便使用 com.sun.* 内部类(如高版本 JDK 模块封装限制),但 classpath 存在独立 xalan 时,选用本变体作等价替代。
  • equals→toString 语义与 JDK 内置版一致;本仓库中 XalanXStringToString2/XalanXStringToString3 对应独立 xalan 的 XStringForChars/XStringForFSB 变体。

所属预设链

usedInChains 为空 —— 自由构件,未直接出现在 51 条预设链中

关联

  • 上游(tags=Equals):HashMapEqualsHashTableEqualsConcurrentHashMapEquals 等。
  • 下游(nextTags=ToString):由 toString() 触发的 gadget(BadAttributeValueExpExceptionToString、各 *ToString 系列)。
  • 同族变体:JDK 内置版 XStringToString1/XStringToString2/XStringToString3;独立 xalan 版 XalanXStringToString2XalanXStringToString3(见 bid 35 批次)。