mfterm: Guía Rápida en Español

 https://www.onlinetis.com/es/

mfterm: Guía Rápida en Español

mfterm es una herramienta de terminal para Linux diseñada para interactuar con etiquetas Mifare Classic. Es especialmente útil si estás trabajando con lectores NFC (como el ACR122U) para leer, escribir o analizar tarjetas inteligentes.

Aquí tienes una guía rápida en español sobre cómo empezar y qué puedes hacer con ella:


1. Instalación en Kali Linux

Aunque Kali viene con muchas herramientas de radiofrecuencia, es posible que debas instalar mfterm manualmente. Abre tu terminal y ejecuta:

Bash
sudo apt update
sudo apt install mfterm

2. Conceptos básicos antes de empezar

Para que mfterm funcione, necesitas:

  • Un lector NFC compatible conectado.

  • Detener los drivers por defecto: A veces el kernel de Linux bloquea el lector. Ejecuta:

    sudo modprobe -r pn533_usb pn533 nfc

3. Comandos principales de mfterm

Una vez que lanzas la herramienta escribiendo mfterm en la consola, entrarás en su propia interfaz interactiva.

ComandoDescripción
printMuestra el contenido actual del buffer (la tarjeta leída).
readIntenta leer una tarjeta (necesitas cargar las llaves primero).
load keys <archivo>Carga un diccionario de llaves (por defecto busca keys.txt).
dictPrueba las llaves cargadas contra la tarjeta para ver cuáles funcionan.
writeEscribe los datos del buffer en una tarjeta.
set sector <n>Cambia el sector sobre el que estás trabajando.

4. Flujo de trabajo típico (Ejemplo)

Si quieres volcar los datos de una tarjeta:

  1. Cargar llaves: load keys keys.txt (mfterm suele incluir un archivo de llaves conocidas).

  2. Autenticar: dict (esto probará las llaves en cada sector).

  3. Leer: read (si las llaves son correctas, extraerá la información).

  4. Ver datos: print para examinar los bloques de memoria.

  5. Guardar: save dump mi_tarjeta.mfd para respaldar los datos en un archivo.


Precauciones

  • Mifare Classic es vulnerable: Esta herramienta se usa comúnmente porque las tarjetas Mifare Classic tienen debilidades criptográficas conocidas.

  • Permisos: Si el programa no detecta tu lector, intenta ejecutarlo con sudo mfterm.

 

Configurar un archivo de llaves (o diccionario) es el paso más importante para trabajar con etiquetas Mifare Classic, ya que sin las llaves correctas, el lector no puede acceder a los datos de los sectores.

Aquí tienes cómo crearlo y gestionarlo correctamente en mfterm.


1. Formato del archivo de llaves

El archivo de llaves es un archivo de texto simple (.txt). mfterm espera que las llaves estén escritas en hexadecimal, una por línea.

Ejemplo de contenido para un archivo llamado mis_llaves.txt:

Plaintext
FFFFFFFFFFFF
A0A1A2A3A4A5
B0B1B2B3B4B5
4D3A9F4150BB

Nota: Cada llave debe tener exactamente 12 caracteres hexadecimales (6 bytes).

2. Cómo cargar y usar el archivo en mfterm

Una vez que tengas tu archivo listo en la carpeta donde vas a ejecutar el programa, sigue estos pasos dentro de la consola de mfterm:

  1. Cargar el archivo:

    load keys mis_llaves.txt

  2. Verificar cuántas llaves se cargaron:

    print keys (esto te mostrará la lista actual en memoria).

  3. Ejecutar el ataque de diccionario:

    dict

    Este comando probará cada llave del archivo contra cada sector de la tarjeta (probando tanto para la Llave A como para la Llave B).


3. Estructura de Memoria y Llaves

Es vital entender que una tarjeta Mifare Classic 1K está dividida en 16 sectores, y cada sector tiene su propio par de llaves.

4. Dónde conseguir llaves comunes

Si no conoces las llaves de tu tarjeta, lo ideal es empezar con un diccionario estándar. Muchas veces estas tarjetas vienen con llaves de fábrica:

  • FFFFFFFFFFFF (Llave por defecto más común)

  • 000000000000

  • A0A1A2A3A4A5 (Llave de transporte de NXP)

Truco en Kali:

