일반적인 Gobuster 연결 오류 문제 해결

Beginner
지금 연습하기

소개

이 랩에서는 디렉토리 및 파일 무차별 대입 (brute-forcing) 을 위한 강력한 도구인 Gobuster 를 사용할 때 발생할 수 있는 일반적인 연결 오류를 식별하고 해결하는 실질적인 경험을 쌓게 됩니다. 이러한 오류를 이해하는 것은 효과적인 웹 열거 (enumeration) 및 침투 테스트에 매우 중요합니다. 다양한 네트워크 시나리오를 시뮬레이션하고, Gobuster 의 동작을 관찰하며, 오류 메시지를 해석하여 스캔 전략을 조정하는 방법을 배우게 됩니다. 이러한 실습 접근 방식은 실제 시나리오에서 Gobuster 문제를 효율적으로 해결하는 기술을 갖추게 해 줄 것입니다.

"연결 거부됨" 오류 시뮬레이션: 닫힌 포트 대상 지정

이 단계에서는 "연결 거부됨 (Connection Refused)" 오류를 시뮬레이션합니다. 이 오류는 일반적으로 Gobuster 가 대상 호스트 및 포트에 연결을 시도하지만 해당 포트에서 수신 대기 중인 서비스가 없거나 방화벽이 연결을 적극적으로 거부할 때 발생합니다. 존재하지 않는 포트를 일반 웹사이트에 대상으로 지정하여 이 오류를 발생시킬 것입니다.

터미널을 열고 다음 gobuster 명령을 실행합니다. 연결 거부 오류를 확실히 보기 위해 example.com을 높은 포트 (예: 65530) 로 지정합니다. 또한 작은 단어 목록 (wordlist) 을 사용하여 오류를 빠르게 확인합니다.

gobuster dir -u http://example.com:65530 -w /usr/share/wordlists/dirb/common.txt -t 1 -k -q
  • -u http://example.com:65530: 닫힌 포트로 대상 URL 을 지정합니다.
  • -w /usr/share/wordlists/dirb/common.txt: 작고 일반적인 단어 목록을 사용합니다.
  • -t 1: 동시 스레드 수를 1 로 설정하여 오류를 더 명확하게 합니다.
  • -k: SSL 인증서 검증을 건너뜁니다 (여기서는 엄격히 필요하지 않지만 일반적인 웹 스캔에 좋은 습관입니다).
  • -q: 배너 및 진행률 출력을 억제하여 오류에 집중합니다.

다음과 유사한 출력을 관찰하게 되며, 이는 연결 거부 오류를 나타냅니다.

[!] Could not connect to http://example.com:65530: dial tcp XX.XX.XX.XX:65530: connect: connection refused

이 출력은 대상에서 연결이 적극적으로 거부되었기 때문에 Gobuster 가 연결을 설정할 수 없었음을 명확하게 보여줍니다.

"타임아웃" 오류 시뮬레이션: 낮은 --timeout 으로 느린 서버 대상 지정

이 단계에서는 "타임아웃 (Timeout)" 오류를 시뮬레이션합니다. 타임아웃은 Gobuster 가 서버에 연결하거나 데이터를 송수신하려고 시도하지만, 작업이 지정된 타임아웃 기간보다 오래 걸릴 때 발생합니다. 이는 느린 서버, 네트워크 혼잡 또는 서버가 의도적으로 응답을 지연시키는 경우에 발생할 수 있습니다. 공개된 "느린 서버 (slow server)" 엔드포인트를 사용하고 매우 낮은 타임아웃 값을 설정하여 이 오류를 강제로 발생시킬 것입니다.

다음 gobuster 명령을 실행합니다. 1 초의 지연을 유발하는 http://slowwly.robertomurray.co.uk/delay/1000/url/http://www.google.com을 대상으로 하고, gobuster 타임아웃을 500ms(0.5 초) 로 설정합니다.

gobuster dir -u http://slowwly.robertomurray.co.uk/delay/1000/url/http://www.google.com -w /usr/share/wordlists/dirb/common.txt -t 1 --timeout 500ms -k -q
  • -u http://slowwly.robertomurray.co.uk/delay/1000/url/http://www.google.com: 지연을 유발하는 URL 입니다.
  • --timeout 500ms: 연결 타임아웃을 500 밀리초로 설정합니다. 서버가 1000ms 동안 지연되므로 이로 인해 타임아웃이 발생합니다.

다음과 유사한 출력을 보게 되며, 이는 타임아웃 오류를 나타냅니다.

[!] Could not connect to http://slowwly.robertomurray.co.uk/delay/1000/url/http://www.google.com: Get "http://slowwly.robertomurray.co.uk/delay/1000/url/http://www.google.com/admin": context deadline exceeded (Client.Timeout exceeded while awaiting headers)

이는 응답을 받기 전에 Gobuster 의 연결 시도가 타임아웃되었음을 보여줍니다.

DNS 오류 이해: 존재하지 않는 도메인 대상 지정

이 단계에서는 DNS 오류를 접하게 됩니다. 이 유형의 오류는 Gobuster 가 대상 URL 의 호스트 이름을 IP 주소로 확인하지 못할 때 발생합니다. 이는 일반적으로 도메인 이름이 잘못 입력되었거나, 존재하지 않거나, DNS 확인자 (resolver) 에 문제가 있는 경우에 발생합니다.

명백히 존재하지 않는 도메인인 nonexistentdomain12345.com을 대상으로 하는 다음 gobuster 명령을 실행합니다.

