O amigo Crash, um dos membros do DcLabs, fez este excelente post
Neste artigo vou mostrar uma funcionalidade do Acunetix, que eu acho bem interessante, o HTTP fuzzer.
Além de fazer o fuzzing de aplicações web e do protocolo http em si, poderemos usá-lo para explorar de forma bem efetiva uma falha conhecida como LFI ou Local File Include.
Deixei as referências da falha no link acima, caso você ainda não conheça a falha. Vamos ao que interessa:
Na tela principal do Acunetix, tanto na versão 7 quanto na 8, a feature pode ser localizada no lado esquerdo, como mostrado na figura abaixo:
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)
Accept: */*
Usaremos este espaço para montar nossa requisição a fim de explorar o LFI. Além disso, como o campo é liberado, podemos adicionar e/ou alterar headers. Neste ponto, você já deve saber qual a URL do LFI, como exemplifícado abaixo:
GET http://lfi.dc/lfi.php?pag= HTTP/1.1
User-Agent: Mozilla/4.0 (DcLabs)
Accept: */*
Logo, para exploração do LFI será usada a URL http://lfi.dc/lfi.php?pag= , em que pag é a variável onde se encontra a falha. Troquei o User-Agent apenas para mostrar que os headers podem ser alterados/adicionados sem problemas.
Character/String: ../ => Se você não sabe o porque da utilização da string “../../” sugiro que volte ao inicio do artigo e leia a referência sobre LFI.
Initial count:1 => Irá iniciará o processo com a string ../../ uma vez
Final count:2 => Máximo de repetições da string ../../
Increment:1 => Incremento do contador da string
Encoding: None
Este generator foi configurado para um ataque clássico de LFI. Logo, o campo Initial count deve ser configurado de acordo com a quantidade de “dotslash’s” encontrados para exploração da falha. Não precisaremos encodar a string neste caso, por isso o campo Encoding foi setado como None. Usar URL Encoding e base64 é uma boa opção para evasão de possíveis filtros. O segundo generator (File Generator) vai ler informações de um txt ou xml linha a linha. Sendo assim, usaremos uma lista de nome de arquivos que provavelmente existem no servidor atacado. A ideia para montar essa lista foi simples: foi executado o comando abaixo em diversas distribuições e com diversas aplicações instaladas, como Apache, mysql, wordpress, cacti, nagios,oracle etc.
find / -type f > wordlist.txt
Depois, foi feito um append das listas e retiradas as linhas iguais. Além disso, foi removida a primeira “/” do arquivo final em virtude do uso da string “../../”.
Completando os campos deste generator:
Name: filenames_wordlist => Nome intuitivo
Fileaname: wordlist.txt => Nome da sua wordlist
Filetype: txt => Tipo da sua wordlist
Encoding:nome => Mesmo esquema do Character repeater
O resultado deverá ser algo assim:GET http://lfi.dc/lfi.php?pag=${dotslash}${filenames_wordlist} HTTP/1.1
User-Agent: Mozilla/4.0 (DcLabs)
Accept: */*Antes de iniciar a exploração, é interessante que sejam criados filtros para que sejam separados somente os resultados relavantes do ataque. Isso pode ser feito pela aba Fuzzer Filters. Já existem dois filtros por padrão, Include Internal Server Error e Invalid username/password combination. Este segundo, para o caso do LFI, não será necessário, basta selecionar e deletar.Criando e configurando filtros
Rule Description: Failed to open => Nome intuitivo para o filtro(Mesmo caso dos generators)
Rule type: Exclusion => Caso o request caia na regra, será excluído do relatório
Apply to: Response => Onde a regra fará o match. Neste caso, ele procurará a string em qualquer porte da resposta enviada pelo servidor.
Regular Expression: failed to open stream => Este campo é preenchido com a string que fará match com a resposta do servidor e excluirá do report final. Usei a string “failed to open stream” pelo fato de ser um erro genérico do PHP. Quando um arquivo não é encontrado, não se tem permissão para acessá-lo – ou qualquer outro motivo pelo qual o arquivo não pode ser lido:Erro de permissão:
Warning: include(../../../etc/shadow) [function.include]: failed to open stream: Permission denied in /var/www/t.php on line 6
Warning: include() [function.include]: Failed opening ‘../../../etc/shadow’ for inclusion (include_path=’.:/usr/share/php:/usr/share/pear’) in /var/www/t.php on line 6
Warning: include(../../../etc/dclabs) [function.include]: failed to open stream: No such file or directory in /var/www/t.php on line 6
Warning: include() [function.include]: Failed opening ‘../../../etc/dclabs’ for inclusion (include_path=’.:/usr/share/php:/usr/share/pear’) in /var/www/t.php on line 6

O HTTP Fuzzer está liberado na versão Free do Acunetix. Fiz um vídeo que mostra a ferramenta em execução com uma wordlist menor: http://youtu.be/z357C_8H3Mc O próximo passo, além da parte 2, é escrever um código que faça este mesmo trabalho para ser integrado ao metasploit.Lili, muito obrigado pela revisão! \o/ Qualquer dúvida #dclabs @ freenode Até a próxima pessoal. @crashbrz é o twitter do nosso amigo Crash