Kibana远程代码执行漏洞攻击方法和漏洞原理分析
漏洞簡介
Kibana存在遠程代碼執行漏洞,影響版本為5.6.15和6.6.0之前的所有版本。擁有Kibana的Timelion模塊訪問權限的人可以以Kibana的運行權限執行任意代碼,包括反彈shell。
環境搭建
領取相關學習資料
靶機環境:
Parrot Security OS 4.7 64位 或其他類Linux操作系統(VMWare 14)
Elasticsearch6.5.4Kibana 6.5.4IP:10.10.10.128攻擊機環境:
Windows 10 Home 64位Netcat 1.12 64位Chrome瀏覽器IP:172.16.2.62漏洞利用
領取相關學習資料
1)在靶機上部署Kibana 和Elasticsearch,并開放訪問端口(./config/kibana.xml中的server.host改成0.0.0.0)讓攻擊機可以訪問(如圖1所示)。
圖1 在靶機上部署Elasticsearch和Kibana
2)確認執行權限并啟動Elasticsearch和Kibana(如圖2,3所示)
圖2 在靶機上確認Kibana執行權限
圖3 執行 Elasticsearch和Kibana
在攻擊機上啟動netcat(圖4),并通過Chrome瀏覽器訪問Kibana的Timelion頁面,并輸入payload(圖5)。
圖4 在攻擊機上啟動netcat
圖5 登錄Timelion并在輸入框中輸入payload
payload如圖6所示(為了避免各類糾紛,本文的攻擊代碼只放圖片版,文字版可以去參考鏈接里面自取)
(注意替換payload中的反彈IP為攻擊機IP)
點擊右邊的執行按鈕執行,然后點擊控制面板左邊的Canvas,可以獲取反彈shell
圖6 獲得反彈shell
多次操作之后可能會出現反彈不成功的現象,此時可以刪除kibana目錄并重新部署一次,記得修改kibana.xml!
漏洞機理
領取相關學習資料
“原型污染”是一種針對JS語言開發的攻擊方法。JS語言中,每一個對象都是有其原型(proto)的,而該原型又有其自己的原型對象,直到某個對象的原型為null。而如果JS對其中定義的對象原型的屬性讀寫缺乏控制,容易讓攻擊者操縱一些敏感特征,從而實現攻擊者的目的。
本漏洞就是是一個由于JS語言的“原型污染”,導致靶機環境量被污染,最終獲得shell執行的漏洞。具體調試過程如下
1、POC驗證
1) 在Timelion的輸入框中輸入本漏洞的POC:
2) 點擊canvas,可以發現cookie被污染,頁面無法訪問。
3)通過node調試工具(具體使用方法見參考鏈接)連接后臺,刪除Object.prototype的cookie值,刷新發現頁面暫時恢復正常。因此可以判定該處存在JS原型污染漏洞
2、漏洞產生原理和攻擊思路
1)點擊canvas頁面,可以發現后臺大量報錯,報錯原因是9229端口被占用。因此可以判斷:在點擊canvas頁面的過程中,kibana創建了新的node進程。(注意此時要連接chrome的node調試工具才會看到報錯)因此可以考慮通過劫持環境變量來實現shell命令注入。
2) 在創建新的node進程過程中,必然使用了NODE_OPTIONS環境變量,如果我們可以劫持該變量,那么就能影響node的新進程創建。NODE_OPTIONS不限制–require選項,該選項可以在執行js文件之前首先加載其他js模塊。而在本案例中,實現上傳惡意模塊的思路難以實現。因此考慮進一步污染環境變量的方法來間接達到這一目的。
3、payload構建
在構建payload之前,我們通過調試工具查看Object.protoytpe.env變量。
Timelion中,props方法的官方解釋是:
簡單來說,props可以修改任意對象的屬性值。
因此可以采用props方法來對JS中object對象的原型進行修改,同時也就修改了靶機的環境變量。據此,我們構建出了如下的代碼:
其中,label.proto.env是靶機的環境變量,我們在該變量中添加了一個鍵值對
最后兩個斜杠用于把后面的內容注釋掉。因此我們目前的payload是
點擊執行之后,繼續在調試工具中查看Object.protoytpe.env變量的污染情況:
可以看到env已經被污染
下一步就是污染NODES_OPTIONS變量,讓node命令在運行時執行我們上面構建的反彈shell的命令。
首先考慮使用eval函數,而node的開發者顯然意識到了這是個很危險的設計,因此在NODE_OPTIONS變量中禁用了eval函數,然而卻沒有禁用—require這個選項。因此我們構建這一部分的代碼:
最終,我們構建的payload成了如下結構:
點擊執行之后再次查看env的污染情況
總體來看,我們首先把環境變量修改成了一條js語句,然后又在node執行過程中劫持了執行參數NODE_OPTIONS,這樣構成了完整的攻擊鏈。當然還有最后一步點擊canvas頁面,讓node建立新進程的過程執行起來。從而達到反彈shell的目的。
危害分析和處理建議
領取相關學習資料
危害分析:
CNVD評級:高(A*V:N/AC:L/Au:N/C:C/I:C/A:C)
CNNVD評級:超危雖然該漏洞是一個遠程命令執行漏洞,但是本人認為該漏洞影響不大。
因為本漏洞是執行在Kibana的宿主機上,而Kibana是一個Elasticsearch的可視化工具,該工具很少有人會把其頁面暴露于公網。
能夠造成威脅的只有一種情況,就是頁面被暴露于公網,而且使用了弱用戶名和弱口令。
故本人認為該漏洞威脅不大。
處理建議:領取相關學習資料
1)及時升級Kibana和Elasticsearch到最新版本,同時盡量用低權限執行Kibana和Elasticsearch。2)盡量不要讓Kibana的Timelion頁面暴露于公網,并檢查是否存在使用弱口令登錄的情況。總結
以上是生活随笔為你收集整理的Kibana远程代码执行漏洞攻击方法和漏洞原理分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 重点解读《数据安全法》,做数据安全相关工
- 下一篇: 带你们了解数据安全探索者之路