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

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

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

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

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

選擇需要添加的賬號:

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

如果是NodeJs的項目,他會自動關聯,如果沒有自動關聯,自己添加文件的位置

生成測試報告

點擊 View report and fix 可以查看詳細的報告

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

 

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

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

 

npm install -g snyk

 

安裝成功之后,進入Node應用的根目錄中,輸入 snyk test:

 

就會看到漏洞的列表

然后再運行 snyk wizard 可以對漏洞進行修復

 

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

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

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

1.利用 st 模塊進行目錄遍歷

這是模塊信息:

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

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

接下來我們開始模仿:

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

可以看到,獲取了源代碼

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

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

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

簡簡單單就得到了

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

黑客就能用Node有權訪問的任何文件

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

這是模塊信息

這是我們的漏洞信息:

 

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

這種情況倒是控制住了:

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

也沒產生效果,他也做了處理。

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

好像有反應了,點擊一下,還真的生效了!

 

 

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