認証付き基本 HTTP サーバーを設定する
このステップでは、基本認証が必要なシンプルな HTTP サーバーを設定します。このサーバーは、次のステップの Hydra 攻撃のターゲットとして使用されます。Python スクリプトを使用します。
まず、~/project ディレクトリにいることを確認します。
cd ~/project
次に、nano を使用して新しい Python ファイル webserver.py を作成します。
nano webserver.py
以下の Python コードをエディタに貼り付けます。
import http.server
import socketserver
import base64
PORT = 8000
class AuthHandler(http.server.SimpleHTTPRequestHandler):
def do_HEAD(self):
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
def do_AUTHHEAD(self):
self.send_response(401)
self.send_header('WWW-Authenticate', 'Basic realm="My Realm"')
self.send_header('Content-type', 'text/html')
self.end_headers()
def do_GET(self):
auth = self.headers.get('Authorization')
if auth == None:
self.do_AUTHHEAD()
self.wfile.write(b"Authentication Required")
elif auth == 'Basic YWRtaW46cGFzc3dvcmQ=': ## admin:password base64 エンコード済み
http.server.SimpleHTTPRequestHandler.do_GET(self)
else:
self.do_AUTHHEAD()
self.wfile.write(b"Authentication Failed")
Handler = AuthHandler
with socketserver.TCPServer(("", PORT), Handler) as httpd:
print("serving at port", PORT)
httpd.serve_forever()
このスクリプトは、ポート 8000 に基本認証が必要な基本的な HTTP サーバーを作成します。正しいユーザー名はadmin、パスワードはpasswordです。base64 エンコードされた文字列YWRtaW46cGFzc3dvcmQ=はadmin:passwordを表します。
ファイルを保存します (Ctrl+O、次にEnter)。nanoを終了します (Ctrl+X)。
次に、Python スクリプトを実行して HTTP サーバーを起動します。ターミナルを継続して使用できるように、バックグラウンドで実行します。
nohup python3 webserver.py > /dev/null 2>&1 &
nohupコマンドは、ターミナルを閉じてもプロセスが継続して実行されるようにします。> /dev/null 2>&1は標準出力と標準エラー出力を/dev/nullにリダイレクトし、サーバーの出力によってターミナルが煩雑になるのを防ぎます。&はコマンドをバックグラウンドで実行します。
サーバーが動作していることを確認するには、ポート 8000 でプロセスがリスニングしているかどうかを確認できます。
ss -ltn | grep ':8000'
ポート 8000 でプロセスがリスニングしていることを示す、次の様な出力が表示されるはずです。
LISTEN 0 4096 0.0.0.0:8000 0.0.0.0:*
次のステップのために、このサーバーを稼働させておいてください。