
고속 DNS 리졸버 및 서브도메인 브루트포서로, 정확한 와일드카드 필터링과 DNS 포이즈닝 검증을 통해 정밀한 정찰을 수행합니다.

정확한 와일드카드 필터링을 갖춘 빠른 도메인 리졸버 및 서브도메인 무차별 대입 도구
시작하기 »
사용법
·
작동 원리
·
후원
·
자주 묻는 질문
puredns는 와일드카드 서브도메인과 DNS 중독 항목을 정확하게 걸러낼 수 있는 빠른 도메인 리졸버 및 서브도메인 무차별 대입 도구입니다.
강력한 스텁 DNS 리졸버인 massdns를 사용하여 대량 조회를 수행합니다. 적절한 대역폭과 좋은 공용 리졸버 목록이 있으면 수백만 개의 쿼리를 몇 분 만에 처리할 수 있습니다. 불행히도 massdns의 결과는 공용 리졸버가 제공하는 답변에 의존합니다. 잘못된 DNS 답변이나 와일드카드 서브도메인의 오탐으로 인해 결과가 오염되는 경우가 많습니다.
puredns는 자체 와일드카드 탐지 알고리즘으로 이 문제를 해결합니다. 신뢰할 수 있는 리졸버 세트에서 얻은 DNS 답변을 기반으로 와일드카드를 걸러냅니다. 또한 신뢰할 수 있는 리졸버를 사용하여 얻은 답변을 검증함으로써 DNS 중독을 우회하려고 시도합니다.
유용하다고 생각하시나요? ⭐ GitHub에서 Star를 눌러주세요 — 큰 도움이 됩니다!

|
제 작업이 수익을 창출하고 있다면 후원자가 되어 주세요! 독특한 특전을 얻을 수 있습니다! 또한 ❤️ 정말 큰 의미가 있습니다. 커뮤니티를 위해 무료로 계속 작업할 수 있게 해주기 때문입니다. 하지만 어떤 결정을 내리시든 제 소프트웨어는 여러분이 사용할 수 있도록 무료로 오픈소스로 남을 것입니다. |
Puredns는 호스트 머신에 massdns가 필요합니다. massdns 바이너리 경로가 PATH 환경 변수에 있으면 puredns가 바로 작동합니다. 대부분의 시스템에서 massdns 실행 파일을 복사하기 좋은 위치는 /usr/local/bin입니다. 그렇지 않으면 --bin 명령줄 인수를 사용하여 massdns 바이너리 파일 경로를 지정해야 합니다.
다음은 대부분의 Debian 기반 시스템에서 작동해야 합니다. 자세한 내용은 공식 문서를 따르세요.
git clone https://github.com/blechschmidt/massdns.git
cd massdns
make
sudo make install
puredns를 사용하려면 공용 DNS 서버 목록을 확보해야 합니다. 자주 묻는 질문을 참조하여 자신만의 작동하는 서버 목록을 선별하는 방법을 알아보세요.
바이너리 릴리스를 다운로드할 수 있습니다.
또는 최신 버전을 쉽게 컴파일할 수 있습니다. 먼저 시스템에 Go가 설치되어 있는지 확인하세요. Go의 마지막 두 주요 릴리스가 지원됩니다. 설치 지침은 공식 Go 설치 페이지를 참조하세요. 그런 다음 다음 명령을 실행하세요:
go install github.com/d3mondev/puredns/v2@latest
puredns --help를 사용하여 사용 가능한 모든 명령과 옵션의 전체 목록을 확인하세요.
현재 작업 디렉토리에 resolvers.txt 파일이 있으면 puredns는 기본적으로 이를 사용합니다. 그렇지 않으면 ~/.config/puredns/resolvers.txt 또는 ~/.config/puredns/resolvers-trusted.txt 파일이 있으면 puredns가 자동으로 리졸버로 사용합니다. 이러한 옵션이 모두 없으면 --resolvers 및 --resolvers-trusted 인수를 사용하여 사용할 리졸버를 지정하세요.
신뢰할 수 있는 리졸버를 지정하는 것은 선택 사항입니다. 기본적으로 puredns는 8.8.8.8 및 8.8.4.4를 사용합니다.
all.txt라는 단어 목록을 사용하여 대규모 서브도메인 목록을 무차별 대입하는 방법:
puredns bruteforce all.txt domain.com
-d 옵션을 사용하면 단일 도메인 대신 도메인이 포함된 텍스트 파일을 로드하여 여러 도메인을 한 번에 무차별 대입할 수도 있습니다:
puredns bruteforce all.txt -d domains.txt
텍스트 파일(줄당 하나)에 포함된 도메인 목록을 해결할 수도 있습니다.
puredns resolve domains.txt
해결할 도메인 목록을 stdin으로 전달할 수 있습니다:
cat domains.txt | puredns resolve
또는 무차별 대입에 사용할 단어 목록:
cat wordlist.txt | puredns bruteforce domain.com
또한 -q 스위치를 추가하여 발견된 도메인만 출력하여 다른 도구로 파이프할 수 있습니다:
cat domains.txt | puredns resolve -q | httprobe
다음 정보를 파일로 저장하여 워크플로에서 재사용할 수 있습니다:
puredns resolve domains.txt --write valid_domains.txt \
--write-wildcards wildcards.txt \
--write-massdns massdns.txt

