Gobuster 에서 쿠키를 사용한 인증된 디렉토리 스캔

Beginner
지금 연습하기

소개

웹 애플리케이션 침투 테스트 또는 보안 감사 시, 사용자가 인증을 거쳐야만 접근할 수 있는 웹사이트 영역을 자주 접하게 됩니다. Gobuster 와 같은 표준 디렉토리 스캐닝 도구는 세션을 유지하지 않기 때문에 이러한 숨겨진 경로를 놓칠 수 있습니다. 이 실험에서는 Gobuster 의 쿠키 기능을 사용하여 인증된 디렉토리 스캔을 수행하는 과정을 안내합니다. 웹 애플리케이션에서 세션 쿠키를 얻는 방법과 해당 쿠키를 Gobuster 와 함께 사용하여 인증된 섹션 내의 디렉토리 및 파일을 검색하는 방법을 배우게 됩니다. 이를 통해 애플리케이션의 공격 표면에 대한 보다 포괄적인 시각을 얻을 수 있습니다.

웹 애플리케이션에 로그인하고 세션 쿠키 얻기

이 단계에서는 웹 애플리케이션에 로그인하는 것을 시뮬레이션하고 성공적인 인증 시 설정되는 세션 쿠키를 캡처합니다. 이 쿠키는 Gobuster 가 인증된 영역에 접근하는 데 중요합니다. curl을 사용하여 로그인을 수행하고 쿠키를 추출할 것입니다.

먼저, 인증 없이 대시보드에 접근하여 리디렉션되는지 확인해 보겠습니다.

curl -v http://localhost:8080/dashboard

302 Found 응답과 함께 /로 리디렉션되는 것을 볼 수 있습니다. 이제 로그인해 보겠습니다. 웹 애플리케이션은 http://localhost:8080/에 사용자 이름 user와 비밀번호 password를 가진 간단한 로그인 폼을 가지고 있습니다. 이 자격 증명을 사용하여 /login으로 POST 요청을 보낼 것입니다.

curl -v -X POST -d "username=user&password=password" http://localhost:8080/login

출력에서 Set-Cookie 헤더를 찾으십시오. Set-Cookie: session=authenticated_session_id_12345; Path=/와 유사해야 합니다. authenticated_session_id_12345 값은 세션 쿠키입니다. 이 값을 기록해 두십시오.

이제 얻은 쿠키를 사용하여 대시보드에 접근해 보겠습니다. YOUR_COOKIE_VALUE를 찾은 실제 쿠키 값으로 바꾸십시오.

curl -v --cookie "session=authenticated_session_id_12345" http://localhost:8080/dashboard

이제 대시보드 페이지의 내용을 볼 수 있으며, 이는 성공적인 인증된 접근을 나타냅니다.

인증된 영역에 대한 gobuster dir 명령어 구성

이 단계에서는 기본 gobuster dir 명령어를 준비합니다. 웹 애플리케이션의 인증된 영역을 대상으로 할 것입니다. 인증 스캔의 기본 URL 은 http://localhost:8080/authenticated/가 될 것입니다. 디렉토리 무차별 대입 (brute-forcing) 을 위해 일반적인 단어 목록 (wordlist) 을 사용할 것입니다.

먼저 Gobuster 가 설치되었는지 확인합니다.

gobuster version

버전 정보가 표시되어야 합니다. 그렇지 않다면 설정 섹션을 참조하십시오.

이제 기본 gobuster dir 명령어를 구성해 보겠습니다. URL 에는 -u 플래그를, 단어 목록에는 -w를 사용할 것입니다. 이 실험에서는 시연 목적으로 작고 내장된 단어 목록을 사용하거나, 시스템에 common.txt와 같은 일반적인 단어 목록이 있다면 지정할 수 있습니다. common.txt를 찾을 수 없다면 테스트를 위해 작고 사용자 정의된 단어 목록을 만들 수 있습니다.

이 실험을 위해 작은 단어 목록을 만들어 보겠습니다.

echo -e "secret_dir\nadmin\nconfig\nbackup\nusers" > ~/project/wordlist.txt

이제 쿠키가 없는 기본 명령어는 다음과 같습니다.

gobuster dir -u http://localhost:8080/authenticated/ -w ~/project/wordlist.txt

이 명령어를 지금 실행하면 인증이 필요하기 때문에 secret_dir을 찾지 못할 가능성이 높습니다. 다음 단계에서 이 명령어에 쿠키를 추가할 것입니다.

세션 쿠키 제공을 위해 -c 플래그 사용

이 단계에서는 1 단계에서 얻은 세션 쿠키를 -c 플래그를 사용하여 Gobuster 명령어에 통합할 것입니다. 이 플래그를 사용하면 Gobuster 가 지정된 쿠키를 요청에 포함시켜 인증된 영역에 접근할 수 있습니다.

1 단계에서 얻은 쿠키 값, 즉 session=authenticated_session_id_12345를 기억하십시오.

-c 플래그는 key=value 형식의 쿠키를 예상합니다. 따라서 쿠키 문자열은 "session=authenticated_session_id_12345"가 됩니다.

이제 이를 2 단계의 명령어와 결합합니다.

