Node.js is Web Scale

点击“打开/下载题目”进去看看情况:

为了方便查看翻译成中文简体来看:


emmm,看不懂什么意思,查看源代码,js表示是一段JavaScript代码,丢给AI分析一下:

// server.js
const express = require("express");
const bodyParser = require("body-parser");
const path = require("path");
const { execSync } = require("child_process");const app = express();
app.use(bodyParser.json());
app.use(express.static(path.join(__dirname, "public")));let cmds = {getsource: "cat server.js",test: "echo 'hello, world!'",
};let store = {};// GET /api/store - Retrieve the current KV store
app.get("/api/store", (req, res) => {res.json(store);
});// POST /set - Set a key-value pair in the store
app.post("/set", (req, res) => {const { key, value } = req.body;const keys = key.split(".");let current = store;for (let i = 0; i < keys.length - 1; i++) {const key = keys[i];if (!current[key]) {current[key] = {};}current = current[key];}// Set the value at the last keycurrent[keys[keys.length - 1]] = value;res.json({ message: "OK" });
});// GET /get - Get a key-value pair in the store
app.get("/get", (req, res) => {const key = req.query.key;const keys = key.split(".");let current = store;for (let i = 0; i < keys.length; i++) {const key = keys[i];if (current[key] === undefined) {res.json({ message: "Not exists." });return;}current = current[key];}res.json({ message: current });
});// GET /execute - Run commands which are constant and obviously safe.
app.get("/execute", (req, res) => {const key = req.query.cmd;const cmd = cmds[key];res.setHeader("content-type", "text/plain");res.send(execSync(cmd).toString());
});app.get("*", (req, res) => {res.sendFile(path.join(__dirname, "public", "index.html"));
});// Start the server
const PORT = 3000;
app.listen(PORT, () => {console.log(`KV Service is running on port ${PORT}`);
});

这段代码实现了一个简单的键值对存储服务(KV Store)和一个命令执行功能:

1. 引入依赖

express: 用于创建Web服务器。

body-parser: 用于解析HTTP请求体中的JSON数据。

path: 用于处理文件路径。

child_process.execSync: 用于同步执行系统命令。


2. 初始化应用

创建Express应用实例。

使用bodyParser.json()中间件来解析JSON格式的请求体。

设置静态文件目录为public,这样可以访问放在public目录下的静态文件。


3. 定义命令

cmds对象定义了一些安全的命令及其对应的系统命令字符串。例如:

getsource: 获取server.js文件的内容。

test: 输出hello, world!。


4. 键值对存储功能

GET /api/store: 返回当前键值对存储的内容。


POST /set: 设置一个键值对。支持嵌套键,例如a.b.c。

解析请求体中的key和value。

使用递归的方式在store对象中创建嵌套结构并设置值。


GET /get: 获取一个键值对。

解析查询参数中的key。

按照.分割键,逐层查找store对象中的值。

如果键不存在,返回Not exists.;否则返回对应的值。


5. 命令执行功能

GET /execute: 执行预定义的安全命令。

解析查询参数中的cmd。

从cmds对象中获取对应的命令字符串。

使用execSync同步执行命令,并将结果以纯文本形式返回。


6. 路由处理

