Gobuster 스캔을 위한 사용자 지정 User-Agent 설정

Beginner
지금 연습하기

소개

웹 보안에서 정찰 (reconnaissance) 은 매우 중요한 첫 단계입니다. Gobuster 와 같은 도구는 디렉토리 및 파일 열거 (enumeration) 에 널리 사용됩니다. 하지만 많은 웹 서버와 웹 애플리케이션 방화벽 (WAF) 은 의심스러운 User-Agent 문자열을 가진 요청을 차단하는 것과 같은 간단한 탐지 메커니즘을 사용합니다. 기본적으로 Gobuster 는 쉽게 식별될 수 있는 User-Agent 문자열을 사용합니다.

이 실습에서는 Gobuster 스캔에 사용자 지정 User-Agent 문자열을 설정하는 방법을 배우게 됩니다. 이 기법은 간단한 탐지 메커니즘을 우회하는 데 도움이 되며, 정찰 노력을 더욱 은밀하게 만들어 잠재적으로 더 많은 숨겨진 디렉토리와 파일을 발견할 수 있도록 합니다.

User-Agent 문자열의 목적 이해하기

이 단계에서는 User-Agent 문자열이 무엇인지, 그리고 웹 요청에서 왜 중요한지에 대해 배우게 됩니다.

User-Agent 문자열은 클라이언트 (웹 브라우저 또는 Gobuster 와 같은 도구) 가 웹 서버로 보내는 헤더입니다. 일반적으로 클라이언트의 애플리케이션 유형, 운영 체제, 소프트웨어 공급업체 및 소프트웨어 버전에 대한 정보를 포함합니다. 웹 서버는 이 정보를 사용하여 클라이언트에 최적화된 콘텐츠를 제공하거나 클라이언트 통계를 기록하는 데 사용합니다.

Gobuster 와 같은 보안 도구의 경우, 기본 User-Agent 문자열은 종종 도구의 신원을 노출하여 WAF 또는 침입 탐지 시스템 (IDS) 을 트리거할 수 있습니다. 예를 들어, Gobuster 의 기본 User-Agent 는 gobuster/3.1.0과 유사하게 보일 수 있습니다.

이제 사용자 지정 User-Agent 없이 기본적인 Gobuster 스캔을 수행하여 기본 동작을 살펴보겠습니다. 백그라운드에서 설정된 로컬 웹 서버를 스캔할 것입니다.

먼저 프로세스를 확인하여 웹 서버가 실행 중인지 확인합니다.

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

서버가 실행 중임을 나타내는 다음과 유사한 출력을 볼 수 있습니다.

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

이제 포트 8080 의 로컬 서버를 대상으로 간단한 Gobuster 스캔을 실행합니다. 시연을 위해 작은 단어 목록 (wordlist) 을 사용하겠습니다.

gobuster dir -u http://127.0.0.1:8080 -w /usr/share/wordlists/dirb/common.txt -q -x html,txt -t 10
  • -u http://127.0.0.1:8080: 대상 URL 을 지정합니다.
  • -w /usr/share/wordlists/dirb/common.txt: 사용할 단어 목록을 지정합니다.
  • -q: 조용한 모드 (Quiet mode), 결과만 출력합니다.
  • -x html,txt: 찾을 확장자를 지정합니다.
  • -t 10: 동시 스레드 수를 10 으로 설정합니다.

발견된 디렉토리와 파일을 보여주는 다음과 유사한 출력을 볼 수 있습니다.

/admin                (Status: 200)
/secret               (Status: 200)
/backup               (Status: 200)

이 스캔은 작동하지만, Gobuster 에서 사용되는 User-Agent 는 기본값이므로 WAF 에 의해 쉽게 차단될 수 있습니다.

일반적인 브라우저 User-Agent 문자열 찾기

이 단계에서는 Gobuster 스캔을 일반 브라우저에서 오는 것처럼 위장하는 데 사용할 수 있는 일반적인 브라우저 User-Agent 문자열을 찾는 방법을 배우게 됩니다.

