LFI - Local File Inclusion

Essa vulnerabilidade ocorre quando a aplicação permite que o usuário inclua algum arquivo. Vamos supor que no código fonte há um include que pega por parâmetro via GET e inclui esse arquivo.

Com isso, podemos testar colocar uma barra "/" no parâmetro file para ver como que a aplicação se comporta.

Como esperado, a aplicação tentará incluir o que for passado no parâmetro. Podemos então navegar pelas pastas voltando e lendo alguns arquivos sensíveis, como o /etc/passwd por exemplo.

E pronto, conseguimos ler um arquivo no servidor.

Essa é até uma falha pouco provável de achar, apenas acontecerá se o desenvolvedor realmente confiar no controle que o usuário tem da aplicação, que é algo que não se deve fazer.

Infecção de logs

Uma técnica para conseguirmos uma shell com a falha de LFI, é infectar algum arquivo de logs de algum serviço, como por exemplo, o do apache. O arquivo de logs do apache fica localizado em /var/log/apache2/access.log. A ideia é enviarmos uma requisição maliciosa para o servidor e após isso, utilizar a LFI para ler esse arquivo de log, assim ele irá exibir a requisição e se houver um script PHP ele irá interpretar. Se enviarmos uma requisição ou um arquivo pelo netcat com um comando <?php system($_GET['cmd']); ?> e depois disso lermos o arquivo de logs, ele irá permitir que nós conseguiremos executar um comando no sistema alvo que for passado por parâmetro. Com isso, podemos conseguir uma shell e comprometer esse sistema.

PHP Wrappers

Uma outra forma de explorarmos essa falha, é utilizarmos o php wrappers. Passando qualquer valor, a aplicação retorna esse erro, está inserindo ".php" no final do arquivo passado por parâmetro.

Agora passando o wrapper data:// podemos inserir um código php logo em seguida.

Não apareceu nada na tela, mas se visualizarmos o código fonte, veremos que foi executado normalmente.

Obs: geralmente esse wrapper é passado da seguinte forma: data://text/plain;base64,<código aqui em base64> porém nesse caso não foi necessário codificar para base64.

Last updated