Shiro后渗透拓展面

💡 原文中文,约7300字,阅读约需18分钟。
📝

内容提要

本文介绍如何利用Java Agent技术扩展Shiro后渗透功能。作者借鉴BeichenDream的InjectJDBC项目,通过Agent hook目标类并修改代码逻辑,实现了修改Shiro密钥和获取密钥的功能。工具支持注入指定进程,通过文件或参数传递密钥,便于内网横向渗透和快速恢复访问。文章提供了完整代码和使用方法,并总结了学习心得。

🔎

延伸解读

技术原理与实现思路

本文通过Java Agent技术,在目标JVM中动态修改类的字节码,实现对Shiro框架的密钥修改与获取。核心是利用javassist库对AbstractRememberMeManager的decrypt方法插入自定义代码,从而在解密流程中执行额外逻辑。这种方法避免了传统反射获取实例的复杂性,提供了一种更通用的后渗透操作方式。

应用场景与价值

获取Shiro密钥在实战中具有多重价值:在已获得shell的情况下,可快速利用Shiro漏洞进行内网横向移动;将密钥加入字典便于后续测试;若修改密钥后遗忘,可通过此工具重新获取;即使权限丢失,也能通过Shiro入口快速恢复访问。这些场景凸显了该工具在红队攻防中的实用性。

使用注意事项

工具使用时需注意:注入进程需指定正确的PID,密钥传递支持文件或直接参数,且文件路径需使用正斜杠。触发获取密钥操作需手动发送登录请求(无论正确与否)。此外,工具依赖Java Agent机制,可能受目标环境安全策略限制,实际使用中需结合具体环境调整。

Q&A

Shiro后渗透拓展面工具是如何实现修改Shiro密钥的?

该工具通过Java Agent技术,在目标JVM中hook `AbstractRememberMeManager`类的`decrypt`方法,并在方法开头插入代码,根据传入参数判断是修改密钥还是获取密钥。修改密钥时,调用`setCipherKey`方法将Base64解码后的新密钥设置进去。

如何获取Shiro的密钥?

使用工具注入目标进程后,触发一次登录请求(无论正确与否),工具会在`decrypt`方法中调用`getDecryptionCipherKey()`获取当前密钥,并以Base64格式写入指定的文件中。

Shiro后渗透拓展面工具的使用方法是什么?

首先使用`java -jar AgentInjectTool.jar list`获取目标进程PID,然后使用`java -jar AgentInjectTool.jar inject {pid} {file.txt|shirokey}`注入。若参数是文件路径,则触发登录后密钥会写入该文件;若参数是密钥字符串,则直接修改密钥。注意路径需使用正斜杠。

为什么在已经获取shell的情况下还需要获取Shiro的key?

获取Shiro的key有四个价值:1. 方便快速实现内网横向渗透;2. 将key加入字典便于后续项目测试;3. 如果修改key后忘记,可以补救;4. 如果shell丢失,可以通过Shiro入口快速重新进入。

Shiro后渗透拓展面工具借鉴了哪个项目?

该工具借鉴了BeichenDream的InjectJDBC项目,该项目通过Java Agent技术hook JDBC的Driver类来获取数据库明文密码。作者在此基础上扩展了Shiro密钥的修改和获取功能。

Shiro后渗透拓展面工具支持哪些功能?

该工具支持三个功能:1. 获取JDBC数据库连接字符串(来自InjectJDBC);2. 修改Shiro密钥;3. 获取Shiro密钥。

🏷️

标签

➡️

继续阅读