Uso de Máscara .hcmask en Hashcat para Reemplazos Flexibles de Caracteres

Uso de Máscara .hcmask en Hashcat para Reemplazos Flexibles de Caracteres

El ataque basado en reglas (Rule-based attack) consiste en la generación y filtración flexible de candidatos a contraseñas.

A pesar de todas sus capacidades, este ataque no es todopoderoso. Consideremos el siguiente ejemplo:

Tenemos la palabra:

seesaw

y necesitas reemplazar el carácter s con el carácter $. Por ejemplo, en John the Ripper podrías intentar usar la regla ss$, pero esta solo devuelve $ee$aw, cuando lo que necesitas es:

seesaw
$eesaw
see$aw
$ee$aw

También es necesario reemplazar otros símbolos de manera similar.

Esta tarea implica que al realizar los reemplazos, el programa debe tener en cuenta los reemplazos anteriores, lo que entra en conflicto con los métodos de procesamiento de diccionarios en el ataque basado en reglas, donde cada línea se procesa de forma independiente de las anteriores y siguientes. Por lo tanto, es poco probable que esta tarea se pueda resolver con el ataque basado en reglas.

Sin embargo, se puede asegurar que al generar diccionarios basados en una máscara obtenemos aproximadamente lo que necesitamos:

maskprocessor -1 s$ ?1ee?1aw
seesaw
see$aw
$eesaw
$ee$aw
Ejemplo de uso de maskprocessor
Ejemplo de uso de maskprocessor

Pero, ¿qué hacer si necesitas realizar la sustitución de una cantidad variable de caracteres, o reemplazar caracteres en diferentes posiciones, no solo en una palabra, sino en todo un diccionario?

Esta tarea es completamente resoluble mediante programación. Un ejemplo de algoritmo sería:

  1. Obtener el número de caracteres en la palabra para reemplazar.
  2. Si hay un solo carácter para reemplazar, genera dos palabras: una con la sustitución y otra sin ella.
  3. Si hay dos caracteres para reemplazar, genera cuatro palabras: sin sustitución, con el primer carácter reemplazado, con el segundo carácter reemplazado y con ambos caracteres reemplazados.
  4. Si hay tres caracteres para reemplazar, genera ocho combinaciones, y así sucesivamente.

Este algoritmo se puede convertir en una función, cuyos argumentos deben ser: 1) el carácter que necesitas reemplazar; 2) el carácter con el que reemplazar. Solo necesitas escribir el código de la función una vez y puedes usarlo tantas veces como necesites. Algo así se puede implementar incluso con PHP.

Pero no te desesperes: puedes hacerlo sin programación, usando herramientas como:

  1. Máscaras
  2. Archivos de máscara

El algoritmo es el siguiente:

  1. Convierte el diccionario en un conjunto de máscaras con los parámetros que necesitas.
  2. Genera un nuevo diccionario basado en el archivo de máscaras.

Por ejemplo, tienes una lista de palabras dic1.txt con el siguiente contenido:

seesaw
samuelsonmarian
samuelspence
samuelspevak
samuelsrie
samuelss
samuelsstarr
SAMUELSTERNA
samuelstevens
samuelsux1
samuels-x
samuelt**
samuelta.
samueltad
samueltan
samueltanner
samueltapia2
samueltas21
samuel+teadoro
samuelteall
samuelteama
samuel te amo
samuel,te,amo
samuelteamo
SAMUELTEAMO
samuelteamo21
SAMUELTEAMOMUCHO
samueltequiero
samuelthane99
Ejemplo de muestra de un diccionario
Ejemplo de muestra de un diccionario

La tarea es reemplazar el carácter s por el carácter $ en todas las combinaciones posibles, para que, por ejemplo, la palabra seesaw se convierta en:

seesaw
$eesaw
see$aw
$ee$aw

Comienza generando el archivo de máscaras. En este comando, todos los caracteres s en el archivo dic1.txt se cambian por ?1, y el resultado se guarda en el archivo masks.hcmask:

cat d1.txt | sed 's/s/\?1/g' > masks.hcmask

Para reemplazar tanto s minúsculas como S mayúsculas:

cat d1.txt | sed 's/[sS]/\?1/g' > masks.hcmask

Como ya habrás notado, se obtiene un conjunto de máscaras. Por ejemplo, seesaw se convierte en ?1ee?1aw.

El formato de los archivos .hcmask es el siguiente:

USUARIO_CONJUNTO1,USUARIO_CONJUNTO2,USUARIO_CONJUNTO3,USUARIO_CONJUNTO4,MASK

En mi ejemplo simple, usaré solo un conjunto de caracteres de usuario, por lo que el formato final del archivo masks.hcmask será:

USUARIO_CONJUNTO1,MASK

Agregar un prefijo a cada línea del archivo se puede hacer con el siguiente comando:

sed -i -e 's/^/PREFIJO/' ARCHIVO

En mi caso, el conjunto de caracteres de usuario es s$, es decir, donde ?1 se debe reemplazar por s o $. Así que el comando es:

sed -i -e 's/^/s$,/' masks.hcmask
Aplicación de máscara y hcmask
Aplicación de máscara y hcmask

El contenido del archivo masks.hcmask ahora es:

s$,?1ee?1aw
s$,?1amuel?1onmarian
s$,?1amuel?1pence
s$,?1amuel?1pevak
s$,?1amuel?1rie
s$,?1amuel?1?1
s$,?1amuel?1?1tarr
s$,SAMUELSTERNA
s$,?1amuel?1teven?1
s$,?1amuel?1ux1
s$,?1amuel?1-x
s$,?1amuelt**
s$,?1amuelta.
s$,?1amueltad
s$,?1amueltan
s$,?1amueltanner
s$,?1amueltapia2
s$,?1amuelta?121
s$,?1amuel+teadoro
s$,?1amuelteall
s$,?1amuelteama
s$,?1amuel te amo
s$,?1amuel,te,amo
s$,?1amuelteamo
s$,SAMUELTEAMO
s$,?1amuelteamo21
s$,SAMUELTEAMOMUCHO
s$,?1amueltequiero
s$,?1amuelthane99
Resultado de máscara de caracteres
Resultado de máscara de caracteres

Ahora, en Hashcat, ejecuta la generación de diccionarios basada en el archivo de máscaras masks.hcmask:

hashcat -a 3 --stdout masks.hcmask
Uso de Hashcat y máscaras
Uso de Hashcat y máscaras

Obtendrás el resultado deseado con todas las posibles variaciones de sustitución de caracteres en diferentes posiciones. El comienzo de los datos generados es:

seesaw
$eesaw
see$aw
$ee$aw
samuelsonmarian
$amuelsonmarian
samuel$onmarian
$amuel$onmarian
samuelspence
$amuelspence
samuel$pence
$amuel$pence
samuelspevak
$amuelspevak
samuel$pevak
$amuel$pevak
samuelsrie
$amuelsrie
samuel$rie
$amuel$rie
samuelss
$amuelss
samuel$$
$amuel$$
samuels$
$amuels$
samuel$s
$amuel$s
…
…
…

Puedes usar hasta cuatro conjuntos de caracteres de usuario a la vez, es decir, reemplazar hasta cuatro caracteres de esta manera. Si necesitas reemplazar más caracteres, puedes repetir estos pasos tantas veces como sea necesario.

My Cart Close (×)

Tu carrito está vacío
Ver tienda