Jump to content

DnsDragon - Pesquise por diretórios ocultos em aplicações web


Walderlan Sena

Recommended Posts

 

Pesquise por diretórios ocultos em aplicações web [Repositório Oficial: GitHub Click aqui!]

O DnsDragon é um script para escanear aplicações web em busca de diretórios como: administracao/ login/ dashboard/ etc.

Citar

ATENÇÃO: A ferramenta foi desenvolvida para ser utilizada por profissionais/usuários éticos no processo de teste de intrusão em sistemas de informação. 

No processo de intrusão em aplicações web geralmente se faz necessário explorar contexto relacionado a segurança de diretório. De modo que com os mesmos desprotegidos pode causar um grande problema como a visualização de arquivos indesejados. Com isso desenvolvi um programinha em Shell Script, bem básico para realizar este processo.

Use:

./dnsdragon https://www.SiteQueDesejaScanear.com dragon.txt

 

Códigos de retorno

"A linha inicial de uma resposta HTTP indica ao cliente se sua requisição foi bem sucedida ou não Essa situação é fornecida através de um código de retorno (Status-Code) e uma frase explicativa (Reason-Phrase). De acordo com Fielding, o código de status é formado por três dígitos e o primeiro dígito representa a classe que pertence classificada em cinco tipos:

  • 1xx: Informational (Informação) – utilizada para enviar informações para o cliente de que sua requisição foi recebida e está sendo processada;
  • 2xx: Success (Sucesso) – indica que a requisição do cliente foi bem sucedida;
  • 3xx: Redirection (Redirecionamento) – informa a ação adicional que deve ser tomada para completar a requisição;
  • 4xx: Client Error (Erro no cliente) – avisa que o cliente fez uma requisição que não pode ser atendida;
  • 5xx: Server Error (Erro no servidor) – ocorreu um erro no servidor ao cumprir uma requisição válida.

O protocolo HTTP define somente alguns códigos em cada classe descritos na RFC 2616, mas cada servidor pode definir seus próprios códigos." - Fonte: Wikipedia  

Como a verificação de diretório funciona?

Sabendo que uma requisição HTTP terá um código de retorno, capturamos o mesmo e fazemos o teste de existência do diretório ou arquivo especifico:

Cod Significado
200 OK Diretório ou arquivo encontrado
403 Forbidden Diretório encontrado mas não há permissão de acesso
302 Moved Temporarily O cliente para executar um redirecionamento temporário

 

:) Código do Software:

#!/bin/bash

# DnsDragon - Pesquise por diretorios em sistemas web
# Description : Encontre diretórios ocultos em websites com a requisição via Curl
# Use         : ./dnsdragon [ https://www.siteparaanalisar.com ] dragon.txt
# Developer   : Walderlan Sena - <https://www.mentesvirtuaissena.com>
# Email       : contato@mentesvirtuaissena.com
# LINCENSE    : Lincense GPL <http://gnu.org/lincense/gpl.html>

# Variaveis Globais
scriptversion="v1.1.2"

ok="\033[1;32m[ Iniciado a busca ]\033[0m"

error="\033[1;31m[ ERROR ]\033[0m"

found="\033[1;32mFOUND DIRECTORY »»»»»»»\033[0m"

notfound="\033[1;31mNOT FOUND »»»»»»»\033[0m"

found2="\033[1;32mFOUND FILE »»»»»»»\033[0m"

# Tela de splash
splash(){
clear # Limpando a tela do terminal
echo -e '''\033[1;32m
       ____            ____
      |  _ \ _ __  ___|  _ \ _ __ __ _  __ _  ___  _ __
      | | | |  _ \/ __| | | |  __/ _  |/ _  |/ _ \|  _ \
      | |_| | | | \__ \ |_| | | | (_| | (_| | (_) | | | |
      |____/|_| |_|___/____/|_|  \__,_|\__, |\___/|_| |_|
                                       |___/       v1.1.2
        \033[1;33m"Pesquise por diretórios e arquivos em websites"\033[0m
       contato@walderlna.xyz - Developer: Walderlan Sena
         https//www.github.com/WalderlanSena/dnsdragon
    \033[0m'''
} # end function

# Opções do script
usage="\
Usage: $0 [SITE] [WORDLIST] [OPTION]...
   or: $0 [SITE] [WORDLIST] -v  [ Opção padrão ]
   or: $0 [SITE] [WORDLIST] -s  Host/Diretorio encontrados
