JavaScript: Funktionen ohne Klammern aufrufen – mit prepareStackTrace
Yet another way to invoke functions without parentheses
Ein neuer Weg, in JavaScript beliebige Funktionen ohne Klammern aufzurufen: Man überlädt Error.prepareStackTrace mit dem Function-Konstruktor und manipuliert Array.prototype.toString, um den Stacktrace in gültigen Code zu verwandeln. Anschließend wird die erzeugte Funktion über den valueOf-Trick als Primitive aufgerufen. Der vollständige Payload lässt sich direkt in der Browser-Konsole testen.
Object.prototype.message='alert\x281337\x29';Array.prototype.toString=Error.prototype.toString;Error.prepareStackTrace = Function;const x = new Error;x.valueOf=x.stack;+x;