LFI

LFI (Local File Inclusion) é o processo de inclusão de arquivos, que já estão presentes localmente no servidor em questão. Esta falha ocorre, por exemplo, quando uma página recebe como entrada, o caminho para o arquivo que será incluído, e esta entrada não é validada de forma correta pela aplicação web, possibilitando assim que caracteres de directory traversal (../../) sejam injetados.

Apesar de que a maior parte desse tipo de falha se manifeste em aplicações PHP, é muito importante lembrar que ela também pode ocorrer em JSP, ASPX e em outras tecnologias.

OBS.: Apesar da semelhança entre LFI e Directory Transversal, os dois temas estão sendo tratados de forma unitária aqui. Abaixo uma breve descrição entre a principal diferença entre os dois:

LFI: Tem capacidade para executar arquivos. Pode ser um código shell ou outro arquivo local existente no sistema Directory Transversal: Ele apenas percorre os arquivos, para que possamos apenas lê-lo (não pode executar). Esse é o tipo de divulgação de informações confidenciais

Abaixo segue um trecho de código PHP vulnerável a LFI:

$file = $_GET['page'];
require($file . ".php");

O .php é adicionado no final do nome do arquivo, isso significa que não seremos capazes de encontrar arquivos como /etc/passwd já que o arquivo ficará com o nome /etc/passwd.php, que não existe.

Então vamos ver algumas técnicas que podemos utilizar para driblar esse tipo de defesa.

Null Byte

Adicionando um NullByte ao final de nossa string de ataque, o .php não será levado em consideração. Então adicionamos %00 ao final da nossa string de ataque, ficando assim:

http://example.com/page=../../../../../../../etc/passwd%00

OBS.: Isso só funciona em Perl e versões abaixo do PHP 5.3.4, mas caso não funcione, substitua %00 por %2500. Em situações de falha, podemos contornar isso de outra maneira, substituindo %00 por ?. Colocando a interrogação, o sistema pode entender que se trata de parâmetros GET.

PHP (Wrappers)

Baixando um arquivo do servidor em Base64

Semelhante ao ataque acima, porém a saída não está em base64

Extrai um arquivo zip. Antes de extrair o arquivo, faça upload desse arquivo zip com um shell reverso dentro

Executando comandos PHP em real time:

Bypass em Files Directory

As vezes não é possível trazer o conteúdo com http://example.com/page=/etc/passwd, então podemos usar os seguintes modelos:

DICA: Caso o alvo seja um Windows, você pode usar test/../../../file.txt, mesmo que o diretório test não exista.

As vezes é preciso acessar determinado diretório para então pode voltar e acessar um arquivo na raiz

Também podemos

Outra forma é denotando file ou local_file, por exemplo:

Bypass em Regex

Considere e seguinte código do arquivo index.php que serve para ler o conteúdo de um arquivo PHP e exibir na tela, porém o arquivo config.php está restrito a leitura. O nome do arquivo que será lido, deverá ser informado via GET no parâmetro source.

Podemos então, "bypassar" essa condição da seguinte forma:

Codificando Caracteres

  • . = %u002e

  • / = %u2215

  • \ = %u2216

  • . = %c0%2e, %e0%40%ae, %c0ae

  • / = %c0%af, %e0%80%af, %c0%2f

  • \ = %c0%5c, %c0%80%5c

  • . = %252e

  • / = %252f

  • \ = %255c

  • . = %2e

  • / = %2f

Inserindo Comandos via Log do Apache

Antes de tentarmos esse ataque, precisamos ser capazes de ler arquivos de log. Então vamos envenenar o arquivo de log do apache. Podemos usar o success.log ou o error.log.

Modo 1

Então primeiro vamos injetar o código PHP no arquivo de Log, utilizando o Netcat.

Podemos adicioná-lo ao log de erros fazendo uma solicitação para uma página que não existe:

Ou no parâmetro referer

Agora podemos ler e executar o código através do Browser:

Modo 2

Acesse a página vulnerável a LFI utilizando o seguinte comando

Agora abra o netcat

Realize o RCE para gerar a Reverse Shell

Inserindo Comandos via Log do SSH

Acesse o host vulnerável a LFI utilizando o serviço SSH e passando o payload no lugar do user

Agora abra o netcat

Realize o RCE para gerar a Reverse Shell

Log Poisoned (LFI + RCE)

Environ

Assim como a inserção de comandos via Log do Apache, neste também precisamos ser capazes de ler arquivos, nesse caso iremos ler /proc/self/environ. Primeiro acesse o site/sistema Apache com um User-Agent que contenha comandos. Para exemplo, iremos utilizar o curl.

Agora podemos ler e executar o código através do Browser:

Lendo Arquivos do IIS 4

O IIS 4 contém uma vulnerabilidade de ataque Directory Transversal, que permite mostrar os arquivos. Para ver qualquer arquivo no servidor via web, digite um dos comandos abaixo:

Sites

Last updated

Was this helpful?