首页 > 其他分享 >bugku-sodirty

bugku-sodirty

时间:2022-11-15 00:00:34浏览次数:58  
标签:body bugku sodirty req send key res password

打开网页,点下注册,然后啥都没有

尝试用御剑扫描一些

发现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)
首先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

标签:body,bugku,sodirty,req,send,key,res,password
From: https://www.cnblogs.com/liudaxiaxd/p/16891029.html

相关文章

  • bugku-No one knows regex better than me
    难得开靶场所需要的金币,比完成题目给的少题目源码<?phperror_reporting(0);$zero=$_REQUEST['zero'];$first=$_REQUEST['first'];$second=$zero.$first;if(preg_......
  • bugku-web-wp
    前言刷题平台:bugkuSimple_SSTI_1根据提示使用flag构造payoadflag{ea975f1b437b2290f98feacafb65d30c}GET根据提示get传参what=flagflag{6173e1cf278c7aa09813......