인증 기능을 갖춘 기본 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:*
다음 단계를 위해 이 서버를 실행 상태로 유지하십시오.