소개
이 랩에서는 Hydra 에서 사용할 수 있는 HTTP POST 옵션을 살펴보고, HTTP POST 를 인증에 사용하는 서비스를 효과적으로 타겟팅하는 방법에 중점을 둡니다. 사용자 이름과 비밀번호를 지정하는 방법과 POST 요청을 보낼 URL 을 배우게 됩니다.
이 랩에서는 HTTP POST 옵션 검토, HTTP POST 폼 설정, 특정 옵션으로 Hydra 실행, POST 공격 검증을 안내합니다. HTTP POST 를 인증에 사용하는 서비스를 타겟팅할 때 Hydra 를 사용하여 로그인 자격 증명을 무차별 대입하는 방법을 배우게 됩니다.
HTTP POST 옵션 검토
이 단계에서는 Hydra 에서 사용할 수 있는 HTTP POST 옵션을 살펴보겠습니다. Hydra 는 로그인 자격 증명을 무차별 대입하는 강력한 도구이며, HTTP POST 를 포함한 다양한 프로토콜을 지원합니다. HTTP POST 를 인증에 사용하는 웹 애플리케이션을 타겟팅할 때는 로그인 폼에 대한 특정 정보를 Hydra 에 제공해야 합니다.
HTTP POST 와 함께 Hydra 를 사용하는 기본 구문은 다음과 같습니다.
hydra -l <username> -P <password_list> <target_ip> http-post-form "<url>:<post_data>:<failure_string>"
주요 구성 요소를 자세히 살펴보겠습니다.
hydra: Hydra 를 호출하는 명령어입니다.-l <username>: 공격에 사용할 단일 사용자 이름을 지정합니다. 사용자 이름 목록이 있는 경우-L <username_list>옵션을 대신 사용할 수 있습니다.-P <password_list>: 시도할 비밀번호 목록이 포함된 파일의 경로를 지정합니다.<target_ip>: 대상 서버의 IP 주소입니다.http-post-form: HTTP POST 폼 모듈을 사용하고 있음을 지정합니다. 이 모듈은 POST 메서드를 사용하는 웹 폼을 공격하도록 설계되었습니다."<url>:<post_data>:<failure_string>": 이는 Hydra 가 로그인 폼과 상호 작용하는 방식을 알려주는 중요한 부분입니다.<url>: POST 요청을 처리하는 로그인 스크립트 또는 페이지의 경로 (예:/login.php).<post_data>: POST 요청의 본문에 전송될 데이터입니다. 여기에는 일반적으로 HTML 폼의 사용자 이름 및 비밀번호 필드 이름과 Hydra 가 채울 사용자 이름 및 비밀번호의 자리 표시자가 포함됩니다. 자리 표시자는 일반적으로 사용자 이름의 경우^USER^이고 비밀번호의 경우^PASS^입니다 (예:username=^USER^&password=^PASS^).<failure_string>: 로그인 시도가 실패했을 때 응답에 나타나는 문자열입니다. Hydra 는 이 문자열을 사용하여 로그인 시도가 실패했는지 여부를 결정합니다. 잘못된 자격 증명으로 수동으로 로그인을 시도하고 응답을 관찰하여 이 문자열을 식별해야 합니다.
다음 단계에서는 간단한 HTTP POST 폼을 설정한 다음 Hydra 를 사용하여 이러한 옵션을 적용하여 공격할 것입니다.
HTTP POST 폼 설정
이 단계에서는 Hydra 공격의 대상으로 사용할 수 있는 간단한 HTTP POST 폼을 설정합니다. 설정 단계에서 이미 ~/project 디렉토리에 필요한 파일 (login.html 및 login.php) 을 생성했습니다.
이 파일의 내용을 검토하여 폼의 구조와 PHP 스크립트가 로그인 시도를 처리하는 방식을 이해해 보겠습니다.
먼저 login.html을 살펴보겠습니다.
cat ~/project/login.html
<!doctype html>
<html>
<head>
<title>Login Form</title>
</head>
<body>
<h1>Login</h1>
<form method="post" action="login.php">
<label for="username">Username:</label><br />
<input type="text" id="username" name="username" /><br /><br />
<label for="password">Password:</label><br />
<input type="password" id="password" name="password" /><br /><br />
<input type="submit" value="Login" />
</form>
</body>
</html>
이 HTML 코드는 POST 메서드를 사용하고 데이터를 login.php로 전송하는 폼을 정의합니다. 입력 필드의 이름은 username과 password입니다. 이는 POST 데이터에 username=<value> 및 password=<value>가 포함되어야 함을 알려줍니다.
이제 login.php를 살펴보겠습니다.
cat ~/project/login.php
<?php
$username = $_POST['username'];
$password = $_POST['password'];
if ($username == 'testuser' && $password == 'password') {
echo "Login successful!";
} else {
echo "Invalid username or password";
}
?>
이 PHP 스크립트는 제출된 username이 testuser이고 password가 password인지 확인합니다. 일치하면 "Login successful!"을 출력합니다. 그렇지 않으면 "Invalid username or password"를 출력합니다.
이 스크립트에서 실패 문자열을 식별할 수 있습니다: "Invalid username or password". 이는 Hydra 가 로그인 시도가 실패했는지 확인하기 위해 응답에서 찾을 문자열입니다.

