Skip to content

Latest commit

 

History

History
50 lines (41 loc) · 3.04 KB

File metadata and controls

50 lines (41 loc) · 3.04 KB

XStringForFSB 调用toString(XStringToString3)

  • 类别:common 别名:— 优先级:—
  • 作者:—
  • 依赖jdk:com.sun.org.apache.xpath.internal.objects.XStringForFSB(JDK 内置 Xalan)

作用

Equals → ToString 桥接构件,与同族一致,载体换成 com.sun.org.apache.xpath.internal.objects.XStringForFSB(基于 FastStringBuffer 的 XString 子类)。上游以 equals() 触发时,继承自 XStringequals() 对参数调用 toString(),完成到 toString 触发环的切换。

链接标签

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

源码剖析

public Object getObject() throws Exception {
    Object xStringForFSB = Reflections.createWithoutConstructor(
        "com.sun.org.apache.xpath.internal.objects.XStringForFSB");
    Reflections.setFieldValue(xStringForFSB, "m_obj", null);
    return xStringForFSB;
}

@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;
}
  • XStringForFSB 的构造器需要一个 FastStringBuffer 实例,直接 new 较繁琐;这里用 Reflections.createWithoutConstructor(...) 绕过构造器直接实例化一个空壳对象。
  • 随后 Reflections.setFieldValue(xStringForFSB, "m_obj", null)XString/XObject 体系的取值字段 m_obj 被显式置为 null,避免序列化/比较过程中携带无关或不可序列化的内部缓冲对象,保证对象干净可序列化,equals() 路径仍能走到对参数的 toString()
  • invoke 封装同族一致:Object[]{obj1=XStringForFSB, obj2=内层对象},交由上游 Equals 环,反序列化时 obj1.equals(obj2)obj2.toString()

参数(@Param)

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

适用版本与原理要点

  • 使用 JDK 内置 XStringForFSB,通过「免构造器实例化 + 反射清空 m_obj」得到一个可序列化的空壳载体;适合 XString/XStringForChars 直接构造受限或需要 FSB 子类作为载体的场景。
  • equals→toString 语义继承自基类 XString,与 XStringToString1/XStringToString2 同源。
  • 受高版本 JDK 对 com.sun.* 内部类模块封装(JPMS)影响时需注意可达性。

所属预设链

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

关联

  • 上游(tags=Equals):HashMapEqualsHashTableEqualsConcurrentHashMapEquals 等。
  • 下游(nextTags=ToString):由 toString() 触发的 gadget(BadAttributeValueExpExceptionToString、各 *ToString 系列)。
  • 同族变体:XStringToString1XStringToString2XalanXStringToString1