👹FUERZA BRUTA A SUBDOMINIOS O DIRECTORIOS P4IForceBruteSubdom.py

// Some code

```python
#!programa para hacer fuerza bruta sobre subdominios de un sitio web - P4IForceBruteSubdom.py - By P4IM0N

#!/usr/bin/env python
#_*_coding: utf8_*_

#-------------------------------------------------------------------------------
import dns.resolver
from os import path
from tqdm import tqdm
from tabulate import tabulate

#-------------------------------------------------------------------------------
banner = '''

__________  _____ .______________                       __________                __           _________    ___.        .___              
\______   \/  |  ||   \_   _____/__________   ____  ____\______   \_______ __ ___/  |_  ____  /   _____/__ _\_ |__    __| _/____   _____  
 |     ___/   |  ||   ||    __)/  _ \_  __ \_/ ___\/ __ \|    |  _/\_  __ \  |  \   __\/ __ \ \_____  \|  |  \ __ \  / __ |/  _ \ /     \ 
 |    |  /    ^   /   ||     \(  <_> )  | \/\  \__\  ___/|    |   \ |  | \/  |  /|  | \  ___/ /        \  |  / \_\ \/ /_/ (  <_> )  Y Y  !
 |____|  \____   ||___|\___  / \____/|__|    \___  >___  >______  / |__|  |____/ |__|  \___  >_______  /____/|___  /\____ |\____/|__|_|  /
              |__|         \/                    \/    \/       \/                         \/        \/          \/      \/            \/ 
'''
print(banner)

#-------------------------------------------------------------------------------
def main():
    if path.exists('subdominios.txt'):                                                                         #?verificamos con path que el archivo de subdominiios.txt este en el directorio donde ejecutamos
        diccionario_subdominios = open('subdominios.txt','r')                                                  #?con open abrimos el archivo de sudominios.txt en el metodo listo para leer 'r' 
        diccionario_subdominios = diccionario_subdominios.read().split('\n')                                   #?preparamos con el metodo read y sacando los saltos de linea de la lista de subdominiois para iterar sin problema en el luego...
        lista_subdom_encontrados = []                                                                          #?creamos una lista vacia donde estaran los subdominiis encontrados 
        url_dominio_objetivo = input('manito dame el dominio objetivo asi encuentro sus subdomios: ')          #?infgreso del dominiioo objetivo por el usuario 
        
        barra_de_progreso = tqdm(range(len(diccionario_subdominios)))                                          #?creamos el objeto de la barra de progreso usando tqdm, el cual debe recibir un rango , range de parametro ej:1,2,,3,4,5,6,7,8...y el numero de rango que lñe pasamos lo definimos con len y que cuente el numero d elementos dentro de nuestra lista de subdominiois             
        for subd in diccionario_subdominios:                                                                   #?iteramos dentro de cadad subdominio en txt, para que en el bloque try: al usar el tipo de consulta dns.resolver del tipo 'A' si este da Ok 200 el mismo no devuelva una exepcion y si es asi guarde esta url con subdominio encontrada dedntro de la lista   
            try:
                url_objetivo_probandoSB = dns.resolver.resolve(f'{subd}.{url_dominio_objetivo}','A')
                lista_subdom_encontrados.append([f'{subd}.{url_dominio_objetivo}'])
            except:                                                                                            #?si en la consulta 'A' se devolvio un exept el bloque try no se ejecutara por ende tampoco se guardara ese subdominio en la lista, y al tener pass en este exept se continuara con el bucle for para comprobar el siguiente subdominioio
                pass
            barra_de_progreso.update(1)                                                                        #?al objeto bara de progreso le aplicamos su metodo update con el parmetro en 1 para que actualice en cada bucle en mas uno el tamaño de la barra 
        barra_de_progreso.close()                                                                              #?con .close cerramos ya fuera del loop terminado la barra de progreso, para luego mpasar a mostrar el resultado 
            
        if len(lista_subdom_encontrados) > 0:                                                                  #?comprobamos con if y vemos si la cantidad de elementos devueltods por len encotrados en la lista, es superior a 0, nos pasara el condicional y mostrara los datos encontrados  
            print('Se encontraron subdominios para el dominio que me dis manito: ')
            print(f'Manito se encontraron: {len(lista_subdom_encontrados)} subdominios')
            tabla_de_subdominios_encontrados = tabulate(lista_subdom_encontrados,['SUBDOMINIOS ENCONTRADOS'], tablefmt='grid') #?creamos la tabla con sus parametros, informacion, cabecera y tipo de tabla
            print(tabla_de_subdominios_encontrados)     
        else:
            print('No se encontraron subdominiois manito')    

#-------------------------------------------------------------------------------
if __name__=='__main__':
    try:
        main()
    except KeyboardInterrupt:print('manito se esta cerando el programa')
    exit()    
        

#-------------------------------------------------------------------------------

```

Last updated