
원샷 API 공격 도구 - 주어진 루트에서 API URL을 찾아 자동화된 공격을 시뮬레이션합니다
Python으로 작성된 풀 파이프라인 블랙박스 API 보안 스캐너입니다. 엔드포인트를 열거하고, 파라미터를 식별하며, HTTP 메서드를 프로빙하고, 인증/인가 로직을 테스트하며, 표준 OWASP API Top 10 공격 시뮬레이션(BOLA, Broken Auth, BFLA, Mass Assignment, Rate Limiting, SSRF, Security Misconfiguration 등)을 실행합니다. 또한 OWASP 카테고리와 무관하게 크래시/500 응답을 탐지하는 RESTler 스타일의 안정성 퍼저도 포함합니다.
모든 핵심 스크립트는 **stdlib-only(표준 라이브러리만 사용)**로 설계되었습니다. 시스템에 외부 도구나 라이브러리가 없을 경우, apiharvester는 즉시 실행을 보장하기 위해 자동으로 순수 Python 구현으로 폴백합니다.
apiharvester/ — 메인 Python 패키지 디렉터리. python3 -m apiharvester로 실행합니다.scripts/check_requirements.sh — 바이너리 및 페이로드 사전 요구사항을 검증합니다.scripts/install_requirements.sh — 필요한 SecLists 페이로드 파일을 다운로드하고 선택적으로 바이너리를 설치합니다(go install 및 pip 사용).apiharvester.py — 스캐너의 독립 실행형 단일 파일 배포판입니다.api_deep_discovery.py — Katana 헤드리스 브라우저 코드를 사용하여 동적 SPA/XHR 엔드포인트를 탐색하는 동적 크롤러입니다.api_intelligence_engine.py — 파이프라인 집계기 및 수동적 취약점 분류기입니다.apisec.py — 대체 단일 파일 보안 스캐너 버전입니다.requirements.txt — Python 의존성 목록(주로 선택적 Python 기반 가속기용).payloads/ — 정찰용 워드리스트 및 페이로드 파일:
params.txt — API 엔드포인트 테스트용 파라미터 이름 후보 25,889개directories.txt — 일반적인 API 경로 패턴 및 디렉터리 이름 62,281개subdomains.txt — API 탐색용 서브도메인 변형 5,000개kiterunner/ — 가속화된 엔드포인트 열거를 위한 Kiterunner 라우트 스키마 파일요구사항 확인: 읽기 전용 스크립트를 실행하여 핵심 도구/페이로드가 사용 가능한지 확인합니다:
./scripts/check_requirements.sh
선택적 도구 및 페이로드 파일 설치: 설치 스크립트를 실행하여 SecLists 상위 워드리스트, Kiterunner 라우트 스키마를 자동으로 가져오고 도구 가속기를 설치합니다:
./scripts/install_requirements.sh
Python 패키지 설치:
pip3 install -r requirements.txt
대상 도메인에 대해 스캐너를 직접 실행합니다:
python3 -m apiharvester example.com \
--auth "Bearer eyJ..." \
--auth2 "Bearer eyJ_lowpriv..." \
--threads 20 \
--html report.html \
--json findings.jsonl
target (위치 인수): 스캔할 FQDN 도메인.--auth: 인증된 검사용 고권한 액세스 토큰(예: 유효한 사용자 세션).--auth2: BOLA / BFLA / 교차 계정 권한 상승 테스트용 저권한 액세스 토큰.--threads: 스레드풀 크기(기본값: 20).--timeout: HTTP 요청 타임아웃(초)(기본값: 10).--burst: 속도 제한 검증을 위한 신속 요청 수(기본값: 20).--json: JSONL 형식 보고서 저장(줄 구분 JSON 결과).--html: 대화형 HTML 대시보드 보고서 저장.--output-dir: 기본 출력 디렉터리 경로 재정의(예: ./scans/example.com).--skip-recon: 정찰 단계를 건너뛰고 이전 실행의 기존 출력 파일을 사용합니다.--recon-dir: 기존 정찰 출력 디렉터리를 로드하고 공격 단계만 실행합니다.--attacks-only: 공격 단계만 실행합니다(--skip-recon을 암시).--attacks: 실행할 공격 목록(쉼표로 구분). 기본값: 전체. 사용 가능:
bola,broken_auth,mass_assignment,rate_limit,bfla,business_logic,
ssrf,misconfiguration,inventory,sspp,injection,reliability,secrets
OWASP API Top 10 (API1–API10:2023):
bola) — 객체 수준 인가 취약점. ID 퍼징(0, 1, 2, 99, "admin", "test", UUID 변형 등) 및 차등 인증 토큰으로 객체-ID 엔드포인트를 테스트합니다.broken_auth) — 미인증 엔드포인트 탐색, JWT 약한 시크릿 크래킹, alg=none 우회, 클레임 변조, kid 인젝션, 그리고 OPTIONS/HEAD 메서드 우회를 수행합니다.mass_assignment) — PUT/PATCH 본문에 권한 상승 필드(role, is_admin, verified, balance 등)를 주입합니다.rate_limit) — 20개 이상의 신속 요청을 전송하고, 429 Retry-After 대신 200을 반환하는 엔드포인트를 표시합니다.bfla) — 기능 수준 인가 취약점. 저권한 토큰 유무에 따라 민감한 경로(/admin, /roles, /impersonate 등)를 테스트합니다.business_logic) — 워크플로/상태 머신 위반(예: 결제 후 주문 업데이트).ssrf) — URL 파라미터 및 요청 본문을 통한 서버 측 요청 위조를 테스트합니다.misconfiguration) — CORS(능동적: 신뢰할 수 없는 Origin 전송), 보안 헤더 누락, 상세 오류, 서버 배너 노출.inventory) — 문서화되지 않은 엔드포인트, 폐기된 엔드포인트, 노출된 관리자 인터페이스.sspp) — 안전하지 않은 서버 측 후처리(템플릿 인젝션, XPath 인젝션 등).보너스 공격:
injection) — SQL 인젝션, XSS, 명령 인젝션(오류 기반 + 시간 기반 블라인드).reliability) — RESTler 스타일 퍼징: 경계/잘못된 입력 테스트로 5xx 크래시 및 서버 안정성 버그를 탐지(OWASP 카테고리와 무관).secrets) — 응답 본문에서 유출된 자격 증명 패턴 매칭: AWS Access Keys, Google API Keys, Slack Tokens, Stripe Keys, GitHub Tokens, Private Key Blocks, JWTs, 그리고 일반적인 시크릿 할당(api_key=..., password=... 등).인증 + 저권한 토큰을 사용한 전체 스캔(BOLA/BFLA에 최적):
python3 -m apiharvester api.example.com \
--auth "Bearer high_priv_token_here" \
--auth2 "Bearer low_priv_token_here" \
--html report.html \
--json findings.jsonl
빠른 정찰 전용(엔드포인트 탐색, 공격 없음):
python3 -m apiharvester example.com --skip-recon --attacks ""
(또는 일부 공격 단계를 건너뛰려면 --auth를 제공하지 않으면 됩니다.)
저장된 정찰 데이터에 대해 공격만 재실행(빠른 반복):
python3 -m apiharvester example.com --recon-dir output/example.com_20260715_140233 --attacks-only
특정 공격만 실행(예: BOLA + Secrets):
python3 -m apiharvester example.com --attacks bola,secrets
TLS 인증서 오류 우회(기업 프록시, 스테이징 환경):
# apiharvester는 기본적으로 관대한 TLS 컨텍스트를 사용합니다 — 추가 플래그가 필요하지 않습니다
# 자체 서명/가로채기된 인증서에서도 모든 HTTPS 엔드포인트가 작동합니다
python3 -m apiharvester https://staging-api.example.com
모든 스캔은 공격 단계가 실행되기 전에 정찰 산출물을 구조화된 출력 디렉터리에 기록합니다. 기본값은 다음과 같습니다:
output/{target}_{YYYYMMDD_HHMMSS}/
예: output/example.com_20260715_140233/. 고정되고 예측 가능한 경로를 원한다면 --output-dir /path/to/dir로 위치를 재정의할 수 있습니다(스크립팅/CI에 유용).
| 파일 | 내용 |
|---|---|
fqdn.txt | 발견된 모든 서브도메인(한 줄에 하나) |
fqdn_resolved.txt | IP가 확인된 서브도메인 — domain\tip1,ip2 |
fqdn_active.txt | 활성 HTTP(S) 호스트(전체 URL) |
fqdnwithendpoint.txt | 발견된 모든 엔드포인트 URL |
withparam.txt | 발견된 쿼리 파라미터가 있는 엔드포인트(전체 URL) |
paramvalue.txt | 관찰된 파라미터 값이 있는 엔드포인트(라이브 프로빙에서) |
withtoken.txt | --auth/--auth2로 제공된 인증 토큰/JWT 및 응답에서 수집된 모든 토큰 |
objectshape.txt | 엔드포인트별 응답 JSON 필드 이름 — url\tfield1,field2 |
waf_results.jsonl | WAF/캐치올/JS 챌린지가 감지된 호스트당 하나의 JSON 객체 |
endpoint_methods.jsonl | 허용된 HTTP 메서드를 나열하는 엔드포인트당 하나의 JSON 객체 |
swagger_specs/*.json | 발견된 모든 OpenAPI/Swagger 스펙(호스트당 하나의 파일) |
모든 것이 일반 텍스트(한 줄에 하나의 항목) 또는 JSONL이므로 grep, jq, 파이프로 깔끔하게 처리할 수 있습니다.
기존 정찰 데이터에 대해 공격 단계만 재실행하고 서브도메인 탐색/크롤링 등을 건너뜁니다:
python3 -m apiharvester example.com --recon-dir output/example.com_20260715_140233 --attacks-only
--attacks-only는 --skip-recon을 암시하며 fqdn_active.txt, fqdnwithendpoint.txt, withparam.txt, withtoken.txt, swagger_specs/, waf_results.jsonl을 스캔 컨텍스트로 다시 로드합니다.
정찰 파일을 다른 도구에 공급:
# httpx 재프로빙
httpx -l output/example.com_*/fqdn_active.txt
# 발견된 엔드포인트에 대해 nuclei 실행
nuclei -l output/example.com_*/fqdnwithendpoint.txt
# 발견된 파라미터를 워드리스트 시드로 사용하여 ffuf 실행
cut -d'?' -f2 output/example.com_*/withparam.txt | tr '&' '\n' | cut -d= -f1 | sort -u
# 호스트별 WAF 결과에 jq 적용
jq -r 'select(.waf_vendor != "none") | .domain' output/example.com_*/waf_results.jsonl
모든 파일이 줄 구분 일반 텍스트 또는 JSONL이므로, 출력 디렉터리는 grep, jq, httpx, nuclei, ffuf 또는 파이프라인의 다른 도구에 전달할 수 있는 이식 가능한 정찰 데이터셋 역할을 합니다 — apiharvester 전용 파서가 필요하지 않습니다.
apiharvester는 포괄적인 API 탐색 및 테스트를 위해 SecLists와 Kiterunner의 고품질 워드리스트 및 라우트 스키마를 사용합니다:
params.txt (25,889개 항목) — 일반적인 API 파라미터 이름(예: api_key, user_id, token). 파라미터 탐색 단계에서 잠재적 입력 지점을 식별하는 데 사용됩니다.
directories.txt (62,281개 항목) — API 엔드포인트 경로 및 디렉터리 패턴(예: /api/v1/, /admin/, /internal/). 경로 열거 및 Soft-404 탐지에 사용됩니다.
subdomains.txt (5,000개 항목) — 서브도메인 접두사 및 변형(예: api, api-v2, staging-api). 서브도메인 전반에 걸쳐 추가 API 표면을 식별하는 데 사용됩니다.
kiterunner/ — 신속한 라우트 탐색 및 검증을 위한 Kiterunner 형식의 OpenAPI 라우트 스키마. 외부 스키마가 있을 때 가속화된 엔드포인트 매핑을 가능하게 합니다.
이러한 페이로드는 SecLists(https://github.com/danielmiessler/SecLists)에서 가져왔으며, apiharvester가 숨겨지거나 문서화되지 않은 API 엔드포인트, 파라미터, 서비스를 효율적으로 식별할 수 있게 합니다.