업데이트로 돌아가기
New releaseSep 19, 2026

urx v0.11.0

OSINT 아카이브에서 URL을 추출하여 보안 인사이트를 제공합니다

공유
Urx Logo

보안 인사이트를 위해 OSINT 아카이브에서 URL을 추출합니다.

Urx는 Wayback Machine 및 Common Crawl과 같은 OSINT 아카이브에서 URL을 수집하기 위해 설계된 명령줄 도구입니다. 효율성을 위해 Rust로 구축되었으며, 비동기 처리를 활용하여 여러 데이터 소스를 신속하게 쿼리합니다. 이 도구는 지정된 도메인에 대한 URL 정보를 수집하는 과정을 단순화하여 보안 테스트 및 분석을 비롯한 다양한 목적에 사용할 수 있는 포괄적인 데이터셋을 제공합니다.

기능

  • 여러 소스에서 병렬로 URL 가져오기 (Wayback Machine, Common Crawl, OTX, Arquivo.pt)
  • 다른 CDX 인덱스 서버도 연결 가능 — 국가 웹 아카이브, 사설 pywb, OutbackCDX — --cdx-endpoint URL로 코드 변경 없이 사용
  • 기본적으로 키 불필요: Wayback, Common Crawl, OTX, Arquivo.pt, URLScan(익명) 모두 API 키 없이 작동
  • BeVigil 제공자: 언패킹된 Android 앱에서 추출된 URL — 웹 아카이브가 크롤링한 적 없는 엔드포인트
  • 모든 키 기반 제공자(VirusTotal, URLScan, ZoomEye, GitHub, BeVigil)에 대한 API 키 로테이션으로 속도 제한 완화
  • 인증 테스트: -H, --cookie, --user-agent가 urx가 대상에 보내는 모든 요청(--check-status, --extract-links, --extract-js-endpoints, --expand-specs, 그리고 robots/sitemap 프로브)에 적용되며, 아카이브에는 의도적으로 전송되지 않음
  • 파일 확장자, 부분 문자열 패턴 또는 전체 정규식(--match-regex / --filter-regex)으로 결과 필터링
  • 파일 계열별("no-images", "only-js") 및 보안 관심사별("only-secrets", "only-backup", "only-config", "only-api") 사전 정의된 프리셋
  • 아카이브 측 필터링: 상태 코드, MIME 타입, 날짜 범위를 CDX 쿼리 자체에 적용하여 필터링된 캡처가 네트워크를 통과하지 않도록 함
  • 클라이언트 측 메타데이터 필터링(--meta-*): 수집 후 모든 제공자에 걸쳐 첫/마지막 캡처 날짜, 기록된 MIME 타입, 기록된 상태를 균일하게 필터링
  • 경로 범위 대상: urx example.com/shop은 범위를 CDX 쿼리 자체에 적용(url=example.com/shop*)하므로, 대규모 사이트의 하위 트리는 클라이언트 측에서 필터링되는 대신 전체 인덱스의 일부만 소비
  • 버그 바운티 범위 파일(--scope-file): 프로그램 자체의 *.example.com / !admin.example.com 목록을 그대로 사용하며, 반복 가능하고 합집합으로 처리되며 제외 항목이 항상 우선
  • URL 정규화 및 중복 제거: 쿼리 매개변수 정렬, 후행 슬래시 제거, 의미상 동일한 URL 병합, id, 해시 또는 날짜만 다른 근접 중복 항목 축소(--dedup-similar)
  • 다양한 출력 형식 지원: 일반 텍스트, JSON, JSON Lines, CSV, 그리고 wordlist — 대상이 구성된 경로 세그먼트와 매개변수 이름으로, id, 해시, 날짜는 제외
  • 매개변수 및 퍼즈 뷰: --params(대상 전체의 매개변수 인벤토리), --params-by-endpoint(어떤 엔드포인트가 무엇을 받는지), --fuzz-placeholder FUZZ(매개변수 시그니처당 하나의 템플릿화된 URL, ffuf 또는 dalfox에 바로 사용 가능)
  • 아카이브 캡처 메타데이터: CDX 아카이브가 보고한 모든 URL에 대해 first_seen, last_seen, mime, archive_status, digest가 추가 네트워크 비용 없이 반환됨
  • 스트리밍 출력(--stream): 각 제공자가 URL을 보고하는 즉시 기록되므로, 가장 느린 아카이브를 기다리지 않고 파이프라인이 즉시 작동
  • 직접 파일 입력 지원: WARC 파일, URLTeam 압축 파일, 텍스트 파일에서 URL 직접 읽기
  • 결과를 콘솔이나 파일로 출력하거나 파이프라인 통합을 위해 stdin으로 스트리밍
  • URL 테스트:
    • HTTP 상태 코드와 패턴에 따라 URL 필터링 및 검증.
    • 수집된 URL에서 추가 링크 추출 — 앵커, 스크립트, 스타일시트, 폼 액션, iframe, 이미지, 미디어 소스, 객체, 임베드, 메타 리프레시 대상
    • 수집된 URL의 아카이브된 응답 본문 마이닝(--archive-body) — 더 이상 존재하지 않는 페이지도 포함했던 링크를 여전히 제공하며, CDX digest 중복 제거 덕분에 고유 본문당 한 번의 요청
    • --extract-js-endpoints를 사용하면 아카이브된 JavaScript도 마이닝: 빌드 해시로 명명된 번들은 사이트가 재배포되는 순간 404가 되며, 아카이브는 그 API 표면이 여전히 존재하는 유일한 장소
    • 재생된 본문(--archive-body-dir)을 코퍼스로 보관하여 어떤 링크 추출기도 찾지 않는 것 — 개발자 주석, 인라인 자격 증명, 내부 호스트 이름 — 을 추가 요청 없이 grep
    • API 명세 확장(--expand-specs): OpenAPI 3.x, Swagger 2.0, GraphQL introspection 문서를 JSON 또는 YAML로 변환하여 기술된 모든 라우트로 변환 — 한 번의 요청으로 문서화된 전체 표면 확보
    • 응답 메타데이터: --check-status는 Location, Content-Length, Content-Type도 기록하며, --check-title은 HTML <title>을 추가
  • 아카이브된 robots.txt 및 sitemap.xml 검색(--archived-discovery): Wayback Machine이 보유한 모든 고유 버전으로, 2015년의 Disallow:가 사이트가 이후 언급을 중단한 경로를 여전히 알려줌
  • 캐싱 및 증분 스캔:
    • 로컬 SQLite 또는 원격 Redis 캐싱으로 도메인 재스캔 방지 (Redis는 --features redis-cache로 빌드해야 하며, 패키지 빌드에는 포함되지 않음)
    • 마지막 스캔 이후 새로운 URL만 검색하는 증분 모드
    • 구성 가능한 캐시 TTL; 각 스캔은 TTL의 두 배보다 오래된 항목을 정리하며, urx cache prune은 그 이후의 모든 항목을 제거
    • 캐시를 검사하고 유지 관리하는 urx cache 하위 명령: stats, list, prune, drop <domain>, clear

