Gobuster 퍼즈 모드에서 응답 길이별 결과 제외

Beginner
지금 연습하기

소개

Gobuster 는 디렉토리 및 파일 무차별 대입 (brute-forcing), DNS 서브도메인 무차별 대입, S3 버킷 열거에 사용되는 강력한 도구입니다. 퍼징 (fuzzing) 작업을 수행할 때, 특히 웹 서버를 대상으로 할 때, 많은 "잡음 (noisy)" 결과를 마주치는 것이 일반적입니다. 이러한 결과에는 종종 존재하지 않는 경로에 대한 응답이 포함되며, 이는 일관된 HTTP 상태 코드 (예: 404 Not Found) 와 결정적으로 일관된 응답 본문 길이 (response body length) 를 반환합니다. 이는 출력을 복잡하게 만들고 실제 발견 사항을 식별하기 어렵게 만듭니다.

이 랩에서는 퍼즈 모드 (fuzz mode) 에서 Gobuster 의 --exclude-length 플래그를 활용하는 방법을 배우게 됩니다. 이 기능은 무시할 하나 이상의 응답 본문 길이를 지정할 수 있게 하여, 이러한 잡음 결과를 효과적으로 필터링합니다. 이 랩이 끝날 때쯤이면 관련 응답에만 집중하여 더 목표 지향적이고 효율적인 퍼징 스캔을 수행할 수 있게 될 것입니다.

퍼즈 스캔 실행 및 잘못된 요청에 대한 일반적인 응답 크기 식별

이 단계에서는 로컬 웹 서버를 대상으로 초기 Gobuster 퍼즈 스캔을 수행합니다. 이를 통해 일반적인 출력, 특히 "잡음" 결과를 나타내는 존재하지 않는 경로에 대한 응답 길이를 관찰할 수 있습니다.

먼저 웹 서버가 실행 중인지 확인합니다. 프로세스가 활성 상태인지 확인할 수 있습니다.

ps aux | grep "python3 -m http.server 8000" | grep -v grep

서버가 실행 중임을 나타내는 다음과 유사한 출력이 표시되어야 합니다.

labex       1234  0.0  0.0  12345  6789 ?        Sl   HH:MM   0:00 python3 -m http.server 8000 --directory /tmp/web_root

이제 설정에서 생성된 단어 목록 (wordlist) 을 사용하여 Gobuster 퍼즈 스캔을 실행합니다. http://127.0.0.1:8000을 대상으로 합니다.

gobuster fuzz -u http://127.0.0.1:8000/FUZZ -w /tmp/wordlist.txt

출력을 관찰합니다. 동일한 상태 코드 (예: 404) 와 더 중요하게는 동일한 길이를 가진 여러 항목을 발견하게 될 것입니다. 잘못된 요청에 대한 이러한 일관된 길이는 다음 단계에서 제외할 대상입니다. 예를 들어, nonexistentpath123anothernonexistentpath는 동일한 길이를 보여야 합니다.

/index.html           (Status: 200) [Size: 19]
/admin                (Status: 404) [Size: 19]
/login                (Status: 404) [Size: 19]
/config               (Status: 404) [Size: 19]
/robots.txt           (Status: 404) [Size: 19]
/nonexistentpath123   (Status: 404) [Size: 19]
/anothernonexistentpath (Status: 404) [Size: 19]

출력에서 404(Not Found) 오류에 대한 일반적인 응답 크기를 식별합니다. 이 예에서는 19입니다. 이것이 다음 단계에서 잡음을 필터링하는 데 사용할 길이입니다.

식별된 크기를 사용하여 --exclude-length 플래그로 스캔 다시 실행

이 단계에서는 Gobuster 스캔을 다시 실행하지만, 이전 단계에서 식별한 응답 길이를 기반으로 잡음 결과를 필터링하기 위해 --exclude-length 플래그를 사용합니다.

이전 단계에서 404 오류에 대한 일반적인 응답 길이를 기억하십시오. 이 예에서는 19였습니다. 이제 Gobuster 명령에 --exclude-length 19를 추가합니다.

gobuster fuzz -u http://127.0.0.1:8000/FUZZ -w /tmp/wordlist.txt --exclude-length 19

명령을 실행하고 출력을 관찰합니다.

잡음 결과가 필터링되는 방식 관찰

이전 단계에서 명령을 실행한 후 출력에서 상당한 차이를 즉시 알 수 있어야 합니다. 제외된 길이에 해당하는 항목 (예: 길이가 19 인 404 응답) 은 더 이상 나타나지 않아야 합니다.

이 스캔의 출력과 1 단계의 출력을 비교합니다.

예상 출력:

/index.html           (Status: 200) [Size: 19]

