浅谈Node.js CVE-2017-14849 漏洞分析(详细步骤)
浅谈 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。
网络推广网站
- 浅谈Node.js CVE-2017-14849 漏洞分析(详细步骤)
- jQuery 1.9.1源码分析系列(十三)之位置大小操作
- Eclipse XSD 生成枚举类型的Schema的实例详解
- jquery.validate表单验证插件使用方法解析
- bootstrap Table的一些小操作
- php中常用的正则表达式的介绍及应用实例代码
- Yii2实现ActiveForm ajax提交
- 使用jspdf生成pdf报表
- jQuery选择器源码解读(二):select方法
- PHP实现将优酷土豆腾讯视频html地址转换成flash
- 深入浅析Node.js单线程模型
- ASP.net中获取客户端参数操作系统信息
- JavaScript中Function详解
- 微信小程序自定义组件之可清除的input组件
- Node.js进阶之核心模块https入门
- 详解如何使用babel进行es6文件的编译