이제 폼의 구조와 실패 메시지를 이해했으므로 다음 단계에서 Hydra 명령을 작성하는 데 필요한 모든 정보를 갖추었습니다.
웹 서비스 상태 확인
다음 단계로 진행하기 전에 PHP 웹 서비스가 실행 중이고 액세스 가능한지 확인하십시오. 터미널에서 다음 명령을 실행합니다.
curl -s http://0.0.0.0:8080/login.php
페이지 내용 (예: "Invalid username or password") 이 표시되면 서비스가 제대로 실행 중인 것입니다.

응답이 없거나 연결 오류가 발생하면 다음을 사용하여 PHP 내장 웹 서버를 수동으로 시작할 수 있습니다.
nohup php -S 0.0.0.0:8080 -t /home/labex/project > /dev/null 2>&1 &
잠시 기다린 후 curl 명령을 다시 시도하십시오.
HTTP POST 를 사용한 Hydra 실행
이제 대상 HTTP POST 폼을 설정하고 구조를 이해했으므로 Hydra 를 사용하여 로그인 자격 증명을 무차별 대입할 수 있습니다. 이전 단계에서 수집한 정보를 사용하여 Hydra 명령을 구성합니다.
다음 사항을 알고 있습니다.
- 대상 URL 은
/login.php입니다. - POST 데이터는
username=^USER^&password=^PASS^형식이어야 합니다. - 실패 문자열은 "Invalid username or password"입니다.
- 사용자 이름
testuser와 비밀번호 목록~/project/password.txt를 사용합니다. - 대상 IP 주소는
0.0.0.0입니다 (웹 서버가 로컬에서 실행 중이라고 가정).
이것을 Hydra 명령으로 결합해 보겠습니다.
hydra -l testuser -P ~/project/password.txt 0.0.0.0 -s 8080 http-post-form "/login.php:username=^USER^&password=^PASS^:F=Invalid username or password"
터미널에서 이 명령을 실행합니다.

