反序列化漏洞(一)Shiro漏洞CVE-2016-4437复现

★★免责声明★★
文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与学习之用,读者将信息做其他用途,由Ta承担全部法律及连带责任,文章作者不承担任何法律及连带责任。

1、前言

春节后第一篇,祝大家龙年一切顺利,开始调整调整,再过几天就上班啦!我春节期间休息几天没有更新,但跑步不间断,每天室内慢跑60分钟+,所以没有长胖。你春节期间有坚持运动吗?

接下来会分享反序列化几个常见漏洞(shiro、weblogic和fastjson):原理和复现,可能会有3~4个篇幅,具体以实际为准。

2、序列化和反序列化

序列化就是把对象转换成字节流,便于保存在内存、文件、数据库中,保证对象的完整性和可传递性;反序列化即逆过程,由字节流还原成对象。 根据字节流中保存的对象状态及描述信息,通过反序列化重建对象。在PHP中序列化和反序列化对应的函数分别为serialize()和unserialize()。

常见序列化出现场景:
1.远程和进程间通信(RPC/IPC)
2.连线协议、 Web服务、消息代理
3.缓存/持久性存储区
4.数据库、缓存服务器、文件系统
5.HTTP cookie、 HTML表单参数、 API身份验证令牌

3、反序列化漏洞原理

当程序在进行反序列化时,会自动调用一些函数,以PHP为例有__wakeup(),__destruct()等函数, Java中有readObject()方法等,但是如果传入函数的参数可以被用户控制的话,用户可以输入一些恶意代码到函数中,从而导致反序列化漏洞。

常见危害:
1.远程代码执行,如:system(‘whoami’)等
2.重放攻击
3.注入
4.特权提升

4、Shiro反序列化漏洞原理

AES加密的密钥Key被硬编码在代码里,由于Shiro源码开源,意味着每个人通过源代码都能拿到AES加密的密钥。因此,攻击者构造一个恶意的对象,并且对其序列化、AES加密、 base64编码后,作为cookie的rememberMe字段发送。 Shiro将rememberMe进行解密并且反序列化,最终造成反序列化漏洞。

漏洞影响版本
Apache Shiro <=1.2.4

4.1、解析步骤

1.检索RememberMe cookie 的值;
2.Base 64解码;
3.使用AES解密(加密密钥硬编码);
4.进行反序列化操作,生成用户登录信息对象(未作过滤处理),在调用反序列化时未进行任何过滤,导致可以触发远程代码执行漏洞。

4.2、漏洞特征

返回包中存在 rememberMe=deleteMe 字段

5、CVE-2016-4437漏洞复现

docker环境搭建详见《kali系统安装docker和部署vulhub服务》

5.1、启动靶场环境
# 先切到对应目录
cd /home/kali/vulhub-master/shiro/CVE-2016-4437

# 开启靶场
docker-compose up -d

# 查看靶场启动情况
docker-compose ps

在这里插入图片描述

5.2、访问靶场

访问:http://your-ip:8080

在这里插入图片描述

5.3、查看漏洞说明

在靶场启动同一个目录有一个README.md文档,说明漏洞原理,测试账号:admin/vulhub和漏洞重现步骤说明。

在这里插入图片描述

5.4、确定注入点

使用Burp suite抓包,未登陆的情况下,请求包的cookie中没有rememberMe字段,返回包set-Cookie里也没有deleteMe字段。

登陆失败或成功,不管有没有勾选RememberMe字段,返回包都会有rememberMe=deleteMe字段。但是如果不勾选RememberMe字段,登录成功后所有请求中Cookie都不会有rememberMe字段

5.4.1、未登录时

在这里插入图片描述

5.4.2、登录失败,无勾选

在这里插入图片描述

5.4.3、登录成功,勾选,访问其他页面

在这里插入图片描述

5.5、利用工具
5.5.1、shiro_attack_2.2

在这里插入图片描述

爆破链利用,结合burp suite工具代理使用。
在这里插入图片描述
在这里插入图片描述

命令执行

在这里插入图片描述