GET /*: 处理所有其他路由请求,返回public目录下的index.html文件。


7. 启动服务器

监听端口3000,并在控制台输出启动信息。


回顾一下关键代码部分:

说明会直接执行预定义的命令“cat server.js”


这下思路有了,只要想办法修改预定义的命令为cat /flag就行了

此处,我先学会儿原型链污染的知识,再回来解释


将key设置为__proto__.nanyuan,value设置为cat /flag

成功解析cat /flag


访问/execute?cmd=nanyuan,页面发生变化,并显示出flag:

成功得到flag

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/886129.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity编辑器的高级扩展技术

一、Unity编辑器扩展的基础知识 Unity编辑器提供了丰富的API&#xff0c;允许开发者创建自定义的编辑器窗口、属性和工具。这些API主要分布在UnityEditor命名空间中&#xff0c;主要包括以下几个类别&#xff1a; Editor Windows&#xff1a;自定义窗口&#xff0c;用于提供独…

缓冲区溢出,数据被踩的案例学习

继续在ubuntu上学习GDB&#xff0c;今天要学习的是缓冲区溢出。 程序的地址&#xff1a; GitHub - gedulab/gebypass: bypass password by heap buffer overflow 编译的方法&#xff1a; gcc -g -O2 -o gebypass gebypass.c 照例设置一下科学shangwang代理&#xff1a; e…

数字人直播骗局大曝光!真假源码厂商搭部署的源码有何差异?

随着数字人直播技术的不断发展成熟&#xff0c;它所蕴含着的市场前景和收益潜力开始逐渐显化&#xff0c;使得有意向入局的人数持续增多的同时&#xff0c;也让不少骗子看到了可乘之机&#xff0c;从而炮制出了一个又一个的数字人直播骗局。 其中&#xff0c;最为经典的便是dai…

【AI日记】24.11.14 复习和准备 RAG 项目 | JavaScript RAG Web Apps with LlamaIndex

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 今天的所有工作都是为了明天要开始的个人项目做准备 核心工作 1 内容&#xff1a;JavaScript RAG Web Apps with LlamaIndex时间&#xff1a;2 小时评估&#xff1a;不错&#xff0c;完成收获&#xff1a;学习…

git配置远程仓库的认证信息

git配置远程仓库的认证信息 远程仓库的认证信息是什么&#xff1f;为何需要&#xff1f;如果不配置认证信息的话 配置认证信息的方式有哪些&#xff1f;用户名和密码Git 凭证助手&#xff08;Credential Helper&#xff09;SSH密钥认证使用主机认证信息的配置文件~/.netrc 远程…

#渗透测试#SRC漏洞挖掘#云技术基础03之容器相关

目录 一、Podman相关 &#xff08;一&#xff09;Podman简介 &#xff08;二&#xff09;Pod相关操作 二、容器相关 &#xff08;一&#xff09;容器概念 &#xff08;二&#xff09;容器的历史发展 &#xff08;三&#xff09;Capabilities相关 三、Kubernetes&#x…

前端搭建低代码平台,微前端如何选型?

目录 背景 一、微前端是什么&#xff1f; 二、三大特性 三、现有微前端解决方案 1、iframe 2、Web Components 3、ESM 4、EMP 5、Fronts 6、无界&#xff08;文档&#xff09; 7、qiankun 四、我们选择的方案 引入qiankun并使用&#xff08;src外层作为主应用&#xff09; 主应…

Ubuntu 22.04.4 LTS + certbot 做自动续签SSL证书(2024-11-14亲测)

certbot 做自动续签SSL证书 为了为您的域名 csbst.xyz 设置 SSL 证书并启用 HTTPS&#xff0c;您可以使用 Certbot。Certbot 是一个易于使用的客户端&#xff0c;它可以自动获取和安装 SSL/TLS 证书&#xff0c;以便使您的网站支持 HTTPS。 以下是在您的服务器上使用 Certbot …

Windows VSCode .NET CORE WebAPI Debug配置

1.安装C#插件 全名C# for Visual Studio Code&#xff0c;选择微软的 2. 安装C# Dev Kit插件 全名C# Dev Kit for Visual Studio Code&#xff0c;同样是选择微软的 3.安装Debugger for Unity 4.配置launch.json 文件 {"version": "0.2.0","config…

git分支合并到远程后如何回滚合并

在GitLab中删除远程仓库的某个特定commit并不是一个直接的操作&#xff0c;因为Git版本控制系统的设计是为了保持历史记录的完整性和不可变性。然而&#xff0c;你可以通过以下步骤来实现删除某个特定的commit&#xff1a; 回退到目标commit之前的状态&#xff1a; 首先&#x…

C++——视频问题总结

1、C和C的区别 CC面向过程对象注重程序的实现逻辑程序的整体设计内容C语言采用了一种有序的编程方法——结构化编程&#xff1a;将一个大型程序分解为一个个小型的&#xff0c;易于编写的模块&#xff0c;所有模块有序调动&#xff0c;形成了一个程序的完整的运行链C将问题分解…

如何为 SeaTunnel 配置 MySQL 用户并授予权限

在使用 SeaTunnel 进行数据处理与传输时&#xff0c;保障数据源的连接与权限配置尤为重要。本文将逐步解析如何在 MySQL 中创建用于 SeaTunnel 访问的用户&#xff0c;并授予其适当的权限&#xff0c;以满足不同操作需求。 1. 创建用户 在 MySQL 中&#xff0c;创建用户是配置…

Linux——GPIO输入输出裸机实验

学习了正点原子Linux环境下的GPIO的输入输出的裸机实验学习&#xff0c;现在进行一下小结&#xff1a; 启动文件start.S的编写 .global _start .global _bss_start _bss_start:.word __bss_start.global _bss_end _bss_end:.word __bss_end_start:/*设置处理器进入SVC模式*/m…