Gobuster 스캔이 합법적인 웹 브라우저에서 오는 것처럼 보이게 하려면, 일반적인 브라우저가 보낼 User-Agent 문자열을 사용해야 합니다. 이러한 문자열은 다음을 통해 찾을 수 있습니다.

  1. 브라우저 개발자 도구에서 네트워크 요청 검사: 웹사이트를 탐색할 때 브라우저의 개발자 도구 (일반적으로 F12) 를 열고 "네트워크 (Network)" 탭으로 이동하여 모든 요청의 헤더를 검사합니다.
  2. 온라인 검색: 많은 웹사이트에서 일반적인 User-Agent 문자열 목록을 컴파일합니다.

이 실습에서는 Windows 환경의 최신 Chrome 버전에 대한 일반적인 User-Agent 문자열을 사용해 보겠습니다. Chrome 의 일반적인 User-Agent 문자열은 다음과 같이 보일 수 있습니다.

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36

이 문자열은 다음을 나타냅니다.

  • Mozilla/5.0: 많은 브라우저가 역사적인 이유로 포함하는 일반적인 토큰입니다.
  • (Windows NT 10.0; Win64; x64): 운영 체제 정보 (Windows 10, 64 비트) 입니다.
  • AppleWebKit/537.36 (KHTML, like Gecko): 렌더링 엔진 정보 (WebKit, KHTML 호환성 포함) 입니다.
  • Chrome/120.0.0.0: 브라우저 이름 및 버전입니다.
  • Safari/537.36: WebKit 기반 브라우저에 종종 포함되는 또 다른 역사적인 토큰입니다.

다음 단계에서 직접 이 문자열을 복사할 수 있습니다. 명령줄에서 User-Agent 문자열을 사용할 때는 공백이나 특수 문자가 포함된 경우 특히 따옴표로 묶는 것이 중요합니다.

-a 플래그를 사용하여 사용자 지정 User-Agent 설정하기

이 단계에서는 Gobuster 에서 -a 플래그를 사용하여 스캔에 대한 사용자 지정 User-Agent 문자열을 설정하는 방법을 배우게 됩니다.

Gobuster 는 이 목적을 위해 특별히 -a 플래그 (또는 --agent) 를 제공합니다. 원하는 User-Agent 문자열을 이 플래그의 인수로 전달하기만 하면 됩니다.

이전 단계에서 식별한 사용자 지정 User-Agent 문자열로 Gobuster 명령을 준비해 보겠습니다. 동일한 대상과 단어 목록을 사용합니다.

CUSTOM_USER_AGENT="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
echo "Using custom User-Agent: $CUSTOM_USER_AGENT"

이제 Gobuster 명령을 구성합니다. -a 플래그가 어떻게 사용되는지 주목하십시오.

gobuster dir -u http://127.0.0.1:8080 -w /usr/share/wordlists/dirb/common.txt -a "$CUSTOM_USER_AGENT" -q -x html,txt -t 10
  • -a "$CUSTOM_USER_AGENT": 이것이 새로운 부분으로, 사용자 지정 User-Agent 문자열을 전달합니다. 문자열에 공백이 포함되어 있으므로 $CUSTOM_USER_AGENT 주변의 따옴표는 필수적입니다.

실행하기 전에 이것이 만드는 차이를 고려하십시오. -a 플래그가 없으면 웹 서버는 "gobuster"로부터의 요청을 보게 됩니다. -a 플래그를 사용하면 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"으로부터의 요청을 보게 되는데, 이는 합법적인 브라우저처럼 보입니다.

새 User-Agent 로 스캔 실행하기

이 단계에서는 사용자 지정 User-Agent 문자열을 사용하여 Gobuster 스캔을 실행하고 결과를 관찰합니다.

이제 사용자 지정 User-Agent 로 Gobuster 명령을 실행합니다. 스캔 자체의 출력은 이전 스캔과 유사하게 보일 것입니다. User-Agent 는 서버가 요청을 인식하는 방식에만 영향을 미치며, 스캔 결과 자체에는 영향을 미치지 않기 때문입니다 (서버가 기본 User-Agent 를 차단하지 않는 한).

명령을 실행합니다.

