BUUCTF-JustEscape

news2024/11/25 20:22:10

目录

信息搜集

bypass 黑名单机制

绕过沙盒执行系统命令

总结


这是一道 Node.js 沙盒逃逸的题目,在此记录一些技巧。

信息搜集

进入题目环境:

 直接给出了一个可执行任意代码的入口 /run.php?code=<code>,直接复制第二个 demo 的路径和请求参数到地址栏访问看看:

执行了 new Date();  这行代码,并且将日期结果回显到页面上,说明 demo 确实没欺骗我,这里有执行任意代码的入口。

再复制第一个 demo 的路径和请求参数到地址栏访问: 

没有表达式的执行结果,那么可能是有敏感字符串的黑名单检测机制。经过我尝试输入其他的 Node.js 语句,发现有以下字符串被列为黑名单:

' (单引号)
" (双引号)
+ (加号)
process
constructor
exec
...(可能还有其他的,但在我的 exp 中没有测试出来)

到这里,我已经知道我的任务了:

  1. 绕过敏感字符串的黑名单机制,构造任意代码;
  2. 构造能够逃逸沙盒的代码;
  3. 利用代码执行系统命令,读取 flag。

bypass 黑名单机制

首先是单引号或者双引号,我的代码需要用到它们,但都被禁用了,我选择用 `` 代替单双引号声明字符串

process、constructor 和 exec 都是被用于命名方法或者属性的标识符,它们本身不是字符串,但是由于在 JavaScript 中,除了可以通过 . 访问属性和方法,还可以通过中括号 [] 访问,中括号里面是方法或属性的字符串名称

我可以把标识符转换为字符串,不过还是不能出现 process 等敏感字符串的字眼,用 concat() 可以连接字符串即可:

 最终,绕过黑名单机制的访问一个方法或者属性的形式类似如下:

绕过沙盒执行系统命令

构造的代码需要绕过沙盒,以及能够执行系统命令,这两个目标放在一起说,因为沙盒存在的目的本身就是为了不让用户执行危险的操作,执行系统命令就是其中之一。

其实,大多数 CTF 题都能在网上找到思路,很多时候就是出题人根据最近的 CVE 出的。所以,沙盒绕过的 exp 可以直接在网上找现成的(主要是我不会......)。

在此之前,我需要知道这是哪个沙盒模块,这利用 Error 对象的 stack 属性看下调用栈:

 是 vm2 模块,这就好办了,直接在 snyk 网站搜索这个模块的 CVE:

 试一下最新的 bypass exp,点击链接:

有 PoC,复制到本地,改一下:

 主要是把敏感字符串换掉。完成后,复制这段代码到地址栏中访问:

 OK,结束。

总结

JavaScript 声明字符串的几种方式:

  • 单引号 ''
  • 双引号 ""
  • 反引号 ``
  • Buffer.from()
  • 正则表达式,然后 toString() 得到字符换,再 substring() 去掉左右的 /,例如: /apple/.toString().substring(1,6)

JavaScript 拼接字符串的方式:

  • + 加号
  • String.concat() 方法:"proce".concat("ss")

JavaScript 可以用点号或中括号访问属性和方法:

  • this.constructor
  • this['constructor']

Error 对象的 stack 属性可以返回调用栈,包括程序文件的路径,利用这点查看用的哪个沙盒模块。

沙盒逃逸用的是现成的 exp,我还需要深入学习,就不写了。

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

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

相关文章

常见安装工具以及命令(工作常用)

dockermongodbnginxredis 1.docker 启动2.docker 安装 MongoDB3.启动nginx4.redis配置&#xff0b;安装4.1 Redis的启动和停止4.2 后台启动方式 1.docker 启动 安装docker # 1.安装gcc和g yum -y install gcc yum -y install gcc-c # 2. 安装需要的软件包 yum install -y yum…

DNS详细解析

文章目录 DNS是什么以及作用下载DNS服务named.conf DNS查询DNS缓存机制解析过程递归查询和迭代查询 DNS服务器的类型DNS域名DNS服务器的类型搭建dns服务器缓存域名服务器主域名服务器从域名服务器排错反向解析 CDN介绍 DNS转发介绍配置 DNS劫持 DNS 是什么以及作用 DNS&#…

WEB:Web_php_include(多解)

背景知识 文件包含 file://协议 php://协议 data://协议 了解strstr函数 题目 <?php show_source(__FILE__); echo $_GET[hello]; /*可以构造payload*/ $page$_GET[page]; while (strstr($page, "php://")) { /*strstr()函数*/$pagestr_replace("php://&q…

JavaSwing+MySQL的购物系统项目

点击以下链接获取源码&#xff1a; https://download.csdn.net/download/qq_64505944/88052733?spm1001.2014.3001.5503 JDK1.8 MySQL5.7 功能&#xff1a;管理员与用户两个角色&#xff0c;管理员可以对商品进行增删改查处理&#xff0c;用户可以浏览查找商品&#xff0c;注…

CROSSROADS1靶机复盘

CROSSROADS1靶机复盘 这个靶机学会了三个工具enum4linux&#xff0c;smbclient&#xff0c;stegoveritas。枚举服务器可能开启的一些资源&#xff0c;smb扫描工具&#xff0c;还有一个隐写术的工具。 靶场下载地址&#xff1a;https://download.vulnhub.com/crossroads/cross…

4.5.tensorRT基础(1)-onnx文件及其结构的学习,编辑修改onnx