이제 Hydra 는 지정된 사용자 이름과 목록의 비밀번호를 사용하여 대상 폼에 로그인을 시도하기 시작합니다. POST 데이터에 사용자 이름과 각 비밀번호를 포함하여 http://0.0.0.0:8080/login.php로 HTTP POST 요청을 보냅니다. 응답에 실패 문자열 "Invalid username or password"가 포함되어 있지 않으면 Hydra 는 로그인 시도가 성공한 것으로 간주하고 자격 증명을 보고합니다.
출력은 공격의 진행 상황을 보여줍니다. 올바른 비밀번호 (password) 가 password.txt 파일에 포함되어 있으므로 Hydra 는 결국 이를 찾을 것입니다.
Hydra v9.2 (c) 2021 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2025-05-22 09:55:07
[DATA] max 3 tasks per 1 server, overall 3 tasks, 3 login tries (l:1/p:3), ~1 try per task
[DATA] attacking http-post-form://0.0.0.0:8080/login.php:username=^USER^&password=^PASS^:F=Invalid username or password
[8080][http-post-form] host: 0.0.0.0 login: testuser password: password
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-05-22 09:55:08
[http-post] host: 0.0.0.0 login: testuser password: password 줄은 Hydra 가 올바른 자격 증명을 성공적으로 찾았음을 나타냅니다.
POST 공격 검증
이 단계에서는 Hydra 가 testuser 계정에 대한 올바른 비밀번호를 성공적으로 식별했는지 두 가지 방법으로 검증합니다.
- 먼저 Hydra 출력을 검토합니다.
[8080][http-post-form] host: 0.0.0.0 login: testuser password: password
이 줄은 Hydra 가 유효한 자격 증명, 즉 사용자 이름 testuser와 비밀번호 password를 찾았음을 나타냅니다.
- 둘째, 웹 인터페이스에서 이러한 자격 증명을 수동으로 확인합니다.
LabEx 환경에서 로그인 폼에 액세스하려면:
- 상단 메뉴 모음에서 "Web 8080" 탭을 클릭합니다.
- 주소 표시줄에서 현재 URL 끝에
/login.html을 추가합니다. - Hydra 가 발견한 자격 증명을 입력합니다.
- 사용자 이름:
testuser - 비밀번호:
password
- 사용자 이름:
- "Login" 버튼을 클릭합니다.

폼을 제출한 후 "Login successful!"이 표시되면 Hydra 가 찾은 자격 증명이 실제로 올바른 것임을 확인합니다.
성공 메시지가 표시되지 않으면 다음을 확인하기 위해 이전 단계를 검토하십시오.
~/project의password.txt파일에 비밀번호password가 포함되어 있는지 확인합니다.~/project의login.php파일이 사용자 이름testuser와 비밀번호password를 올바르게 확인하고 적절한 메시지를 반환하는지 확인합니다.- 웹 서버가 여전히 실행 중인지 확인합니다 (필요한 경우
php -S 0.0.0.0:8080 -t /home/labex/project로 다시 시작할 수 있습니다).
이 단계를 성공적으로 완료하고 Hydra 의 출력과 수동 테스트를 통해 자격 증명을 확인함으로써 Hydra 를 사용하여 유효한 로그인 자격 증명을 발견하고 그 진위 여부를 확인할 수 있는 능력을 입증했습니다.
요약
이 랩에서는 Hydra 를 사용하여 인증에 HTTP POST 를 사용하는 웹 애플리케이션을 공격하는 방법을 살펴보았습니다. http-post-form 모듈에 필요한 주요 옵션에 대해 배웠으며, 여기에는 대상 URL 지정, 사용자 이름 및 비밀번호 자리 표시자 (^USER^ 및 ^PASS^) 가 있는 POST 데이터 형식, 그리고 실패한 로그인 시도를 감지하기 위한 응답의 실패 문자열 식별이 포함됩니다.
로그인 페이지를 시뮬레이션하기 위해 간단한 HTML 폼과 PHP 스크립트를 설정하여 POST 요청의 구조와 예상되는 응답을 이해할 수 있었습니다. 적절한 Hydra 명령을 작성하고 실행함으로써 로그인 자격 증명을 성공적으로 무차별 대입하여 HTTP POST 폼을 공격하는 Hydra 의 강력함을 보여주었습니다.
다음과 같은 내용을 배웠습니다.
- HTTP POST 와 함께 Hydra 를 사용하는 기본 구문을 이해합니다.
- 웹 폼에서 필요한 정보 (URL, 필드 이름, 실패 메시지) 를 식별합니다.
- HTTP POST 폼을 대상으로 하는 Hydra 명령을 구성합니다.
- 성공적인 로그인 공격을 검증하기 위해 Hydra 의 출력을 해석합니다.
이 랩은 웹 애플리케이션 보안 테스트에서 일반적인 시나리오인 HTTP POST 공격에 Hydra 를 사용하는 기본적인 이해를 제공합니다.