gobuster dir -u http://nonexistentdomain12345.com -w /usr/share/wordlists/dirb/common.txt -t 1 -k -q
  • -u http://nonexistentdomain12345.com: 확인되지 않아야 하는 도메인을 대상으로 합니다.

다음과 유사한 출력을 관찰하게 되며, 이는 DNS 조회 실패를 나타냅니다.

[!] Could not connect to http://nonexistentdomain12345.com: dial tcp: lookup nonexistentdomain12345.com: no such host

no such host라는 오류 메시지는 도메인 이름이 DNS 시스템에 의해 확인될 수 없었음을 명확하게 나타냅니다.

"--no-error" 플래그를 사용하여 이러한 메시지 억제하기

이 단계에서는 Gobuster 에서 --no-error 플래그를 사용하는 방법을 배웁니다. 오류를 이해하는 것은 문제 해결에 중요하지만, 때로는 특히 몇 가지 연결 문제가 예상되고 성공적인 결과에만 관심이 있는 대규모 스캔 중에 상세한 오류 메시지를 억제하고 싶을 수 있습니다. --no-error 플래그는 Gobuster 에게 연결 오류를 출력하지 않도록 지시합니다.

1 단계의 명령을 다시 실행하되, 이번에는 --no-error 플래그를 추가합니다.

gobuster dir -u http://example.com:65530 -w /usr/share/wordlists/dirb/common.txt -t 1 -k -q --no-error

연결이 여전히 거부되고 있음에도 불구하고 Gobuster 는 콘솔에 [!] Could not connect... 메시지를 출력하지 않는다는 점에 주목하십시오. 출력은 훨씬 깔끔해지며, 성공적인 결과 (있는 경우, 닫힌 포트의 경우 가능성이 낮음) 또는 최종 요약만 표시할 수 있습니다.

## 연결 거부에 대한 오류 메시지가 표시되지 않습니다.

이 플래그는 연결 오류 로그에 압도되지 않고 스캔의 성공적인 결과에만 집중하고 싶을 때 유용합니다.

오류 해석을 통해 스캔 파라미터 조정하기

이 단계에서는 Gobuster 오류를 해석하는 방법을 이해하고, 그 지식을 활용하여 더 효과적인 결과를 얻기 위해 스캔 파라미터를 조정하는 방법을 배우게 됩니다. 핵심은 다양한 오류가 다양한 해결책을 제시한다는 것입니다.

  • "Connection Refused" (연결 거부): 이는 해당 포트에서 서비스가 실행되지 않거나, 방화벽이 차단하고 있거나, 호스트가 다운되었음을 의미하는 경우가 많습니다.
    • 조치: 대상 URL 과 포트를 다시 확인하십시오. 서비스가 있어야 한다고 확신하는 경우 방화벽 규칙이나 네트워크 연결을 조사해야 합니다. 다른 포트나 대상으로 전환해야 할 수도 있습니다.
  • "Timeout" (시간 초과): 이는 서버가 느리거나, 네트워크 지연이 높거나, 서버가 의도적으로 응답을 지연시키고 있음을 나타냅니다.
    • 조치: --timeout 값을 늘립니다 (예: --timeout 5s). 대상 또는 네트워크에 가해지는 부담을 줄이기 위해 스레드 수 (-t) 를 줄이는 것도 고려할 수 있습니다.
  • "No such host" (해당 호스트 없음) (DNS 오류): 도메인 이름을 확인할 수 없습니다.
    • 조치: 도메인 이름의 오타를 확인하십시오. DNS 설정을 확인하거나 다른 DNS 확인자를 사용해 보십시오. 도메인이 실제로 존재하지 않는다면 잘못된 대상을 지정한 것입니다.

대상을 스캔하는 동안 "Timeout" 오류가 자주 발생하는 시나리오를 생각해 봅시다. 배운 내용을 바탕으로 타임아웃을 늘려 명령을 조정할 것입니다. 예를 들어, 초기 명령이 다음과 같았다면:

gobuster dir -u http://target.com -w /usr/share/wordlists/dirb/common.txt -t 20

그리고 타임아웃이 많이 발생한다면 다음과 같이 수정할 것입니다:

gobuster dir -u http://target.com -w /usr/share/wordlists/dirb/common.txt -t 10 --timeout 5s

여기서는 스레드를 10 개로 줄이고 타임아웃을 5 초로 늘렸으며, 이는 느린 서버에 대한 요청 성공률을 높일 가능성이 높습니다.

Gobuster 를 실행하고, 오류를 관찰하고, 파라미터를 조정하는 이 반복적인 과정은 효율적인 웹 열거 (enumeration) 를 위한 기본적인 기술입니다.

요약

이 실습에서는 일반적인 Gobuster 연결 오류를 식별하고 해결하는 방법을 성공적으로 배웠습니다. "Connection Refused"(연결 거부), "Timeout"(시간 초과), DNS "No such host"(해당 호스트 없음) 오류를 시뮬레이션하고 각 오류의 근본 원인을 이해했습니다. 또한 더 깔끔한 출력을 위해 --no-error 플래그를 사용하여 오류 메시지를 억제하는 방법을 배웠습니다. 가장 중요하게는 이러한 오류를 해석하여 타임아웃 증가 또는 대상 URL 확인과 같은 Gobuster 스캔 파라미터를 효과적으로 조정하여 웹 열거 노력의 효율성과 성공률을 개선하는 방법에 대한 통찰력을 얻었습니다. 이러한 실질적인 지식은 웹 침투 테스트 또는 버그 바운티 헌팅을 수행하는 모든 사람에게 매우 중요합니다.