• Shiro RememberMe 1.2.4 反序列化命令执行漏洞


    Apache Shiro 在 Java 的权限及安全验证框架中占用重要的一席之地,在它编号为550的 issue 中爆出严重的 Java 反序列化漏洞。下面,我们将模拟还原此漏洞的场景以及分析过程。

    复现过程

    一、 搭建漏洞环境

    有大佬已经搭建了docker环境可以直接使用。在安装docker后执行命令拉取环境运行就有了漏洞环境了。(docker真是个好东西啊)

    1.拉取环境到本地

    docker pull medicean/vulapps:s_shiro_1

    2.启动环境

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

    因为我已经拉下来过了dockers环境了所以直接启动docker,在docker中将shiro环境的8080端口映射到了主机的80端口,所以直接访问127.0.0.1就可以了。

    二、 漏洞分析

    从官方的 issue 上来看,漏洞的利用点是在cookie里的rememberMe参数,这个参数的值是AES加密再base64之后设置在cookie中的。在服务端对rememberMe的cookie值的操作应该是先base64解码然后AES解密再反序列化,就导致了反序列化RCE漏洞。

    服务端接收rememberMe的cookie值:

    rememberMe的cookie值=>base64解码=>AES解密=>反序列化

    我们要利用那么POC就需要先反序列化然后再AES加密最后base64编码

    Payload产生的过程:

    命令=>序列化=>AES加密=>base64编码=>payloadfunction(){   //外汇跟单www.gendan5.com

    在shrio中AES加密有一个iv向量但是没有用到所以随机生成一个就了,重要的是密钥密钥,如果没有修改默认的密钥那么就很容易就知道密钥了,之后就是编写POC了。

    三、 编写POC

    POC肯定是py写快一点鸭,需要用到java的反序列化工具ysoserial(在文末附上这个jar包的下载链接),py的Crypto模块,这个模块安装可能会出问题但是kali里py环境集成了这个模块。这里是一个简易版的POC只是生成一个payload然后使用,没有实现自动化。

    POC代码如下:

    四、 漏洞利用

    先登陆,勾选remberme

    然后抓包随便点一个页面包含有cookie参数的,这里抓的是登陆后的第一个包

    在vps或同网段虚拟机中执行“python –m SimpleHTTPServer 8080”, 然后再使用poc生成payload,这里执行的是“wget http://127.0.0.1:7080/”,让其去访问我的服务器执行命令

    修复建议

    1、升级shiro版本

    2、修改文件中硬编码的密钥

  • 相关阅读:
    【算法每日一练】LeetCode02 两数之和
    【算法每日一练】LeetCode01 两数之和
    【算法题】09-单链表翻转
    【算法题】08- 构造数组的MaxTree
    【算法题】07-生成窗口最大值数组
    【算法题】06-用栈来解决汉诺塔问题
    【算法题】05-用一个栈实现另一个栈的排序
    【算法题】04-猫狗队列
    【算法题】03-使用递归和栈逆序一个栈
    【算法题】02-使用两个栈实现队列额的功能
  • 原文地址:https://www.cnblogs.com/gendan5/p/11634014.html
Copyright © 2020-2023  润新知