gobuster dir -u http://localhost:8080/authenticated/ -w ~/project/wordlist.txt -c "session=authenticated_session_id_12345"

이 명령어는 Gobuster 에게 제공된 단어 목록을 사용하여 http://localhost:8080/authenticated/에서 디렉토리 스캔을 수행하고, 중요하게도 모든 요청에 session=authenticated_session_id_12345 쿠키를 포함하도록 지시합니다. 이를 통해 Gobuster 는 인증 장벽을 우회하고 보호된 영역 내의 리소스를 발견할 수 있습니다.

실행하기 전에 쿠키 값이 올바른지 다시 확인하십시오.

스캔 실행

이제 전체 Gobuster 명령어를 구성했으므로, 실행하고 결과를 관찰할 차례입니다. 이 스캔은 웹 애플리케이션의 인증된 섹션 내에서 디렉토리와 파일을 찾으려고 시도할 것입니다.

이전 단계에서 준비한 명령어를 실행합니다.

gobuster dir -u http://localhost:8080/authenticated/ -w ~/project/wordlist.txt -c "session=authenticated_session_id_12345"

Gobuster 가 스캔을 시작하고 진행 상황을 표시합니다. 출력에 주의를 기울이십시오. Status: 200 (OK), Status: 301 (Moved Permanently) 또는 Status: 302 (Found) 와 함께 발견된 디렉토리 또는 파일을 나타내는 항목이 표시되어야 합니다. 이는 리소스에 성공적으로 접근했거나 리디렉션되었음을 의미합니다.

예시 출력:

===============================================================
Gobuster vX.X.X
===============================================================
[+] Url:                     http://localhost:8080/authenticated/
[+] Wordlist:                /home/labex/project/wordlist.txt
[+] Threads:                 10
[+] Timeout:                 10s
[+] User Agent:              gobuster/X.X.X
[+] Cookies:                 session=authenticated_session_id_12345
===============================================================
2024/01/01 12:00:00 Starting gobuster in directory enumeration mode
===============================================================
/secret_dir           (Status: 200) [Size: 100]
===============================================================
2024/01/01 12:00:05 Finished
===============================================================

/secret_dirStatus: 200으로 발견된 것을 확인하십시오. 이는 Gobuster 가 인증 쿠키를 전송했기 때문에 이 디렉토리에 성공적으로 접근했음을 나타냅니다. 쿠키가 없었다면 이 디렉토리는 발견되지 않거나 리디렉션/권한 없음 상태를 반환했을 것입니다.

인증 시에만 접근 가능한 페이지를 찾기 위해 결과 분석

이 마지막 단계에서는 Gobuster 스캔의 출력을 분석하여 인증된 영역 내에서 성공적으로 발견된 리소스를 식별합니다. 핵심은 Status: 200 (OK) 또는 기타 성공 코드를 반환한 항목을 찾는 것입니다. 이러한 항목은 일반적으로 세션 쿠키 없이는 접근할 수 없습니다.

이전 단계의 출력에서 다음과 유사한 내용을 보셨을 것입니다.

/secret_dir           (Status: 200) [Size: 100]

이 줄은 Gobuster 가 http://localhost:8080/authenticated/ URL 내에서 /secret_dir 경로를 성공적으로 찾았으며 HTTP 200 OK 상태를 반환했음을 나타냅니다. 이는 인증되었을 때 이 디렉토리에 접근할 수 있다는 강력한 지표입니다.

확인하기 위해 쿠키 없이 curl을 사용하여 이 경로에 직접 액세스해 볼 수 있습니다.

curl http://localhost:8080/authenticated/secret_dir

로그인 페이지로 리디렉션되거나 권한 없음 메시지를 받아야 합니다.

이제 쿠키를 사용하여 액세스해 보십시오.

curl --cookie "session=authenticated_session_id_12345" http://localhost:8080/authenticated/secret_dir/hidden_file.html

hidden_file.html의 내용을 볼 수 있으며, 이는 올바른 인증 쿠키로만 이 경로에 접근할 수 있음을 확인시켜 줍니다.

이 프로세스는 Gobuster 와 함께 쿠키를 사용하면 인증된 사용자에게만 보이는 웹 애플리케이션의 숨겨진 부분을 어떻게 드러낼 수 있는지 보여주며, 보안 평가의 범위를 크게 확장합니다.

요약

이 실습에서는 Gobuster 를 사용하여 인증된 디렉토리 스캔을 수행하는 방법을 성공적으로 배웠습니다. 시뮬레이션된 웹 애플리케이션에 로그인하고 세션 쿠키를 추출하는 것으로 시작했습니다. 그런 다음 -c 플래그를 사용하여 이 쿠키를 포함하는 Gobuster 명령을 구성했습니다. 이 명령을 실행함으로써 인증된 사용자에게만 접근 가능한 숨겨진 디렉토리 (/secret_dir) 를 발견할 수 있었습니다. 이 기법은 모든 접근 가능한 경로, 심지어 인증 뒤에 있는 경로까지도 올바르게 식별하고 보호해야 하는 웹 애플리케이션을 철저히 감사해야 하는 보안 전문가 및 개발자에게 매우 유용합니다.