Gobuster 에서 GET 파라미터 퍼징하기

Beginner
지금 연습하기

소개

웹 애플리케이션 보안에서 숨겨지거나 문서화되지 않은 GET 파라미터를 발견하는 것은 잠재적인 취약점을 식별하는 데 매우 중요합니다. 이러한 파라미터는 애플리케이션에서 적절하게 처리되지 않을 경우 정보 노출, SQL 인젝션 또는 기타 보안 결함으로 이어질 수 있습니다. 인기 있는 디렉토리 및 파일 무차별 대입 도구인 Gobuster 는 GET 파라미터를 발견하는 데 활용될 수 있는 "fuzz" 모드도 제공합니다.

이 랩에서는 Gobuster 의 fuzz 모드를 사용하여 GET 파라미터를 식별하는 과정을 안내합니다. FUZZ 키워드를 사용하여 URL 을 구성하고, 일반적인 파라미터 이름의 단어 목록을 사용하고, 스캔을 실행하고, 흥미로운 파라미터를 찾기 위해 결과를 분석하는 방법을 배우게 됩니다. 이 랩이 끝나면 Gobuster 를 사용하여 GET 파라미터 퍼징을 수행하는 실질적인 이해를 갖게 될 것이며, 이는 모든 사이버 보안 애호가 또는 전문가에게 귀중한 기술입니다.

테스트할 URL 엔드포인트 식별

이 단계에서는 테스트하려는 숨겨진 GET 파라미터를 식별할 대상 URL 엔드포인트를 식별합니다. 이 랩에서는 취약한 애플리케이션을 시뮬레이션하는 간단한 웹 서버를 사용합니다. 기본 HTML 파일을 제공하기 위해 Python HTTP 서버를 시작할 것입니다.

먼저 프로젝트 디렉토리로 이동합니다.

cd ~/project

다음으로 대상 파일로 사용할 index.html이라는 간단한 HTML 파일을 생성합니다. 이 파일은 GET 파라미터를 허용할 수 있는 웹 페이지를 시뮬레이션합니다.

nano index.html

index.html에 다음 내용을 추가합니다.

<!DOCTYPE html>
<html>
  <head>
    <title>Test Page</title>
  </head>
  <body>
    <h1>Welcome to the Test Page!</h1>
    <p>This page is for testing GET parameters.</p>
  </body>
</html>

Ctrl+X, Y, Enter를 눌러 파일을 저장합니다.

이제 이 파일을 제공하기 위해 간단한 Python HTTP 서버를 시작합니다. 이 서버는 포트 8000에서 실행됩니다.

python3 -m http.server 8000 &

끝에 있는 &는 서버를 백그라운드에서 실행하여 터미널을 계속 사용할 수 있도록 합니다. 다음과 유사한 출력이 표시됩니다.

Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

퍼징을 위한 대상 URL 엔드포인트는 http://127.0.0.1:8000/index.html입니다.

파라미터 이름으로 FUZZ 키워드를 포함한 URL 구성

이 단계에서는 Gobuster 가 퍼징에 사용할 URL 을 구성하는 방법을 배우게 됩니다. Gobuster 의 fuzz 모드는 단어 목록 항목이 삽입될 위치를 나타내기 위해 URL 에 FUZZ 키워드가 필요합니다. GET 파라미터를 퍼징할 때 FUZZ 키워드는 파라미터 이름을 대체합니다.

파라미터가 있는 GET 요청의 기본 형식은 http://example.com/path?parameter=value입니다. 파라미터 이름을 퍼징하기 위해 parameterFUZZ로 대체합니다. 파라미터 이름 자체를 발견하는 데만 관심이 있으므로 값은 무엇이든 될 수 있습니다. 일반적인 관행은 1 또는 test와 같은 간단한 값을 사용하는 것입니다.

이 랩의 대상 URL 은 http://127.0.0.1:8000/index.html입니다. GET 파라미터 이름을 퍼징하기 위해 URL 은 다음과 같이 구성됩니다.

http://127.0.0.1:8000/index.html?FUZZ=test

여기서:

  • http://127.0.0.1:8000/index.html은 기본 URL 입니다.
  • ?는 쿼리 문자열의 시작을 나타냅니다.
  • FUZZ는 Gobuster 가 단어 목록에서 단어를 삽입할 자리 표시자입니다.
  • =test는 파라미터의 정적 값입니다. 특정 값은 파라미터 이름을 발견하는 데 중요하지 않지만 유효한 파라미터 형식에는 필요합니다.

