打开网页,点下注册,然后啥都没有
尝试用御剑扫描一些
发现www.zip
打开网页,会下载到网站源码
在纷扰中找到一个文件/routes/index.js,用笔记本打开
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("传参有误"); }else { let key = req.body.attrkey.toString(); let value = req.body.attrval.toString(); setFn(req.session.challenger, key, value); res.send("修改成功"); } } }); module.exports = router;
芜湖,,,第一次见到这种代码(node.js),但根据单词的意思还是能搞懂,
分析代码,可知get/,/index,/reg,以及在网站中表现,还有另外两个需要POST的/getflag和/update,且想获得flag必须将age改动,低于79,以及需要管理员密码
可以猜测通过/update,来改动。
setFn(req.session.challenger, key, value)标签:body,bugku,sodirty,req,send,key,res,password From: https://www.cnblogs.com/liudaxiaxd/p/16891029.html
首先payload:attrkey=age&atteval=50
接下来要了解js原型污染
可以去这看看JavaScript原型链污染原理及相关CVE漏洞剖析 - FreeBuf网络安全行业门户
通过了解明白了这题
可以通过__proto__.pwd更改challenger和Admin共同的父亲object,让他加一个属性pwd,指定值,
然后我们把key设置成pwd,password设置成我们给object赋的pwd值,就可以过这个if,得到flag
因此payload:attrkey=__proto__.pwd&atteval=qwe
然后再/getflag下payload:password=qwe&key=pwd