Cómo usar el software hashcat para explotar varios hashes

Cero, conocimiento de antecedentes

1. Función hash

La función hash es un término general para un tipo de función. La entrada de este tipo de función son datos binarios arbitrarios y la salida es. Datos binarios de longitud fija, este tipo de función tiene las siguientes características:

  • Unidireccionalidad: es simple y rápido calcular la salida a partir de la entrada, pero no es matemáticamente factible deducir la entrada a partir de la salida

  • Restricción de colisión: Es extremadamente difícil encontrar dos entradas diferentes con la misma salida

Las funciones que satisfacen estas características pueden llamarse funciones hash. Ciertos datos se utilizan como entrada de la función hash y se calcula la salida. Esta salida se llama costumbre el valor hash de los datos.

Una de las funciones principales de la función hash es almacenar contraseñas de forma segura. En lugar de guardar contraseñas directamente (es decir, no almacenar contraseñas en texto claro), guarda el valor hash de la contraseña. Durante la verificación, solo necesita calcular la contraseña de entrada nuevamente. Compare el valor hash con el valor hash de la contraseña guardada para saber si la contraseña es correcta. Debido a la unidireccionalidad de la función hash y las restricciones de colisión, incluso si un atacante obtiene el valor hash de la contraseña, es difícil conocer la contraseña en sí.

2.hashcat

El atacante obtuvo el valor hash de la contraseña, ¿realmente no hay forma de conocer la contraseña en sí? Por supuesto que no. Aunque no es matemáticamente factible calcular directamente la contraseña a partir del valor hash de la contraseña, sabemos que la función hash es simple y rápida para calcular la salida a partir de la entrada. En el peor de los casos, puedes intentarlo. Las contraseñas que los humanos pueden establecer son las únicas. Esas, pruébalo una por una, si tienes suerte, todavía puedes probarlo. La operación de intentar constantemente obtener la entrada correspondiente al valor hash se llama explosión.

Basado en esta idea, hashcat nació. Se dice que hashcat nació para demostrar que explotar hash es muy simple. hashcat afirma ser la herramienta de explosión de hash más rápida del mundo, e incluso admite GPU y FGPA, si lo tienes.


hashcat no solo es rápido, sino que también soporta profesionalmente más de doscientos tipos de funciones de hash, usando el comando:

 hashcat   - -help 

Puede ver la lista de todas las funciones de hash soportadas por hashcat, son demasiadas y no las publicaré aquí.

hashcat está instalado por defecto en Kali y está disponible para su uso directo. Pero mi Kali está instalado en VirtualBox y siempre siento que la máquina virtual es más lenta, así que quiero usar hashcat en el host físico. Primero vaya al sitio web oficial de hashchat para descargar hashcat. A partir de ahora, la última versión es v3.5.0, lanzada el 05 de abril de 2017. A partir de la fecha de actualización, se puede ver que hashchat está lleno de vitalidad. Evite la molestia de compilar y descargue directamente el paquete binario, que solo tiene 2,7 millones, lo cual es muy pequeño en comparación con juegos que a menudo cuestan decenas de gigabytes.

Después de completar la descarga, descomprime hashcat y ve:

Archivos como estos son ejecutables en linux y windows en 32 y 64 bits respectivamente. Simplemente seleccione uno de ellos según la situación de su computadora. Elegí hashcat64.bin. Por belleza, agregué una línea en el archivo ~ /. bashrc:

 alias   hashcat = ' ruta de hashcat64.bin ' 

Después de guardarlo, vuelva a abrir el terminal virtual para que el archivo ~ /. bashrc sea efectivo. De esta manera, no importa dónde esté, simplemente ingrese el comando hashcat directamente, sin cambiar de directorio ni ingresar el feo "64.bin", como se muestra en la siguiente figura.

Bueno, ahora puedes empezar a explotar todo tipo de hash con hashcat.

1. Explosión md5

md5 debería ser una de las funciones hash más famosas y ampliamente utilizadas. Primero use Python para generar varios valores md5 para voladuras. El código es el siguiente:

     import   hashlib. 
    Contraseñas   =   [' 123123 ',   ' bond007 ',   ' xxxxxx ',   ' *H@ & (NT*@BR#^ '] 
    para   contraseña   en   contraseñas: 
        md5   =   hashlib.md5 () 
        md5.update (contraseña) 
        print   md5.hexdigest () 

