HTB baby breaking grad

网络安全是个大杂烩,啥都要接触,特别是渗透。这道题学到东西比较多。

1.nodejs 项目依赖下载 npm install --save xxx@version

2.nodejs 运行: node xxx.js

3.(function myTag(y){return ""[!y?"__proto__":"constructor"][y]})("constructor")("console.log(process.env)")()

简化(function f(y) {})(),function f(y) {}定义函数,(function f(y) {})为函数表达式(与函数声明效果类似) ,最后加(),调用函数表达式中定义的函数。


函数体{return ""[!y?"__proto__":"constructor"][y]} ""刚开始以为是"转义,后面看文章才发现是空字符,与"string"效果一致,转为string object。

[!y?"__proto__":"constructor"],当function myTag(y) 参数时,为["constructor"].否则是["__proto__"]。效果为 {return StringObject["construct"][y]} 返回object对应的construct(构造函数)==return string.construct.y

{return ""[!y?"__proto__":"constructor"][y]})("constructor")=string.construct.construct,构造函数实例化,返回ConstructFunction object。

最后 string.construct.construct("console.log(process.env)") = new string("console.log(process.env)"),使用 "console.log(process.env)"来构造string。

string.split为function object (class),spring.split.construct返回function object instance。

这道题还有另外一个漏洞CVE-2021-23334

"(function (x) { return `${eval(\"throw new Error(global.process.mainModule.constructor._load('child_process').execSync('ls ').toString())\")}` })()"

``为typescript template string ``之外及之内都为typescript。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 0.前言 有的时候多人开发,代码的风格,用的代码编辑器都各不相同,所以为了大家能保持一种统一的风格,ESLint就...
    旧丶时候阅读 14,624评论 0 8
  • "no-alert": 0,//禁止使用alert confirm prompt "no-array-constr...
    __凌阅读 4,200评论 0 0
  • 什么是 ESLint ESLint(中文站点)是一个开源的 JavaScript 代码检查工具,使用 Node.j...
    小肆逸阅读 5,359评论 0 3
  • ESLint 是用 Node.js 写的,可以通过 npm 来安装。ESLint 也可以在 webpack(esl...
    锋_5bdc阅读 5,939评论 0 1
  • 16宿命:用概率思维提高你的胜算 以前的我是风险厌恶者,不喜欢去冒险,但是人生放弃了冒险,也就放弃了无数的可能。 ...
    yichen大刀阅读 11,491评论 0 4

友情链接更多精彩内容