- 类别: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 内部类的场景。
- 入口
tags:Equals—— 承接「会调用equals()」的上一环。 - 衔接
nextTags:ToString—— 之后接由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(""),构造空串的独立 xalanXString;其equals(Object)与 JDK 内置版语义相同——最终this.str().equals(obj2.toString()),对入参调用toString()。invoke封装同族一致:Object[]{obj1=xalan XString, obj2=内层对象},交由上游Equals环,反序列化时obj1.equals(obj2)→obj2.toString(),链切换到ToString触发环。
本类无 @Param,无用户可配字段。
- 依赖
xalan:xalan:2.6.0,使用独立 xalan 的org.apache.xpath.objects.XString。当目标不便使用com.sun.*内部类(如高版本 JDK 模块封装限制),但 classpath 存在独立 xalan 时,选用本变体作等价替代。 equals→toString语义与 JDK 内置版一致;本仓库中XalanXStringToString2/XalanXStringToString3对应独立 xalan 的XStringForChars/XStringForFSB变体。
usedInChains 为空 —— 自由构件,未直接出现在 51 条预设链中。
- 上游(
tags=Equals):HashMapEquals、HashTableEquals、ConcurrentHashMapEquals等。 - 下游(
nextTags=ToString):由toString()触发的 gadget(BadAttributeValueExpExceptionToString、各*ToString系列)。 - 同族变体:JDK 内置版 XStringToString1/XStringToString2/XStringToString3;独立 xalan 版
XalanXStringToString2、XalanXStringToString3(见 bid 35 批次)。