
퍼징을 위한 맞춤형 워드리스트 생성
CWFF는 동시성을 사용하여 가능한 최고 속도로 특별한 고품질 퍼징/콘텐츠 발견 워드리스트를 생성하는 도구이며, @tomnomnom의 Who, What, Where, When, Wordlist #NahamCon2020에서 크게 영감을 받았습니다.

CWFF [-h] [--threads] [--github] [--subdomains] [--recursive] [--js-libraries] [--connected-websites] [--juicy-files] [--use-filter-model] [-o] domain
positional arguments:
domain Target website(ofc)
optional arguments:
-h, --help Show this help message and exit
--threads The number of maximum concurrent threads to use (Default:1000)
--github Collect endpoints from a given github repo (ex:https://github.com/google/flax)
--subdomains Extract endpoints from subdomains also while search in the wayback machine!
--recursive Work on extracted endpoints recursively (Adds more endpoints but less accurate sometimes)!
--js-libraries Extract endpoints from JS libraries also, not just the JS written by them!
--connected-websites Include endpoints extracted from connected websites
--juicy-files Include endpoints extracted from juicy files like sitemap.xml and robots.txt
--use-filter-model Filter result endpoints with filter_model file
-o The output directory for the endpoints and parameters. (Default: website name)
기본적으로 다양한 소스를 사용하여 대상 및 하위 도메인의 엔드포인트와 매개변수를 수집합니다. 이제 그 소스들에 대해 설명하겠습니다:
많은 도구는 시간을 절약하기 위해 wayback의 최상위 페이지만 검토하지만, 여기서는 적은 시간에 모든 기록을 검토하지만, 이로 인해 --subdomains 플래그를 사용할 때 시간이 많이 소요됩니다.
<script> 태그에서 수집된 JavaScript 파일CWFF는 JS 파일 이름을 확인하여 JS 라이브러리와 웹사이트 개발자가 실제로 작성한 JS 파일을 분리하려고 합니다. 기본적으로 CWFF는 개발자가 작성한 JS 파일에서만 엔드포인트를 추출하며, JS 라이브러리를 사용하려면 (대부분 도움이 되지 않음) --js-libraries 플래그를 활성화하십시오.
--juicy-files 플래그를 제공하면 Sitemap.xml 및 robots.txt와 같은 파일에서도 엔드포인트를 추출합니다. (향후 더 추가될 수 있음)--github 플래그를 사용하여 GitHub 저장소를 제공하면 GitHub API를 사용하여 해당 저장소에서 경로를 추출합니다. (API 키가 필요 없음)명확히 하자면, CWFF는 파일 및 디렉터리 경로만 사용하므로 파일 내부에서 엔드포인트를 추출하지 않습니다!
--connected-websites 플래그를 사용하면 CWFF는 builtwith 웹사이트 API (키가 필요하지만 무료)를 사용하여 관계 프로필에서 대상에 연결된 웹사이트를 추출한 다음 이러한 웹사이트 소스에서 엔드포인트를 추출합니다.참고: 이 페이지에서 API 키를 받아
API_keys.py파일에 변수를 설정할 수 있습니다.
이 모든 엔드포인트에서 엔드포인트를 수집한 후 --recursive 플래그를 사용하면 CWFF는 수집된 엔드포인트에서 재귀적으로 부분을 추출합니다.
parseq/javadoc/1.1.0/com와 같은 엔드포인트는 다음과 같은 모든 엔드포인트가 됩니다:
parseq/javadoc/1.1.0/com
parseq/javadoc/1.1.0/
parseq/javadoc/
parseq/
javadoc/
1.1.0/
com
참고: 수집된 모든 엔드포인트/매개변수는 중복 없이 정리 및 정렬되어 고유한 결과를 제공합니다.
물론 이러한 모든 소스와 작업 후에는 중요한 엔드포인트들 사이에 원하지 않거나 쓸모없는 엔드포인트가 많이 있을 수 있으며, 여기서 필터링이 시간과 리소스를 절약하기 위해 사용됩니다.
CWFF에서는 세 가지 방법을 사용하여 원하지 않는 엔드포인트를 감지하고 제거할 수 있습니다:
이 모든 필터 옵션은 filter_model.py 파일에서 변수를 설정한 다음 CWFF를 시작할 때 --use-filter-model 플래그를 사용하여 적용할 수 있습니다. 이 변수를 설정하는 방법을 모르겠다면 제가 파일에 남겨둔 주석을 참조하세요. 제가 가장 많이 사용하는 설정이며, 스크린샷에서 수집된 엔드포인트 수를 26,177개에서 3,629개로 줄였습니다. CWFF 실행 중 필터링을 사용하는 것을 잊었다면 걱정하지 마세요. 제가 해결해 드립니다 😄
다음과 같은 방식으로 filter.py 스크립트를 사용하여 보유한 엔드포인트를 필터링할 수 있으며, CWFF를 다시 실행하지 않고도 filter_model.py 파일을 자동으로 로드합니다:
python filter.py wordlist.txt output.txt
python3 -m pip install -r requirements.txt
python3 cwff.py --help
제 작업이 유용하셨다면, 커피 한 잔 사주셔도 좋습니다.
CWFF는 침투 테스트를 돕기 위해 만들어졌으며, 오용이나 불법적인 목적에 대해 책임을 지지 않습니다.
이 도구의 코드를 복사하거나 다른 도구에서 사용하는 것은 출처를 명시하면 허용됩니다 :smile`