위 이미지에서 10만 개의 가장 일반적인 서브도메인으로 구성된 소규모 단어 목록을 사용하여 google.com 도메인에 대한 puredns의 작동을 확인할 수 있습니다.
워크플로의 일환으로 puredns는 자동으로 세 단계를 수행합니다:
massdns를 사용하여 puredns는 모든 도메인 및 서브도메인의 대량 해결을 수행합니다. stdin을 통해 데이터를 massdns에 전달하여 필요에 따라 초당 쿼리 수를 제한하고 생성된 도메인 목록에 대한 기본적인 정리를 수행할 수 있습니다.
기본적으로 입력 도메인은 소문자로 설정되며 유효한 문자(기본적으로 [a-z0-9.-])를 포함하는 항목만 허용됩니다. --skip-sanitize 플래그로 비활성화할 수 있습니다.
이 단계 후에는 결과가 일반적으로 오염됩니다. 일부 공용 리졸버는 잘못된 답변을 보내고 와일드카드 서브도메인이 결과를 빠르게 부풀릴 수 있습니다.
그런 다음 puredns는 자체 와일드카드 탐지 알고리즘을 사용하여 massdns 결과 파일에서 모든 와일드카드 서브도메인 루트를 감지하고 추출합니다.
1단계의 massdns 출력을 DNS 캐시로 사용하여 수행해야 하는 쿼리 수를 최소화합니다. 정확한 결과를 보장하기 위해 DNS 쿼리를 수행하여 캐시 결과를 검증해야 할 수도 있습니다.
--skip-wildcard 플래그를 사용하여 이 단계를 건너뛸 수 있습니다.
DNS 중독으로부터 보호하기 위해 puredns는 신뢰할 수 있는 DNS 리졸버를 사용하여 남은 결과를 검증하기 위해 massdns를 한 번 더 사용합니다. 현재 사용되는 내부 신뢰 리졸버는 8.8.8.8 및 8.8.4.4입니다. 이 단계는 신뢰 리졸버의 속도 제한에 걸리지 않도록 느린 속도로 수행됩니다.
--skip-validation 플래그를 사용하여 이 단계를 건너뛸 수 있습니다.
이 시점에서 결과 파일은 와일드카드 서브도메인과 DNS 중독 답변에서 깨끗해야 합니다.
Trickest는 유효한 리졸버 목록을 여기에서 유지 관리합니다: https://github.com/trickest/resolvers
또는 public-dns.info에서 공용 리졸버 목록을 얻은 다음 DNS Validator 프로젝트를 사용하여 유효한 답변을 제공하는 리졸버만 유지할 수 있습니다.
공용 리졸버가 puredns에 잘못된 정보를 제공하는 경우(예: 중독된 응답을 반환) 일부 서브도메인이 필터링되어 누락될 수 있습니다. 힌트: 중국과 같이 인터넷을 검열하는 국가의 리졸버는 피하세요.
사용자 지정 리졸버 목록이 있으면 -r 인수로 puredns에 전달하거나 ~/.config/puredns/resolvers.txt 파일에 배치할 수 있습니다:
puredns resolve domains.txt -r resolvers.txt
기본 신뢰 리졸버는 현재 8.8.8.8 및 8.8.4.4입니다. 변경하려면 --resolvers-trusted 인수를 사용하거나 ~/.config/puredns/resolvers-trusted.txt 파일에 배치하여 사용자 지정 목록을 지정할 수도 있습니다. puredns에 가장 적합한 신뢰 리졸버를 찾기 위해 많은 테스트를 수행했습니다. 변경하기로 결정했다면 결과를 신중하게 검증하고 --rate-limit-trusted로 속도 제한을 조정하세요.
puredns resolve domains.txt -r resolvers.txt --resolvers-trusted trusted.txt
Puredns는 NXDOMAIN을 포함하는 DNS 답변을 단순히 무시하지 않습니다. 때때로 이러한 NXDOMAIN 답변에는 만료된 도메인을 가리키는 유효한 CNAME 레코드가 있습니다. 이러한 레코드가 있으면 등록되지 않은 도메인을 가리킬 수 있어 서브도메인 탈취가 가능해질 수 있습니다.
IP 주소로 해결되지 않는 도메인이 반환되는 경우 관심 있는 CNAME 레코드가 포함되어 있는지 확인하세요:
dig @8.8.8.8 CNAME example.com
가장 가능성 있는 원인은 DNS 로드 밸런싱입니다. 때로는 고유한 DNS 쿼리마다 다른 IP 주소를 받게 됩니다. 이로 인해 DNS 레코드를 비교하여 와일드카드 서브도메인을 감지하기가 매우 어려워질 수 있습니다.
와일드카드 탐지 중에 서브도메인의 모든 다른 IP 주소를 수집하기 위해 puredns가 수행할 테스트 수를 지정할 수 있습니다. 기본값은 3회 테스트로 매우 낮습니다. 밸런싱이 많은 도메인은 완벽하지는 않지만 충분한 결과를 반환하는 데 50회 이상의 쿼리가 필요한 것을 본 적이 있습니다.
--wildcard-tests 인수를 사용하여 와일드카드 서브도메인 탐지에 수행되는 테스트 수를 늘릴 수 있습니다:
puredns resolve domains.txt --wildcard-tests 50
와일드카드를 탐지하려면 puredns는 발견된 DNS 답변의 캐시를 유지해야 합니다. 도메인 목록이 수억 개이고 많은 와일드카드 서브도메인이 포함된 경우 호스트의 메모리가 부족할 수 있습니다. 하지만 쉬운 해결책이 있습니다.
기본적으로 puredns는 DNS 쿼리 수와 실행 시간을 절약하기 위해 모든 도메인을 단일 배치로 처리합니다. 메모리가 문제인 경우 --wildcard-batch 인수를 사용하여 도메인을 더 작은 배치로 처리할 수 있습니다. 1GB RAM VPS의 경우 1M에서 2M 서브도메인이 적절한 크기임을 발견했습니다.
puredns resolve domains.txt --wildcard-batch 1000000
Puredns는 파이프라인 어디에서도 중복을 제거하지 않습니다. 입력 파일에 동일한 단어나 도메인과 같은 중복 항목이 포함된 경우 puredns는 중복 요소를 출력합니다. sort -u와 같은 도구를 사용하여 puredns에 제공되는 입력 파일에 중복이 없는지 확인할 수 있습니다.
사용 중인 공용 리졸버 때문일 가능성이 높습니다. 일부 리졸버는 쿼리와 관련 없는 답변을 반환하여 출력에 무작위 도메인 이름이 나타날 수 있습니다. Puredns는 현재 이 경우를 처리하지 않으며 사용자가 출력을 정리하여 발견된 도메인이 범위를 준수하는지 확인해야 합니다.
public-dns.info는 공용 및 무료 DNS 리졸버 목록을 지속적으로 업데이트합니다.
DNS Validator는 자신만의 공용 DNS 리졸버 목록을 선별하는 데 사용할 수 있습니다.
all.txt 단어 목록 Jhaddix의 상징적인 all.txt 단어 목록은 서브도메인 열거에 일반적으로 사용됩니다.
shuffleDNS는 다른 알고리즘을 사용하여 와일드카드 서브도메인을 처리하는 Go로 작성된 좋은 대안입니다.
다음 방법으로 puredns에 기여할 수 있습니다:
멋진 새로운 기능에 대한 아이디어가 있나요? 수정하고 싶은 버그를 찾았나요? 좋습니다! 풀 리퀘스트를 보내기 전에 이슈를 제출하여 논의해 주세요.
오타 수정, 모범 사례, 사소한 수정과 같은 사소한 변경에 대한 풀 리퀘스트는 수락하지 않습니다.
이 저장소에 포함된 모든 리졸버는 참고용으로만 제공됩니다. 작성자는 해당 목록의 리졸버 오용에 대해 책임을 지지 않습니다. 사용할 권한이 있는 리졸버 목록을 선별하는 것은 사용자의 책임입니다.
동의 없이 대상을 공격하기 위해 이 프로그램을 사용하는 것은 불법입니다. 모든 관련 법률을 준수하는 것은 사용자의 책임입니다. 개발자는 어떠한 책임도 지지 않으며 이 프로그램으로 인한 오용이나 손해에 대해 책임을 지지 않습니다. 책임감 있게 사용하세요.
이 저장소에 포함된 자료는 GNU GPLv3에 따라 라이선스가 부여됩니다.