NodeJs的包漏洞扫描与漏洞测试攻击

一个典型的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 模块是一个提供静态文件服务的中间件,比如我们的javascript,css和图像等文件,在我们示例的项目中的代码的位置是在

 

这是检测出来的漏洞信息:

接下来我们开始模仿:

我们在iTerm中先尝试着获取他的 about页面:

可以看到,获取了源代码

那来试试看看能不能突破文件夹的限制:

规范化的文件夹路径被过滤掉了,那用 URL编码的格式来试试看:

 

额,得到了项目根目录的文件,那如果要获取其中任意一个文件的源代码就轻而易举了,比如我们要拿到db.js的内容:

 

简简单单就得到了

那如果要获取服务器上的其他文件夹呢

黑客就能用Node有权访问的任何文件

2.利用 marked 进行跨站脚本攻击(xss):

这是模块信息

这是我们的漏洞信息:

在标签页有使用到 marked,那我们就试试标签页,第一次先这样试一试,输入 <script>alert(1)</script>

 

这种情况倒是控制住了:

 

那我们来创建一个标记格式的链接,输入 [Gotcha](javascript:alert(1)),看看发生了什么:

也没产生效果,他也做了处理。

那再试试转义,试试他做了转义没有,那我输入:[Gotcha](javascript:this;alert(1)),这下效果出来了,

好像有反应了,点击一下,还真的生效了!