Hydra 모듈별 옵션 탐색

HydraBeginner
지금 연습하기

소개

이 랩에서는 Hydra 에서 사용할 수 있는 HTTP POST 옵션을 살펴보고, HTTP POST 를 인증에 사용하는 서비스를 효과적으로 타겟팅하는 방법에 중점을 둡니다. 사용자 이름과 비밀번호를 지정하는 방법과 POST 요청을 보낼 URL 을 배우게 됩니다.

이 랩에서는 HTTP POST 옵션 검토, HTTP POST 폼 설정, 특정 옵션으로 Hydra 실행, POST 공격 검증을 안내합니다. HTTP POST 를 인증에 사용하는 서비스를 타겟팅할 때 Hydra 를 사용하여 로그인 자격 증명을 무차별 대입하는 방법을 배우게 됩니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 중급 레벨의 실험이며 완료율은 64%입니다.학습자들로부터 100%의 긍정적인 리뷰율을 받았습니다.

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.htmllogin.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로 전송하는 폼을 정의합니다. 입력 필드의 이름은 usernamepassword입니다. 이는 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 스크립트는 제출된 usernametestuser이고 passwordpassword인지 확인합니다. 일치하면 "Login successful!"을 출력합니다. 그렇지 않으면 "Invalid username or password"를 출력합니다.

이 스크립트에서 실패 문자열을 식별할 수 있습니다: "Invalid username or password". 이는 Hydra 가 로그인 시도가 실패했는지 확인하기 위해 응답에서 찾을 문자열입니다.

로그인 폼 및 PHP 스크립트 스크린샷

이제 폼의 구조와 실패 메시지를 이해했으므로 다음 단계에서 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 명령 실행

이제 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 계정에 대한 올바른 비밀번호를 성공적으로 식별했는지 두 가지 방법으로 검증합니다.

  1. 먼저 Hydra 출력을 검토합니다.
[8080][http-post-form] host: 0.0.0.0   login: testuser   password: password

이 줄은 Hydra 가 유효한 자격 증명, 즉 사용자 이름 testuser와 비밀번호 password를 찾았음을 나타냅니다.

  1. 둘째, 웹 인터페이스에서 이러한 자격 증명을 수동으로 확인합니다.

LabEx 환경에서 로그인 폼에 액세스하려면:

  1. 상단 메뉴 모음에서 "Web 8080" 탭을 클릭합니다.
  2. 주소 표시줄에서 현재 URL 끝에 /login.html을 추가합니다.
  3. Hydra 가 발견한 자격 증명을 입력합니다.
    • 사용자 이름: testuser
    • 비밀번호: password
  4. "Login" 버튼을 클릭합니다.
Hydra 공격 후 성공적인 로그인 스크린샷

폼을 제출한 후 "Login successful!"이 표시되면 Hydra 가 찾은 자격 증명이 실제로 올바른 것임을 확인합니다.

성공 메시지가 표시되지 않으면 다음을 확인하기 위해 이전 단계를 검토하십시오.

  • ~/projectpassword.txt 파일에 비밀번호 password가 포함되어 있는지 확인합니다.
  • ~/projectlogin.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 를 사용하는 기본적인 이해를 제공합니다.