O quê é ?
A Enumeração de arquivos e diretórios é uma técnica essencial no processo de um processo de pentest (Teste de Penetração), que consiste em explorar diretórios e arquivos ocultos e não documentados em um servidor web. Ela faz parte de um processo maior de enumeração, onde o especialista o atacante coleta o máximo de informações possíveis sobre o alvo.
Ao realizar essa enumeração, o objetivo é encontrar pontos de acesso que podem ser explorados, como:
- Arquivos e diretórios cultos
- Parâmetros de URL que podem ser manipulados ( ex: download=, id=, action= )
- Arquivos sensíveis que podem ter permissões inadequadas (como arquivos de backup, arquivos de senhas e etc)
Nesse artigo, abordaremos algumas observações do uso tanto da técnica quanto das ferramentas utilizadas para isso
Procurando arquivos e diretórios
Feroxbuster (recursive)
Utilizando feroxbuster para achar arquivos e diretórios
O feroxbuster é uma ferramenta extremamente performática, escrita em rust, utilizada para realizar a enumeração de diretórios web.
Alguns pontos sobre essa ferramenta devem ser analisados:
Exemplo de uso
feroxbuster -x php,html,asp,aspx,bkp,txt,pdf -t 150 -u http://172.70.10.30/ -w /usr/share/wordlists/dirb/big.txt
feroxbuster -u http://sea.htb/ -w /usr/share/wordlists/dirb/big.txt -t 150 --filter-status 403,404
Explicando as opções
- -u http://sea.htb/: Define a URL a qual será realizada a enumeração de diretórios;
- -w /usr/share/wordlists/dirb/big.txt: A opção -w traz a possibilidade de escolher a wordlist que será utilizada na enumeração;
- -t 150: A opção -t 150 aumenta a quantidade de threads na operação, aumentando a velocidade na qual a ferramenta é executada. No entando, algumas considerações devem ser feitas ao usar os threads durante a enumeração, as quais serão detalhadas mais a frente.
- –filter-status 403,404: retira os resultados da lista, trazendo uma saída mais limpa para a ferramenta, nesse caso, foram retirados os resultados 404,403.
- -x php,html,asp,aspx,bkp,txt,pdf: A opção -x define as extensões que serão buscadas na enumeração. Alguns pontos devem ser levados em consideração nesse caso que também serão abordados mais a frente.
Considerações de uso
- pode acontecer de o feroxbuster não conseguir encontrar todos os arquivos no diretório, ele é muito mais útil quando se tem a intenção de encontrar diretórios recursivamente;
- A opção -t 150 aumenta consideravelmente a velocidade da ferramenta. No entanto, quando se usa muitas threads (como com
-t 150
), há um trade-off entre a velocidade e a confiabilidade dos resultados;- Recomendação: É sempre uma boa prática usar um número de threads mais baixo para garantir resultados mais confiáveis, especialmente em servidores com limitações de recursos.
- Considerações ao selecionar extensões de busca com a ferramenta:
- a. A quantidade de extensões selecionados irá acarretar numa wordlist maior, aumentando também o tempo de execução da ferramenta;
- b. Se a extensão do arquivo não estiver especificada ou se o arquivo + extensão ( ex: README.md, backup.txt, senhas.json ) não estiverem na wordlist, a ferramenta não encontrará as strings.
- As ordem das opções, na maioria das vezes, não irá alterar o resultado. Até mesmo por isso não me preocupei em explicar na ordem dos comandos acima. No entanto, é sempre bom seguir as convenções, como por exemplo colocar a URL logo após o
-u
e as opções de configuração como-w
,-t
,-x
de forma lógica.
Gobuster
Assim como o feroxbuster, o gobuster é uma ferramenta de enumeração de diretórios extremamente performática, escrita em golang. Veremos alguns exemplos de utilização e alguns pontos a serem abordados:
Exemplo de uso
gobuster dir -u http://sea.htb/themes/bike/ -w /usr/share/wordlists/dirb/big.txt -x md,txt
Explicação dos resultados
- Pode-se verificar que a ferramenta traz diversas informações de cada requisição realizada, são elas:
- caminho para encontrar o arquivo;
- Nome do arquivo;
- status : 500, 400, 300 e 200.
- e Tamanho do arquivo.
Explicação das opções
- dir: A string dir define que eu irei realizar uma enumeração de diretórios no alvo;
- -u http://sea.htb/themes/bike/: Assim como no feroxbster, opção -u define a url a qual será utilizada;
- -w /usr/share/wordlists/dirb/big.txt: define a wordlist a qual a ferramenta irá utilizar;
- -x md,txt: Nesse caso, foi utilizado a opção -x md,txt , pois como exemplo, a intenção era achar o arquivo README.md, o que não seria possível sem a especificidade da extensão do arquivo, caso a wordlist não tivesse a string completa (README.md). Sendo assim, se fosse procurado somente com a wordlist, sem a extensão do arquivo, a ferramenta não acharia o arquivo README.md.
Alternativas com outras wordlists
Uma opção para encontrar o arquivo README.md sem a necessidade de usar uma lista tão longa, seria usar outra wordlist, como exemplo:
gobuster dir -u http://sea.htb/themes/bike/ -w /usr/share/wordlists/seclists/Discovery/Web-Content/quickhits.txt
Neste caso, a wordlist contém o arquivo README.md por si só, não havendo a necessidade de colocar extensões para achar o arquivo.
Considerações sobre o uso de wordlists
- Problema da descoberta de arquivos desconhecidos: Um dos desafios dessa abordagem é que, ao usar uma wordlist específica, o atacante pode não saber antecipadamente quais arquivos ou diretórios serão encontrados. Por exemplo, pode-se procurar por README.md, mas o arquivo de interesse poderia ser abc.txt. Se a wordlist não contiver
abc.txt
, o arquivo não será encontrado. - Equilíbrio entre o tamanho da wordlist e a efetividade: Encontrar o meio termo entre o tamanho da wordlist e a sua efetividade é crucial. Wordlists grandes podem demorar mais para serem processadas, e nem sempre as maiores são as mais eficientes. Uma wordlist pequena e focada pode ser mais rápida, mas pode não cobrir todos os cenários possíveis. Já uma wordlist muito grande pode ser abrangente, mas não necessariamente mais rápida ou mais efetiva, podendo levar mais tempo e gerar resultados irrelevantes.
- Uma recomendação própria do autor é usar como exemplo a configuração a seguir:
-w /usr/share/wordlists/dirb/big.txt -x php,html,asp,aspx,bkp,txt,pdf,md
FFUF
o ffuf
é amplamente utilizado em testes de penetração e auditorias de segurança para realizar fuzzing em URLs, permitindo que se descubram arquivos e diretórios ocultos em aplicações web. Ele pode ser utilizado para realizar ataques de força bruta em caminhos e nomes de arquivos. Assim como o gobuster, o FFUF também usa golang como linguagem de programação.
Exemplo de uso
ffuf -c -w /usr/share/wordlists/seclists/Discovery/Web-Content/quickhits.txt -u "http://sea.htb/themes/bike/FUZZ" -t 200 -fc 403
Explicando as opções:
-c
: Ativa o colorido no terminal, o que facilita a visualização dos resultados.-w /usr/share/wordlists/seclists/Discovery/Web-Content/quickhits.txt
: Define a wordlist a ser utilizada para fuzzing. Neste caso, a wordlist está localizada no diretórioseclists
.-u "http://sea.htb/themes/bike/FUZZ"
: A URL alvo onde o fuzzing será realizado, comFUZZ
sendo o marcador para os possíveis valores da wordlist.-t 200
: Define o número de threads a ser utilizado. Isso pode acelerar o processo de fuzzing ao realizar múltiplas requisições simultaneamente.-fc 403
: Exclui os resultados que retornam o código de status HTTP 403, ou seja, as respostas “Forbidden”.
Modularidade
O ffuf
é uma ferramenta muito flexível, pois oferece diversas opções para personalizar o processo de fuzzing, como a possibilidade de escolher diferentes wordlists, definir a quantidade de threads (-t
), ou até mesmo filtrar respostas específicas usando as opções de status code (como -fc
para filtrar respostas 403, por exemplo).
Não faz pesquisa recursiva
O ffuf
por padrão não realiza buscas recursivas. Ou seja, ele apenas realiza fuzzing na URL fornecida e não segue links ou explora subdiretórios além do nível inicial que é passado como parâmetro. Para realizar uma busca recursiva, seria necessário combinar ffuf
com outras ferramentas ou scripts adicionais
Procurando Arquivos e parâmetros
FFUF
Pesquisar parâmetros com o Fuff é uma das funcionalidades mais poderosas da ferramenta, permitindo realizar fuzzing em parâmetros de URLs, formulários e APIs. A seguir, explico como fazer isso e forneço exemplos práticos:
Fuzzing em parâmetros de URL GET
Se você quer descobrir parâmetros ocultos que podem ser aceitos por uma página, pode usar o Fuff para testar possíveis nomes de parâmetros.
Exemplo:
ffuf -u http://example.com/page.php?FUZZ=value -w /usr/share/wordlists/seclists/Discovery/Web-Content/burp-parameter-names.txt
Neste comando:
FUZZ
será substituído por cada palavra da wordlist.- O objetivo é identificar parâmetros que não retornam um erro ou que apresentam respostas diferentes.
/usr/share/wordlists/seclists/Discovery/Web-Content/burp-parameter-names.txt
é um exemplo de wordlist para encontrar parâmetros.
Fuzzing em valores de parâmetros:
ffuf -u http://example.com/page.php?param=FUZZ -w /path/to/value_wordlist.txt
Aqui, o Fuff tentará diferentes valores para o parâmetro param
.
Fuzzing em parâmetros de formulários POST
Se você quer testar parâmetros enviados por POST, use o parâmetro -d
para enviar dados no corpo da requisição.
Exemplo:
ffuf -u http://example.com/login -w /path/to/param_wordlist.txt -X POST -d "FUZZ=value&password=123456"
Neste caso:
FUZZ
será substituído por diferentes nomes de parâmetros.- Pode ser útil para descobrir campos ocultos ou não documentados.
-X
modifica o método utilizado, logo em seguida, é necessário selecionar o método POST, GET e etc.- A opção
-d
no FFUF é usada para enviar dados no corpo da requisição HTTP, permitindo que você realize fuzzingem parâmetros ou dados enviados via métodos como **POST**
. Essa funcionalidade é especialmente útil paratestar formulários, APIs, ou endpoints
que esperam informações no corpo da requisição.
Testando valores em POST:
ffuf -u http://example.com/login -w /path/to/value_wordlist.txt -X POST -d "username=admin&password=FUZZ"
Isso ajuda a testar possíveis senhas ou entradas para um campo específico.
Fuzzing em Cabeçalhos HTTP
Você também pode buscar por cabeçalhos HTTP específicos ou valores ocultos neles.
Exemplo:
ffuf -u http://example.com/ -w /path/to/headers_wordlist.txt -H "FUZZ: value"
Ou testar valores em um cabeçalho específico:
ffuf -u http://example.com/ -w /path/to/value_wordlist.txt -H "Authorization: Bearer FUZZ"
Configurações Úteis
- Filtro por código de status:
- Exclui respostas com determinados códigos de status.
--filter-status 404
- Filtro por tamanho de resposta:
- Evita resultados redundantes com tamanhos iguais.
--filter-size 1234
- Aumentar threads para maior velocidade:
-t 50
Exemplo Completo
Fuzzing em parâmetros de URL com múltiplos filtros:
ffuf -u http://example.com/page.php?FUZZ=arquivo.php -w /path/to/param_wordlist.txt -mc 200,302 -t 40
mc 200,302
: Mostra apenas respostas com status HTTP 200 ou 302.t 40
: Usa 40 threads para acelerar a execução.- Iria buscar algum parametro para baixar o arquivo.php