Si tienes instalada la suite nfc-tools, puedes encontrar diccionarios muy completos en:

/usr/share/nfc/keys.txt o /usr/share/mfdl/keys.txt. Puedes copiar ese contenido a tu propio archivo para usarlo con mfterm.


5. Exportar las llaves encontradas

Si después de ejecutar dict lograste autenticar varios sectores, puedes guardar esas llaves específicas para no tener que buscarlas de nuevo:

save keys mis_llaves_encontradas.txt

 

Si el comando dict de mfterm no encuentra todas las llaves, es porque la tarjeta no usa las llaves de fábrica. Aquí es donde entran las herramientas de "fuerza bruta" o ataques criptográficos.

En Kali Linux, el flujo estándar es usar MFOC o MFCUK para obtener las llaves y luego llevarlas a mfterm para manipular los datos.


1. Ataque MFOC (Mifare Classic Offline Cracker)

Este es el más rápido. Funciona si la tarjeta tiene al menos un sector con una llave conocida (como FFFFFFFFFFFF). Usa una vulnerabilidad llamada "Nested Attack".

Ejecuta esto en tu terminal de Kali:

Bash
mfoc -O llaves_tarjeta.mfd
  • -O: Guarda el volcado de datos y las llaves encontradas en un archivo .mfd.

  • Si funciona, verás cómo el programa va "descifrando" cada sector uno por uno.

2. Ataque MFCUK (Mifare Classic Universal Toolkit)

Si la tarjeta es "Dark" (es decir, todas las llaves han sido cambiadas y no conoces ninguna), MFOC no funcionará. Aquí usas mfcuk, que explota una vulnerabilidad en el generador de números aleatorios (PRNG) de la tarjeta.

Bash
mfcuk -C -R 0:A -v 2
  • Este proceso es lento (puede tardar desde minutos hasta horas).

  • Una vez que encuentre la primera llave, puedes detenerlo y volver a mfoc para sacar el resto mucho más rápido.


3. Integración con mfterm

Una vez que hayas recuperado las llaves con MFOC, puedes usarlas en mfterm de dos formas:

  1. Cargar el volcado directamente:

    Dentro de mfterm: load dump llaves_tarjeta.mfd

  2. Extraer solo las llaves:

    Si quieres un archivo de texto limpio con las llaves que encontraste para usarlo como diccionario futuro, puedes usar una herramienta como nfc-list o simplemente copiar los hashes hexadecimales que te mostró MFOC en pantalla a tu archivo mis_llaves.txt.

Resumen de herramientas

HerramientaCuándo usarla
mftermPara editar, leer y escribir datos de forma cómoda e interactiva.
mfocPara romper la seguridad si conoces al menos una llave (la mayoría de los casos).
mfcukPara romper la seguridad si la tarjeta está totalmente bloqueada (llaves desconocidas).

Tip de experto: Si estás usando un lector ACR122U, asegúrate de que los módulos pn533 de Linux estén desactivados (modprobe -r), de lo contrario, tanto mfoc como mfterm te darán errores de "dispositivo ocupado".

 

Una vez que logras entrar a la tarjeta con las llaves que obtuviste, lo que verás en mfterm (al usar el comando print) será una cuadrícula de números hexadecimales. Interpretar esto es como leer el "ADN" de la tarjeta.

Aquí te explico cómo se organiza la información:

1. La Estructura de Bloques

Cada sector de una tarjeta Mifare Classic 1K tiene 4 bloques (del 0 al 3). Cada bloque tiene 16 bytes.

  • Bloques 0, 1 y 2 (Datos): Aquí es donde las aplicaciones guardan información (saldo de transporte, ID de empleado, puntos, etc.).

  • Bloque 3 (Trailer del Sector): Es el bloque más importante y peligroso. Contiene las Llaves A y B, y los bits de acceso.


2. El Bloque 0 del Sector 0 (El "DNI" de la tarjeta)

Este es el bloque más especial de todos. Contiene el UID (Identificador Único) del fabricante.

  • En las tarjetas originales, este bloque es de solo lectura.

  • Si ves que puedes escribir en él, tienes una tarjeta "Magic Chinese Card" (UID grabable), lo cual es ideal para clonación.

3. El Sector Trailer (Bloque 3 de cada sector)

