一、漏洞简介
-
shiro-550主要是由shiro的rememberMe内容反序列化导致的命令执行漏洞,造成的原因是默认加密密钥是硬编码在shiro源码中,任何有权访问源代码的人都可以知道默认加密密钥。于是攻击者可以创建一个恶意对象,对其进行序列化、编码,然后将其作为cookie的rememberMe字段内容发送,Shiro 将对其解码和反序列化,导致服务器运行一些恶意代码。
-
影响版本:shiro <= 1.2.4
-
特征:
-
cookie中含有rememberMe字段,如:“rememberMe=JV+gEljeMVBj3EFY22otzX……”
-
cookie中含有”rememberMe=delete“
-
二、漏洞复现
2.1 实验环境
-
被攻击主机
-
主机:Centos7.9 (IP:192.168.219.206)
-
漏洞环境:vulhub/shiro:1.2.4
-
-
-
攻击主机
-
主机:Windows10(IP:192.168.219.1)
-
漏洞利用工具:ShiroExploit by 飞鸿(https://github.com/feihong-cs/ShiroExploit-Deprecated),netcat-win32-1.12(https://eternallybored.org/misc/netcat/)
-
2.2 环境搭建
-
本次实验使用docker进行环境搭建。
-
拉取镜像
-
docker pull vulhub/shiro:1.2.4
-
-
创建容器
-
docker run -itd --name shiro550 -p 8080:8080 vulhub/shiro:1.2.4
-
-
临时开放端口
-
firewall-cmd --add-port=8080/tcp
-
-
访问http://192.168.112.156:8080/login
-
2.3 复现过程
-
在攻击主机打开shiro反序列化利用工具,选择漏洞类型为shiro550,地址栏中填入对应的地址,http://192.168.112.156:8080/login
-
-
而后选择ceye.io进行漏洞检测(CEYE是一个用于检测带外数据(Out-of-Band)的监控平台,例如DNS查询和HTTP请求。它可以帮助安全研究人员在测试漏洞时收集信息,例如SSRF/ XXE/ RCE等
-
如果ceye.io检测不出来可以换dnslog
-
-
当扫描完后,会告诉我们可以使用哪些利用链进行命令执行。
-
-
kali监听4444
-
nc -lvp 4444
-
-
-
使用其简便操作进行反弹shell,指定反弹shell的连接地址为192.168.112.179:4444后,进行反弹shell的连接。
-
-
成功连接。
-
2.4 修复建议
-
更新shiro到1.2.4以上的版本。
-
不使用默认的加密密钥,改为随机生成密钥。