一個典型的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:this;alert(1)),這下效果出來了,
好像有反應(yīng)了,點(diǎn)擊一下,還真的生效了!
http://www.cnblogs.com/wjszxli/p/6902305.html