Bugku WEB sodirty
其实还是源码分析
dirsearch扫路径,发现有www备份,下载下来肯定是源码分析
文件有点多 more ./*|grep flag
一个一个文件夹找,在router目录下找到index.js找到flag相关代码,后来查阅资料发现node.js里面router是根据路由去分模块
就相当java里的spring mvc直接跟用户交互用来寻找功能函数的框架
查看源码:
var express = require('express');
const setFn = require('set-value');
var router = express.Router();const Admin = {"password":process.env.password?process.env.password:"password"
}router.post("/getflag", function (req, res, next) {if (req.body.password === undefined || req.body.password === req.session.challenger.password){res.send("登录失败");}else{if(req.session.challenger.age > 79){res.send("糟老头子坏滴很");}let key = req.body.key.toString();let password = req.body.password.toString();if(Admin[key] === password){res.send(process.env.flag ? process.env.flag : "flag{test}");}else {res.send("密码错误,请使用管理员用户名登录.");}}});
router.get('/reg', function (req, res, next) {req.session.challenger = {"username": "user","password": "pass","age": 80}res.send("用户创建成功!");
});router.get('/', function (req, res, next) {res.redirect('index');
});
router.get('/index', function (req, res, next) {res.send('<title>BUGKU-登录</title><h1>前端被炒了<br><br><br><a href="./reg">注册</a>');
});
router.post("/update", function (req, res, next) {if(req.session.challenger === undefined){res.redirect('/reg');}else{if (req.body.attrkey === undefined || req.body.attrval === undefined) {res.send("传参有误");...skipping 1 linelet key = req.body.attrkey.toString();let value = req.body.attrval.toString();setFn(req.session.challenger, key, value);res.send("修改成功");}}
});module.exports = router;
——————————————————————————————
flag在getflag模块里,那么就要绕过了
分析源码,首先要有一个req.session.challenger对象,因为后面会更改他的age属性,创建功能在reg里直接reg(url)
require函数其实就是包含模块,set-value模块源码在modules里,其实见名知意,赋值模块
然后就是修改上面创建的challenger对象的age属性,用update函数可以实现修改challenger对象的属性,attrkey:age,attrval:20过第一个if
往下走其实就是Admin[key] === password
那么查考Admin对象
const Admin = {
“password”:process.env.password?process.env.password:“password”
}
只有一个属性 password,只要key带过来的不是password,那么就可以是我们指定的属性,而这个属性我们可以根据两者共同的父亲object来设置
关于原型链泄露,其实可以想成java里的父子类,就是子类调用时找不到的属性,会默认去找他的父类可以继承的属性,如果找不到,那就一直找,万物对象的根就是object
Node.js也一样,通过__proto__.pwd更改challenger和Admin共同的父亲object,让他加一个属性pwd,指定值,
然后我们把key设置成pwd,password设置成我们给object赋的pwd值,就可以过这个if,得到flag
Bugku WEB sodirty相关推荐
- [Bugku][Web][CTF] 9-15 write up
[说明] 整合资源 简略版本2020Bugku write up Bugku Web第九题 关键字 :/?args=GLOBALS PHP 将所有全局变量存储在一个名为 $GLOBALS[index] ...
- Bugku Web CTF-江湖魔头1
Bugku Web CTF-江湖魔头1 这道题比较有意思,简陋的武侠游戏,打开一看大致了解其功能: (1)基础属性可随机 (2)一共有血量.外功.内功等属性,还有金钱,金钱可用来在商店购买秘籍 (3) ...
- Bugku Web CTF-江湖魔头2
Bugku Web CTF-江湖魔头2 (接1) 然而在最初的尝试中却发现,当我填入修改好的cookie时,刷新页面属性值都为空(是为空而不是显示0),于是考虑是否因为逆运算哪里出现了问题. 仔细查看 ...
- Bugku web 聪明的php
Bugku web 聪明的php 模板注入 打开题目 模板注入 打开题目 得到提示,传递参数 随机传一个参数,得到源码 在这地方卡了挺久的,发现smarty是个模板,测试一下是不是模板注入 确实为sm ...
- BugKu——Web——社工-初步收集
BugKu--Web--社工-初步收集 一.解题思路 这里可以下载辅助,下载下来的是一个压缩包,不过会被当做病毒处理,设置成信任的即可,解压出来是个*.exe双击启动即可 随便输一个QQ和密码 回显都 ...
- Bugku—web题解
前言:最近做了一些Bugku入门的web题目,感觉web题挺有趣的,并非是得出flag,而是可以通过一个题目学习到很多知识. 域名解析 题目说把 flag.baidu.com 解析到123.206.8 ...
- Bugku—web(一)
前言: 最近做了几个bugku的web题,感觉挺有意思的,学到了不少东西:顺便总结下.(= ̄ω ̄=) 1.你必须让他停下: 打开链接,发现有个一直在闪的页面,时不时还会出现张图片:这是用了 js的se ...
- [Bugku][Web][CTF] 30-33 write up
[说明] 整合资源 简略版本2020Bugku write up web30 关键字: txt or file_get_contents(fn)知识点:filegetcontents(fn) 知识点: ...
- Bugku web(1—35)
1.web2 打开网页: 哈哈,其实按下F12你就会发现flag. 2.计算器 打开网页,只是让你输入计算结果,但是发现只能输入一个数字,这时按下F12,修改一下参数,使之可以输入多个数字,修改后输入 ...
最新文章
- 【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目(7.2) 模块管理,模块的添加、修改、删除...
- idea @Data 不起作用找不到 相关的注解
- makefile之引用(3)
- linux批量命令换行,Linux 下的这些高效指令,是你快速入门运维的神器
- redis 备份导出rdb_Redis学习——Redis持久化之RDB备份方式保存数据
- [转]jQuery知识总结
- android下canvas连线题思路
- 如何正确的获得一个view的宽和高
- 分布式开源调度框架TBSchedule原理与应用
- Attention U-Net笔记
- 阿里云学生服务器购买教程(附用途案例)
- Vue简易图片手风琴组件,包含宽度适应(JS操作CSS实现)
- 主数据管理(Master Data Management)基础
- 无线分组网关系统解决方案(GGSN、PDSN)
- 推荐系统论文:Personalized News Recommendation Based on ClickBehavior
- SQL——数据定义DDL
- 【Redis基础和应用】(四)HyperLogLog BloomFilter
- 利用 GDB 快速阅读 postgresql 的内核代码
- python二手房价格预测_分析香港2万6千套在售二手房数据,1000万的居然有那么多...
- 【贵阳市公积金相关问题】