Gobuster 의 유연한 퍼징 모드 사용하기

Beginner
지금 연습하기

소개

이 랩에서는 인기 있는 디렉토리 및 파일 무차별 대입 도구인 Gobuster 의 유연한 퍼징 (fuzzing) 기능을 탐색합니다. Gobuster 는 일반적으로 dir 모드로 알려져 있지만, fuzz 모드는 URL 의 다양한 부분에 페이로드 (payload) 를 주입하여 숨겨진 웹 콘텐츠를 발견하는 강력한 방법을 제공합니다. FUZZ 키워드를 사용하여 URL 을 구성하고, 사용자 정의 워드리스트 (wordlist) 를 제공하며, 퍼징 스캔을 실행하고, 결과를 해석하여 웹 서버의 잠재적 취약점이나 숨겨진 리소스를 식별하는 방법을 배우게 됩니다. 이 실습 경험은 침투 테스트 및 보안 평가에 필수적인 웹 열거 (enumeration) 기술을 향상시킬 것입니다.

fuzz 모드와 FUZZ 키워드의 목적 이해하기

이 단계에서는 Gobuster 의 fuzz 모드와 FUZZ 키워드의 중요성에 대해 배웁니다. 주로 디렉토리 및 파일 이름을 무차별 대입하는 dir 모드와 달리, fuzz 모드를 사용하면 URL 내의 임의 위치에 페이로드를 주입할 수 있습니다. FUZZ 키워드는 Gobuster 가 제공된 워드리스트의 각 항목을 삽입할 자리 표시자 역할을 합니다. 이러한 유연성을 통해 URL 의 경로 세그먼트, 파일 확장자 또는 쿼리 매개변수와 같은 다양한 부분을 테스트하여 숨겨진 콘텐츠나 취약점을 찾을 수 있습니다.

예를 들어, http://localhost:8000/ 아래의 숨겨진 디렉토리를 찾고 싶다면 http://localhost:8000/FUZZ와 같은 URL 을 사용하게 됩니다. 그러면 Gobuster 는 FUZZ를 워드리스트의 각 단어로 대체합니다.

이제 Gobuster 가 설치되어 환경에서 접근 가능한지 확인해 보겠습니다.

gobuster version

다음과 유사한 출력이 표시되어 Gobuster 버전을 확인할 수 있습니다.

Gobuster v3.x.x

경로에 FUZZ 키워드를 포함한 URL 구성하기

이 단계에서는 FUZZ 키워드를 포함하는 대상 URL 을 구성합니다. 이 키워드는 퍼징 과정 중에 Gobuster 가 워드리스트 항목을 어디에 삽입해야 하는지를 알려줍니다. 이 랩에서는 로컬 포트 8000에서 실행되는 간단한 HTTP 서버를 대상으로 할 것입니다. 숨겨진 디렉토리나 파일을 찾기 위해 경로 세그먼트에 FUZZ 키워드를 배치할 것입니다.

gobuster fuzz의 기본 구문은 gobuster fuzz -u <FUZZ가 포함된 URL> -w <워드리스트>입니다.

대상 서버의 기본 URL 을 정의해 보겠습니다. 서버는 http://localhost:8000에서 실행 중입니다. 루트 바로 아래의 숨겨진 경로를 찾고 싶으므로, 퍼징할 URL 은 http://localhost:8000/FUZZ가 됩니다.

서버가 실행 중인지 확인하기 위해 기본 URL 에 액세스해 볼 수 있습니다.

curl http://localhost:8000/

index.html의 내용을 볼 수 있습니다.

Hello from index.html

이제 명령 구조를 준비해 보겠습니다. 아직 실행하지는 않겠지만, URL 이 올바르게 형성되었는지 확인할 것입니다.

echo "The fuzzed URL will be: http://localhost:8000/FUZZ"

이 명령은 단순히 URL 문자열을 출력하여 FUZZ 키워드를 배치하는 방법에 대한 이해를 확인합니다.

-w 플래그를 사용하여 페이로드 워드리스트 제공하기

이 단계에서는 퍼징 과정 중에 Gobuster 가 사용할 워드리스트를 지정하는 방법을 배웁니다. -w 플래그는 워드리스트 파일의 경로를 제공하는 데 사용됩니다. 이 파일의 각 줄은 대상 URL 의 FUZZ 키워드를 대체하는 데 사용됩니다.

이 랩에서는 설정 단계에서 ~/project 디렉토리에 fuzz_wordlist.txt라는 간단한 워드리스트가 생성되었습니다. 이 워드리스트에는 더미 웹 서버의 기존 및 존재하지 않는 경로에 해당하는 몇 가지 항목이 포함되어 있습니다.

워드리스트의 내용을 검사하여 어떤 페이로드가 사용될지 이해해 보겠습니다.

cat ~/project/fuzz_wordlist.txt

다음과 같은 내용을 볼 수 있습니다.

secret_dir
admin_panel
test_page.html
nonexistent

이제 Gobuster 가 시도할 페이로드를 알게 되었습니다. 스캔을 실행하면 Gobuster 는 http://localhost:8000/secret_dir, http://localhost:8000/admin_panel 등과 같은 URL 에 액세스하려고 시도합니다.

