</form><form action="../cgi-bin/save-form.cgi" method="post">Preparação:
Campo | Código a introduzir |
ID | </form><form |
Título | action="../cgi-bin/save-form" |
Responsável | method="post"> |
Concretização:
O atacante necessita apenas de convencer o utilizador a seguir um link com a seguinte estrutura
http://localhost/~fireman/cgi-bin/echo1.cgi?idProposta=</form><form& tituloProposta=action="../cgi-bin/save-form"&responsavelProposta=method="post">Para prevenir que o utilizador possa perceber a semântica do ataque no link é possível usar os códigos hexadecimais para esconder isso
http://localhost/~fireman/cgi-bin/echo1.cgi?idProposta=%3C%2F%66%6F%72 %6D%3E%3C%66%6F%72%6D&tituloProposta=%61%63%74%69%6F%6E%3D%22%2E%2E%2F%63 %67%69%2D%62%69%6E%2F%73%61%76%65%2D%66%6F%72%6D%22&responsavelProposta= %6D%65%74%68%6F%64%3D%22%70%6F%73%74%22%3E
Há alguns anos acreditava-se que nenhum ataque de XSS era possível com menos de 40 caracteres.
Mesmo não sendo possível efectuar um ataque com poucos caracteres, dada a limitação dos campos do formulário, este problema pode ser
contornado relembrando que o processamento de HTML ignora código que não reconhece. Tal facto permite que o espaço de caracteres de
ataque possa ser no máximo o número total de caracteres possíveis de inserir em todo o formulário. Isto porque o código que existe entre
os valores dos campos na previsão é ignorado por ser interpretado como atributos da tag HTML "form", iniciada no primeiro campo. No
exemplo bastou um máximo de 29 caracteres por campo para se conseguir o ataque. Se eventualmente o ataque fosse diferente, e as tags
com os atributos fossem suficientemente pequenas para caberem nos campos, poder-se-ia reparti-las pelos campos do formulário,
colocando tags HTML de início de comentário (<!--
) e fim de comentário (-->
) nos campos, de maneira a
comentar todo o código HTML entre os mesmos. Dessa maneira o código resultante seria o código de ataque completo, significando o sucesso
do XSS.