O que é LFI? (hacking).

Juan Grimm
3 min readApr 18, 2019

Opa, meu nome é Juan Grimm e hoje gostaria de te mostrar um pouco sobre a famosa falha de LFI ou Local File Inclusion.

Local File Inclusion

A falha de LFI ocorre quando um desenvolvedor faz a inclusão de um arquivo via parâmetro GET e não faz o devido tratamento da entrada do usuário, permitindo assim que ele inclua qualquer arquivo do sistema.

Falando em Português…

Os desenvolvedores utilizam uma função para incluir arquivos em quanto estão programando, imagine que você tenha um emaranhado de código em sua aplicação desempenhando diferentes funções e todos no mesmo arquivo, ou melhor, nem imagine pois isso seria um verdadeiro desastre, para solucionar isso utiliza-se então os includes, para organizar as partes de códigos em arquivos específicos para cada função, algo como:

Onde cada elemento é separado por sua função a desempenhar.

Trabalhando com o include()

Vou utilizar como base a linguagem de programação PHP, a usabilidade da função include é extremamente simples, você só precisa passar como parâmetro uma string que vai ser o nome do arquivo a ser incluido, desta forma:

O que estamos fazendo é incluindo todo o conteúdo do arquivo.php dentro do nosso arquivo atual, neste caso de index.php, o próprio nome da função já é de fato bem explicativo, incluir.

Trabalhando com GET

Podemos recuperar via parâmetro GET diferentes informações, incluindo informações dos usuário, erros, arquivos, redirecionamentos, entre outras aplicações, o fato é que para pegar uma informação via parâmetro GET, seria assim:

E para fins didáticos vou exibir na tela do usuário utilizando o echo, desta forma:

Se acessarmos a página na qual criamos teremos o seguinte resultado:

http://localhost/index.php

Ops… não podemos esquecer de enviar o parâmetro via requisição GET, então:

http://localhost/index.php?param=algumacoisa

A falha

De fato a falha ocorre quando existe uma junção destes dois elementos, o include recebe como parâmetro a entrada via GET, temos:

Por fim, temos que o include vai incluir o arquivo que passarmos via parâmetro, neste caso vou criar um arquivo chamado post.php e nele colocarei uma mensagem.

Arquivo post.php

Agora para que possamos incluir o arquivo, acessamos:

http://localhost/index.php?param=post.php

Onde está o perigo?

O problema acontece quando arquivos do sistema podem ser acessados, como por exemplo o passwd:

http://localhost/index.php?param=/etc/passwd

Acessando arquivo interno do sistema.

O que acontece no código internamente seria:

include($_GET[“param”]) => include(“/etc/passwd”)

Mas apesar de parecer inofensiva, a falha de LFI pode se tornar uma RCE (execução de código remota), com diferentes meios de ser explorado, mas isso é assunto para outro post.

--

--