Skip to the content.

Página Inicial || Próximo || Anterior

Cross-Site Scripting

O Cross-Site Scripting é uma vulnerabilidade encontrada em aplicações web. A exploração dessa vulnerabilidade acontece quando inserimos um código malicioso na página HTML forçando a execução do código no navegador. Geralmente o código é inserido através de javascript. O Cross-Site Scripting - XSS é a 7ª vulnerabilidade no Top 10 do OWASP

owasp_xss_definition

Executando Cross-Site Scripting Básico

O vetor mais básico para execução do Cross-Site Scripting - XSS é o envio de requisições com o método GET. No exemplo abaixo, a página web permite que o visitante adicione seu nome na página através de um click.

method_get

Ao inserir o codigo como valor para o parametro name da requisição GET, a página executa o código. No HTML da página, o código é inserido na resposta da aplicação indicando que a aplicação aceitou o código.

Execução do código

teste_xss

Envio do código através do métdo GET

teste_xss_burp

Resposta da Aplicação com o código inserido no HTML

teste_xss_burp_response

Essa é a demostração clássica e mais básica da exploração do Cross-Site Scripting. Atualmente os desenvolvedores aplicam filtros que impedem a execução do XSS através do bloqueio de TAGs.

Executando o Cross-Site Scripting com ‘bypass’

A maneira de fazer o ‘bypass’ dos filtros aplicados para o Cross-Site Scripting é usar as próprias TAGs disponíveis no código HTML da página. No exemplo abaixo, o botão disponível para inserir o nome do visitante utiliza a TAG <a Podemos usar essa TAG para inserir um código malicioso na requisição do método GET.

html_xss_bypass

html_xss_bypass_result

Ao invés de utilizar o método onclick no qual espera uma ação do visitante da página, use o método onmousemove onde o simples movimento do mouse ao visitar a página já dispara o código malicioso.

Executando Cross-Site Scripting com ‘bypass’ avançado

Para finalizar esse artigo sobre a vulnerabilidade Cross-Site Scripting, os exemplos abaixo utilizam técnicas um poucos mais elaboradas para fazer o ‘bypass’ dos filtros anti-xss. A função eval do Javascript é tema de muita controvérsia entre os desenvolvedores pois ela pode ser utilizada para manipular strings e variáveis que executam através dessa função. Quando um filtro anti-xss é aplicado em uma página web, podemos usar o eval como solução de contorno dos filtros.

No primeiro exemplo o código //// é utilizado para executar o ataque.

bypass_eval_xss

No segundo exemplo é utilizada a tabela ASCII para fazer codificar o código malicioso do XSS. A função do Javascript String.fromCharCode() retorna strings a partir de valores Unicode. Então podemos codificar //alert(‘TESTE-XSS’)// usando caracteres Unicode da seguinte forma:

//String.fromCharCode(97,108,101,114,116,40,39,84,69,83,84,69,45,88,83,83,39,41)//

Para confirmar antes de inserir o código na aplicação, execute a função na console de desenvolvimento do navegador, conforme a figura abaixo:

codificacao_xss

Execução do XSS codificado

codificacao_xss_result

XSS codificado inserido no HTML

codificacao_xss_result_html

Esse artigo mostrou as técnicas utilizadas para explorar a vulnerabilidade de Cross-Site Scripting encontrada em páginas web e como testar se os filtros aplicados pelos desenvolvedores realmente conseguem evitar que a vulnerabilidade seja explorada.