Options:
\t--help     exibir esta ajuda e sair.
\t--version  exibir informações sobre a versão e sair.
\t-v  (Opção padrão) Mostra o scaneamento em funcionamento
\t-s  Mostra apenas os Host/Diretorio encontrados
\t-i  instalar no seu desktop no diretorio /usr/bin/
Exemplo execute:
\t./dnsdragon.sh http://www.sitealvo.com dragon.txt
Caso esteja instalado no seu PC utilize:
\tdnsdragon [ Site ] [ wordlist ] [ opcoes ]
"

# Verifica se os parametros foram passador corretamente
if [ ! -z "$1" ] && [ ! -e "$2" ] && [ -z "$2" ]
then
    # Verifica se o usuario deseja um help a versão ou instalar
    case $1 in
        --help)
            splash
            echo "$usage";;
        --version)
            echo $scriptversion;;
        -i)
            echo -e "\033[1;32m[ + ]\033[m Iniciando a instalação em /usr/bin/"
            if sudo cp dnsdragon.sh /usr/bin/dnsdragon
            then
                echo -e "[!] Instalado com sucesso em /usr/bin/ agora realize a chamada do software\n Apenas com 'dnsdragon [ Site ] [ wordlist ] [ opcoes ]'"
            else
                echo -e "$error Não foi possivel realizar a instalação..."
            fi
            echo "";;
        *)  echo "$usage";
    esac
elif [ ! -z "$1" ] && [ -e "$2" ]
then
    # Chamando tela de Boas Vindas
    splash
    # Obtendo a quantidadde de linhas da wordlist passada
    word=$(cat $2 | wc -l)
    echo -e "
    \t[ \033[1;34mWordlist:\033[0m $word  \033[1;34mInicio:\033[0m `date +"%T"` ]
    "
    echo -e "$ok Iniciando a busca..."
    # Iniciando a leitura da lista passada via parâmetros
    for search in $(cat $2);
    do
        # Realiza a requisição via HTTP com o curl e captura o valor de retorno
        result=$(curl -s -o /dev/null -w "%{http_code}" $1/$search/)        # Busca por diretórios
        result2=$(curl -s -o /dev/null -w "%{http_code}" $1/$search)        # Busca por arquivos
        # Verifica se a opção de pesquisa silênciosa foi selecionada
        if [ "$3" != "-s" ]
        then
            # Verifica se é um diretorio acessivel ou forbidden
            if [ "$result" == "200" ] || [ "$result" == "403" ];
            then
                echo -e "\033[0;36m[ `date +"%T"` ]\033[0m $found $1/$search/"
            else
                echo -e "\033[0;36m[ `date +"%T"` ]\033[0m $notfound $1/$search/"
            fi
            # Verifica se um diretório foi encontrado e realiza o download do mesmo
            if [ "$result2" == "200" ]
            then
                echo -e "\033[0;36m[ `date +"%T"` ]\033[0m $found2 $1/$search"
                curl -s $1/$search --output $search
            fi
            # Caso exista a opção -s passada como parametro mostra apenas os diretórios e os arquivos encontrados
            else
                if [ "$result" == "200" ] || [ "$result" == "403" ]
                then
                    echo -e "\033[0;36m[ `date +"%T"` ]\033[0m $found $1/$search/"
                fi
                if [ "$result2" == "200" ]
                then
                    echo -e "\033[0;36m[ `date +"%T"` ]\033[0m $found2 $1/$search"
                    # Realizando o download do arquivo
                    curl -s $1/$search --output $search
                fi
            fi
        done
else
    # Opção padrão quando não há solicitação correta via parâmentro para o script
    splash
    echo -e "$usage"
fi

   Para mais informações sobre o funcionamento, basta acessar o repositório no Github.

 

Grande Abraço.

Link to comment
Share on other sites

Bash :x

hehehe

Esse tratamento do código de retorno me lembrou dessa imagem:

http.jpg.3dbf10c390b25e3050155a5cf2771cd2.jpg

Vou fazer algumas sugestões pra pensar no futuro, caso queira, claro:

  • Instalar em /usr/bin ao invés de /bin ("usr" vem de "user", que seriam programas instalados pelo usuário, ou seja, não nativos do SO).
  • Uma wordlist padrão com os nomes de diretórios mais comuns acho que seria legal.
  • Fazer download do que encontrar aberto (seria útil pra deixar rodando em C&C de malware por exemplo).
  • Rodar como um serviço.

Abraço!

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...