
버그 헌팅 리콘 / 침투 테스트 명령줄 워크플로우를 오케스트레이션하고 구성하기 위한 경량 도구
명령줄 워크플로우를 조율하고 정리하기 위한 경량 도구
소개 • 설치 • 사용법 • 워크플로우 설정 • 병렬 실행 • 워크플로우

Rayder는 워크플로우의 조율 및 실행을 간소화하도록 설계된 명령줄 도구입니다. YAML 파일에 일련의 모듈을 정의하고, 각 모듈은 실행할 명령어들로 구성됩니다. Rayder는 복잡한 프로세스를 자동화하여 반복적인 모듈을 간편하게 처리하고, 명령어 간 의존성이 없을 경우 병렬로 실행할 수 있도록 도와줍니다.
Rayder를 설치하려면 시스템에 Go(버전 1.16 이상)가 설치되어 있어야 합니다. 그런 다음 다음 명령어를 실행하세요:
go install github.com/devanshbatham/[email protected]
Rayder는 YAML 파일에 정의된 워크플로우를 간단히 실행할 수 있는 방법을 제공합니다. 다음 명령어를 사용하세요:
rayder -w path/to/workflow.yaml
워크플로우는 YAML 파일에 다음과 같은 구조로 정의됩니다:
vars:
VAR_NAME: value
# 더 많은 변수 추가...
parallel: true|false
modules:
- name: task-name
cmds:
- command-1
- command-2
# 더 많은 명령어 추가...
silent: true|false
# 더 많은 모듈 추가...
Rayder는 워크플로우 설정에서 변수를 사용할 수 있도록 하여 명령어를 매개변수화하고 더 큰 유연성을 얻을 수 있게 해줍니다. 워크플로우 YAML 파일의 vars 섹션에 변수를 정의할 수 있습니다. 이러한 변수는 이중 중괄호({{}})를 사용하여 명령어 문자열 내에서 참조할 수 있습니다.
변수를 정의하려면 워크플로우 YAML 파일의 vars 섹션에 추가하세요:
vars:
VAR_NAME: value
ANOTHER_VAR: another_value
# 더 많은 변수 추가...
이중 중괄호({{}})를 사용하여 명령어 문자열 내에서 변수를 참조할 수 있습니다. 예를 들어 OUTPUT_DIR 변수를 정의했다면 다음과 같이 사용합니다:
modules:
- name: example-task
cmds:
- echo "Output directory {{OUTPUT_DIR}}"
워크플로우를 실행할 때 명령줄을 통해 변수 값을 제공할 수도 있습니다. VARIABLE_NAME=value 형식을 사용하여 특정 변수에 값을 제공하세요. 예:
rayder -w path/to/workflow.yaml VAR_NAME=new_value ANOTHER_VAR=updated_value
명령줄을 통해 변수 값을 제공하지 않으면 Rayder는 자동으로 워크플로우 YAML 파일의 vars 섹션에 정의된 기본값을 적용합니다.
명령줄을 통해 제공된 변수는 YAML 설정에 정의된 기본값을 덮어씁니다.
워크플로우 설정에서 변수를 정의하고, 참조하며, 제공하는 방법에 대한 예제입니다:
vars:
ORG: "example.org"
OUTPUT_DIR: "results"
modules:
- name: example-task
cmds:
- echo "Organization {{ORG}}"
- echo "Output directory {{OUTPUT_DIR}}"
워크플로우를 실행할 때 다음과 같이 명령줄을 통해 ORG와 OUTPUT_DIR의 값을 제공할 수 있습니다:
rayder -w path/to/workflow.yaml ORG=custom_org OUTPUT_DIR=custom_results_dir
이렇게 하면 기본값이 재정의되고 제공된 값이 해당 변수에 사용됩니다.
역방향 whois 정찰을 수행하고, 최상위 도메인을 서브도메인으로 처리하며, 이를 해석하고 활성 상태인지 확인하는 워크플로우 설정 예제입니다:
vars:
ORG: "Acme, Inc"
OUTPUT_DIR: "results-dir"
parallel: false
modules:
- name: reverse-whois
silent: false
cmds:
- mkdir -p {{OUTPUT_DIR}}
- revwhoix -k "{{ORG}}" > {{OUTPUT_DIR}}/root-domains.txt
- name: finding-subdomains
cmds:
- xargs -I {} -a {{OUTPUT_DIR}}/root-domains.txt echo "subfinder -d {} -o {}.out" | quaithe -workers 30
silent: false
- name: cleaning-subdomains
cmds:
- cat *.out > {{OUTPUT_DIR}}/root-subdomains.txt
- rm *.out
silent: true
- name: resolving-subdomains
cmds:
- cat {{OUTPUT_DIR}}/root-subdomains.txt | dnsx -silent -threads 100 -o {{OUTPUT_DIR}}/resolved-subdomains.txt
silent: false
- name: checking-alive-subdomains
cmds:
- cat {{OUTPUT_DIR}}/resolved-subdomains.txt | httpx -silent -threads 1000 -o {{OUTPUT_DIR}}/alive-subdomains.txt
silent: false
위 워크플로우를 실행하려면 다음 명령어를 실행하세요:
rayder -w path/to/reverse-whois.yaml ORG="Yelp, Inc" OUTPUT_DIR=results
워크플로우 설정의 parallel 필드는 모듈을 병렬로 실행할지 순차적으로 실행할지 결정합니다. parallel을 true로 설정하면 모듈이 동시에 실행될 수 있으며, 의존성이 없는 모듈에 적합합니다. false로 설정하면 모듈이 하나씩 순서대로 실행됩니다.
Rayder 워크플로우 저장소에서 다양한 샘플 워크플로우와 예제를 확인하세요. 더 많은 내용이 추가될 예정입니다!
이 프로젝트는 훌륭한 taskfile 프로젝트에서 영감을 받았습니다.