• 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、修改文件中硬编码的密钥

  • 相关阅读:
    【2018.05.05 C与C++基础】C++中的自动废料收集:概念与问题引入
    【2018.04.27 C与C++基础】关于switch-case及if-else的效率问题
    【2018.04.19 ROS机器人操作系统】机器人控制:运动规划、路径规划及轨迹规划简介之一
    March 11th, 2018 Week 11th Sunday
    March 10th, 2018 Week 10th Saturday
    March 09th, 2018 Week 10th Friday
    March 08th, 2018 Week 10th Thursday
    March 07th, 2018 Week 10th Wednesday
    ubantu之Git使用
    AMS分析 -- 启动过程
  • 原文地址:https://www.cnblogs.com/gendan5/p/11634014.html
Copyright © 2020-2023  润新知