目录 前言1. onnx1.1 导出onnx1.2 读取onnx1.3 创建onnx1.4 编辑onnx1.5 onnx总结1.6 本节知识点 2. 补充知识2.1 Protobuf2.1.1 Protobuf简介2.1.2 基本使用流程 总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程&#xff0c;之前有看过一遍&#xff0c;但是没有做笔记…

【Nacos】适配PostgreSQL数据库

目录 本文环境介绍修改application.properties下载PostgreSQL扩展插件初始化PostgreSQL启动测试 本文环境介绍 组件依赖版本Nacos2.2.3OpenJDK17.0.2PostgreSQL Server15 修改application.properties ### Deprecated configuration property, it is recommended to use spri…

手搓一台简单的网络损伤仪——弱网测试

1、介绍 支持对链路带宽、传输时延、丢包率和无码率的手动设置&#xff1b; 1.1、网络损伤仪在使用时&#xff0c;网络拓扑连接 1.2、网络损伤仪管理页面展示 2、使用的设备及相关技术栈 一台Intel 赛扬 J1900的迷你主机【拥有4个千兆网口】&#xff1b;ubuntu-18.04.5-live…

(数组与矩阵) 剑指 Offer 04. 二维数组中的查找 ——【Leetcode每日一题】

❓ 剑指 Offer 04. 二维数组中的查找 难度&#xff1a;中等 在一个 n * m 的二维数组中&#xff0c;每一行都按照从左到右 非递减 的顺序排序&#xff0c;每一列都按照从上到下 非递减 的顺序排序。请完成一个高效的函数&#xff0c;输入这样的一个二维数组和一个整数&#x…

使用Stable Diffusion和PyTorch创建艺术二维码

大家好&#xff0c;本文将介绍如何利用Stable Diffusion和PyTorch的能力来创建AI生成的QR码艺术。通过将这些技术相结合&#xff0c;可以生成独特的、具有视觉吸引力的艺术作品&#xff0c;其中包含QR码&#xff0c;为艺术作品增添了互动元素。 Stable Diffusion和PyTorch 稳…

赢得CSDN铁粉的秘诀!(记录写作三个月的点点滴滴)

在CSDN上写博客已经三个多月了&#xff0c;从开始的陌生到渐渐熟悉CSDN网站的每个角落&#xff0c;猛然发现还有这么一个活动&#xff0c;想了想还是写一篇博客吧&#xff0c;不仅是参加活动&#xff0c;也是记录这一路慢慢探索的过程。 1.CSDN铁粉介绍及说明 CSDN 是为中国 I…

C++进阶:map和set

map和set STL容器分为序列式容器和关联式容器。 序列式容器vector、list等底层为线性数据结构&#xff0c;数据元素之间没有联系&#xff0c;一般用来存储数据。关联式容器map、set等底层采用平衡搜索树&#xff0c;存储的是<key/value>式的键值对&#xff0c;数据检索效…

NOSQL简单实战

目录 实战一&#xff1a; 1、 string类型数据的命令操作&#xff1a; &#xff08;1&#xff09; 设置键值&#xff1a; &#xff08;2&#xff09; 读取键值&#xff1a; &#xff08;3&#xff09; 数值类型自增1&#xff1a; &#xff08;4&#xff09; 数值类型自减1&…

基于html2canvas和jspdf将document DOM节点转换为图片生成PDF文件,并下载到本地

这里要用到html2canvas将document DOM节点转换为图片&#xff0c;并下载到本地_你挚爱的强哥的博客-CSDN博客前端用原生js编辑文件内容→创建生成文件(格式可以自定义)→下载文件_你挚爱的强哥的博客-CSDN博客。会自动创建一个html文件。https://blog.csdn.net/qq_37860634/art…

业务中添加历史版本事务并发处理

业务背景&#xff1a;项目中包含历史版本的管理&#xff0c;每次保存历史版本都添加一条新的记录到数据库&#xff0c;且版本号加1。保存版本的时候1.要先查询历史版本数据表&#xff0c;获取当前最新的版本号&#xff1b;2.最新的版本号加1&#xff0c;插入数据历史版本记录表…

dp算法 力扣174地下城游戏

在学习编程时&#xff0c;算法是一道硬菜&#xff0c;而dp作为算法的一份子&#xff0c;它的地位在编程界举足轻重。 174. 地下城游戏 - 力扣&#xff08;LeetCode&#xff09; 本文是Java代码哦~ 一、题目详情 恶魔们抓住了公主并将她关在了地下城 dungeon 的 右下角 。地…

Vue列表渲染(v-for)以及key的作用与原理

索引值的两种写法&#xff1a; <!--index遍历时的默认索引值--> <ul><li v-for"(p,index) in persons":key"index">{{p.name}}--{{p.age}}</li></ul> 代码&#xff1a; v-for"p in persons" :key"p.id&quo…

【多维数组对象拍平处理为一维数组】

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

深谋远“绿”,数据中心未来之路在何方?

数据中心未来演进方向是什么&#xff1f; 在中国绿色算力大会-华为数据中心平行会议上&#xff0c;业界愈发形成共识&#xff1a;即在双碳目标的大背景下&#xff0c;数据中心走向绿色低碳化、智能化。 去年初&#xff0c;东数西算工程正式启动建设&#xff0c;标志着我国数据…

Ui自动化测试上传文件方法都在这里了

目录 前言 被测HTML代码 send_keys方法 实例------------------------------------ Time : 2019/7/17 19:03 Auth : linux超 File : upload_file_send_keys.py IDE : PyCharm Motto: Real warriors,dare to face the bleak warning,dare to face the incisive error! QQ : 2…