Cyberchef配合Wireshark提取并解析TCP/FTP流量数据包中的文件

前一篇文章中讲述了如何使用cyberchef提取HTTP/TLS数据包中的文件,详见《Cyberchef配合Wireshark提取并解析HTTP/TLS流量数据包中的文件》,链接这里,本文讲述下如何使用cyberchef提取FTP/TCP数据包中的文件。 FTP 是最为常见的文件传输协议,和HTTP协议不同的是FTP协议传输…

深度学习和图像处理

看来你对深度学习和图像处理很感兴趣呢&#xff0c;让我来一一解答你的疑惑吧。 深度学习高纬度特征 首先&#xff0c;我猜你是想问“深度学习中的高维特征”吧。在深度学习中&#xff0c;随着网络层数的加深&#xff0c;网络的感受野逐渐变大&#xff0c;语义表达能力也随之增…

51c大模型~合集42

我自己的原文哦~ https://blog.51cto.com/whaosoft/11859244 #猎户座 「草莓」即将上线&#xff0c;OpenAI新旗舰大模型曝光&#xff0c;代号「猎户座」 ChatGPT 要进化了&#xff1f; 本月初&#xff0c;OpenAI 创始人、CEO 山姆・奥特曼突然在 X 上发了一张照片&#xff0…

Object类中的方法

Object类提供了如下几个常用方法&#xff1a; Class<?> getClass()&#xff1a;返回该对象的运行时类。boolean equals(Object obj)&#xff1a;判断指定对象与该对象是否相等。int hashCode()&#xff1a;返回该对象的hashCode值。在默认情况下&#xff0c;Object类的…

【NOIP提高组】潜伏者

【NOIP提高组】潜伏者 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; R国和S国正陷入战火之中&#xff0c;双方都互派间谍&#xff0c;潜入对方内部&#xff0c;伺机行动。 历尽艰险后&#xff0c;潜伏于 S 国的R 国间谍小C 终于摸清了S 国…

深入理解 `@TableId(type = IdType.AUTO)`:使用方法及其与其他主键生成策略的区别

在MyBatis-Plus&#xff08;简称MP&#xff09;中&#xff0c;TableId 注解是用来标注实体类中主键的字段的&#xff0c;而 type IdType.AUTO 是一个常见的配置选项&#xff0c;它指定了主键的生成策略。在实际开发中&#xff0c;如何配置主键生成策略对数据库的性能和稳定性有…

安培环路定理

回忆 静电场中的回路定理&#xff1a;→静电场是保守场 安培环路定理 1、圆形回路包围无限长载流直导线 &#xff08;1&#xff09;回路逆时针 &#xff08;2&#xff09;回路顺时针 规定&#xff1a; 回路正向由右手螺旋定则判断&#xff08;根据回路绕行方向&#xff0c;…