이 특정 설정에서는 404 페이지도 길이가 19 인 제한이 있지만 (실제 시나리오에서는 404 페이지가 유효한 페이지와 다른 길이를 갖는 경우가 많음), 다른 콘텐츠 길이를 가진 200 OK 상태를 반환한 유일한 항목이므로 /index.html 항목만 표시되어야 합니다. 핵심은 지정된 길이를 가진 모든 응답이 이제 필터링된다는 것입니다.

이를 통해 --exclude-length 플래그가 얼마나 효과적으로 잡음을 줄여 잠재적으로 흥미로운 결과를 집중할 수 있는지 보여줍니다.

여러 길이의 쉼표로 구분된 목록으로 제외 항목 개선

때때로 웹 서버는 다양한 유형의 "찾을 수 없음" 또는 "잘못된" 요청에 대해 다른 응답 길이를 반환할 수 있습니다. Gobuster 는 --exclude-length 플래그에 쉼표로 구분된 목록을 제공하여 여러 길이를 제외할 수 있도록 합니다.

이를 시연하기 위해 서버가 길이가 1950인 404 페이지를 반환할 수 있다고 가정해 보겠습니다. 다른 크기의 새 파일을 웹 루트에 추가하여 이를 시뮬레이션합니다.

먼저 다른 크기의 새 파일을 웹 루트에 추가합니다.

echo "This is a test page with a different length." > /tmp/web_root/testpage.html

이제 testpage.html을 단어 목록에 추가합니다.

echo "testpage.html" >> /tmp/wordlist.txt

다시 스캔을 실행하지만 이번에는 1939( testpage.html의 길이는 39) 를 모두 제외한다고 가정합니다.

gobuster fuzz -u http://127.0.0.1:8000/FUZZ -w /tmp/wordlist.txt --exclude-length 19,39

출력을 관찰합니다. 원래 404 응답 (길이 19) 과 testpage.html 응답 (길이 39) 이 모두 제외된 것을 볼 수 있어야 합니다.

정리된 출력을 분석하여 흥미로운 결과 찾기

이 마지막 단계에서는 --exclude-length 플래그를 사용하여 생성된 정리된 출력을 분석합니다. 목표는 이 필터링이 퍼징 작업 중에 실제로 흥미로운 결과를 식별하는 데 어떻게 도움이 되는지 이해하는 것입니다.

이전 단계에서 명령을 실행한 후 출력은 더욱 간결해져야 합니다. 제외 목록에 없는 상태 코드와 길이를 반환하는 단어 목록의 다른 경로가 있었다면 이제 눈에 띄게 될 것입니다.

예를 들어, 고유한 길이로 200 OK 를 반환하는 /secret_admin_panel과 같은 경로가 있었다면 필터링된 출력에서 명확하게 보일 것입니다. 반면 필터링되지 않은 스캔에서 수백 개의 404 사이에 묻혔을 수 있습니다.

현재 설정에서는 1939가 제외되고 index.html의 길이가 19이므로 모든 항목이 이제 제외되었으므로 출력이 비어 있어야 합니다. 이는 정확한 필터링의 힘을 보여줍니다.

이 기술은 대규모 단어 목록이 압도적인 양의 관련 없는 데이터를 생성할 수 있는 실제 침투 테스트 및 버그 바운티 사냥에서 매우 중요합니다. 일반적인 "잡음" 길이를 체계적으로 제외함으로써 스캔 결과 검토에 필요한 수동 노력을 크게 줄이고 숨겨진 디렉터리 또는 파일을 발견할 가능성을 높일 수 있습니다.

환경을 정리하려면 Python 웹 서버를 중지할 수 있습니다.

kill $(cat /tmp/web_server_pid)

이것으로 실습을 마칩니다. Gobuster 의 --exclude-length 플래그를 사용하여 퍼징 스캔을 개선하는 방법을 성공적으로 배웠습니다.

요약

이 실습에서는 퍼즈 모드에서 Gobuster 의 --exclude-length 플래그를 사용하는 실질적인 경험을 쌓았습니다. 먼저 초기 스캔을 수행하여 잘못된 요청에 대한 일반적인 응답 길이를 식별했으며, 이는 종종 노이즈를 나타냅니다. 그런 다음 단일 길이로 --exclude-length 플래그를 사용하여 이러한 관련 없는 결과를 필터링하는 방법을 배웠으며, 이는 더 깔끔한 출력을 제공합니다. 마지막으로 길이의 쉼표로 구분된 목록을 제공하여 제외를 더욱 개선하는 방법을 탐색했으며, 이는 다양한 유형의 노이즈 응답을 처리하는 데 있어 유연성을 보여주었습니다.

이 기술을 숙달하면 웹 애플리케이션 퍼징 작업의 효율성과 효과를 크게 향상시킬 수 있으며, 진정으로 흥미로운 결과에 집중하고 취약점 검색 프로세스를 가속화할 수 있습니다.