zCrack | Jugando con /etc/shadow y Python

Iniciado por [Z]tuX, Agosto 03, 2013, 03:40:04 AM

Tema anterior - Siguiente tema

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

Agosto 03, 2013, 03:40:04 AM Ultima modificación: Agosto 04, 2013, 10:17:13 PM por [Z]tuX
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:
Código: python

#!/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()


Puedes descargar el código aquí: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

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.
Lo que sabemos es una gota de agua; lo que ignoramos es el océano.

Agosto 04, 2013, 09:32:11 AM #2 Ultima modificación: Agosto 04, 2013, 09:37:40 AM por Sanko
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.
Sigueme en Twitter : @Sankosk
Estos nuevos staff no tienen puta idea XD

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.