6、下期内容预告

下期内容继续分享Shiro另外两个漏洞复现:CVE-2019-12422和CVE-2020-1957,敬请关注我的公众号,持续更新中…

7、资料获取

如果需要Shiro漏洞利用工具,请关注公众号:大象只为你,后台回复:shiro漏洞。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL-运维

一、日志 1.错误日志 错误日志是MySQL中最重要的日志之一&#xff0c;它记录了当mysql启动和停止时&#xff0c;以及服务器在运行过程中发生任何严重错误时的相关性息。当数据库出现任何故障导致无法正常使用时&#xff0c;建议首先查看此日志。 该日志是默认开启的&#xf…

国产制造,欧美品质:爱可声助听器产品质量获国际认可

随着科技的发展和全球化的推进&#xff0c;越来越多的中国制造产品开始走向世界舞台。其中&#xff0c;爱可声助听器凭借其卓越的产品质量&#xff0c;成为了国产制造的骄傲。 国产制造指的是在中国境内生产的产品&#xff0c;欧美品质则是指产品在设计、生产、质量控制等方面…

CSS3学习(一)

1. 语法规范 CSS主要由选择器和一条或多条的声明构成。 选择器用于指定CSS样式的HTML标签&#xff0c;花括号里面是对应的具体样式 属性与属性值以键值对的形式出现&#xff0c;属性与属性之间用分号隔开 <head>里写<style> 2. 基础选择器 【作用】选择标签使…

【计算机网络】FTP 文件传输协议

同样使用TCP 但使用了两个并行的TCP 控制链接 control connection 带外 out-of-band 传送的数据链接 data connection 对于FTP而言&#xff0c;控制链接贯穿了整个用户会话期间&#xff0c;数据链接每传输一个文件就有一次建立FTP是有状态&#xff08;state&#xff09;的&…

【从Python基础到深度学习】4. Linux常用命令(进阶)

接上篇 【从Python基础到深度学习】4. Linux 常用命令-CSDN博客 1.文件查找 - find 命令 find [搜索路径] [搜索条件] [操作]1.1 常用选项和参数 -name&#xff1a;按文件名搜索。 find 命令的 -name 选项可以接受通配符来匹配文件名。通配符可以帮助你更灵活地搜索文件名&a…

【Web】NSSCTF Round#18 Basic个人wp(部分)

目录 ①门酱想玩什么呢&#xff1f; ②Becomeroot ①门酱想玩什么呢&#xff1f; 先试一下随便给个链接 不能访问远程链接&#xff0c;结合评论区功能&#xff0c;不难联想到xss&#xff0c;只要给个评论区链接让门酱访问就可 我们研究下评论区 从评论区知道&#xff0c;要…

建立知识体系,这份指南就够了

最近&#xff0c;许多读者私信我&#xff0c;问到这个问题。 恰好又要推送了&#xff0c;索性分享一些心得。 说实话&#xff0c;这是个很大的问题&#xff0c;要彻底讲透&#xff0c;大概得写一整本书。 所以&#xff0c;我尝试用尽量简洁的篇幅&#xff0c;将这个问题说清楚。…

Redis进阶(二):事务

redis事务特点 弱化的原子性 redis事务的原子性不像MySQL原子性一样&#xff0c;执行不成功的话&#xff0c;redis事务不会进行回滚操作 不具备一致性 redis没有约束&#xff0c;也没有回滚机制&#xff0c;因此事务执行的过程中如果某个修改操作出现失败&#xff0c;就可能引起…

研究多态恶意软件,探讨网络安全与AI

前言 近期ChatGPT火遍全球&#xff0c;AI技术被应用到了全球各行各业当中&#xff0c;国内外各大厂商也开始推出自己的ChatGPT&#xff0c;笔者所在公司在前段时间也推出了自研的安全GPT&#xff0c;AI技术在网络安全行业得到了很多的应用&#xff0c;不管是网络安全研究人员、…

