이 랩에서는 다재다능한 비밀번호 크래킹 도구인 Hydra 를 사용하여 HTTP 서비스에 대한 무차별 대입 공격을 수행하는 방법을 배우게 됩니다. 기본적인 인증을 갖춘 Python HTTP 서버를 설정하고 체계적인 자격 증명 공격을 통해 보안을 테스트하는 방법을 살펴봅니다.
이 실습에서는 워드 리스트 생성, Hydra 매개변수 구성, 공격 결과 분석을 통해 인증 취약점을 식별하는 방법을 다룹니다. 이 실용적인 세션은 무차별 대입 시도에 대한 웹 서비스 보안을 평가하는 데 필요한 기술을 보여줍니다.
이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 중급 레벨의 실험이며 완료율은 77%입니다.학습자들로부터 97%의 긍정적인 리뷰율을 받았습니다.
로컬 HTTP 서버 설치
이 단계에서는 Python 의 내장 모듈을 사용하여 로컬 HTTP 서버를 설치합니다. 이 서버는 기본적인 인증을 갖춘 실제 웹 서버를 시뮬레이션하며, 나중에 Hydra 무차별 대입 공격의 대상으로 사용할 것입니다. 웹 서버의 작동 방식을 이해하는 것은 보안을 테스트하기 전에 필수적입니다.
Python 의 http.server 모듈은 테스트 목적으로 기본적인 웹 서버를 빠르게 생성하는 방법을 제공합니다. 프로덕션 환경에는 적합하지 않지만, 복잡한 설정 없이 HTTP 프로토콜의 기본 사항을 보여주므로 랩 환경에 완벽합니다. 서버는 기본적으로 포트 8000 에서 실행됩니다.
먼저, 프로젝트 디렉토리로 이동합니다. 이렇게 하면 모든 파일이 한 곳에 정리됩니다.
cd ~/project
웹 서버 파일을 위한 전용 디렉토리를 생성합니다. 웹 콘텐츠를 별도로 유지하면 구성을 유지하는 데 도움이 됩니다.
mkdir http_server
cd http_server
간단한 홈페이지를 생성합니다. 이 HTML 파일은 누군가 웹 서버에 접속할 때 제공됩니다.
echo "<h1>Welcome to LabEx HTTP Server</h1>" > index.html
Python HTTP 서버를 시작합니다. & 기호는 백그라운드에서 실행되므로 터미널을 계속 사용할 수 있습니다.
python3 -m http.server 8000 &
터미널을 계속 사용하려면 Enter 키를 누르세요.
서버가 실행 중인지 확인합니다. netstat 명령은 활성 네트워크 연결 및 수신 포트를 보여줍니다.
서버 기능을 테스트합니다. curl 명령은 웹 페이지를 검색하여 모든 것이 작동하는지 확인합니다.
curl http://localhost:8000
생성한 HTML 콘텐츠를 받으면 서버가 작동하고 있음을 증명합니다.
<h1>Welcome to LabEx HTTP Server</h1>
기본 웹 서버가 실행 중이므로 다음 단계에서 인증을 구현할 준비가 되었습니다. Hydra 가 기본 인증을 사용하는 실제 웹 서버와 정확히 동일하게 이 서버와 상호 작용하므로 이 기반은 매우 중요합니다.
HTTP 서버 기본 인증 설정
이 단계에서는 이전에 설치한 HTTP 서버에 대한 기본 인증을 구성합니다. 기본 인증은 클라이언트가 각 요청과 함께 사용자 이름과 비밀번호를 전송하는 간단한 방법입니다. 이는 나중에 Hydra 를 사용하여 무차별 대입을 시도하여 테스트할 보안 계층을 생성합니다. 이는 약한 비밀번호가 위험한 이유를 보여줍니다.
먼저, 보호된 웹 서버를 설정할 올바른 디렉토리에 있는지 확인합니다.
cd ~/project/http_server
htpasswd 유틸리티를 사용하여 비밀번호 파일을 생성합니다. 이 도구는 apache2-utils 패키지 (LabEx VM 에 이미 설치됨) 와 함께 제공되며 기본 인증을 위한 비밀번호 파일 관리에 도움이 됩니다.
htpasswd -c .htpasswd admin
메시지가 표시되면 비밀번호로 password123을 입력합니다. 여기서는 간단한 비밀번호가 얼마나 쉽게 크래킹될 수 있는지 보여주기 위해 의도적으로 약한 비밀번호를 사용하고 있습니다.
이제 기본 인증으로 HTTP 콘텐츠를 제공하는 Python 스크립트를 생성합니다. 이 스크립트는 액세스를 허용하기 전에 자격 증명을 확인합니다.
nano auth_server.py
다음 Python 코드를 붙여넣습니다. 이는 다음과 같은 사용자 지정 HTTP 서버를 생성합니다.
기본 인증 필요
.htpasswd 파일에 대해 자격 증명 유효성 검사
인증 성공 후에만 콘텐츠 제공
from http.server import HTTPServer, BaseHTTPRequestHandler
import base64
class AuthHandler(BaseHTTPRequestHandler):
def do_GET(self):
auth_header = self.headers.get('Authorization')
if not auth_header or not auth_header.startswith('Basic '):
self.send_response(401)
self.send_header('WWW-Authenticate', 'Basic realm="LabEx"')
self.send_header('Content-type', 'text/html')
self.end_headers()
self.wfile.write(b'Authentication required')
return
auth_decoded = base64.b64decode(auth_header[6:]).decode('utf-8')
username, password = auth_decoded.split(':', 1)
if username == 'admin' and password == 'password123':
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
with open('index.html', 'rb') as f:
self.wfile.write(f.read())
else:
self.send_response(401)
self.send_header('WWW-Authenticate', 'Basic realm="LabEx"')
self.end_headers()
self.wfile.write(b'Authentication failed')
if __name__ == '__main__':
server_address = ('', 8000)
httpd = HTTPServer(server_address, AuthHandler)
print("Server running on port 8000...")
httpd.serve_forever()
파일을 저장하고 (nano 에서 Ctrl+O, Enter, Ctrl+X) 이전 HTTP 서버 (인증이 없는 서버) 를 중지합니다.
pkill -f "python3 -m http.server"
새 인증된 HTTP 서버를 백그라운드에서 시작합니다.
python3 auth_server.py &
자격 증명 없이 서버에 액세스하여 인증을 테스트해 보겠습니다.
curl -v http://localhost:8000
401 Unauthorized 응답을 받아야 합니다. 이는 인증이 작동하고 있음을 의미합니다.
이 단어 목록에는 이전에 구성한 올바른 자격 증명 (admin/password123) 과 많은 잘못된 조합이 모두 포함되어 있습니다. 이 설정은 공격자가 가능한 수많은 자격 증명을 시도하여 로그인을 무차별 대입하려는 방식을 현실적으로 시뮬레이션합니다. 다음 단계에서는 Hydra 를 사용하여 이러한 조합을 HTTP 서버에 대해 테스트하는 것을 자동화합니다.
HTTP 서비스에 대한 Hydra 공격 실행
이 단계에서는 Hydra 를 사용하여 이전에 구성한 HTTP 기본 인증 서비스에 대해 무차별 대입 공격을 수행합니다. Hydra 는 단어 목록에서 모든 사용자 이름/비밀번호 조합을 체계적으로 시도하여 유효한 자격 증명을 찾는 강력한 비밀번호 크래킹 도구입니다. 이는 약한 비밀번호가 자동화된 공격에 취약한 이유를 보여줍니다.
먼저, HTTP 서버가 여전히 실행 중인지 확인합니다. 이 명령은 서버 프로세스가 있는지 확인하고 필요한 경우 다시 시작합니다.
공격은 이전에 설정한 자격 증명 (admin/password123) 을 성공적으로 찾아야 합니다. 이는 자동화된 무차별 대입 공격을 통해 약한 자격 증명을 얼마나 빨리 발견할 수 있는지 보여주며, 강력한 비밀번호의 중요성을 강조합니다.
요약
이 랩에서는 Python 을 사용하여 로컬 HTTP 서버를 설정하고 보안 테스트 목적으로 기본 인증을 구현하는 방법을 배웠습니다. 이 프로세스에는 웹 디렉토리 생성, htpasswd 를 사용한 인증 구성, curl 과 같은 일반적인 도구를 사용하여 서버 기능 확인이 포함되었습니다.
또한, 자격 증명 목록을 준비하고 Hydra 를 사용하여 HTTP 서비스에 대한 무차별 대입 공격을 실행하는 실질적인 경험을 얻었습니다. 이 연습은 강력한 비밀번호의 중요성과 약한 자격 증명을 사용할 때 기본 인증 메커니즘의 취약성을 보여주었습니다.