yso-cc5
1.从入口看

关键类BadAttributeValueExpException。
BadAttributeValueExpException类的readobject,调用 val = valObj.toString()
val已被赋值为TiedMapEntry类,toString方法如下:
public String toString() {
return this.getKey() + "=" + this.getValue();
}
//调用getValue()方法如下
public Object getValue() {
return this.map.get(this.key);
}
//this.map 被赋值为lazyMap ,
// final Map lazyMap = LazyMap.decorate(innerMap, transformerChain);
lazyMap .class中方法实现如下:
public static Map decorate(Map map, Transformer factory) {
return new LazyMap(map, factory);
}
protected LazyMap(Map map, Factory factory) {
super(map);
if (factory == null) {
throw new IllegalArgumentException("Factory must not be null");
} else {
this.factory = FactoryTransformer.getInstance(factory);
}
}
LazyMap的get方法,触发了transform方法。
public Object get(Object key) {
if (!super.map.containsKey(key)) {
Object value = this.factory.transform(key);
super.map.put(key, value);
return value;
} else {
return super.map.get(key);
}
}
this.factory被赋值transform链,触发
jdk7中测试发现BadAttributeValueExpException类的tostring方法,无法触发漏洞
public String toString() {
return "BadAttributeValueException: " + val;
}
```
本文详细探讨了一次关于BadAttributeValueExpException在Java中遇到的问题,涉及到了LazyMap装饰器和transform方法的调用过程。通过深入剖析,展示了如何在特定条件触发下,字符串转换过程中潜在的安全问题。
595

被折叠的 条评论
为什么被折叠?



