Scanner de site básico para subpáginas em Python

Jan 26 2023
Olá pessoal! No artigo de hoje, falarei sobre como podemos criar uma versão simples de uma ferramenta que pode ser usada em testes de penetração para encontrar subpáginas existentes para sites. Como o título indica, usarei Python, mas isso não é obrigatório, pois pode ser feito em outras linguagens também.

Olá pessoal! No artigo de hoje, falarei sobre como podemos criar uma versão simples de uma ferramenta que pode ser usada em testes de penetração para encontrar subpáginas existentes para sites. Como o título indica, usarei Python, mas isso não é obrigatório, pois pode ser feito em outras linguagens também.

● O que faz um scanner de site?

O objetivo desse tipo de scanner é detectar se existem subpáginas específicas em um determinado site. Caso você esteja familiarizado com o termo ataque de força bruta para senhas, o princípio é quase o mesmo, apenas que, em vez de senhas, você tem subpáginas.

São 2 peças obrigatórias: o site onde a varredura deve ser realizada e um arquivo de texto contendo uma lista de possíveis subpáginas.

● Um exemplo simples para melhor compreensão

Vamos considerar https://www.nicevintagecars.com como nosso site (hipotético, não existe). É bem simples, com apenas 4 itens no menu: Home , About , Gallery e Contact . Se alguém navegar no site, encontrará apenas as páginas mencionadas acima. No entanto, isso não significa automaticamente que esses são os únicos disponíveis. Às vezes, as coisas existem, mesmo que não sejam visíveis.

Conseguimos um dos 2 elementos necessários, falta mais um. Nosso arquivo de texto pode consistir em algumas subpáginas possíveis: admin , secret , luxury , leilão e owners .

Com base nos 2 componentes do nosso exemplo, o scanner testará a existência dos seguintes links:

▪ https://www.nicevintagecars.com/admin
▪ https://www.nicevintagecars.com/secret
▪ https://www.nicevintagecars.com/luxury
▪ https://www.nicevintagecars.com/auction
▪ https ://www.nicevintagecars.com/owners

Alguns deles podem existir, outros não. Ou talvez nenhum deles exista. Mas o scanner pode nos ajudar a descobrir.

● Como descobrimos se uma página existe?

Você diria que basta digitar o link no navegador, pressionar <Enter> e ver se algo aparece. Qual é correto. Mas não é uma opção adequada para o nosso programa. Não é uma solução viável nem mesmo para você, caso sua lista tenha 1000 linhas.

A história por trás da checagem é a seguinte: quando o cliente acessa a página da web em seu navegador, ele envia uma solicitação ao servidor onde o site está hospedado. Nesse pedido, exige um recurso. O servidor envia uma resposta e, com base no código de status recebido, o resultado é determinado. Se for 200, a página carrega ok (esse é o código mais comum). Um código de status 404 implica não encontrar a página.

Uma página pode existir em um site, mesmo que o código de status recebido não seja 200. Por exemplo, você pode obter 401 ou 403. Isso não significa que a página não foi encontrada, você apenas não está autenticado ou não está autorizado.

● Etapas do nosso algoritmo

Existem 3 fases que considero essenciais:

▪ recebendo a entrada

Como diz, precisamos definir nossos 2 itens necessários, a página da web e a lista de diretórios (ou mesmo arquivos, também funciona neste caso).

▪ criar a lista completa de URLs a serem verificados

Nesta etapa, para cada linha do nosso arquivo de texto, pegaremos esse valor e o anexaremos ao final da URL principal, separando-os por um caractere “/”. Em seguida, armazenaremos o link final em uma variável do tipo lista.

▪ envio de solicitações para cada URL e determinação de seu status

Como etapa final, pegaremos a lista criada anteriormente e a analisaremos. Para cada link, enviaremos uma solicitação get e verificaremos se seu código de status é 200. Caso positivo, apenas mostraremos esse link como válido.

Há uma abordagem diferente que tive quando criei uma versão avançada desta ferramenta. Não filtrei os resultados pelo código de status 200, apenas excluí aqueles com 404. Como disse anteriormente, algumas páginas existem mesmo que o código de status não seja 200.

Você pode encontrar esta versão no meu perfil GitHub, usando o link abaixo:

● Codificando nosso programa

O código que vou apresentar aqui é o básico, o mínimo necessário para que essa ferramenta funcione.

De acordo com as etapas apresentadas anteriormente, a primeira coisa a fazer é obter nossa entrada. Eu criei 2 variáveis ​​para armazenar cada um desses 2 itens, mas também importei o módulo de solicitações . Vamos precisar disso mais tarde, quando enviarmos solicitações get. Leve em consideração que este não é um módulo Python padrão, então você deve instalá-lo primeiro.

import requests

# Define variables

main_url = "https://www.nicevintagecars.com"
wordlist = "directories.txt" # Directories must be each on a different row

# Create list of URLs to scan

full_url_list = []
dirs = open(wordlist, 'r')
for directory in dir:
    url = main_url + "/" + directory.strip()
    full_url_list.append(url)

# Send get requests to URLs

print("Scan started...\n")

for url in full_url_list:
    url_request = requests.get(url)
    if url_request.status_code == 200:
        print("Found:", url)

print("\nScan finished!")

No vídeo abaixo, você pode ver todo o tutorial onde crio este scanner, o executo e também comprovo os resultados que obtive. Dar uma olhada!

● Isenção de responsabilidade

Este artigo é apenas para fins educacionais. O uso da ferramenta para atacar alvos sem consentimento mútuo prévio é ilegal. Não assumo nenhuma responsabilidade e não sou responsável por qualquer uso indevido ou dano causado por esta ferramenta.

Por enquanto é isso, espero que tenham gostado. Obrigado pelo tempo que você levou para ler isso! Vejo você no meu próximo artigo!