이 단계에서는 명령을 실행할 필요가 없지만 이 URL 구성을 이해하는 것은 다음 단계를 위해 매우 중요합니다.

일반적인 파라미터 이름의 단어 목록 사용

이 단계에서는 일반적인 GET 파라미터 이름을 포함하는 단어 목록을 준비합니다. Gobuster 는 이 단어 목록을 반복하면서 URL 의 FUZZ 키워드를 목록의 각 단어로 대체합니다.

Gobuster 는 종종 기본 단어 목록을 제공하지만, 자신만의 단어 목록을 만들거나 지정하는 방법을 아는 것이 좋습니다. 이 랩에서는 몇 가지 일반적인 파라미터 이름을 포함하는 작은 사용자 정의 단어 목록을 만들 것입니다.

먼저 ~/project 디렉토리에 있는지 확인합니다.

cd ~/project

이제 단어 목록으로 사용될 params.txt라는 새 파일을 생성합니다.

nano params.txt

params.txt에 다음 일반적인 파라미터 이름을 각 줄에 하나씩 추가합니다.

id
name
user
page
search
query
file
data
token

Ctrl+X, Y, Enter를 눌러 파일을 저장합니다.

params.txt 파일은 다음 단계에서 Gobuster 가 GET 파라미터를 퍼징하는 데 사용됩니다.

gobuster 퍼즈 스캔 실행

이 단계에서는 구성된 URL 과 단어 목록을 사용하여 Gobuster 퍼즈 스캔을 실행합니다.

Gobuster 의 fuzz 모드 명령어는 gobuster fuzz입니다. -u 플래그를 사용하여 FUZZ 키워드가 포함된 URL 을 지정하고, -w 플래그를 사용하여 단어 목록을 지정해야 합니다.

터미널을 열고 다음 명령을 실행합니다.

gobuster fuzz -u http://127.0.0.1:8000/index.html?FUZZ=test -w ~/project/params.txt

명령어를 분석해 보겠습니다.

  • gobuster fuzz: Gobuster 를 퍼징 모드로 호출합니다.
  • -u http://127.0.0.1:8000/index.html?FUZZ=test: FUZZ 자리 표시자가 있는 대상 URL 을 지정합니다.
  • -w ~/project/params.txt: 파라미터 이름이 포함된 단어 목록의 경로를 지정합니다.

이제 Gobuster 는 params.txt의 각 단어로 FUZZ를 대체하여 웹 서버에 요청을 보냅니다. index.html은 이러한 파라미터를 실제로 처리하지 않으므로 Gobuster 는 모든 요청에 대해 동일한 상태 코드와 콘텐츠 길이를 보고할 가능성이 높습니다. 그러나 실제 시나리오에서는 상태 코드 또는 콘텐츠 길이의 변경이 파라미터가 인식될 수 있음을 나타냅니다.

출력에는 각 시도와 해당 상태 코드 및 콘텐츠 길이가 표시됩니다. 다음과 유사하게 표시됩니다.

===============================================================
Gobuster vX.X.X
===============================================================
[+] Url: http://127.0.0.1:8000/index.html?FUZZ=test
[+] Method: GET
[+] Threads: 10
[+] Wordlist: /home/labex/project/params.txt
[+] Status codes: 200,204,301,302,307,401,403,405
[+] User Agent: gobuster/X.X.X
[+] Timeout: 10s
===============================================================
200 (290)    - http://127.0.0.1:8000/index.html?id=test
200 (290)    - http://127.0.0.1:8000/index.html?name=test
200 (290)    - http://127.0.0.1:8000/index.html?user=test
200 (290)    - http://127.0.0.1:8000/index.html?page=test
200 (290)    - http://127.0.0.1:8000/index.html?search=test
200 (290)    - http://127.0.0.1:8000/index.html?query=test
200 (290)    - http://127.0.0.1:8000/index.html?file=test
200 (290)    - http://127.0.0.1:8000/index.html?data=test
200 (290)    - http://127.0.0.1:8000/index.html?token=test
===============================================================

응답 길이 또는 상태 변경 결과 분석

이 단계에서는 Gobuster 퍼즈 스캔 결과를 해석하는 방법을 배웁니다. 잠재적으로 유효하거나 흥미로운 GET 파라미터를 식별하는 열쇠는 HTTP 응답의 변경 사항을 관찰하는 데 있습니다.