El código anterior calcula los valores hash de las cuatro cadenas respectivamente, y el resultado de salida es:

     4297f44b13955235245b2497399d7a93 
    cbdb7e2b1ed566ceb796af2df07205a3 
    dad3a37aa9d50688b5157698acfd7aee 
    d77db958c179bbffae04b2b908b75c26 

Guarda la salida en el archivo md5.hash, un valor hahs por línea. Luego use hashcat para explotar estos valores de hash, el comando es el siguiente:

     hashcat   -w   3   -a   0   -m   0   - -remove   -o   md5.out   md5.hash   wordlist.dic 

El parámetro-w se utiliza para especificar los modos de trabajo, hay cuatro, como se muestra en la siguiente tabla:

N Rendimiento Tiempo de ejecución Consumo de energía Impacto en el escritorio
1 Bajo 2 ms bajo mínimo
2 predeterminado 12 ms económico notable
3 High 96 ms High No responde
4 Pesadilla 480 ms Insane Headless

El parámetro-a se utiliza para especificar el modo de ataque. El significado de 0 es directo y continuo, es decir, se explota con un diccionario de contraseñas. Hay cinco valores de-a, como se muestra en la siguiente tabla:

N modo
0 recto
1 combinación
3 Fuerza bruta
6 Lista de palabras híbrida + máscara
7 Máscara híbrida + lista de palabras

-m Se utiliza para especificar el hash a estallar La función hash del valor, 0 significa que la función hash es md5, los otros valores se muestran en la siguiente tabla:

N nombre categoría
0 MD5 Raw Hash
300 MySQL4.1/MySQL5 Servidor de base de datos
1000 NTLM Sistemas operativos
1800 sha512crypt $6$, SHA512 (Unix) Sistemas operativos
2611 vBulletin < v3.8.5 Foros, CMS, comercio electrónico, marcos

Esta tabla es demasiado larga. Solo mostraré algunas funciones de hash involucradas en este artículo. Puedes verlas todas con el parámetro – help.

El parámetro – remove significa que si un valor de hash se explota con éxito, el valor se elimina de md5.hash.

El parámetro-o es seguido de un nombre de archivo que indica dónde se guardan los resultados de la explosión.

Los dos últimos parámetros md5.hash y wordlist.dic son el valor hash y el diccionario de contraseñas que se van a explotar respectivamente. El valor hash y el diccionario de contraseñas son uno por línea. El contenido de md5.hash ha sido calculado por Python. Si no tiene un diccionario de contraseñas adecuado a mano, puede usar el comando:

     wget   -O   wordlist.dic   https://samsclass.info/123/proj10/500_passwords.txt

