浅谈Node.js CVE-2017-14849 漏洞分析(详细步骤)

网络推广 2025-04-16 11:20www.168986.cn网络推广竞价

浅谈 Node.js CVE-2017-14849 漏洞分析与复现之旅

今天长沙网络推广带大家深入了解一篇关于 Node.js 的CVE-2017-14849漏洞的文章。对于热衷于网络安全和软件开发的朋友们来说,这无疑是一个值得的话题。让我们一同跟随长沙网络推广的脚步,看看这个漏洞究竟是何方神圣。

一、前言

当我早上阅读Sec-news安全文摘时,被一篇关于Node.js CVE-2017-14849漏洞分析的文章吸引。看到漏洞可能存在的风险后,我立马决定尝试复现这个漏洞,以便更深入地了解和学习。于是,这篇文章应运而生。

二、漏洞简介及影响版本

CVE上的描述是这样的:在Node.js 8.5.0至8.6.0版本之间存在一个目录穿越漏洞(CVE-2017-14849),攻击者可利用此漏洞访问未授权的任意文件。漏洞产生的原因在于对“…”的处理与某些未指定的社区模块不兼容。具体到实际应用中,这个问题主要影响了与Express框架的特定版本结合使用的Node.js版本。以下是受影响的具体版本:

Node.js 8.5.0 + Express 3.19.0-3.21.2

Node.js 8.5.0 + Express 4.11.0-4.15.5

三、Node.js与Express简介

Node.js是一个基于Chrome V8引擎的JavaScript运行时环境,采用事件驱动、非阻塞I/O模型,具有高效且轻量级的特性。而Express是一个基于Node.js的web开发框架,快速、开放、极简。它们的包生态系统npm,是目前世界上最大的开源库生态系统。

四、漏洞复现之旅

为了更直观地展示这个漏洞,我在腾讯云开发者实验室搭建了一个环境进行复现。我们需要安装对应版本的Node.js和Express框架,然后按照CVE文章中的描述进行操作,尝试触发这个漏洞。通过这个过程,我们可以更深入地理解这个漏洞是如何产生的,以及如何利用它。这里只是进行学术性的,任何未经授权的访问都是违法的。

复现准备之旅

在数字化世界的中,我们有时需要深入一些技术细节,比如搭建微信小程序服务。本文将引导你一步步完成准备工作,为接下来的之旅打下坚实的基础。

环境配置概览

我们需要一台腾讯云开发者实验室的云主机作为起点。这里我们将使用基于Ubuntu 16.04 64位的实验主机。还需要安装以下关键软件:

node.js 8.5.0:这是驱动前端技术的强大引擎。

express-4.15.5:一个流行的Web服务器框架,用于构建高效的网络应用。

burpsuite:用于Web应用安全测试的重要工具。

第一步:node.js的安装

打开终端,输入以下命令下载node.js 8.5.0的安装包:

```bash

wget

```

解压安装包:

```bash

tar -zxvf node-v8.5.0-linux-x64.tar.gz

```

将解压后的文件移动到通用软件安装目录/opt:

```bash

mv node-v8.5.0-linux-x64 /opt/

```

配置系统命令,确保在任何位置都能调用node和npm:

```bash

sudo ln -s /opt/node-v8.5.0-linux-x64 /bin/node /usr/local/bin/node

sudo ln -s /opt/node-v8.5.0-linux-x64 /bin/npm /usr/local/bin/npm

```

验证安装是否成功,输入命令:

```bash

node -v

```

如果输出版本号,则表示配置成功。此刻我们已经迈出了重要的一步。接下来是express的安装。

第二步:express的安装

下载express的压缩包并解压:

```bash

wget

tar -zxvf 4.15.5.tar.gz

```bash">第二步:express的安装(续)">第二步:express的安装(续)接下来进入express的安装目录并完成安装过程:进入express目录下,安装express:
cd express-4.15.5 && npm install
现在,我们将进入到express的一个示例目录并启动服务器。
cd express-4.15.5/examples/static-files & node index.
这将启动一个基本的服务器实例,为接下来的操作做好准备。

第三步:Payload验证
在配置好的环境中发送特定的Payload来验证设置是否正确。Payload为:/../../../a/../../../../etc/passwd。

漏洞原理分析
为什么Payload会是这样的呢?这涉及到特定的漏洞原理。这个漏洞出现在使用express的静态文件托管功能时,因为在这一情况下会使用到路径标准化的函数normalize。如果代码是这样写的:
app.use(express.static(path.join(__dirname, 'static')));
那么Payload应该是我们之前提到的形式。
但如果代码是这样写的:
app.use('/static',express.static(path.join(__dirname, 'static')));
那么Payload应该包含'/static'前缀。

后记
复现这个操作可能相对简单,但理解其背后的原理却需要深入的分析和跟踪。尽管我现在还没有完全理解这个漏洞的深层机制,但我计划在未来对其进行更深入的分析和跟踪。我也注意到了安全领域的一些有趣现象和挑战。例如,尽管腾讯等大型公司在安全预警方面做得很好,但仍然存在跟进的速度问题。这也提醒我们时刻关注CVE列表的重要性,以便第一时间了解并应对新的安全威胁。

希望这篇文章能帮助大家更好地理解这个主题,并激发大家进一步和学习相关知识的热情。也希望大家多多关注和支持我们的狼蚁SEO。

最后附上本文的链接(如果需要的话),方便读者进一步查阅和讨论相关话题。这个旅程充满了挑战和发现,让我们一起继续前行吧!

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by