Cuando hagas un print en mfterm, verás que el último bloque de cada sector tiene un formato parecido a este:

A0A1A2A3A4A5 FF078069 B0B1B2B3B4B5

Se divide así:

  1. Bytes 0-5: Llave A (frecuentemente oculta por el software por seguridad).

  2. Bytes 6-9: Access Bits. Definen qué se puede hacer (¿puedo leer sin llave B? ¿puedo cambiar la llave A?).

  3. Bytes 10-15: Llave B.

¡CUIDADO! Si escribes unos "Access Bits" incorrectos (por ejemplo, 00000000), puedes bloquear el sector para siempre, dejando la tarjeta inservible (brick), ya que nadie podrá volver a autenticarse.


4. Cómo leer los datos (ASCII vs HEX)

En mfterm, verás los datos en hexadecimal a la izquierda y, a veces, una representación en texto (ASCII) a la derecha.

  • Si ves puntos ...., significa que los datos no son texto legible (están cifrados o son valores numéricos puros).

  • Si ves nombres o números claros, la tarjeta guarda la información en "texto plano".

Ejemplo práctico en mfterm:

Si quieres ver solo el sector 2, puedes hacer:

  1. set sector 2

  2. print

     

    Clonar una tarjeta Mifare Classic es un proceso de dos pasos: primero extraes toda la información de la tarjeta original (el "dump") y luego la grabas en una tarjeta nueva.

    Para que la clonación sea idéntica, necesitas una tarjeta especial llamada Mifare "Magic" (UID Changeable), ya que las tarjetas normales no permiten modificar el Sector 0, donde reside el ID único.


    Paso 1: Crear el volcado (Dump) de la tarjeta original

    Si ya usaste mfoc o mfcuk como vimos antes, ya deberías tener un archivo .mfd. Si no, hazlo ahora desde la terminal de Kali:

    Bash
    mfoc -O tarjeta_original.mfd
    

    Paso 2: Preparar la tarjeta de destino (Magic Card)

    Coloca la tarjeta vacía en el lector. En mfterm, vamos a cargar ese archivo en la memoria del programa:

    1. Cargar el archivo: load dump tarjeta_original.mfd

    2. Verificar: print (deberías ver los datos de la tarjeta original en pantalla).

    Paso 3: Grabar los datos

    Aquí es donde ocurre la magia. Tienes dos opciones dependiendo de tu tarjeta de destino:

    Opción A: Usando mfterm (Método estándar)

    Dentro de mfterm, simplemente ejecuta:

    write

    El programa intentará escribir bloque por bloque. Si la tarjeta de destino es una "Magic Card" de Generación 2, escribirá incluso el Sector 0.

    Opción B: Usando nfc-mfclassic (Más robusto para clones)

    A veces mfterm puede dar errores de escritura en sectores protegidos. Fuera de mfterm, en la terminal de Kali, este comando es el "estándar de oro" para clonar:

    Bash
    nfc-mfclassic W a tarjeta_original.mfd
    
    • W (Mayúscula): Indica que vas a escribir incluyendo el bloque 0 (UID).

    • a: Indica que use la Llave A para autenticarse.


    ¿Cómo saber si la clonación funcionó?

    Una vez finalizado el proceso, retira la tarjeta y vuelve a colocarla. Ejecuta:

    nfc-list

    Compara el UID que aparece en pantalla con el de la tarjeta original. Si son idénticos, ¡has clonado la tarjeta con éxito!

    Tipos de tarjetas "Magic"

    Existen dos tipos principales que podrías encontrar al comprar:

    • Gen 1 (Backdoor): Requieren un comando especial para desbloquear el sector 0. Se suelen grabar con la herramienta nfc-mflib.

    • Gen 2 (Direct Write): Funcionan exactamente como una tarjeta normal, pero permiten escribir en el bloque 0 sin comandos especiales. Son las más fáciles de usar con mfterm.

       

      Vamos a entrar en la parte de "cirugía" de datos. Editar un valor en una tarjeta Mifare Classic es sencillo si sabes exactamente dónde tocar, pero requiere precisión.

      En mfterm, el comando set es tu bisturí. Aquí te explico cómo usarlo paso a paso:


      1. Localizar el Bloque y el Byte

      Antes de editar, necesitas saber la dirección exacta. Cada bloque tiene 16 bytes, numerados del 0 al 15.

      Si haces un print, verás algo como esto:

      Sector 01, Block 04: 00 12 4F AA ...

      Para cambiar el valor 12 (que es el Byte 1 del Bloque 4), usarías esta lógica.

      2. El comando set

      La sintaxis básica en mfterm es:

      set block <número> <datos_hexadecimales>

      Ejemplo práctico:

      Si quieres cambiar todo el Bloque 4 para que tenga un ID específico (por ejemplo, DE AD BE EF seguido de ceros):

      1. Selecciona el sector: set sector 1

      2. Cambia el bloque: set block 4 DEADBEEF000000000000000000000000

      Nota: Debes escribir los 16 bytes (32 caracteres hexadecimales) completos para que el comando funcione correctamente.


      3. Edición de "Value Blocks" (Saldos)

      Muchas tarjetas de transporte o monederos no guardan el saldo como un número simple, sino como un Value Block. Este es un formato especial de Mifare que guarda el número tres veces (dos veces normal y una invertida) para evitar errores.

      Si ves un bloque que se repite así: [Valor] [Invertido] [Valor] [Dirección], no puedes simplemente cambiar un número; tienes que recalcular toda la cadena.

      4. Guardar los cambios en la tarjeta

      Es muy importante entender que cuando usas set en mfterm, solo estás cambiando los datos en la memoria de tu computadora (el buffer). La tarjeta física aún no se ha enterado.

      Para que los cambios sean permanentes en el plástico:

      1. Asegúrate de estar autenticado en ese sector.

      2. Ejecuta el comando: write


      5. Consejos de seguridad (El "Undo")

      Antes de hacer cualquier set y write, te recomiendo seguir esta regla de oro:

      1. Haz un backup siempre: save dump original.mfd

      2. Si algo sale mal o la tarjeta deja de funcionar en el lector de la tienda/autobús, puedes volver a cargar el original (load dump original.mfd) y hacer un write para dejarla como estaba.

         

      Analizar los bytes es como resolver un rompecabezas. Cuando los datos no son texto claro (ASCII), suelen seguir patrones lógicos que las máquinas pueden leer rápido.

      Para ayudarte, pásame una línea de lo que ves en mfterm (por ejemplo, el volcado de un bloque específico). Mientras tanto, aquí tienes una guía de los "sospechosos habituales" que solemos encontrar:


      1. El Contador Invertido (Saldos y Puntos)

      Si ves un bloque donde los primeros bytes parecen repetirse o cambiar de forma simétrica, estás ante un Value Block.

      • Patrón: [Valor A] [Valor A Invertido] [Valor A] [Dirección]

      • Por qué: Se usa para que, si la escritura se corta a mitad (por ejemplo, retiras la tarjeta muy rápido), el lector sepa que los datos están corruptos al no coincidir las copias.

      2. Timestamps (Fechas y Horas)

      Muchas tarjetas de acceso graban la última vez que pasaste por una puerta.

      • Unix Epoch: Verás 4 bytes que parecen aleatorios pero cambian cada vez. Ejemplo: 5E 8A 2F 60. Si los conviertes de hex a decimal y luego a fecha, verás el minuto exacto.

      • Formato Compacto: A veces usan 2 bytes para el año/mes/día (YYYYMMDD comprimido).

      3. El Checksum (BCC)

      Si cambias un solo número (un ID o un saldo) y la tarjeta deja de funcionar en el lector oficial, es porque hay un Byte de Control.

      • Al final de muchos bloques de datos, el último byte suele ser la suma (XOR) de todos los anteriores.

      • Si editas el valor pero no actualizas el Checksum, el lector rechazará la tarjeta por "error de integridad".


      4. Estructura de un bloque típico de datos

      A veces los datos están "empaquetados" para ahorrar espacio. Mira este ejemplo de una tarjeta de gimnasio:

      01 04 20 26 00 00 ...

      • 01: Puede ser el estado (Activo).

      • 04 20 26: Podría ser la fecha de expiración (26 de Abril de 2024).

Entradas populares de este blog

Hacking y ciberseguridad en kali linux con Fping

Hacking y ciberseguridad en kali linux con atk6-thcping6

Como utilizar Fierce en kali linux