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:
Entendendo o fuzzer e montando a url:
Não vamos usar o fuzzer como um scanner, até daria, mas o próprio acunetix no seu core já faz isso muito bem, a ideia aqui é utilizar o fuzzer para extrair o maior número de informações possíveis do host alvo.
Na tela principal do Fuzzer (Requests) é mostrada uma típica requisição HTTP
GET http://hostname/path HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)
Accept: */*
Usaremos este espaço para montar nossa requisição afim 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= onde 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.
Criado e configurando os Generators Como isto é um fuzzer evidentemente ele precisa gerar strings, ints, chars repetidos e coisas do tipo, mas como foi dito acima, não vamos scanear e nem fuzzear nada, logo, vamos dar uma nova função para os generators, inicialmente precisaremos de dois, claro que, para ataques mais complexos serão necessários mais generators.
Character repeater e File generator
Como o próprio nome diz, o Character repeater vai repetir quantas vezes quisermos um determinado caracter ou string. Sendo assim, vamos preencher os campos para criação, use nomes intuitivos para cada generator, quando se tem vários, realmente fica complicado saber o que eles fazem usando apenas o nome padrão que o Acunetix gera, Gen_N, onde N é um número sequencial.
Name: dotslash => Nome intuitivo
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 idéia 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 e etc.
find / -type f > wordlist.txt
Depois foi feito um append das listas e retiradas as linhas iguais, além disso, removida a primeira “/” do arquivo final devido ou 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
Depois dos generators devidamente criados e configurados, é necessário adiciona-los ao request http:
Posicione o cursor logo depois de pag=, selecione o generator dotslash e clique em Insert Into Request, repita o processo para o filesnames_wordlist.
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 irá procurar a string em qualquer porte da resposta enviada pelo servidor.
Regular Expression: failed to open stream => Neste 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
Arquivo não existe:
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
Assim, filtramos várias possibilidades com uma única regra, depois de pronto clique em Add. Caso precise alterar a regra selecione a regra em questão e clique em update.
Lembrando que, esta regra foi feita para tratar uma erro genérico do PHP, é bem possível que sejam encontrados códigos que tem o tratamento feito pelo programador, ou seja, seu filtro deverá ser ajustado de acordo com a mensagem de erro retornada pela aplicação.
Pronto, agora é só clicar no start e colher os arquivos encontrados no servidor alvo.
Existem outros trick´s que vou mostrar no próximo post. Resolvi dividir em duas partes para que o artigo não fique cansativo.
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 Twitter: @crashbrz Até a próxima pessoal.
Postado por Crash às 02:58:00 5 comentários:
Enviar por e-mailPostar no blog!Compartilhar no TwitterCompartilhar no FacebookCompartilhar com o Pinterest
Postagens mais recentes Postagens mais antigas Página inicial
Assinar: Postagens (Atom)
Pesquisar este blog
Translate
Postagem em destaque
Kali linux: BareMetal, Virtualized or USB Stick
Few days ago, we had a discussion about what is the best approach for Kali Linux installation. A lot of guys complain about the p...
Postagens populares
Resultado dos testes com Psafe Protege AntiVirus
O Psafe Protege mesmo? Bem, inicialmente gostaria de dizer que esta pesquisa em momento algum quis comparar o Psafe com qualquer outro ...
[DcLabs] - Executando o BackTrack 5 no Android
Este paper foi inspirado na palestra “Hacking from the Restroom” do pesquisador brasileiro Bruno Gonçalves apresentado na conferência de...
Exploiting SQL Injection by Bypassing WAF (Mod_Security)
Since years, SQL Injections have been the most dreadful and frightening of all vulnerabilities discovered till date. The power of a single...
Transmitir conteúdo para TV por wifi - NetWorkMedia NWM - DLNA
Bom pessoal, Resolvi escrever este post por alguns motivos: Vi que muita gente tem o mesmo problema que eu e nenhuma das soluções que pr...
Backdoor PHP Favicon/Imagens - Web Shell Root
Bom pessoal, vou iniciar este post esclarecendo algumas coisas: A alguns dias foi levantada uma discussão sobre LFI´s e RFI por causa da f...
Kali linux: BareMetal, Virtualized or USB Stick
Few days ago, we had a discussion about what is the best approach for Kali Linux installation. A lot of guys complain about the p...
Configurando o agente do Ossec HIDS no Windows server
A instalação do Ossec no Windows é bastante intuitiva porém alguns ajustes são necessários para garantir sua total eficiência. Após conclui...
Acunetix LFI Pos Exploitation - Downloading Files Structure Part 1
Olá pessoal! Pra comemorar meu aniversário, nada melhor que um post \o/ Neste artigo vou mostrar uma funcionalidade do Acunetix q...
HP Power Manager 'formExportDataLogs' Buffer Overflow analysis
Olá a todos! Irei descrever neste artigo como foi minha experiência com a análise de um advisory, a identificação e criação do trigger(poc)...
Acunetix LFI Pos Exploitation - Downloading Files Structure Part 1 (En-Us)
Hi folks! In this article we will show a very interesting feature of Acunetix : the HTTP fuzzer. In addition to be used as a fuzzer ...