개요
- 최근에 인기가 많은 퍼징툴이다.
- Go로 개발되어서 빠르다고 한다.
타 툴과의 비교
- FFUF는 기본적으로 하나의 호스트에 대해 여러 페이로드를 검사하고 싶을 때 쓰는 툴이다.
- 이 점에서는 dirb나 gobuster와 비슷한 쓰임새로 사용할 것 같다.
- 한편, ZGrab은 하나의 페이로드에 대해서 많은 호스트를 탐색하고 싶을 때 사용, Burp Suite의 Turbo Intruder는 하나의 호스트에 많은 페이로드를 보내고 싶을 때 사용하므로 각자 쓰임새가 있다고 하겠다.
설치
- 다음 커맨드를 실시하면 빌드가 완료되어 ffuf디렉토리에 ffuf 실행파일이 생성된다.
- 실행파일이 있는 경로를 PATH에 등록해둔다. 혹은 ffuf파일을 PATH에 등록된 경로로 복사한다.
go install github.com/ffuf/ffuf/v2@latest
git clone https://github.com/ffuf/ffuf ; cd ffuf ; go get ; go build
주요 사용패턴(Usage)
다음 네 가지 사용패턴이 소개되어 있다. 기본적으로 모두 wordlist를 필요로한다.
특정 경로의 존재 여부 체크 (GET)
wordlist.txt을 사용하여 웹서버 경로를 테스트한다. 크기가 42인 응답은 필터링한다. 컬러로 출력한다.(-c) 자세히 출력한다. (-v)
Fuzz file paths from wordlist.txt, match all responses but filter out those with content-size 42. Colored, verbose output.
ffuf -w wordlist.txt -u https://example.org/FUZZ -mc all -fs 42 -c -v
Host헤더 퍼징
wordlist를 사용하여 Host헤더를 테스트한다. 200응답이 있다면 출력한다.
ffuf -w hosts.txt -u https://example.org/ -H "Host: FUZZ" -mc 200
POST Json파라메터 테스트
JSON 데이터를 POST메서드로 보내서 테스트한다. “error”라는 텍스트를 포함하지 않는 모든 건을 출력한다. (즉, 에러가 발생하지 않고 처리된 건을 출력한다.)
ffuf -w entries.txt -u https://example.org/ -X POST -H "Content-Type: application/json" \
-d '{"name": "FUZZ", "anotherkey": "anothervalue"}' -fr "error"
여러개의 워드리스트를 사용하는 패턴
예를들어, 다음과 같이 URL에 파라메터명(PARAM)과 값(VAL)이 있을 때 이 것을 동시에 체크할 수 있는 것 같다. 응답에 “VAL”이 포함되어 있으면 출력한다.
궁금점: 두 세트(PARAM, VAL)은 어떻게 동작하는가. Burp Intruder 식으로 말했을 때 Pitchfork인가, Cluster bomb인가. 아마도 모든 경우의 수가 테스트될 것 같다. 따라서 동작방식은 Cluster bomb로 추정된다.
ffuf -w params.txt:PARAM -w values.txt:VAL -u https://example.org/?PARAM=VAL -mr "VAL" -c
고려점: wordlist
- 특히 웹 패스 Fuzzing같은 경우에는 얼마나 적절한 wordlist를 가지고 있느냐에 따라 스캔 결과가 달라진다.
- 따라서 좋은 wordlist를 사용하는 것 역시 중요하다.
- ffuf는 다음 세개의 워드리스트를 제공해주는 것 같다.
cd ~
mkdir wordlists
cd wordlists
wget http://ffuf.me/wordlist/common.txt
wget http://ffuf.me/wordlist/parameters.txt
wget http://ffuf.me/wordlist/subdomains.txt
- 한편, SecLists 에도 다양한 wordlist를 제공하고 있으므로 확인해봐도 좋을 것 같다.
- 각 리스트를 비교해보는 것도 재미있을 것 같다. 공통인 부분과 특정 파일에만 있는 부분을 알 수 있을 것 같다.
- 또한, 위의 wordlist의 내용 변화를 모니터링하는 스크립트를 만드는 것도 재밌을 것 같다.
참고
- https://github.com/ffuf/ffuf
- https://velog.io/@parkss/ffuf-%EC%82%AC%EC%9A%A9%EB%B2%95