一個(gè)典型的Node應(yīng)用可能會(huì)有幾百個(gè),甚至上千個(gè)包依賴(大部分的依賴是間接的,即下載一個(gè)包,這個(gè)包會(huì)依賴其他的好多包),所以最終的結(jié)果是,應(yīng)用程序就會(huì)像是這個(gè)樣子的:

和所依賴的包相比,自己寫的代碼量就顯得少的可憐,引入了大量的包成為了應(yīng)用程序的代碼,也就引入了一些不可預(yù)知的隱患,比如我們是否知道這些包是否是安全的,如果我們引入的包是安全的,那這些包自己引入的第三方的包也是安全的嗎?如果不是,那么這些隱患也會(huì)就成了應(yīng)用程序的小后門,讓黑客可以隨意進(jìn)出。

所以我們需要一個(gè)工具能夠掃描這些包的漏洞,減少自己應(yīng)用程序被黑客攻擊的可能性。在這里我推薦我目前在用的snyk,https://snyk.io/,這里面可以有兩種方式來(lái)檢測(cè)我們應(yīng)用程序的漏洞,一種是從代碼倉(cāng)庫(kù)中直接引入進(jìn)來(lái),目前支持的代碼倉(cāng)庫(kù)有:

首先來(lái)講一種比較繁瑣,但是比較直觀的方法:

選擇一個(gè)你的代碼倉(cāng)庫(kù),我們這里以GItHub為例,演示一下:

選擇需要添加的賬號(hào):

給添加需要掃描的漏洞的倉(cāng)庫(kù)

如果是NodeJs的項(xiàng)目,他會(huì)自動(dòng)關(guān)聯(lián),如果沒(méi)有自動(dòng)關(guān)聯(lián),自己添加文件的位置

生成測(cè)試報(bào)告

點(diǎn)擊 View report and fix 可以查看詳細(xì)的報(bào)告

然后根據(jù)修復(fù)的方法把漏洞給修復(fù)就行了,基本上是更新打補(bǔ)丁進(jìn)行修復(fù)。如果還沒(méi)有修復(fù)方案的,可以自己向作者提出如何修復(fù)這個(gè)漏洞。如果選擇了自動(dòng)掃描,他會(huì)自己掃描應(yīng)用程序中的package.json文件,如果有新的漏洞出來(lái),會(huì)有郵件通知,及時(shí)修復(fù)這個(gè)漏洞就行。

 

接下來(lái)我們用第二種方法,第二種相對(duì)快速簡(jiǎn)單一些:

打開 iTerm(其他命令行工具也可以,但這里以iTerm為例),安裝snyk的命令行工具:

 

npm install -g snyk

 

安裝成功之后,進(jìn)入Node應(yīng)用的根目錄中,輸入 snyk test:

 

就會(huì)看到漏洞的列表

然后再運(yùn)行 snyk wizard 可以對(duì)漏洞進(jìn)行修復(fù)

 

一般選擇第一項(xiàng),通過(guò)更新依賴來(lái)修復(fù)漏洞。一項(xiàng)一項(xiàng)修復(fù)就行了。

兩種方法說(shuō)完了,接下來(lái)我們來(lái)拿幾個(gè)漏洞來(lái)測(cè)試一下怎么利用這些漏洞進(jìn)行測(cè)試攻擊:

Node項(xiàng)目Demo代碼(https://github.com/wjszxli/goof):

1.利用 st 模塊進(jìn)行目錄遍歷

這是模塊信息:

st 模塊是一個(gè)提供靜態(tài)文件服務(wù)的中間件,比如我們的javascript,css和圖像等文件,在我們示例的項(xiàng)目中的代碼的位置是在

這是檢測(cè)出來(lái)的漏洞信息:

接下來(lái)我們開始模仿:

我們?cè)趇Term中先嘗試著獲取他的 about頁(yè)面:

可以看到,獲取了源代碼

那來(lái)試試看看能不能突破文件夾的限制:

規(guī)范化的文件夾路徑被過(guò)濾掉了,那用 URL編碼的格式來(lái)試試看:

額,得到了項(xiàng)目根目錄的文件,那如果要獲取其中任意一個(gè)文件的源代碼就輕而易舉了,比如我們要拿到db.js的內(nèi)容:

簡(jiǎn)簡(jiǎn)單單就得到了

那如果要獲取服務(wù)器上的其他文件夾呢

黑客就能用Node有權(quán)訪問(wèn)的任何文件

2.利用 marked 進(jìn)行跨站腳本攻擊(xss):

這是模塊信息

這是我們的漏洞信息:

 

在標(biāo)簽頁(yè)有使用到 marked,那我們就試試標(biāo)簽頁(yè),第一次先這樣試一試,輸入 <script>alert(1)</script>

這種情況倒是控制住了:

那我們來(lái)創(chuàng)建一個(gè)標(biāo)記格式的鏈接,輸入 [Gotcha](javascript:alert(1)),看看發(fā)生了什么:

也沒(méi)產(chǎn)生效果,他也做了處理。

那再試試轉(zhuǎn)義,試試他做了轉(zhuǎn)義沒(méi)有,那我輸入:[Gotcha](javascript&#58this;alert(1&#41;),這下效果出來(lái)了,

好像有反應(yīng)了,點(diǎn)擊一下,還真的生效了!

 

 

http://www.cnblogs.com/wjszxli/p/6902305.html

網(wǎng)友評(píng)論