소개
이 실습에서는 공격자가 취약한 웹 인증 시스템을 어떻게 침해하는지 알아봅니다. 표준 HTTP POST 로그인 요청을 분석하고, Hydra 무차별 대입 도구를 구성하여 웹 포털의 로그인 폼을 대상으로 자동화된 사전 공격을 수행하고 유효한 자격 증명을 복구하는 방법을 배웁니다.
무차별 대입 공격 (Brute-force attack) 은 수많은 비밀번호나 암호를 체계적으로 입력하여 결국 올바른 값을 찾아내는 방식입니다. 웹 애플리케이션을 대상으로 할 때, 공격자들은 주로 HTTP POST 메서드를 사용하여 사용자 자격 증명을 전송하는 로그인 폼을 노립니다. 이러한 공격이 어떻게 작동하는지 이해하는 것은 웹 애플리케이션을 보호하고 적절한 속도 제한 (Rate Limiting) 및 계정 잠금 메커니즘을 구현하는 데 매우 중요합니다.
이는 근본적으로 인증 경제성 문제와 관련이 있습니다. 애플리케이션이 공격자에게 저렴한 비용으로 수많은 추측을 허용한다면, 취약하거나 재사용된 자격 증명은 쉽게 복구될 수 있습니다.
로그인 요청 매개변수 분석
이 단계에서는 대상 웹 애플리케이션이 로그인 요청을 처리하는 방식을 이해하기 위해 분석을 수행합니다. 무차별 대입 공격을 시작하기 전에 대상 URL, 사용된 HTTP 메서드, 입력 필드 이름, 그리고 로그인 실패 시 반환되는 메시지를 식별해야 합니다.
이러한 정찰 단계가 중요한 이유는 Hydra 와 같은 도구는 사용자가 제공하는 요청 템플릿만큼만 효과적이기 때문입니다. 폼을 잘못 이해하면 공격 로직 자체가 처음부터 어긋나게 됩니다.
포트 8080에서 로컬 웹 서버가 실행되었습니다. 먼저 로그인 페이지의 HTML 소스 코드를 확인하여 폼 매개변수를 식별해 보겠습니다. curl 명령어를 사용하여 웹 페이지 콘텐츠를 가져올 수 있습니다.
curl -s http://127.0.0.1:8080/
출력 결과에 간단한 HTML 폼이 표시됩니다. 폼 데이터가 전송되는 위치를 알려주는 action="/login" 속성을 확인하세요. method="POST" 속성은 데이터가 HTTP POST 요청을 통해 전송됨을 나타냅니다. 마지막으로 입력 필드의 name 속성인 username과 password를 확인합니다.
다음으로, 서버가 어떻게 응답하는지 확인하기 위해 실패한 로그인 시도를 시뮬레이션해야 합니다. 무차별 대입 도구는 "실패"가 무엇인지 알아야 실패 메시지가 없을 때 "성공"을 식별할 수 있으므로, 이는 매우 중요한 단계입니다.
curl을 사용하여 더미 자격 증명으로 POST 요청을 보냅니다. -X POST 플래그는 HTTP 메서드를 지정하고, -d 플래그는 폼 데이터를 전송할 수 있게 합니다.
curl -X POST -d "username=testuser&password=wrongpass" http://127.0.0.1:8080/login
다음과 같은 출력이 나타날 것입니다:
Invalid credentials. Please try again.
이 특정 문자열인 Invalid credentials가 바로 실패 메시지입니다. 나중에 무차별 대입 도구를 구성할 때 이 정확한 문구를 사용하게 됩니다.
대상 단어장 (Wordlist) 선택
이 단계에서는 무차별 대입 공격에 사용할 사전 (단어장) 을 준비합니다. 사전 공격은 미리 정의된 잠재적 사용자 이름과 비밀번호 목록에 의존합니다.
사전 공격은 인간의 예측 가능성을 악용하기 때문에 무작위 대입 (Blind exhaustive search) 보다 빠릅니다. 사람들은 비밀번호를 완전히 무작위로 선택하지 않기 때문입니다.
공격자는 모든 가능한 문자 조합을 시도하는 대신, 일반적인 사용자 이름 (예: admin, root, user) 과 자주 사용되는 비밀번호 (예: 123456, password, qwerty) 가 포함된 단어장을 사용합니다.
현재 작업 디렉토리 (~/project) 에 두 개의 간단한 텍스트 파일을 생성합니다. 첫 번째 파일에는 잠재적인 사용자 이름 목록이 포함됩니다. echo 명령어를 사용하여 users.txt라는 파일에 이름을 작성합니다.
echo "root" > users.txt
echo "admin" >> users.txt
echo "test" >> users.txt
> 연산자는 파일을 생성하고 첫 번째 줄을 작성하며, >> 연산자는 기존 파일에 내용을 추가합니다.
다음으로, 잠재적인 비밀번호 목록이 포함된 passwords.txt라는 파일을 생성합니다.
echo "password123" > passwords.txt
echo "admin123" >> passwords.txt
echo "secret123" >> passwords.txt
echo "123456" >> passwords.txt
cat 명령어를 사용하여 새로 생성된 단어장의 내용을 확인할 수 있습니다.
cat users.txt
cat passwords.txt
실제 환경에서 모의 해킹 전문가들은 수백만 개의 유출된 비밀번호가 포함된 rockyou.txt와 같이 공개적으로 사용 가능한 대규모 단어장을 사용합니다. 이 교육용 실습에서는 이러한 작은 사용자 정의 단어장으로 충분합니다.
HTTP POST 폼을 위한 Hydra 구성
이 단계에서는 강력한 네트워크 로그인 크래커인 Hydra의 명령어를 구성하는 방법을 배웁니다. Hydra 는 HTTP, FTP, SSH 등 다양한 프로토콜을 지원합니다.
웹 로그인 폼을 공격하기 위해 Hydra 는 http-post-form이라는 특정 모듈을 사용합니다. 이 모듈은 대상 웹 애플리케이션과 상호 작용하는 방법을 이해하기 위해 정밀하게 형식화된 문자열을 필요로 합니다.
http-post-form 모듈의 구문은 다음과 같습니다: "<path>:<form parameters>:<failure string>"
1 단계에서 수집한 정보가 어떻게 적용되는지 살펴보겠습니다. 첫 번째는 경로 (path) 로, 폼이 제출되는 URL 인 /login입니다. 다음은 폼 매개변수로, POST 요청에서 전송되는 데이터입니다. 필드는 username과 password임을 확인했습니다. Hydra 는 단어장의 단어를 주입하기 위해 ^USER^와 ^PASS^라는 특수 자리 표시자를 사용하므로, 매개변수 문자열은 username=^USER^&password=^PASS^가 됩니다. 마지막으로 실패 문자열은 로그인 실패 시 페이지에 나타나는 텍스트로, Invalid credentials로 식별했습니다.
이 세 부분을 콜론으로 결합하면 모듈 구성 문자열은 다음과 같습니다: "/login:username=^USER^&password=^PASS^:Invalid credentials"
실제 공격을 수행하기 전에 http-post-form 모듈에 대한 Hydra 의 내장 도움말 문서를 탐색하여 기능을 더 잘 이해할 수 있습니다. 다음 명령어를 실행하여 모듈별 도움말을 확인하세요:
hydra -U http-post-form
이 명령어는 모듈 문자열을 형식화하는 방법에 대한 자세한 지침과 예제를 출력하며, 향후 더 복잡한 로그인 폼을 마주할 때 훌륭한 참고 자료가 됩니다.
무차별 대입 공격 실행
이 단계에서는 지금까지 배운 모든 내용을 결합하여 로컬 웹 서버를 대상으로 자동화된 사전 공격을 실행합니다.
다음과 같은 플래그와 함께 hydra 명령어를 사용합니다:
-L users.txt: 사용자 이름 목록이 포함된 파일을 지정합니다.-P passwords.txt: 비밀번호 목록이 포함된 파일을 지정합니다.-s 8080: 대상 포트를 지정합니다.127.0.0.1: 대상 서버의 IP 주소입니다.http-post-form: 사용할 프로토콜 모듈입니다."/login:username=^USER^&password=^PASS^:Invalid credentials": 이전 단계에서 작성한 모듈 구성 문자열입니다.
터미널에서 다음 명령어를 실행하여 무차별 대입 공격을 시작합니다:
hydra -L users.txt -P passwords.txt -s 8080 127.0.0.1 http-post-form "/login:username=^USER^&password=^PASS^:Invalid credentials"
Hydra 는 단어장의 모든 사용자 이름과 비밀번호 조합을 테스트하기 시작합니다. 단어장이 작고 서버가 로컬에 있으므로 공격은 매우 빠르게 완료됩니다.
다음과 유사한 출력이 표시될 것입니다:
Hydra v9.2 (c) 2021 by van Hauser/THC - Please do not use in military or secret service organizations, or for illegal purposes.
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2026-10-25 10:00:00
[DATA] max 12 tasks per 1 server, overall 12 tasks, 12 login tries (l:3/p:4), ~1 tries per task
[DATA] attacking http-post-form://127.0.0.1:8080/login:username=^USER^&password=^PASS^:Invalid credentials
[8080][http-post-form] host: 127.0.0.1 login: admin password: secret123
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2026-10-25 10:00:01
녹색으로 강조되거나 성공을 명시하는 줄을 확인하세요: [8080][http-post-form] host: 127.0.0.1 login: admin password: secret123. Hydra 는 사용자 이름 admin과 비밀번호 secret123의 조합이 "Invalid credentials" 문자열을 반환하지 않았음을 성공적으로 식별했으며, 이는 로그인이 성공했음을 의미합니다.
요약
이 실습에서 여러분은 취약한 웹 인증 시스템을 분석하고 공격하는 방법을 성공적으로 배웠습니다. HTTP POST 로그인 폼을 검사하여 대상 경로, 입력 매개변수 및 실패 메시지를 식별하는 것으로 시작했습니다. 그런 다음 사전 공격을 위한 사용자 정의 단어장을 생성했습니다. 마지막으로 Hydra 무차별 대입 도구를 구성하고 실행하여 로그인 시도를 자동화하고 유효한 자격 증명을 성공적으로 복구했습니다.
이러한 기술을 이해함으로써 웹 애플리케이션을 자동화된 무차별 대입 공격으로부터 보호하기 위해 계정 잠금, CAPTCHA, 다중 인증 (MFA) 과 같은 강력한 보안 조치를 구현하는 것이 얼마나 중요한지 알 수 있습니다.