Preview

설치

Cargo에서

# https://crates.io/crates/urx
cargo install urx

Homebrew에서

# https://formulae.brew.sh/formula/urx
brew install urx

소스에서

git clone https://github.com/hahwul/urx.git
cd urx
cargo build --release

컴파일된 바이너리는 target/release/urx에서 사용할 수 있습니다.

Docker에서

ghcr.io/hahwul/urx

docker pull ghcr.io/hahwul/urx:latest
# the image has no entrypoint, so name the binary before its arguments
docker run --rm ghcr.io/hahwul/urx:latest ./urx example.com

AUR에서

yay -S urx

Chocolatey에서 (Windows)

choco install urx

GitHub 릴리스에서

Linux, macOS 및 Windows용 사전 빌드된 바이너리(각각 .sha256 포함)가 모든 릴리스에 첨부되어 있습니다.

셸 자동 완성

urx는 자체 완성 스크립트를 생성하므로, 실제로 설치된 바이너리의 플래그와 항상 일치합니다.

# zsh — any directory on your $fpath works
urx --completions zsh > ~/.zfunc/_urx
# (make sure ~/.zfunc is on the fpath, then `compinit`)

# bash
urx --completions bash > ~/.local/share/bash-completion/completions/urx

# fish
urx --completions fish > ~/.config/fish/completions/urx.fish

powershell과 elvish도 지원됩니다. 이 플래그에는 대상 도메인이 필요하지 않습니다.

Man Page

urx --manpage > ~/.local/share/man/man1/urx.1
man urx

사용법

기본 사용법

# Scan a single domain
urx example.com

# Scan multiple domains
urx example.com example.org

# Scan domains from a file
cat domains.txt | urx

옵션

Usage: urx [OPTIONS] [DOMAINS]... [COMMAND]

Commands:
  cache  Inspect and maintain the URL cache: stats, list, prune, drop <DOMAIN>..., clear

Arguments:
  [DOMAINS]...  Domains to fetch URLs for

Options:
  -c, --config <CONFIG>           Config file to load
      --provider-config <PATH>    Separate provider config file holding only API keys (default: ~/.config/urx/provider-config.toml; %APPDATA%\urx\ on Windows). CLI/env > provider-config > main config.
      --completions <SHELL>       Print a shell completion script (bash, zsh, fish, powershell, elvish) to stdout and exit
      --manpage                   Print the roff man page to stdout and exit
  -h, --help             Print help
  -V, --version          Print version

Input Options:
      --files <FILES>...        Read URLs directly from files (supports WARC, URLTeam compressed, and text files)
      --domain-list <PATH>      File of newline-separated domains to scan (repeatable; merged with positional DOMAINS; stdin is read only when they name no domains; `#` comments allowed) [alias: --dL]

카테고리