ffuf 사용법

d0razi·2025년 6월 7일

ffuf

ffuf(Fuzz Faster U Fool)는 Go로 개발된 웹 퍼징 툴입니다.

웹 서비스에 대한 모의해킹을 진행하거나 침투 테스트를 진행하는 경우 공격 대상 서버에 디렉토리 스캔을 하거나 서브 도메인을 스캔하는 작업이 필요한 경우가 있다. 이런 경우 ffuf 툴을 사용하여 간단하게 스캔을 진행할 수 있습니다.

이번 글에서는 ffuf 설치와 자주 사용하는 명령어 예제를 다룹니다.

예제에서 사용하는 wordlist는 github에 wordlist github 키워드를 구글에 검색하면 아주 많이 찾으실 수 있습니다.

Installation

  • Github 릴리스 페이지에서 바이너리를 받을 수 있습니다.
  • macOS면 homebrew를 이용해서 받을 수 있습니다. brew install ffuf
  • go 컴파일러가 있다면 go install github.com/ffuf/ffuf/v2@latest 명령어를 사용해서 받을 수 있습니다.
  • Linux 환경에선 sudo apt install ffuf 명령어로 받을 수 있습니다

Usage

  • -w: 사용할 워드리스트 지정
  • -u: 실제 요청을 보낼 대상 주소
  • -H: 요청 헤더에 Host: FUZZ 형식으로 가상 호스트 값을 대입
  • -fs: 응답 크기 필터링
  • -fc: 응답 코드 필터링

Examples

Directory Scanning

ffuf -w /path/to/wordlist -u https://target/FUZZ

URL 마지막에 FUZZ 단어를 추가해서 사용합니다를 사용합니다.

Subdomain Scanning

서브 도메인이란 다른 도메인 밑에 존재하는 도메인을 의미합니다.
아래 예시에서 naver.com의 서브 도메인은 map과 papago입니다.

Example

  • naver.com
  • map.naver.com
  • papago.naver.com
ffuf -w /path/to/wordlist -u http://FUZZ.test.com/

디렉토리 스캔 명령어와 마찬가지로 스캔할 부분에 FUZZ를 입력해서 실행하면 됩니다.

Virtual host discovery

Virtual host는 서브 도메인과 개념은 비슷하지만 분명한 차이점이 있습니다.

  • 주 도메인과 동일한 IP에서 운영
  • HTTP 헤더의 Host 값을 기준으로 보여줄 서비스를 결정
ffuf -w /path/to/vhost/wordlist -u https://target -H "Host: FUZZ" -fs 4242

서브 도메인 스캔과는 다르게 -u 옵션 url에 FUZZ가 없고, -H 옵션(헤더값)으로 Host: FUZZ 값을 추가하면서 퍼징을 진행합니다.

-fs 옵션은 필터링을 할 수 있는 옵션입니다. 예를 들어 기본 Virtual Host 스캔을 진행했을때 응답 크기가 4242바이트라고 한다면, -fs 옵션으로 4242 사이즈를 리턴하는 값을 필터링 할 수 있습니다.
기본 가상 호스트 응답 크기가 4242바이트라고 가정하면, Host - 헤더를 퍼징하면서 해당 크기의 모든 응답(-fs 4242)을 필터링할 수 있습니다.

GET/POST Parameter Fuzzing

Get Parameter Name Fuzzing

ffuf -w /path/to/paramnames.txt -u https://target/script.php?FUZZ=test_value -fs 4242

위와 같이 Get 인자 이름을 Fuzzing 할 수 있습니다.

Get Parameter Value Fuzzing

ffuf -w /path/to/values.txt -u https://target/script.php?valid_name=FUZZ -fc 401

이번에는 파라미터 이름이 이미 알려져 있을 때, 해당 파라미터의 값을 퍼징하는 예시입니다.
valid_name이라는 파라미터의 값으로 다양한 값을 넣으며, 401 상태코드(인증 실패)를 제외한 결과만 출력합니다.

POST Data Fuzzing

ffuf -w /path/to/postdata.txt -X POST -d "username=admin&password=FUZZ" -u https://target/login.php -fc 401

POST 요청에서도 동일하게 FUZZ 키워드를 사용해 특정 필드에 대해 퍼징을 할 수 있습니다.
위 명령어는 password 값을 퍼징하는 명령어입니다.

  • -X POST: POST 메소드 사용
  • -d: POST 데이터 지정
profile
Discord : mete0r_mo

0개의 댓글