Estoy buscando errores en h1 y encontré una manera de activar un cuadro de alerta usando constructor.constructor() en un sitio usando Angularjs, Nodejs y otras bibliotecas de JavaScript y estoy buscando entender realmente qué está pasando aquí, pero no he encontrado la información exacta.
La carga útil exacta es
constructor.constructor('alerta(1)')()
Solo encontré información sobre constructores como en el proceso de definición de funciones y clases, pero no como una "función" (no estoy realmente seguro de qué es esto en este contexto). Y no estoy seguro si el contexto que activa el cuadro de alerta es una de las bibliotecas en su lugar o simplemente por JavaScript y el DOM.
¿Alguien sabe qué es constructor.constructor()() ? Y, ¿cómo funciona?
PD: la carga útil también se coloca dentro de {{ }} pero aparentemente es solo JavaScript y no un SSTI real (DOM analiza 7 * 7 pero permanece en el código fuente)
Las instancias de objetos tienen una referencia a su función constructora:
const o = {}; o.constructor === Object; Si no hace referencia a ningún objeto, está ejecutando la propiedad en el contexto global fuera de la instancia de la window , que es lo mismo que window.constructor :
constructor /* or window.constructor */ === Window; Window y Object son instancias de funciones, porque las funciones también son objetos en JavaScript, lo que significa que el constructor es Function
constructor.constructor /* or Window.constructor */ === Function; La Function Función se puede usar para crear una instancia de función usando la entrada de cadena como el cuerpo de la función, similar a eval , por lo que en su ejemplo de pasar 'alert(1)' el resultado es una función que llama alert(1) cuando se ejecuta :
Function('alert(1)'); // is the same as function () { alert(1); } Y finalmente, los últimos paréntesis ejecutan la función sin ningún parámetro, por lo que verá la alerta que se muestra con un 1 .