BUUCTF [HITCON 2016] Leaking

考点:

  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!");
});

题目名:泄露,给出了源码,应该是段Node.js代码,没太接触过
其中定义了变量flag,并且存在eval()函数,可能是需要命令执行,并且注释也提示了flag被藏在这里。查看到前面有var { VM } = require("vm2");,查阅资料后,得知是Node.js 官方安全沙箱的库,参考资料NPM酷库:vm2,安全的沙箱环境

  1. VM2原理
    VM2基于VM,使用官方的VM库构建沙箱环境。然后使用JavaScriptProxy技术来防止沙箱脚本逃逸。

  2. vm2 特性

  • 运行不受信任的JS脚本
  • 沙箱的终端输出信息完全可控
  • 沙箱内可以受限地加载modules
  • 可以安全地向沙箱间传递callback
  • 死循环攻击免疫 while (true) {}

node.js沙箱逃逸是个知识盲区,查阅了大佬的wp[HITCON 2016]Leaking node.js沙箱逃逸

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

注:关于 Buffer
JavaScript 语言自身只有字符串数据类型,没有二进制数据类型。
但在处理像TCP流文件流时,必须使用到二进制数据。因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区。

只要是调用过的变量,一定会存在内存中,所以需要使用Buffer()来读取内存,使用data=Buffer(800)分配一个800的单位为8位字节的buffer,编写Python3的EXP:

import requestsurl = 'http://f81a9cf8-9be7-4245-96fe-da986bbe60e1.node3.buuoj.cn/?data=Buffer(800)'while True:res = requests.get(url)print(res.status_code)if 'hitcon{' in res.text:print(res.text)break

运行一阵子后,得到flag:

BUUCTF [HITCON 2016] Leaking相关推荐

  1. [HITCON 2016]Leaking沙箱逃逸学习

    [HITCON 2016]Leaking沙箱逃逸学习 node.js 里提供了 vm 模块,相当于一个虚拟机,可以让你在执行代码时候隔离当前的执行环境,避免被恶意代码攻击.但是这道题比较有意思 考点是 ...

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

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

  3. Hitcon 2016 Pwn赛题学习

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

  4. BUUCTF--[HITCON 2016]Leaking

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

  5. [BUUCTF][HITCON 2017]SSRFme

    文章目录 知识点 新学会的函数 代码审计 知识点 perl脚本GET open命令漏洞 GET是Lib for WWW in Perl中的命令 目的是模拟http的GET请求,GET函数底层就是调用了 ...

  6. BUU刷题记录——5

    October 2019 Twice SQL Injection 由题目名可知为二次注入 username =1' union select database() # username =1' uni ...

  7. XCTF Leaking

    [HITCON2016]Leaking 题目 浅谈Node.js沙盒逃逸 题目 原题目来自HITCON 2016 题目如下 由于我还是个小白,经过漫长的翻查php手册和查阅一些大佬的博客得知这是一题是 ...

  8. 十大干货安全议题,足以展望今年网络安全趋势

    夏天可以看雪吗? 答案是肯定的. 因为,看雪2019 安全开发者峰会即将于7月20日在北京国家会议中心开幕 2019 安全开发者峰会(SDC)是由拥有19年悠久历史的老牌安全技术社区--看雪学院主办, ...

  9. 关于php内部编码与mysql字符差异问题的研究

    0x01 引入 0x02 关于PHP的编码问题 1 PHP内部编码 2 关于PHP的乱码问题 0x03 MYSQL的UTF-8编码与字符差异 1 MYSQL的UTF-8编码 2 MYSQL的字符差异问 ...

最新文章

  1. 专访 | 在AI 医疗这个热门的赛道上,阿里在怎么玩?
  2. LeetCode 1119. Remove Vowels from a String--C++,Java,Python解法
  3. CCNA10月27日战报
  4. python怎么用拼音-又一个奇葩要求,Python是如何将“中文”转“拼音”的?
  5. 网关过滤器验证token
  6. cnpm不是内部或外部命令 cnpm: command not found 解决方案 cnpm
  7. php edm 系统,edm.php
  8. 双系统win7时间造8小时问题的解决
  9. javascript 关键字this
  10. 阶段3 3.SpringMVC·_01.SpringMVC概述及入门案例_02.SpringMVC框架的介绍
  11. 2阶魔方矩阵matlab,matlab魔方矩阵
  12. Win连接android打印机,教你用Android/Iphone/MacWindows和群晖实现无线打印
  13. 关于恢复synaptics触摸板手势
  14. ubuntu18.04开机后出现黑屏 最上显示/dev/nvme。。。
  15. 社团部部长工作计划计算机学院,社团部长的工作计划(共9篇).doc
  16. categories与set_categories
  17. 【整理】Makefile编写规则
  18. 三星java手机播放器下载_三星S3930C如何安装从电脑上下载java的方法总结
  19. 数理统计与数据分析第三版习题 第4章
  20. 记一次腾讯远程电话面试

热门文章

  1. 系统学习金融数据挖掘 之爬虫技术基础(附源代码)(网页结构基础)
  2. 双向链表、环形链表及约瑟夫问题
  3. 【深度学习不是犯罪】欧盟祭出最严数据保护法:专家解读 GDPR
  4. 【PBL项目实战】户外智慧农场项目实战系列之4——Mind+Mixly双平台ESP32数据上云及云端可视化实时展示
  5. D. Solve The Maze(BFS+思维)
  6. Q2营收增长创下3年来最大涨幅,IBM这头大象要在云风口上跳舞?
  7. 豆瓣电台歌曲链接信息
  8. 世界淡水资源占水资源的多少_世界上可用淡水资源到底是多少
  9. Android实现网络下载二(多任务下载--支持断点续传)
  10. C# PictureBox设置图片