- 类别:common 别名:— 优先级:—
- 作者:—
- 依赖:
jdk:com.sun.org.apache.xpath.internal.objects.XString(JDK 内置 Xalan,无需外部依赖)
Equals → ToString 的桥接构件。构造一个 com.sun.org.apache.xpath.internal.objects.XString 对象与内层对象一起返回;当上游以 equals() 触发本对象时,XString.equals() 会对参数调用 toString(),从而把链从「equals 触发环」切换到「toString 触发环」,之后可调用任意对象的 toString()。
- 入口
tags:Equals—— 承接一个「会调用equals()」的上一环(如基于哈希碰撞的 Map 类 gadget)。 - 衔接
nextTags:ToString—— 之后接一个「由toString()触发」的下游 gadget。 excludes:无。
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); // 内层:ToString 触发目标
Object obj1 = this.getObject(); // XString 空串实例
Object[] objects = new Object[]{obj1, obj2};
return objects;
}getObject直接new XString(""),构造一个内容为空串的XString。XString是 JDK 自带 Xalan 的 XPath 对象,实现了Serializable,可安全进入序列化流。invoke先chain.doCreate(context)取内层对象obj2(真正要被toString()触发的下游产物),再把obj1(XString)与obj2打包成Object[]{obj1, obj2}返回。- 触发原理:
XString.equals(Object obj2)的实现最终归结为this.str().equals(obj2.toString())——它会对入参调用toString()。上游Equals环(如HashMapEquals/HashTableEquals/ConcurrentHashMapEquals制造哈希碰撞)在反序列化readObject阶段会执行obj1.equals(obj2),即xString.equals(obj2),于是obj2.toString()被调用,链继续走向ToString下游。 - 返回的两元素数组正是为上游
Equalsgadget 准备的「碰撞键值对」:一个作为被比较键(XString),另一个作为比较参数(内层对象)。
本类无 @Param,无用户可配字段。
- 使用 JDK 内置
com.sun.org.apache.xpath.internal.objects.XString,无需引入外部 xalan 依赖,通用性好;受高版本 JDK 对com.sun.*内部类模块封装(JPMS)影响时需注意可达性。 XString.equals的equals→toString语义是本桥的核心;三个XStringToStringN及XalanXStringToString1只是「XString 载体的不同实现」,equals逻辑同源。- 本构件不产生代码执行,仅完成触发方式的切换,RCE 能力取决于上游
Equals环与下游ToStringsink。
usedInChains 为空 —— 自由构件,未直接出现在 51 条预设链中。作为 Equals→ToString 通用跳板按需拼接。
- 上游(
tags=Equals):HashMapEquals、HashTableEquals、ConcurrentHashMapEquals等基于equals()触发的 gadget。 - 下游(
nextTags=ToString):由toString()触发的 gadget,如BadAttributeValueExpExceptionToString、各*ToString系列。 - 同族变体:XStringToString2(XStringForChars)、XStringToString3(XStringForFSB)、XalanXStringToString1(独立 xalan 版)。