Charter II: BANNER GRABBING
Después de tantas semanas de vacaciones el segundo capítulo estaremos en búsqueda de banner, es la forma recopilar información con estos datos se podría listar los exploits aplicables y conocer el sistema o infraestructura que se encuentra detrás siendo parte del la Fase de Enumeración o Reconocimiento link (Footprinting), al momento de la obtención de información podemos llegar incluso a conocer la versión del servicio no siempre sera obtenida debido a que se podría estar filtrada.
La obtención del banner se podría realizar con diferentes herramientas, incluso con telnet
Algo un poco mas explicativo.
Volviendo al script en este caso usamos la ayuda de Nmap pero con hilos y consultando a la db, para iniciar y nos salte el error de modulo, instalaremos nmap para python.
Después de tantas semanas de vacaciones el segundo capítulo estaremos en búsqueda de banner, es la forma recopilar información con estos datos se podría listar los exploits aplicables y conocer el sistema o infraestructura que se encuentra detrás siendo parte del la Fase de Enumeración o Reconocimiento link (Footprinting), al momento de la obtención de información podemos llegar incluso a conocer la versión del servicio no siempre sera obtenida debido a que se podría estar filtrada.
La obtención del banner se podría realizar con diferentes herramientas, incluso con telnet
Algo un poco mas explicativo.
Volviendo al script en este caso usamos la ayuda de Nmap pero con hilos y consultando a la db, para iniciar y nos salte el error de modulo, instalaremos nmap para python.
pip install python-nmap
#!/usr/bin/python3.4 import socket, urllib, sys, time, json, nmap, os, optparse, MySQLdb, socket, sys from datetime import datetime from concurrent.futures import ThreadPoolExecutor numfile = str(1) THREADS = 10 repet = 300 t1 = datetime.now() class bcolors: HEADER = '\033[95m' OKBLUE = '\033[94m' OKGREEN = '\033[92m' WARNING = '\033[93m' FAIL = '\033[91m' ENDC = '\033[0m' BOLD = '\033[1m' UNDERLINE = '\033[4m' print(bcolors.HEADER+"exe:"+numfile+" -"*80+ bcolors.ENDC) print(bcolors.HEADER+"exe:"+numfile+" --------------INICIANDO SCRIPT BANNER-----------------------------"+ bcolors.ENDC) print(bcolors.HEADER+"exe:"+numfile+" -"*80+ bcolors.ENDC) t1 = datetime.now() print(bcolors.HEADER+"exe:"+numfile+" TIEMPO INICIO:" +time.strftime('%Y/%m/%d %H:%M:%S')+ bcolors.ENDC) def update_db(ip_address,port,servicio,version,nreg,sms): try: connx = MySQLdb.connect(host= "localhost", user="root", passwd="", db="BDDATA") cursor2 = connx.cursor() cursor2.execute("""UPDATE python SET servicio=%s, producto=%s WHERE nreg=%s """,(servicio,version,nreg)) connx.commit() connx.close() print("exe:"+numfile+" [UPDATE] " +time.strftime('%Y/%m/%d %H:%M:%S') +sms+str(ip_address)+":"+str(port)+bcolors.ENDC) except ValueError: print("exe:"+numfile+" [ERROR] " +time.strftime('%Y/%m/%d %H:%M:%S') +" [!] ERROR EVALUAR UPDATE_DB") escritura(time.strftime('\n%Y/%m/%d %H:%M:%S') +" [!] ERROR EVALUAR BANNER " + str(ip)+":"+str(puerto)) except: print("exe:"+numfile+" [ERROR] " +time.strftime('%Y/%m/%d %H:%M:%S') +" [!] ERROR AL MOMENTO DE SER EJECUTADO UPDATE_DB: ", sys.exc_info()[0]) escritura(time.strftime('\n%Y/%m/%d %H:%M:%S') +" [!] ERROR AL MOMENTO DE SER EJECUTADO [--->] def UPDATE_DB(): "+ str(ip)+":"+str(puerto)) def ban_general(ip,puerto,nreg): try: with ThreadPoolExecutor(max_workers = THREADS) as executor: executor.submit(banner_nmap,ip,puerto,nreg) except ValueError: print("exe:"+numfile+" [ERROR] " +time.strftime('%Y/%m/%d %H:%M:%S') +" [!] ERROR EVALUAR BANNER") escritura(time.strftime('\n%Y/%m/%d %H:%M:%S') +" [!] ERROR EVALUAR BANNER " + str(ip)+":"+str(puerto)) except: print("exe:"+numfile+" [ERROR] " +time.strftime('%Y/%m/%d %H:%M:%S') +" [!] ERROR AL MOMENTO DE SER EJECUTADO BANNER: ", sys.exc_info()[0]) escritura(time.strftime('\n%Y/%m/%d %H:%M:%S') +" [!] ERROR AL MOMENTO DE SER EJECUTADO [--->] def BANNER(): "+ str(ip)+":"+str(puerto)) def banner_nmap(ip_address,port,nreg): try: #print("exe:"+numfile+" [INFO] " +time.strftime('%Y/%m/%d %H:%M:%S')+" HOST "+ str(ip_address) + ":" + str(port)) nm = nmap.PortScanner() nm.scan(hosts=str(ip_address), arguments='-sS -sV -p '+str(port)+' -n -Pn --script banner --max-retries 0') name = [(x, nm[x]['tcp'][int(port)]['name']) for x in nm.all_hosts()] version = [(x, nm[x]['tcp'][int(port)]['version']) for x in nm.all_hosts()] producto = [(x, nm[x]['tcp'][int(port)]['product']) for x in nm.all_hosts()] for host, status in (name): nam=('{1}'.format(host, status)) for host, status in producto: pro=('{1}'.format(host, status)) for host, status in version: ver=('{1}'.format(host, status)) tipoServicio = nam namServicoVer = pro + " " + ver if tipoServicio.replace(' ', '')=="": update_db(ip_address,port,'unknown',namServicoVer,nreg,bcolors.OKBLUE+' [DB] SE INSERTADO CON EXITO UNKNOWN : ') else: if namServicoVer.replace(' ', '')== "": update_db(ip_address,port,'',namServicoVer,nreg ,bcolors.OKBLUE+' [DB] SE INSERTADO CON EXITO PRODUC NULL: ') else: update_db(ip_address,port,tipoServicio,namServicoVer,nreg,bcolors.OKGREEN+' [DB] SE INSERTADO CON EXITO SERV-PROD : ') except ValueError: print("exe:"+numfile+" [ERROR] " +time.strftime('%Y/%m/%d %H:%M:%S') +" [!] ERROR EVALUAR BANNER") escritura(time.strftime('\n%Y/%m/%d %H:%M:%S') +" [!] ERROR EVALUAR BANNER " + str(ip_address)+":"+str(port)) except: print("exe:"+numfile+" [ERROR] " +time.strftime('%Y/%m/%d %H:%M:%S') +" [!] ERROR AL MOMENTO DE SER EJECUTADO BANNER: ", sys.exc_info()[0]) escritura(time.strftime('\n%Y/%m/%d %H:%M:%S') +" [!] ERROR AL MOMENTO DE SER EJECUTADO [--->] def BANNER(): "+ str(ip_address)+":"+str(port)) def escritura(texto): try: outfile = open('banner.txt', 'a') # Indicamos el valor 'w'. outfile.write(str(texto)) outfile.close() except ValueError: print("exe:"+numfile+" [ERROR] " +time.strftime('%Y/%m/%d %H:%M:%S') +" [!] ERROR ERROR AL MOMENTO DE SER EVALUADO def ESCRITURA()") except: print("exe:"+numfile+" [ERROR] " +time.strftime('%Y/%m/%d %H:%M:%S') +" [!] ERROR ESCRITURA: ", sys.exc_info()[0]) def main(): try: global repet for i in range(repet): print("exe:"+numfile+" "+time.strftime('%Y/%m/%d %H:%M:%S')+" BANNER() --->> INICIO LA REPETICIÓN: "+ str(i)+" DE "+str(repet)) conn = MySQLdb.connect(host= "localhost", user="root", passwd="", db="BDDATA") cursor1 = conn.cursor() cursor1.execute('SELECT STATUS, id, PORT, nreg FROM python WHERE servicio = "" AND status=1 ORDER BY nreg DESC LIMIT 30 OFFSET '+numfile+'00') result = cursor1.fetchall() for row in result: if row[0] == 1: ip = row[1] port = row[2] nreg = row[3] banner_nmap(ip,port,nreg) conn.close() t2 = datetime.now() total = t2 - t1 print("exe:"+numfile+" -------------------------------------------------------") print("exe:"+numfile+"TIEMPO FINALIZADO: "+time.strftime('%Y/%m/%d %H:%M:%S')) print("exe:"+numfile+"TIEMPO TOTAL:" + str(total)) except ValueError: print("exe:"+numfile+" [ERROR] " +time.strftime('%Y/%m/%d %H:%M:%S') +" [!] ERROR AL MOMENTO DE SER EVALUADO MAIN()") escritura(time.strftime('\n%Y/%m/%d %H:%M:%S') +" [!] ERROR AL MOMENTO DE SER EJECUTADO [--->] MAIN(): ") except: print("exe:"+numfile+" [ERROR] " +time.strftime('%Y/%m/%d %H:%M:%S') +" [!] ERROR MAIN() ", sys.exc_info()[0]) escritura(time.strftime('\n%Y/%m/%d %H:%M:%S') +" [!] ERROR AL MOMENTO DE SER EJECUTADO [--->] MAIN(): ") if __name__ == "__main__": main()Continuará.......!!
No hay comentarios. :
Publicar un comentario