Gobuster 가 실행되면 요청하는 각 요청에 대한 HTTP 상태 코드와 콘텐츠 길이 (바이트 단위) 를 표시합니다.

예를 들어, 이전 단계의 출력은 다음과 같습니다.

200 (290)    - http://127.0.0.1:8000/index.html?id=test
200 (290)    - http://127.0.0.1:8000/index.html?name=test
...

여기서 200은 HTTP 상태 코드 (OK) 이고, 290은 응답의 콘텐츠 길이입니다.

확인해야 할 사항:

  1. 다른 상태 코드: 특정 파라미터 이름이 포함된 요청이 다른 HTTP 상태 코드 (예: 유효한 경우 200, 찾을 수 없는 경우 404, 서버 오류의 경우 500, 리디렉션의 경우 302) 를 반환하는 경우 애플리케이션이 해당 파라미터를 처리했거나 반응했음을 나타낼 수 있습니다. 예를 들어, 일반적으로 404 Not Found를 반환하는 파라미터에 대해 200 OK가 반환되는 것은 중요할 수 있습니다.
  2. 다른 콘텐츠 길이: 상태 코드가 200 OK로 유지되더라도 콘텐츠 길이의 변경은 강력한 지표가 될 수 있습니다. 이는 종종 애플리케이션의 응답 본문이 변경되었음을 의미하며, 특정 데이터가 파라미터와 관련되어 포함되거나, 오류 메시지 또는 다른 페이지 레이아웃이 포함될 수 있습니다.
  3. 오류 메시지: 때로는 파라미터가 응답 본문에 반영되는 오류 메시지 (예: SQL 오류, 애플리케이션 오류) 를 트리거하여 다른 콘텐츠 길이 또는 500 상태 코드를 유발할 수 있습니다. 이는 잠재적인 취약성의 강력한 신호입니다.

현재 랩 설정에서는 index.html이 정적 파일이고 Python 서버가 GET 파라미터를 처리하지 않기 때문에 모든 요청이 200 상태 코드와 동일한 콘텐츠 길이 (290 바이트) 를 반환하는 것을 볼 수 있습니다. 이는 간단한 테스트 사례에 대한 예상된 동작입니다.

실제 시나리오에서 라이브 웹 애플리케이션을 퍼징하고 다음과 같은 항목을 발견하는 경우:

200 (512)    - http://example.com/search?query=test

다른 파라미터가 200 (290)을 반환하는 동안 query 파라미터는 다른 콘텐츠 길이로 인해 추가 조사가 가치가 있을 것입니다.

이 단계로 랩이 완료됩니다. Gobuster 를 사용하여 GET 파라미터를 퍼징하는 방법과 결과를 분석하는 방법을 성공적으로 배웠습니다.

Python HTTP 서버를 중지하려면 해당 프로세스 ID(PID) 를 찾아 종료할 수 있습니다. 먼저 실행 중인 Python 프로세스를 나열합니다.

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

다음과 유사한 출력이 표시됩니다.

labex     1234  0.0  0.0  12345  6789 ?        S    HH:MM   0:00 python3 -m http.server 8000

PID(예: 이 예제에서는 1234) 를 기록한 다음 프로세스를 종료합니다.

kill 1234

1234를 찾은 실제 PID 로 바꾸십시오.

요약

이 랩에서는 Gobuster 를 사용하여 GET 파라미터 퍼징을 수행하는 방법을 성공적으로 배웠습니다. 로컬 웹 서버를 설정하고 대상 HTML 파일을 만드는 것으로 시작했습니다. 그런 다음 FUZZ 키워드가 포함된 URL 을 구성하고, 일반적인 파라미터 이름으로 구성된 사용자 지정 단어 목록을 준비했으며, Gobuster 퍼즈 스캔을 실행했습니다. 마지막으로 HTTP 상태 코드 및 콘텐츠 길이의 변경 사항에 초점을 맞춰 스캔 결과를 분석하는 방법을 배웠으며, 이는 인식된 파라미터의 주요 지표입니다.

이 기법은 웹 애플리케이션 정보 수집의 기본적인 부분이며 숨겨진 기능이나 잠재적인 취약성을 발견하는 데 도움이 될 수 있습니다. 이 기술을 숙달함으로써 웹 애플리케이션 공격 표면을 식별하고 조사할 준비가 더 잘 갖춰집니다.