我正在h1上搜索bug,我找到了一种在使用Angularjs、Nodejs和其他JavaScript库的站点上使用constructor.constructor()触发警报框的方法,我希望真正了解这里发生了什么,但还没有找到确切的信息。
确切的有效载荷是
constructor.constructor(“警报(1)”)()
我只找到了一些关于构造函数的信息,比如在定义函数和类的过程中,而不是作为一个“函数”(不太确定这在这个上下文中是什么)。我也不确定触发警报框的上下文是已经到位的库之一,还是仅仅因为JavaScript和DOM。
有人知道constructor.constructor()()是什么吗?它是如何工作的呢?
PS:有效载荷也放置在{{ }内,但显然它只是JavaScript,而不是一个实际的SSTI ( DOM解析了7*7,但仍保留在源代码中)
发布于 2022-04-06 15:44:16
对象实例具有对其构造函数的引用:
const o = {};
o.constructor === Object;如果不引用任何对象,则在window实例的全局上下文中执行属性,这与window.constructor相同
constructor /* or window.constructor */ === Window;Window和Object是函数实例,因为函数也是JavaScript中的对象,这意味着构造函数是Function。
constructor.constructor /* or Window.constructor */ === Function;Function函数可以使用字符串输入作为函数体来创建函数实例--类似于传入'alert(1)'的示例中的eval-so,结果是一个在执行时调用alert(1)的函数:
Function('alert(1)');
// is the same as
function () {
alert(1);
}最后,最后一个括号在没有任何参数的情况下执行函数,这就是使用1显示警报的原因。
https://stackoverflow.com/questions/71769586
复制相似问题