weblogic 2729过去了这么久,一开始只有10.3.6的版本exp以及分析公开,现在12.1.3 exp也在阿里白帽大会公布了,于是分析一下。
拿10.3.6的payload来打,发现报错。
无法使用UnitOfWorkChangeSet
这个类,12.1.3已经没有这个类了。
weblogic 2715禁止使用class标签了,通过DocumentHandler
查看是否还有其他标签和属性是否可用。
jdk1.7比jdk1.6多了几个标签。看看有什么利用
网上有例子,并且官方有文档解释。
<property name="command"></property> //执行getCommand方法
<property name="command"><string>calc</string></property> //执行setCommand方法。
参数限制于java基本类型。
获取类中的静态属性。
结合起来的例子
package com.company;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
public class People {
public static People people = new People("xxxx");
String command;
People(String command) {
this.command = command;
}
public String getCommand() {
System.out.println(this.command);
return this.command;
}
public void setCommand(String command) {
this.command = command;
}
public static void main(String[] args) {
java.io.File file = new java.io.File("d:/people.xml");
java.beans.XMLDecoder xd = null;
try
{
xd = new java.beans.XMLDecoder(new BufferedInputStream(new FileInputStream(file)));
}
catch(Exception e)
{
e.printStackTrace();
}
Object o = xd.readObject();
xd.close();
}
}
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.8.0_131" class="java.beans.XMLDecoder">
<field class="com.company.Test" name="people" id="peopleobj"/>
<var idref="peopleobj">
<property name="command">
<string>calc</string>
</property>
<property name="command">
</property>
</var>
</java>
打印了cacl。总结一下我们现在能做的,调用静态属性的get set方法。void标签可以实例化,但是没办法获取class。
这里当时我找了很久,也没找到被实例化当成静态属性的危险类。类的范围被限制太死了,既然是被限制的代码执行,那能不能找下其他利用,先获取任意类,然后使用void标签进行实例化的操作,再调用实例化类的setter、getter方法。结果是能找到,而且几个类能这样利用。
通过寻找beanclass,set方法是String,get方法返回的是Class类型。
寻找staticclass,提取静态属性所有的class类型。
然后还有继承关系,如果staticclass的子类是beanclass,也算入其中。
除了公开的com.bea.xbean.schema.BuiltinSchemaTypeSystem ST_ANY_TYPE
这里我一共找了三条可以实例化任意类。
org.eclipse.persistence.internal.databaseaccess.DatabaseCall FIRSTRESULT_FIELD
class:org.eclipse.persistence.internal.helper.DatabaseField
setter:typeName
getter:type
org.apache.xmlbeans.impl.schema.XQuerySchemaTypeSystem ST_ANY_TYPE
class:org.apache.xmlbeans.impl.schema.SchemaTypeImpl
setter:FullJavaName
getter:JavaClass
org.apache.xmlbeans.XmlBeans NO_TYPE
class:org.apache.xmlbeans.impl.schema.SchemaTypeImpl
setter:fullJavaName
getter:javaClass
现有公开的有两种利用:
1、直接找命令执行或者文件操作的类。
weblogic.nodemanager.client.ShellClient
,直接执行命令。
2、反序列化的类。
org.slf4j.ext.EventData
,可以看到构造方法可以进行二次xmldecoder,并且参数也是可控的。
最后回显
阿里白帽大会weblogic议题
https://balis0ng.com/post/lou-dong-fen-xi/weblogic-wls9-asynczu-jian-rcelou-dong-fen-xi