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
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.
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
Envio do código através do métdo GET
Resposta da Aplicação com o código inserido no HTML
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.
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.
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:
Execução do XSS codificado
XSS codificado inserido no 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.