CUSTOM_USER_AGENT="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
gobuster dir -u http://127.0.0.1:8080 -w /usr/share/wordlists/dirb/common.txt -a "$CUSTOM_USER_AGENT" -q -x html,txt -t 10

동일한 디렉토리와 파일이 발견되는 것을 볼 수 있습니다.

/admin                (Status: 200)
/secret               (Status: 200)
/backup               (Status: 200)

출력은 동일하지만, 중요한 차이점은 실제 시나리오에서 WAF(Web Application Firewall) 또는 IDS(Intrusion Detection System) 가 있는 경우, 이 스캔은 Gobuster 의 기본 User-Agent 를 사용하는 스캔에 비해 의심스러운 것으로 플래그가 지정될 가능성이 낮다는 것입니다. 이는 탐지를 피하기 위한 윤리적 해킹 및 침투 테스트의 기본적인 기법입니다.

간단한 필터 우회에 도움이 되는 이유 논의하기

이 단계에서는 사용자 지정 User-Agent 를 설정하는 것이 간단한 필터 및 탐지 메커니즘을 우회하는 효과적인 기법이 될 수 있는 이유를 논의합니다.

많은 웹 애플리케이션 방화벽 (WAF), 침입 탐지 시스템 (IDS) 및 기본 서버 구성조차도 의심스러운 트래픽을 식별하고 차단하는 규칙을 사용합니다. 가장 간단하고 일반적인 규칙 중 하나는 User-Agent 문자열을 확인하는 것입니다.

사용자 지정 User-Agent 설정이 도움이 되는 이유는 다음과 같습니다.

  • User-Agent 기반 차단 우회: WAF 에 "gobuster", "nmap", "sqlmap" 또는 기타 알려진 보안 도구와 같은 User-Agent 를 가진 요청을 차단하는 규칙이 있는 경우, 일반 브라우저 User-Agent 를 사용하면 해당 특정 규칙에 의해 탐지되지 않고 요청을 통과시킬 수 있습니다.
  • 의심 감소: 로그를 검토하는 서버 관리자는 비정상적인 User-Agent(gobuster/3.1.0 등) 로부터 오는 많은 양의 요청을 발견할 수 있습니다. 일반 브라우저를 모방함으로써 요청이 합법적인 사용자 트래픽과 혼합되어 수동 조사되거나 자동으로 플래그가 지정될 가능성이 줄어듭니다.
  • 속도 제한 우회 (일부 경우): User-Agent 와 직접적인 관련은 없지만, 일부 시스템은 비브라우저 User-Agent 에 더 엄격한 속도 제한을 적용할 수 있습니다. 브라우저로 보이게 함으로써 이러한 더 엄격한 제한을 피하여 스캔을 더 빠르거나 완전하게 진행할 수 있습니다.

이 기법은 간단한 필터에 효과적이라는 점에 유의하는 것이 중요합니다. 더 정교한 WAF 및 IDS 는 여러 요인 (예: 요청 패턴, IP 평판, 행동 분석) 을 조합하여 악의적인 활동을 탐지하므로, 사용자 지정 User-Agent 만으로는 고급 방어를 우회하기에 충분하지 않을 수 있습니다. 그러나 은밀한 정찰에서 기본적이면서도 종종 필요한 첫 번째 단계입니다.

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

pkill -f "python3 -m http.server 8080"

이 명령은 Python 웹 서버를 실행하는 프로세스를 찾아 종료합니다.

요약

이 실습에서는 웹 요청에서 User-Agent 문자열의 중요성과 Gobuster 와 같은 보안 도구에서 이를 어떻게 사용할 수 있는지 배웠습니다. 일반 브라우저 User-Agent 문자열을 성공적으로 식별했으며, 가장 중요하게는 Gobuster 의 -a 플래그를 사용하여 스캔에 사용자 지정 User-Agent 를 설정했습니다. 이 실용적인 기술은 정찰 노력을 더 은밀하고 효과적으로 만드는 데 중요하며, 간단한 탐지 메커니즘을 우회하고 합법적인 웹 트래픽과 혼합하는 데 도움이 됩니다.