ClickHouse--05--MergeTree 表引擎

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 MergeTree 系列表引擎前言MergeTree 系列表引擎 --功能MergeTree 系列表引擎 --种类 1.MergeTree1.1MergeTree 建表语句&#xff1a;1.2 MergeTree 引擎表目录解析查…

vscode-python的debug 教学(最全)

vscode中的python-debugger的使用 Visual Studio Code 的主要功能之一是其强大的调试支持。VS Code 的内置调试器有助于加速编辑、编译和调试循环。 一、 安装python-debugger插件 在插件库内搜索python Debugger&#xff0c;安装插件 三、 进行debug&#xff08;不带参数…

Linux查看日志的几种方法总结

摘要 Linux系统中查看日志的命令确实多种多样&#xff0c;每个命令都有其特定的用途和优势。常用的命令有&#xff1a;tail、cat、tac、head、echo&#xff0c;grep、less、awk、sed。 下面我会详细解释这些命令在查看日志时的用法和特点&#xff1a; tail命令&#xff1a; ta…

ELAdmin 部署

后端部署 按需修改 application-prod.yml 例如验证码方式、登录状态到期时间等等。 修改完成后打好 Jar 包 执行完成后会生成最终可执行的 jar。JPA版本是 2.6&#xff0c;MyBatis 版本是 1.1。 启动命令 nohup java -jar eladmin-system-2.6.jar --spring.profiles.active…

【AI视野·今日CV 计算机视觉论文速览 第292期】Thu, 18 Jan 2024

AI视野今日CS.CV 计算机视觉论文速览 Thu, 18 Jan 2024 Totally 102 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computer Vision Papers GARField: Group Anything with Radiance Fields Authors Chung Min Kim, Mingxuan Wu, Justin Kerr, Ken Goldberg, Matt…

CTFshow web(文件上传151-154)

web151 哈&#xff0c;都直接送嘴边了&#xff0c;前端检测领域的问题&#xff0c;那就改前端啊&#xff0c;作者都直接提示了&#xff01; 第一种方法也是最好用的就是直接把前端内容的png改成php就好 这里教大家一个非常好用的技巧&#xff0c;可以极大节省你的时间&#xf…

C++,stl,函数对象,谓词,内建函数对象

目录 1.函数对象使用 2.谓词 1.一元谓词 2.二元谓词 3.内建函数对象 1.算术仿函数 2.关系仿函数 3.逻辑仿函数 1.函数对象使用 #include<bits/stdc.h> using namespace std;class add { public:int operator()(int v1,int v2){return v1 v2;} };class print { p…

每日五道java面试题之java基础篇(八)

第一题.CopyOnWriteArrayList的底层原理是怎样的 ⾸先CopyOnWriteArrayList内部也是⽤过数组来实现的&#xff0c;在向CopyOnWriteArrayList添加元素时&#xff0c;会复制⼀个新的数组&#xff0c;写操作在新数组上进⾏&#xff0c;读操作在原数组上进⾏并且&#xff0c;写操作…

Java学习第十三节之数组的定义和数组声明创建

数组的定义 数组声明创建 package array;public class ArrayDemo01 {//变量的类型 变量的名字 变量的值//数组类型public static void main(String[] args) {int[] nums;//1.声明一个数组nums new int[10];//2.创建一个数组int[] nums2 new int[10];//声明和创建数组一块…

深度学习从入门到不想放弃-7

上一章的内容 深度学习从入门到不想放弃-6 (qq.com) 今天讲的也算基础(这个系列后来我一寻思,全是基础 ),但是可能要着重说下,今天讲前向计算和反向传播,在哪儿它都永远是核心,不管面对什么模型 前向计算: 有的叫也叫正向传播,正向计算的,有的直接把前向的方法梯度下…

js toFixed函数精度问题

在使用toFixed函数会出现精度缺失问题&#xff0c;如下图 在2.55与1.45保留1位小数时&#xff0c;正常情况下应该为2.6与1.5&#xff0c;而toFixed函数得出的是2.5与1.4。这和计算机中小数存储有关。 小数运算不精确其实与下面三方面有关&#xff1a; 1、存储 2、运算 3、显示…