Node.js 反序列化漏洞远程执行代码(CVE-2017-5941)

时间:2019-08-18
本文章向大家介绍Node.js 反序列化漏洞远程执行代码(CVE-2017-5941),主要包括Node.js 反序列化漏洞远程执行代码(CVE-2017-5941)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

实验目的 (转载自I春秋  )

了解Node.js 序列化漏洞原理

掌握利用Node.js 序列化漏洞进行任意代码执行

漏洞原理

现在我们使用0.0.4版本的node-serialize进行研究,成功利用的话,不可信输入传递到 unserialize()的时候可以执行任意代码。创建

Payload最好使用同一模块的serialize()函数。 我创建了以下 JavaScript 对象,将其传入 serialize() 函数。

运行后得到以下输出:

现在我们得到序列化的字符串,可以用 unserialize() 函数进行反序列化操作。那么问题来了,怎么代码执行呢?

只有触发对象的 rce 成员函数才可以。 后来我想到可以使用 JavaScript 的立即调用的函数表达式(IIFE)来调用该函数。

如果我们在函数后使用 IIFE 括号 () ,在对象被创建时,函数就会马上被调用。有点类似于 C 中的类构造函数。 现在修改过的

代码经 serialize() 函数马上会被调用。

运行后得到以下输出:

我们知道了,在之前序列化的字符串中函数体后面

加上括号 (),并将其传入 unserialize() 函数,很幸运,成功执行。那么就有了下面的 exploit: 

将其传入unserialize() 函数,触发代码执行。 

运行后得到以下输出: 

实验环境

操作机:kali linux

目标机:Centos6.5

实验工具 exp.txt:

利用nodejs代码执行的代码文件。 

实验步骤

首先访问目标机器http://172.16.12.2 可以看到一个存在node.js漏洞的登录界面。 我们使用nc监听本地端口,用于接收漏洞环境的反弹Shell. nc -lv -p 8080 即监听本机8080端口 Alt text 将实验工具提供的exp代码,下载后修改里面的 <ip> <port>,修改为本机IP和NC监听的端口号。修改后复制该代码,去尝试到登录界面利用。 Alt text 用户名任意输入,将修改好的exp代码复制到密码框点击登录即可。 小提示: 如果代码错误,出现报错导致环境崩溃请从新创建环境,并检测代码错误继续实验 点击登录后,如下图所示:利用成功,已经反弹回一个shell,并且权限为root。 

原文地址:https://www.cnblogs.com/kuaile1314/p/11371059.html