ATT&CK: T1595.003 Wordlist Scanning · Reconnaissance (TA0043)

웹 서버에 숨어있는 백오피스 경로, 백업 파일, 미공개 API 등을 찾는 작업. 핵심은 두 가지:

  1. 좋은 워드리스트 (SecLists가 사실상 표준)
  2. soft-404 캘리브레이션 — 404를 200으로 돌려주는 서버에서도 노이즈를 걸러내는 능력

1. 설치와 워드리스트

# ffuf
go install github.com/ffuf/ffuf/v2@latest

# SecLists (워드리스트 모음)
git clone --depth 1 https://github.com/danielmiessler/SecLists.git \
          /usr/share/seclists

자주 쓰는 리스트:

  • Discovery/Web-Content/raft-medium-directories.txt (디렉터리)
  • Discovery/Web-Content/raft-medium-files.txt (파일)
  • Discovery/Web-Content/common.txt (가벼운 시작)

2. 기본 디렉터리 열거

ffuf -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt \
     -u https://target.example.com/FUZZ \
     -c -o scans/ffuf-dirs.json -of json
  • FUZZ: 치환 자리표시자.
  • -c: 컬러 출력. 터미널에서만 유용.
  • -of json: JSON으로 저장 → 후처리 편함.

3. soft-404 자동 캘리브레이션

404 대신 200으로 “페이지가 없습니다” 반환하는 서버에서 가장 흔한 삽질. ffuf의 -ac 하나로 끝:

ffuf -w wordlist.txt -u https://target.example.com/FUZZ -ac

-ac: Auto-calibrate. 랜덤 문자열로 몇 번 요청해서 “존재하지 않을 때의 응답 모양(길이·단어수)“을 학습하고, 매칭되는 결과를 자동 제외.

더 강한 필터링:

ffuf -w wordlist.txt -u https://target.example.com/FUZZ \
     -ac -fs 1024 -fw 150
  • -fs: filter size. 응답 바이트 수가 특정 값인 결과 제외.
  • -fw: filter words. 응답 단어 수 기반 제외.
  • 반대로 특정 값만 보려면 -ms, -mw.

4. 확장자 조합

디렉터리와 파일을 함께 보려면 -e:

ffuf -w wordlist.txt -u https://target.example.com/FUZZ \
     -e .php,.bak,.old,.zip,.tar.gz \
     -ac

이러면 admin, admin.php, admin.bak 등을 모두 시도.

5. 재귀 열거

디렉터리 하나 찾을 때마다 그 아래로 재귀:

ffuf -w wordlist.txt -u https://target.example.com/FUZZ \
     -recursion -recursion-depth 2 -ac

주의: 깊이 2만 돼도 요청 수가 폭발한다. 큰 워드리스트 + 재귀는 공격 네트워크를 사실상 DoS로 만든다.

6. 파라미터 fuzzing

경로 외에 쿼리 파라미터 이름도 열거 가능:

ffuf -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt \
     -u "https://target.example.com/api/user?FUZZ=test" \
     -mc 200,500 -fs 42 -ac

응답 길이가 급변하는 파라미터가 “진짜 처리되는” 입력일 가능성이 높다.

7. 인증된 세션으로 fuzzing

쿠키/헤더 포함:

ffuf -w wordlist.txt -u https://target.example.com/FUZZ \
     -H "Cookie: session=abc123" \
     -H "User-Agent: Mozilla/5.0" \
     -ac

-H를 여러 번 쓸 수 있고, body 쪽은 -d.

8. OPSEC

  • 기본 UA가 Fuzz Faster U Fool — WAF가 즉시 블록. -H "User-Agent: ..." 로 교체.
  • 속도 제어: -rate (초당 요청), -p (요청 간 랜덤 딜레이).
  • 재귀 + 큰 리스트는 자제. 조직 네트워크에서 수십 kpps 트래픽은 바로 블루팀 호출.

참고