XSS refletido
O site devolve na página o que você mandou, e o navegador executa isso como código.
Um site muitas vezes pega um valor que você enviou (um termo de busca, um nome) e o mostra de volta na página: "Você buscou por: tapete". Se ele coloca esse valor dentro do HTML sem tratar, o navegador não sabe que aquilo veio de você: trata como parte da página. Se o valor for <b>oi</b>, aparece em negrito. Se for um pedaço de código que roda, o código roda.
Isso é XSS refletido: a entrada vai no pedido e volta na mesma resposta, refletida de volta. O ataque não fica guardado em lugar nenhum: ele está no endereço que a vítima abre. Quem monta o link controla o que roda no navegador de quem clica.
Um detalhe importante: quando o valor é colocado com innerHTML, um <script> injetado assim não roda (o navegador ignora scripts inseridos por innerHTML). O que roda é um manipulador de evento, como <img src=x onerror="...">: a imagem falha ao carregar, o onerror dispara, e o seu código executa.