# El objetivo de este script es agilizar el proceso de revision manual de paginas web a partir de una lista o rango de IPs.
#
# Uso:
# ~# python ip2html.py
# o:
# ~# python ip2html.py [iplist.txt]
#
# Almacena las paginas de forma local y en un formato de facil acceso. El resultado contiene cabeceras, indica si la pagina
# requiere autenticacion (Basic Auth) y en caso de requerirla prueba las credenciales: admin:admin.
#
# Se puede usar un puerto de otro servicio que no sea HTTP. Obtiene los banners de FTP, SSH y TELNET.
#
# Mientras esta corriendo genera los resultados en: log/index.html.
#
#
# hkm@hakim.ws - 4/22/2010
# *Este script uiliza nmap de Fyodor: http://nmap.org/
# Para abrir automaticamente firefox puede ser necesario editar la siguiente linea:
firefox = "/usr/bin/firefox"
print "\n #################################################"
print " # #"
print " # ip2html.py #"
print " # #"
print "################################## hkm@hakim.ws #\n"
import socket, sys, os, time, datetime, urllib2, urllib, re
from datetime import datetime, date
from random import randint
socket.setdefaulttimeout(5)
def guardaultimo():
output = open("ultimaip.txt", "w")
output.writelines(lista[k])
output.close()
def termina():
print "\n[FIN] - [+]"+str(p)+" [ ]"+str(n)+" : ("+str(int(time.time()-start))+" s)\n"
os.system("rm iplist.txt")
output = open("log/menu.html", "a")
output.writelines("[+]"+str(p)+" [ ]"+str(n)+" : ("+str(int(time.time()-start))+" s)
")
output.close()
stoprefresh()
def stoprefresh():
outputf = open("log/menu.html", "r")
lee = outputf.read()
lee = lee.replace('
','')
outputf.close()
outputf = open("log/menu.html", "w")
outputf.writelines(lee)
outputf.close()
def idprotocolo():
global protocolo
if lista[k].find(':21') > 0:
protocolo = "ftp"
if lista[k].find(':22') > 0:
protocolo = "ssh"
if lista[k].find(':23') > 0:
protocolo = "telnet"
if lista[k].find(':80') > 0:
protocolo = "http"
try:
if os.path.exists(sys.argv[1]):
lista = open(sys.argv[1]).read().split()
print "[+] - lista obtenida"
except(Exception):
lista = ''
if os.path.exists('ultimaip.txt'):
ultimaip = open('ultimaip.txt').read().strip('\n')
print "[+] - ultima ip escaneada: "+ultimaip
rango = raw_input("[?] - introduce el rango [aleatorio]: ")
else:
rango = raw_input("[?] - introduce el rango [aleatorio]: ")
if rango == "":
rango = str(randint(1, 255))+"."+str(randint(1, 255))+"."+str(randint(1, 255))+".*"
print "[+] - rango aleatorio: "+rango
puertos = raw_input("[?] - introduce los puertos [80]: ")
if puertos == "":
print "[+] - puerto predefinido: 80"
puertos = "80"
print "[+] - escaneando rango..."
os.system("nmap -PN -vv -n -T4 -p"+puertos+" "+rango+" | tee iplist_pre0.txt | grep Discovered")
os.system("cat iplist_pre0.txt | grep Discovered > iplist_pre.txt; rm iplist_pre0.txt")
print "[+] - escaneo completado"
os.system("awk '{print $6\":\"$4}' iplist_pre.txt | sed s/\\\\/tcp//g > iplist.txt; rm iplist_pre.txt")
lista = open('iplist.txt').read().split()
try:
if len(lista[0]):
pass
except:
print "\n[FIN] - ninguna ip disponible\n"
sys.exit()
print "[+] - iplist.txt creado"
if not os.path.exists('log'):
os.makedirs('log')
if not os.path.exists('log/menu.html'):
output = open("log/menu.html", "a")
output.writelines('ip2html.py
')
output.close()
else:
outputf = open("log/menu.html", "r")
output = outputf.read()
output = output.replace('','')
outputf.close()
outputf = open("log/menu.html", "w")
outputf.writelines(output)
outputf.close()
output = open("log/menu.html", "a")
dt = datetime.now()
try:
output.writelines("
"+rango+"
")
except: pass
output.writelines(""+dt.strftime("%A %d %B %Y %I:%M%p")+"")
output.close()
if not os.path.exists('log/index.html'):
output = open("log/index.html", "a")
output.writelines("")
output.close()
print "[+] - generando log/index.html..."
print "[+] - abriendo firefox"
os.system(firefox+" log/index.html 2> /dev/null &")
p=0;n=0
start = time.time()
for k in range (len(lista)):
host = "http://"+lista[k]
protocolo = "http"
try:
source = urllib2.urlopen(host).read()
sourcehead = urllib2.urlopen(host).info()
if len(str(source)) > 0:
output = open("log/menu.html", "a")
idprotocolo()
output.writelines("≡ ? "+lista[k]+"
")
output.close()
output = open("log/"+lista[k]+".html", "w")
source = str(source)
source = source.replace("","")
source = source.replace("","")
source = source.replace("top.location","t0p.location")
output.writelines(str(source))
output.close()
print "[+] "+lista[k]
guardaultimo()
p = p + 1
source = ''
except Exception, e:
if str(e).find('401') > 0:
try:
passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, host, "admin", "admin")
authhandler = urllib2.HTTPBasicAuthHandler(passman)
opener = urllib2.build_opener(authhandler)
urllib2.install_opener(opener)
source2 = urllib2.urlopen(host)
if len(str(source2)) > 0:
output = open("log/menu.html", "a")
idprotocolo()
output.writelines("≡ ! "+lista[k]+"
")
output.close()
print "[+] "+lista[k]+" (HTTP Auth admin:admin)"
guardaultimo()
p = p + 1
source2 = ''
source = ''
else:
print "[ ] "+lista[k]
guardaultimo()
n = n + 1
source = ''
except:
output = open("log/menu.html", "a")
idprotocolo()
output.writelines("≡ "+lista[k]+"
")
output.close()
print "[+] "+lista[k]+" (HTTP Auth)"
guardaultimo()
p = p + 1
source2 = ''
source = ''
else:
print "[ ] "+lista[k]
guardaultimo()
n = n + 1
source = ''
except(KeyboardInterrupt):
termina()
sys.exit()
termina()
sys.exit()