利用NPM倉庫充當文件托管服務
STATEMENT
聲明
由于傳播、利用此文所提供的信息而造成的任何直接或者間接的后果及損失,均由使用者本人負責,雷神眾測及文章作者不為此承擔任何責任。
雷神眾測擁有對此文章的修改和解釋權。如欲轉載或傳播此文章,必須保證此文章的完整性,包括版權聲明等全部內容。未經雷神眾測允許,不得任意修改或者增減此文章內容,不得以任何方式將其用于商業目的。
前言
什么是NPM?
NPM是隨同NodeJS一起安裝的包管理工具,NPM可以通過NPM的源下載安裝源上發布的JS代碼。目前官方源的地址是:https://www.npmjs.com/ 任何人都可以在社區上發布自己的Nodejs代碼,但NPM官方的服務器是在境外的,國內想要快速的訪問到就必須通過同步源,于是出現了各種NPM鏡像源,每隔一段時間就會拉取官方的源同步。既然任何人都可以發布自己的代碼到NPM上,我們就可以把NPM的倉庫當作一個簡單的文件服務器存儲一些能夠適當公開的靜態文件。
托管代碼前的準備工作
NPM的認證機制是雙因素的(密碼+郵箱驗證碼),注冊的時候需要提供真實郵箱:
https://www.npmjs.com/signup
注冊完畢后,本地安裝好NPM環境:sudo apt install npm

本地登錄NPM:npm login 同樣會需要郵箱驗證碼

托管第一個靜態文件
新建一個包名的目錄,注意包名不能與NPM官方源上發布的包名同步
這里我新建目錄名為 my-npm

npm init 可以初始化一個包的基本信息,例如版本號、作者、描述、測試命令等等。

在設置package name時為了怕重復,我設置包名為touch-file。

可以看到已經生成了package.json這個包的基礎信息文件,接下來可以繼續創建這個包內的其他文件,這里我隨便寫了一個index.js。
npm publish 用于發布這個包。

如何使用靜態文件
NPM有很多源,這里我隨便寫幾個:
- https://cdn.jsdelivr.net/npm/touch-file@1.0.0/index.js
- https://mirrors.cloud.tencent.com/npm/touch-file
- https://r.cnpmjs.org/touch-file
- https://mirrors.cloud.tencent.com/npm/touch-file


可以看到至少阿里、騰訊是有NPM同步的,但是文件是壓縮包,而jsdelivr可以直接訪問源文件,這一點可以當作圖床、文件傳輸…. 我博客的圖床就是用的Github + jsdelivr進行加速。
發揮想象:
- 免費圖床
- 文件下載服務器(小工具、webshell、shellcode?)
- JS后門…
PS:如果遇到不太正常的NPM,可以通過Report舉報濫用。