gobuster fuzz 스캔 실행하기

이 단계에서는 이전 단계에서 배운 모든 지식을 종합하여 gobuster fuzz 스캔을 실행합니다. 2 단계에서 구성한 퍼징 URL 과 3 단계에서 지정한 워드리스트를 사용합니다.

전체 명령은 다음과 같습니다.

gobuster fuzz -u http://localhost:8000/FUZZ -w ~/project/fuzz_wordlist.txt

명령을 분석해 보겠습니다.

  • gobuster fuzz: Gobuster 를 퍼징 모드로 호출합니다.
  • -u http://localhost:8000/FUZZ: FUZZ 플레이스홀더가 있는 대상 URL 을 지정합니다.
  • -w ~/project/fuzz_wordlist.txt: 페이로드가 포함된 워드리스트의 경로를 제공합니다.

이제 터미널에서 명령을 실행합니다.

gobuster fuzz -u http://localhost:8000/FUZZ -w ~/project/fuzz_wordlist.txt

Gobuster 가 워드리스트를 반복하고 각 시도에 대한 상태 코드를 보고하는 것을 볼 수 있습니다.

===============================================================
Gobuster v3.x.x
===============================================================
[+] Url:            http://localhost:8000/FUZZ
[+] Wordlist:       /home/labex/project/fuzz_wordlist.txt
[+] Threads:        10
[+] Timeout:        10s
===============================================================
2024/01/01 12:00:00 Starting gobuster in fuzz mode
===============================================================
http://localhost:8000/secret_dir (Status: 200)
http://localhost:8000/admin_panel (Status: 200)
http://localhost:8000/test_page.html (Status: 200)
http://localhost:8000/nonexistent (Status: 404)
===============================================================
2024/01/01 12:00:00 Finished
===============================================================

secret_dir, admin_panel, test_page.html에 대한 (Status: 200)은 이러한 경로가 존재하고 성공적인 응답을 반환했음을 나타냅니다. nonexistent에 대한 (Status: 404)는 예상대로 해당 경로를 찾을 수 없음을 나타냅니다.

유연한 퍼징 결과 분석하기

이 마지막 단계에서는 gobuster fuzz 스캔의 출력을 분석하여 무엇을 발견했는지 이해합니다. 퍼징의 주요 목표는 리소스의 존재를 나타내는 유효한 응답 (일반적으로 200 OK, 301 Moved Permanently 등과 같은 HTTP 상태 코드) 을 식별하는 것입니다.

이전 단계의 출력에서 다음과 유사한 줄을 관찰했을 것입니다.

http://localhost:8000/secret_dir (Status: 200)
http://localhost:8000/admin_panel (Status: 200)
http://localhost:8000/test_page.html (Status: 200)
http://localhost:8000/nonexistent (Status: 404)
  • http://localhost:8000/secret_dir (Status: 200): 이는 웹 루트 아래에 secret_dir이라는 디렉토리가 존재함을 나타냅니다. curl을 사용하여 액세스해 볼 수 있습니다.

    curl http://localhost:8000/secret_dir/hidden_file.txt
    

    다음과 같은 내용을 볼 수 있습니다.

    Secret content
    
  • http://localhost:8000/admin_panel (Status: 200): 이는 admin_panel 디렉토리가 존재함을 시사합니다.

    curl http://localhost:8000/admin_panel/login.php
    

    다음과 같은 내용을 볼 수 있습니다.

    Admin login
    
  • http://localhost:8000/test_page.html (Status: 200): 이는 test_page.html이라는 파일이 존재함을 나타냅니다.

    curl http://localhost:8000/test_page.html
    

    다음과 같은 내용을 볼 수 있습니다.

    Test page
    
  • http://localhost:8000/nonexistent (Status: 404): 이는 존재하지 않는 경로에 대해 예상되는 "찾을 수 없음" 상태입니다. 이는 Gobuster 가 존재하지 않는 리소스를 올바르게 식별하고 있음을 확인하는 데 도움이 됩니다.

상태 코드를 분석함으로써 기본 웹사이트에서 직접 연결되지 않을 수 있는 숨겨진 디렉토리, 파일 또는 기타 리소스를 효과적으로 식별할 수 있습니다. 이는 보안 평가 중 정보 수집 단계에서 중요한 단계입니다.

요약

이 실습에서는 Gobuster 의 유연한 퍼징 모드를 사용하는 방법을 성공적으로 배웠습니다. 워드리스트에서 페이로드를 주입하기 위한 플레이스홀더로서 FUZZ 키워드의 역할을 이해했습니다. 퍼징된 URL 을 구성하고, 사용자 정의 워드리스트를 제공하고, gobuster fuzz 스캔을 실행하고, 결과를 분석하여 기존 웹 리소스를 식별했습니다. 이 실습 경험은 웹 열거를 위한 Gobuster 의 퍼징 기능의 강력함과 다재다능함을 보여주었으며, 이는 사이버 보안 및 침투 테스트의 기본 기술입니다. 이제 이러한 기술을 다양한 웹 애플리케이션에서 숨겨진 콘텐츠를 발견하는 데 적용할 수 있습니다.