ffuf – Descobrindo conteúdos em serviços web

Na hora de realizar tanto um pentest quanto um bug bounty, uma das etapas iniciais é a enumeração de conteúdos presentes no alvo, seja um servidor ou serviço web. Para realizar enumeração em serviços web, contamos com o auxílio de diversas ferramentas de web fuzzing, e uma delas é o ffuf, uma poderosa ferramenta para garantir uma enumeração rápida e altamente customizável. Para a demonstração desta ferramenta será usado o juice-shop e o site vulnweb da Acunetix.

Primeiramente iremos descobrir os arquivos que o serviço web possui. Para isso usamos o comando abaixo:

ffuf -u http://127.0.0.1:3000/FUZZ -w /usr/share/wordlists/SecLists-master/Discovery/Web-Content/common.txt

Entendendo o comando:

-u: URL alvo.

FUZZ: onde ocorrerá substituição das palavras encontradas na wordlist para encontrar os conteúdos do serviço web.

-w: wordlist que será usada, neste caso usaremos a SecList.

Quando executamos o comando acima, obtemos diversos resultados indesejáveis entre aqueles que queremos. O ffuf tem capacidade de filtrar esses resultados indesejáveis com as opções de filtros, as principais opções são:

-fc: filtra os status code das responses geradas pelo servidor.

-fl: filtra o número de linhas da response.

-fs: filtra o tamanho da response HTTP. 

Neste artigo será usado a opção -fl para filtrar todos os resultados que tenham exatamente 30 linhas, logo o comando ficará assim:

ffuf -u http://127.0.0.1:3000/FUZZ -w /usr/share/wordlists/SecLists-master/Discovery/Web-Content/common.txt -fl 30

Com esses achados podemos explorar ainda mais a aplicação web a fim de adquirir um maior conhecimento sobre o serviço alvo.

Para aprimorar a nossa busca por arquivos, iremos usar a opção -e que permite a busca por uma determinada extensão de arquivo. Neste exemplo será usado o vulnweb e o seguinte comando será usado:

ffuf -u http://testphp.vulnweb.com/FUZZ -w /usr/share/wordlists/SecLists-master/Discovery/Web-Content/common.txt -e .php

Caso não tivesse sido usada a opção -e para encontrar arquivos php, teriamos o seguinte resultado:

Outra funcionalidade interessante do ffuf é a capacidade de utilizar headers quando realiza o fuzzing, para isso temos duas opções:

-H: deve-se entrar com o nome do header e o valor (exemplo -H “Host: 127.0.0.1”), podemos usar mais de -H no comando.

-request: nesta opção deve-se colocar um arquivo com a requisição na qual será usada.

A demonstração desta opção será feita no vulnweb para procuramos por subdomínios e os comandos serão:

ffuf -w /usr/share/wordlists/SecLists-master/Discovery/DNS/subdomains-top1million-20000.txt -H “Host:FUZZ.vulnweb.com” -u http://vulnweb.com

ffuf -w /usr/share/wordlists/SecLists-master/Discovery/DNS/subdomains-top1million-20000.txt -request request.txt -u http://vulnweb.com

Além da capacidade de descoberta de arquivos e subdominios, ffuf consegue fazer ataques de brute force em formularios, para este exemplo usaremos o vulnweb. Faremos o brute force na conta do admin (), usando o seguinte comando:

ffuf -w /usr/share/wordlists/SecLists-master/Passwords/darkweb2017-top10000.txt -u http://127.0.0.1:3000/rest/user/login -request request.txt -X POST -d “[email protected]&password=FUZZ” -fs 26

A opção -fs foi usado para filtrar os resultados errados, poderia ter se usado também o -fc para filtrar os status code.


Podemos usar diversas outras opções disponiveis do ffuf para conseguirmos mais resultados da aplicação web. Em nosso curso de pentest profissional você aprenderá sobre diversas outras ferramentas, metodologia e entre outros conteúdos para você se tornar um hacker ético profissional.