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

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

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

首先來講一種比較繁瑣,但是比較直觀的方法:

選擇一個你的代碼倉庫,我們這里以GItHub為例,演示一下:

選擇需要添加的賬號:

給添加需要掃描的漏洞的倉庫

如果是NodeJs的項目,他會自動關(guān)聯(lián),如果沒有自動關(guān)聯(lián),自己添加文件的位置

生成測試報告

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

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

 

接下來我們用第二種方法,第二種相對快速簡單一些:

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

 

npm install -g snyk

 

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

 

就會看到漏洞的列表

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

 

一般選擇第一項,通過更新依賴來修復(fù)漏洞。一項一項修復(fù)就行了。

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

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

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

這是模塊信息:

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

這是檢測出來的漏洞信息:

接下來我們開始模仿:

我們在iTerm中先嘗試著獲取他的 about頁面:

可以看到,獲取了源代碼

那來試試看看能不能突破文件夾的限制:

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

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

簡簡單單就得到了

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

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

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

這是模塊信息

這是我們的漏洞信息:

 

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

這種情況倒是控制住了:

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

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

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

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

 

 

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