Cuando se trata de scripts entre sitios, lo más importante es el contexto. El contexto en el que se refleja o se almacena. Lo demostraré con un ejemplo real de mi experiencia. Una vez, mientras buscaba errores, noté que un parámetro de URL se reflejaba dentro de una variable:
http://www.example.com/blah.php?id=test&var=101011
El valor de var se reflejaba en el origen de la página al cargar la página, aproximadamente en el siguiente formato, dentro de un bloque de script:
var a = "101011";
e inyectar tanto como un '<' desviaría la solicitud a la WAF que arrojaría una página de error, por lo que mi carga útil real para solucionar esto fue:
prompt(1)";eval(a);
que omitió el WAF y se convirtió en un caso exitoso de XSS reflejado. Por lo tanto, la carga útil debe modificarse según el contexto y es posible que no necesite las etiquetas. Espero que haya ayudado.