下载一个。现在完事具备,按下回车,结果华丽地报错:(

  clGetPlatformIDs(): CL_PLATFORM_NOT_FOUND_KHR

Probablemente falte algún entorno operativo, entonces instálalo. He instalado estas cosas en total:

     sudo   apt-get   install   gcc   make   p7zip-full   git   lsb-core 
    wget   http://registrationcenter-download.intel.com/akdlm/irc_nas/9019/opencl_runtime_16.1.1_x64_ubuntu_6.4.0.25.tgz 
    tar   -xvf   opencl_runtime_16.1.1_x64_ubuntu_6.4.0.25.tgz 
    cd   opencl_runtime_16.1.1_x64_ubuntu_6.4.0.25 
    sudo  . /install.sh 

Si la velocidad de Internet es buena, se instalará en poco tiempo. El primer comando informa un error:

     /sbin/ldconfig.real:   /usr/lib/nvidia-375/libEGL.so.1   es   no   un   simbólico   enlace 
    /sbin/ldconfig.real:   /usr/lib32/nvidia-375/libEGL.so.1   es   no   un   simbólico   enlace 

pero no parece afectar nada, simplemente ignóralo. Después de instalarlos, pulse Enter nuevamente y ejecute el comando que originalmente informó el error. Descubre que no se informó otro error y la ejecución se completó en un abrir y cerrar de ojos. Después de ejecutar el comando, verifique el contenido de los archivos md5.hash y md5.out y descubra que solo queda un hash en md5.hash. Los tres hash que se volaron con éxito se han transferido al archivo md5.out. md5.out Hay tres valores hash y sus valores originales, como se muestra en la siguiente figura:

2. hash de contraseña de inicio de sesión de Windows 7

El valor hash de la contraseña de inicio de sesión de Windows se guarda en el archivo SAM, SAM es la abreviatura de "security account manager". Normalmente, se encuentra en

     C: \Windows\system32\config\SAM 

El archivo SAM está protegido por Windows y no se puede leer directamente, por lo que requiere la ayuda de una herramienta como SAMInside. Encuentre una máquina virtual de Windows 7, cree un nuevo usuario administrador llamado hashcat y establezca una contraseña. Descargue y descomprime SAMInside en Windows 7 y ejecutelo con permisos de administrador. Luego haga clic en Archivo- > Importar usuarios locales en el programador, como se muestra a continuación. Como se muestra en la imagen:

Después de eso, SAMInside puede "no responder", pero no importa, espere pacientemente unos segundos y SAMInside lee lo que queremos a la altura de las expectativas. hash, como se muestra en la siguiente imagen:

Seleccione el usuario "hashcat" cuya contraseña queremos explotar, presione Ctrl +5 para copiar NT-hash, luego regrese a Ubuntu con hashcat instalado y use el siguiente comando para guardar el valor de hash copiado en el archivo win7.hash:

     echo   356CEAE0C89FB65ED6D6AA7A445C4CE5   {> 
     hashcat   -w   3   -a   0   -m   1000   - -remove   -o   win7.out   win7.hash   wordlist.dic 

La ejecución se completó después de un momento. Revise el archivo win7.out y descubre que la explosión fue exitosa. La contraseña de inicio de sesión del usuario hashcat es rush2112:

     werner@Yasser: ~ /hashcat$   cat   win7.out 
    356ceae0c89fb65ed6d6aa7a445c4ce5:rush2112 

Para obtener el archivo SAM, consulte "Cómo exportar la serie hash de Windows 1". A continuación registro mi proceso de lectura del archivo SAM en la máquina virtual Windows 7.

Si es una máquina física, use Win PE para iniciar la máquina y leer el archivo SAM en el disco. La mía es una máquina virtual. Puedo leer los archivos en el disco virtual montando los archivos del disco virtual en el sistema de archivos. La máquina virtual que estoy usando es VirtualBox, y esto se puede hacer con el comando vdfuse. Si no tienes vdfuse, primero debes instalar virtualbox-fuse:

     sudo   apt-get   install   virtualbox-fuse 

También puedes descargar el paquete de instalación de virtualbox-fuse para instalarlo tú mismo.

Una vez completada la instalación, aparecerá el comando vdfuse, que puede iniciar el mapeo y montaje de discos virtuales:

     mkdir   -p   ~ /vmdisk 
    sudo   vdfuse   -t   vmdk   -f   Win7Pro32.vmdk   ~ /vmdisk/ 

Después de realizar este paso, revise el directorio ~ /vmdisk, que tiene tres archivos: EntireDisk, Partition1 y Partition2, nuevo directorio:

     mkdir   -p   ~ /vmdisk_en 
    mkdir   -p   ~ /vmdisk_1 
    mkdir   -p   ~ /vmdisk_2 

Utilice el comando mount para montar los tres archivos EntireDisk, Partition1 y Partition2 respectivamente:

     sudo   mount   ~ /vmdisk/EntireDisk       ~ /vmdisk_en 
    sudo   montar   ~ /vmdisk/Partition1       ~ /vmdisk_1 
    sudo   mount   ~ /vmdisk/Partition2       ~ /vmdisk_2 

descubrió que el montaje de EntireDisk falló, el contenido en Partition1 no es lo que quería, y el contenido en Partition2 es el archivo en la máquina virtual de Windows 7, exactamente lo que quería. Copie nuestro archivo SAM de destino de vmdisk_fs:

     cp   ~ /vmdisk_2/Windows/System32/config/SAM  . / 

Por cierto, copie también el archivo SYSTEM:

     cp   ~ /vmdisk_2/Windows/System32/config/SYSTEM  . / 

Vea el contenido del archivo SAM, como se muestra en la siguiente figura, no es un archivo de texto simple, es realmente el estilo de Windows,

Bueno, aunque el archivo SAM se abrió con éxito, todavía no obtenemos hash, ¿qué debo hacer si lo cambiamos a continuación? Solo puedes analizar el contenido del archivo SAM con la ayuda de herramientas. Coloque el archivo sam y el archivo sistema en Kali y ejecute el comando:

     samdump2   -o   sam.hash   SYSTEM   sam 

Luego vea sam.hash y también puede ver el valor hash de la contraseña de inicio de sesión de cada usuario. Cada línea en el archivo sam.hash es un usuario y el formato de cada línea es:

     Nombre de usuario: RID:LM-hash value: NTLM-hash value 

Tenga en cuenta que este formato es el formato de salida del comando samdump2, no el "formato de contraseña hash en Windows".

3. Explode el hash de la contraseña de inicio de sesión de linux

En primer lugar, debe tener una computadora que ejecute el sistema linux. Esto es fácil de decir, solo una máquina virtual. Luego, ejecute el siguiente comando para agregar un nuevo usuario y establecer una contraseña para que explotemos:

     sudo   adduser   justforfun 

El valor hash de la contraseña de inicio de sesión del usuario en linux se almacena en el archivo/etc/shadow (nota: no es/etc/passwd), use el siguiente comando para ver el valor hash de la contraseña de inicio de sesión del nuevo usuario:

 test@test-VirtualBox: ~ $   sudo   tail   -n   1   /etc/shadow 
justforfun:$6$0fokwg59$6hpMS5dM9wDT/42DDoSD0i0g/wHab50Xs9iEvVLC3V20yf1kRmXZHGXCM0Efv6XU69hdgMZ4FwaMzso4hQaGQ0:17373:0:99999:7::: 

El comando tail se utiliza para leer las últimas líneas de un archivo, el predeterminado es 10 líneas, especificando el número de líneas con el parámetro-n. El usuario que acabamos de crear está naturalmente en la última línea, por lo que usa tail-n 1 para leerlo. El resultado de la lectura son los datos divididos por ":". La primera parte es el nombre de usuario "justforfun". La segunda parte es el valor hash de la contraseña. No hay necesidad de preocuparse por otras partes en este artículo. Nos centramos en la segunda parte.

"$6$" que comienza con

significa que el tipo de función hash utilizada es SHA-512. Además de "$6$", en linux, "$1$" se refiere a MD5, "$2a$" se refiere a Blowfish, "$2y$" se refiere a Blowfish (manejo correcto de caracteres de 8 bits), "$5$" Se refiere a SHA-256, consulte Wikipedia para más detalles: passwd. Además, el archivo/etc/login.defs también explica el algoritmo hash.

La parte "0fokwg59" que comienza con "$6$" y precede al siguiente "$" es sal. ¿Qué es la sal? Baidu sabe que la respuesta de CNB2009 a la pregunta " ¿Cuál es el valor de sal md5 " es simple y fácil de entender:

En pocas palabras, es una forma de hacer que la misma contraseña tenga diferentes valores de hash. El medio es la salinización. MD5 en sí es irreversible, pero actualmente hay muchas bases de datos en Internet que admiten consultas inversas. Si la base de datos de contraseñas de usuario se filtra accidentalmente, los piratas informáticos pueden obtener las contraseñas de usuario a través de consultas inversas o utilizar códigos hash que aparecen con mayor frecuencia en la base de datos (es decir, muchas personas utilizan) para hackear con fuerza bruta (porque suele ser una contraseña débil). El valor de sal es un valor aleatorio adicional agregado durante el proceso de hash de contraseña. Por ejemplo, mi id es epilepsia y mi contraseña es 123456. Cuando se almacena en la base de datos, puedo hash la cadena "123456/epilepsia". y al verificar la contraseña, la cadena "(contraseña a verificar) /epilepsia" también se utiliza para la verificación. De esta manera, cuando la contraseña de otro idiota es 123456, aún se pueden construir diferentes valores de hash y verificar con éxito. En este momento, mi id se utiliza como valor de sal para realizar un hash complejo para la contraseña. Entonces.. El papel del valor de sal es reducir las pérdidas causadas por la fuga de la base de datos. Si tu RP es muy bueno y adivinas que mi contraseña es 123456, no puedo detenerte

Esta respuesta es para md5, y lo mismo ocurre con otras funciones de hash. La parte después de la sal es el valor hash. Ahora copie toda la segunda parte al archivo linux.hash, el contenido en linux.hash debería ser:

   $6$0fokwg59$6hpMS5dM9wDT/42DDoSD0i0g/wHab50Xs9iEvVLC3V20yf1kRmXZHGXCM0Efv6XU69hdgMZ4FwaMzso4hQaGQ0 

Luego explote el hash de la contraseña de inicio de sesión de linux con el siguiente comando:

     hashcat   -w   3   -a   0   -m   1800   - -remove   -o   linux.out   linux.hash   wordlist.dic 

Después de un momento, la explosión se completa, ver los resultados:

 werner@Yasser: ~ /hashcat$   cat   linux.out 
$6$0fokwg59$6hpMS5dM9wDT/42DDoSD0i0g/wHab50Xs9iEvVLC3V20yf1kRmXZHGXCM0Efv6XU69hdgMZ4FwaMzso4hQaGQ0:4321 

Se puede ver que la voladura fue exitosa.

4. Explode hash de contraseña de inicio de sesión de Mysql

Primero, debe tener Mysql. Solo lo tengo en mi máquina virtual. Baidu puede saber que el valor hash de la contraseña de inicio de sesión de Mysql se guarda en el archivo user.MYD. ¿Dónde está el archivo user.MYD? Yo tampoco lo sé, así que lo busco:

     test@test-VirtualBox: ~ $   sudo   find   /   -name   user.MYD 
    /var/lib/mysql/mysql/user.MYD 

lo encontré. Está en/var/lib/mysql/mysql/user.MYD. Vea el contenido del archivo:

     sudo   cat   /var/lib/mysql/mysql/user.MYD 

No es un archivo de texto simple y tiene poco que ver. Todavía se puede ver que el valor hash de la contraseña de inicio de sesión del usuario root es:

     6B825255FB466413D6B1B724644E23428C94BBCB 

Guarde este valor en el archivo mysql.hash y use el siguiente comando para explotar el hash de la contraseña de inicio de sesión de mysql:

     hashcat   -w { 

Después de un momento, la explosión se completa, ver los resultados:

     werner@Yasser: ~ /hashcat$   cat   mysql.out 
    6b825255fb466413d6b1b724644e23428c94bbcb:viper 

Se puede ver que la voladura fue exitosa.

5. ¡Explosión Discuz! Contraseña del foro

Discuz! Es un programa de foro php bien conocido en mi país y es ampliamente utilizado. ¡Ahora estallemos Discuz! El valor hash de la contraseña del usuario. Primero hay que encontrar el valor hash. ¿Dónde puedo encontrarlo? ¡De Discuz, por supuesto! en la base de datos.

¡Puedes discutir! ¿Dónde está la base de datos? Así es como lo resolví, ¡descargue la última versión de Discuz desde su sitio web oficial! Código fuente, ejecute e instale, ¡y obtendrás Discuz! Base de datos :smile:

Discuz! El nombre de la base de datos predeterminada es ultrax. La tabla pre_ucenter_members almacena el valor hash de la contraseña de inicio de sesión. "pre_" es el prefijo predeterminado y se puede cambiar durante la instalación. "ucenter_members" no cambiará. Utilice la siguiente instrucción sql para consultar el valor hash de la contraseña de inicio de sesión:

     select   password,salt   from   pre_ucenter_members; 

Guarda el valor hash y el valor sal en el archivo:

     echo   69bcba126b93c6f397983629a0f70553:c13fd9   >   discuz.hash 

El valor hash y el valor sal están en la misma línea, divididos por ":". Finalmente, explote el hash de la contraseña de inicio de sesión de Discuz con el siguiente comando:

     hashcat   -w   3   -a   0   -m   2611   - -remove   -o   discuz.out   discuz.hash   wordlist.dic 

Después de un momento, la voladura se completa, ver los resultados:

     werner@Yasser: ~ /hashcat$   cat   discuz.out 
    69bcba126b93c6f397983629a0f70553:c13fd9:winter 

Se puede ver que la voladura fue exitosa.

6. Prueba de diccionario grande

Hasta ahora, utilizamos un diccionario pequeño con solo 500 palabras. Solo toma un momento cada vez para explotar con éxito varios hash. ¿No te parece extraño? Esto se debe a que establecí deliberadamente una contraseña débil en el diccionario para practicar el uso de hashcat, de lo contrario, no sería un mal humor si no pudiera explotarla. En la práctica es imposible tener tanta suerte. Calculemos casualmente el valor md5 de una contraseña no tan débil, estallamos con un diccionario grande, por un lado, intentamos nuestra suerte y por el otro, veamos lo rápido que puede ser el hashcat.

Primero calcula el valor de md5:

     import   hashlib 
    md5   =   hashlib.md5 () 
    md5.update (" werner123456!!! ") 
    print   md5.hexdigest () 

La salida es:

     b17133f9abff287ed0546c1af2b171f7 

Luego seleccione un diccionario de tamaño 10,5G que contiene 940 millones de contraseñas y comience a explotar:

     hashcat   -w   3   -a   0   -m   0   - -remove   -o   big.out   b17133f9abff287ed0546c1af2b171f7   big.dic 

Tenga en cuenta que cuando solo hay un valor hash, no es necesario guardarlo en un archivo. También puede escribirlo directamente en los parámetros de la línea de comandos. Comencé a volar antes de irme a dormir y al día siguiente me levanté para ver los resultados y encontré:

     Comenzado:   Miércoles   Jul   26   22:55:27   2017 
    parado:   miércoles   Jul   26   23:02:28   2017 

¡Resulta que solo tardó 7 minutos! Pensé que tomaría 7 horas, ¡60 veces más rápido de lo que esperaba! Lamentablemente, el valor hash no se explotó con éxito. Parece que "werner123456!!!" no está en el diccionario de contraseñas. Parece que necesito preparar un diccionario de contraseñas de 100G, pero es muy inconveniente guardar y transferir un diccionario tan grande. ¿No hay otra manera? Por supuesto, ¿recuerdas el modo de ataque? Hemos estado usando el modo "recto". A continuación, estudiemos varios otros modos.

7. Resumen

Al usar hashcat para explotar hash, el primero es encontrar el hash correcto. Diferentes sistemas y diferentes software tienen diferentes ubicaciones de almacenamiento de hash, por lo que es necesario encontrar con precisión el valor de hash.; El segundo es juzgar correctamente el tipo de hash, determinar si hashcat admite este tipo de hash y seleccionar el parámetro correcto-m, de lo contrario es casi imposible tener éxito; El tercero es que el diccionario de contraseñas es mejor. Si la explosión puede ser exitosa al final depende del diccionario. Aunque cuanto más grande sea el diccionario de contraseñas, mejor es que sea más grande. hashcat también es famoso por su velocidad. Los diccionarios grandes no son un problema para hashcat. Aquí hay un mejor diccionario: puertas de filtración anteriores + colección de diccionarios de contraseñas débiles de uso común. 7Z , la contraseña de descompresión es: anywlan. Además, si recopila muchos diccionarios pequeños, puede fusionar, ordenar y desduplicar los diccionarios pequeños para obtener un diccionario grande para la explosión de hashcat. Si el pequeño diccionario está en el mismo directorio, puede hacerlo con un solo comando:

         cat   *   |   sort   |   uniq   >   Merge.dic 

¿Qué pasa si el pequeño diccionario está organizado por categorías y distribuido en directorios de múltiples capas? Obviamente no funciona solo usar el comando cat, pero de hecho solo se necesita un comando. Suponiendo que todos los pequeños diccionarios están almacenados en el directorio MyDictionary, el comando se puede escribir de la siguiente manera:

         encontrar  . /MyDictionary   -type   f   -exec   cat   {}   \;   |   ordenar   |   uniq   >   Merge.dic 

Siguiente artículo:¿Qué tipos de archivos cifrados podemos descifrar?
Siguiente artículo:Varios modos de ataque de hashcat
  • Centrarse en Word, Excel, PPT, PDF, RAR, ZIP, 7Z, paquetes comprimidos, desbloqueo y descifrado de archivos cifrados de Office
  • Proporcionamos a los usuarios recuperación de contraseña de paquete comprimido de archivos de alta calidad, recuperación de contraseña de palabra de desbloqueo de PDF
  • Derechos de autor © Maestro de recuperación de contraseña de documento Plataforma de descifrado en línea