//login.jsvarexpress =require('express');varrouter = express.Router();//获取用户varusers =require('../modules/user').items;//寻找用户varfindUser =function(name, password){returnusers.find(function(item){//迭代用户,当传
排除CTFSHOW)且密码匹配的用户returnname !=='CTFSHOW'&& item.username=== name.toUpperCase() && item.password=== password; }); }; 代码解析函数定义 (findUser): findUser 是一个匿名函数,被赋值给变量 findUser。
//user.js module.exports = { items: [ {username: 'CTFSHOW', password: '123456'} ] }; //这段代码是一个模块文件,通过`module.exports`将一个对象导出。 //在这个模块中,导出的对象是一个包含一个属性`items`的对象。`items`属性是一个数组,包含了一个用户对象。这个用户对象有两个属性:`username`...
主要是utils.copy(user,req.body);是利用点 此时,因为原型污染,secret对象直接继承了Object.prototype,所以就导致了secert.ctfshow==='36dboy'
payload:{"username":"admin","password":"pass","__proto__":{"ctfshow":"36dboy"}} secret继承了这里的ctfshow的值,所以就刚好使得if语句为true,登录成功。 总结 因为是从零基础开始学的NodeJS,所以零碎的基础知识有点多。 参考链接 https://wiki.wgpsec.org/knowledge/ctf/js-prototype-chain-pollution....
module.exports={items:[{username:'CTFSHOW',password:'123456'}]}; 1. 2. 3. 4. 5. 由上可知我们输入的账号在经过function(item)这个函数处理后要符合username: 'CTFSHOW', password: '123456'而且要满足输入的账户名name!=='CTFSHOW'所以 输入 ...
ctfshow NodeJs web334-web344 wp_是Mumuzi的博客-CSDN博客 (21条消息) ctfshow—Node.js漏洞总结_cosmoslin的博客-CSDN博客 深入理解 JavaScript Prototype 污染攻击 | 离别歌 (leavesongs.com) 再探JavaScript 原型链污染到 RCE - 先知社区 (aliyun.com) ...
我们需要使得secert.ctfshow==='36dboy',去拿flag。 这里的secert是一个数组,然后utils.copy(user,req.body);操作是user也是数组,也就是我们通过req.body即 POST 请求体传入参数,通过user污染数组的原型,那么secert数组找不到ctfshow属性时,会一直往原型找,直到在数组原型中发现ctfshow属性值为36dboy。那么if语句即...
1、CTFSHOW几个题目 https://ctf.show/ Web334-344 https://f1veseven.github.io/2022/04/03/ctf-nodejs-zhi-yi-xie-xiao-zhi-shi/ 2、YApi管理平台漏洞 https://blog.csdn.net/weixin_42353842/article/details/127960229 #开发指南-NodeJS-安全SecGuide项目 https://github.com/Tencent/secguide 打包器...
ctfshow NodeJs web334-web344 wp_是Mumuzi的博客-CSDN博客 (21条消息) ctfshow—Node.js漏洞总结_cosmoslin的博客-CSDN博客 深入理解 JavaScript Prototype 污染攻击 | 离别歌 (leavesongs.com) 再探JavaScript 原型链污染到 RCE - 先知社区 (aliyun.com) ...