Estaba leyendo sobre JSf ** k . Desde su página web:
JSF ** k es un estilo de programación esotérico y educativo basado en las partes atómicas de JavaScript. Utiliza solo seis caracteres diferentes para escribir y ejecutar código.
Mi pregunta es: ¿cuándo podemos usar exactamente esa carga útil para explotar una vulnerabilidad XSS? Probé el siguiente código HTML simple para probarlo:
<html>
<img src=1 onerror="(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+(![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]+[+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]" >
</html>
Acabo de reemplazar el alert(1)
con el código K correspondiente al texto sin formato JSF **. Sin embargo, el navegador no parece representar la carga útil. Cuando escribo la carga útil en la consola de Chrome, se representa como una cadena "alerta (1)" pero no funciona en el código HTML anterior. Supongo que eso tiene que ver con la forma en que un navegador procesa estas cargas (no conozco cómo / cuándo exactamente un navegador procesa varios tipos de cargas).
Me gustaría entender los escenarios en los que dichas cargas útiles pueden ser útiles al probar una aplicación web.
ACTUALIZACIÓN: Como se mencionó en la respuesta, el método funciona cuando se usa la fuente eval en lugar de la cadena de alerta (1) normal. Mi pregunta es, ¿por qué necesito una fuente de evaluación? AFAIK, el navegador debe ejecutar la cadena pasada al atributo onerror como JavaScript.