
조직 네트워크 스캐닝을 위한 빠르고 포괄적인 도구
기능 • 사용법 • 설치 • 사용법 • 기여 • 추가 참고 사항
Domainim은 조직 네트워크 스캔을 위한 빠른 도메인 정찰 도구입니다. 이 도구는 OSINT, 브루트포싱, DNS 확인 등의 기법을 사용하여 조직 구조에 대한 간략한 개요를 제공하는 것을 목표로 합니다.
현재 기능 (v1.3.0)-

가상 호스트명 열거
역방향 DNS 조회
와일드카드 서브도메인을 감지합니다. 와일드카드 IP로만 확인되는 수동 결과는 TLS 인증서에서 확인되지 않는 한 숨겨집니다. --force-brute로 브루트포싱을 강제할 수 있으며, 이 경우 와일드카드 IP로만 확인되는 결과는 폐기됩니다
기본 TCP 포트 스캔
서브도메인을 입력으로 허용
결과를 JSON 파일로 내보내기
일부 기능은 작업 진행 중입니다. 자세한 내용은 계획된 기능을 참조하세요.
이 프로젝트는 Sublist3r에서 영감을 받았습니다. 포트 스캐너 모듈은 NimScan을 기반으로 합니다.
이 저장소를 소스에서 빌드할 수 있습니다-
git clone [email protected]:pptx704/domainim
nimble build
./domainim <domain> [--ports=<ports>]
또는 릴리스 페이지에서 바이너리를 직접 다운로드할 수 있습니다. 바이너리는 Debian 기반 시스템에서만 테스트되었다는 점을 유의하세요.
./domainim <domain> [--ports=<ports> | -p:<ports>] [--wordlist=<filename> | -l:<filename> [--rps=<int> | -r:<int>] [--force-brute | -f]] [--dns=<dns> | -d:<dns>] [--out=<filename> | -o:<filename>]
<domain>은 열거할 도메인입니다. 하위 도메인일 수도 있습니다.-- ports | -p는 스캔할 포트를 지정하는 문자열입니다. 다음 중 하나일 수 있습니다-
all - 모든 포트 스캔 (1-65535)none - 포트 스캔 건너뛰기 (기본값)t<n> - 가장 흔한 상위 n개 포트 스캔 (nmap과 동일). 예: t100은 상위 100개 포트를 스캔합니다. 최댓값은 5000입니다. n이 5000보다 크면 5000으로 설정됩니다.80은 포트 80을 스캔합니다80-100은 포트 80부터 100까지 스캔합니다80,443,8080은 포트 80, 443, 8080을 스캔합니다80,443,8080-8090,t500은 포트 80, 443, 8080부터 8090까지 그리고 상위 500개 포트를 스캔합니다--dns | -d는 DNS 서버의 주소입니다. 유효한 IPv4 주소여야 하며 선택적으로 포트 번호를 포함할 수 있습니다-
a.b.c.d - a.b.c.d의 포트 53에 있는 DNS 서버 사용a.b.c.d#n - a.b.c.d의 포트 n에 있는 DNS 서버 사용--wordlist | -l - 워드리스트 파일의 경로입니다. 하위 도메인 브루트포싱에 사용됩니다. 파일이 유효하지 않으면 브루트포싱은 건너뜁니다. 빈 줄과 #으로 시작하는 줄은 무시됩니다. 워드리스트는 SecLists에서 받을 수 있습니다. 워드리스트는 릴리스 페이지에도 제공됩니다.--force-brute | -f - 와일드카드 레코드가 발견되더라도 브루트포싱합니다. 와일드카드 IP로만 확인되는 하위 도메인은 폐기됩니다.--rps | -r - 브루트포싱 중 초당 요청 수입니다. 기본값은 1024 req/s입니다. DNS 쿼리는 배치로 이루어지며 이전 배치가 완료된 후에만 다음 배치가 이루어진다는 점에 유의해야 합니다. 쿼리에 속도 제한이 걸릴 수 있으므로 값을 늘린다고 해서 항상 더 빠른 결과가 보장되지는 않습니다.--out | -o - 출력 파일의 경로입니다. 출력은 JSON 형식으로 저장됩니다. 파일 이름은 .json으로 끝나야 합니다.예시
./domainim nmap.org --ports=all./domainim google.com --ports=none --dns=8.8.8.8#53./domainim pptx704.com --ports=t100 --wordlist=wordlist.txt --rps=1500./domainim pptx704.com --ports=t100 --wordlist=wordlist.txt --out=results.json./domainim nmap.org --wordlist=wordlist.txt --force-brute./domainim mysite.com --ports=t50,5432,7000-9000 --dns=1.1.1.1도움말 메뉴는 ./domainim --help 또는 ./domainim -h를 사용하여 접근할 수 있습니다.
Usage:
domainim <domain> [--ports=<ports> | -p:<ports>] [--wordlist=<filename> | -l:<filename> [--rps=<int> | -r:<int>] [--force-brute | -f]] [--dns=<dns> | -d:<dns>] [--out=<filename> | -o:<filename>]
domainim (-h | --help)
Options:
-h, --help Show this screen.
-p, --ports Ports to scan. [default: `none`]
Can be `all`, `none`, `t<n>`, single value, range value, combination
-l, --wordlist Wordlist for subdomain bruteforcing. Bruteforcing is skipped for invalid file.
-f, --force-brute Bruteforce even if a wildcard record is found. Results resolving only to wildcard IPs are discarded.
-d, --dns IP and Port for DNS Resolver. Should be a valid IPv4 with an optional port [default: system default]
-r, --rps DNS queries to be made per second [default: 1024 req/s]
-o, --out JSON file where the output will be saved. Filename must end with `.json`
Examples:
domainim domainim.com -p:t500 -l:wordlist.txt --dns:1.1.1.1#53 --out=results.json
domainim sub.domainim.com --ports=all --dns:8.8.8.8 -l:wordlist.txt -r:1500 -f -o:results.json
결과에 대한 JSON 스키마는 다음과 같습니다-
[
{
"subdomain": string,
"data": [
{
"ipv4": string,
"vhosts": [string],
"reverse_dns": string,
"ports": [int]
}
]
}
]
nmap.org에 대한 예시 JSON은 여기에서 확인할 수 있습니다.
기여를 환영합니다. 편하게 풀 리퀘스트나 이슈를 열어 주세요.
이 프로젝트는 아직 초기 단계입니다. 제가 인지하고 있는 몇 가지 제한 사항이 있습니다.
제가 사용하는 엔진(Sublist3r에서 그렇게 부르기 때문에 엔진이라고 부릅니다)은 무료이며 키가 필요 없는 서비스이고, 대부분 응답 제한이 있습니다. dnsdumpster는 무료 사용자에게 최대 50개의 서브도메인을 반환하고 rapiddns는 약 100개를 반환합니다. hackertarget은 IP당 하루에 몇 번의 쿼리만 허용하며 certspotter는 현재 유효한 인증서만 반환합니다. crt.sh는 결과가 너무 많을 경우 결과를 무작위화하며 자주 과부하 상태(HTTP 502)가 됩니다. 따라서 일부 도메인의 경우 실행할 때마다 결과가 다를 수 있습니다. 실패한 엔진은 보고되고 건너뛰며, 스캔을 중단시키지는 않습니다. 수동 소스에는 오래되었거나 와일드카드로 생성된 이름이 포함될 수도 있습니다.
모든 IP는 단일 이벤트 루프에서 동시에 포트 스캔됩니다(최대 4096개의 연결 시도가 진행 중이고 초당 최대 5000개가 시작되므로 로컬 및 라우터 큐가 SYN 패킷을 드롭하지 않습니다). ping에 응답하지 않는 호스트는 스캔되지 않습니다. 포트 스캐너의 타임아웃은 ping 응답 시간 + 750ms뿐입니다. 이로 인해 거짓 음성이 발생할 수 있습니다. domainim은 포트 스캐닝을 위한 것이 아니라 빠른 개요를 제공하기 위한 것이므로 이러한 경우는 허용됩니다. 그러나 타임아웃을 늘리는 플래그를 추가할 계획입니다. 같은 이유로 필터링된 포트는 표시되지 않습니다. 보다 포괄적인 포트 스캐닝을 위해서는 Nmap을 사용하시길 권장합니다. Domainim은 또한 속도 제한(있는 경우)을 우회하지 않습니다.
vhostname이 출력되는 방식은 단순히 반복만 늘리는 것처럼 보일 수 있습니다.

다음과 같이 출력하는 것이 더 나았을 수도 있습니다-
ack.nmap.org, issues.nmap.org, nmap.org, research.nmap.org, scannme.nmap.org, svn.nmap.org, www.nmap.org
↳ 45.33.49.119
↳ Reverse DNS: ack.nmap.org.
하지만 이전에 테스트하는 동안 모든 IP가 동일한 vhostname 집합에 의해 공유되지 않는 경우를 발견했습니다. 그래서 이 방식을 유지하기로 결정했습니다.

DNS 서버에는 일종의 속도 제한이 있을 수 있습니다. 그래서 쿼리당 IPv4 확인에 무작위 지연(0-300ms)을 추가했습니다. 이는 DNS 서버가 모든 쿼리를 한꺼번에 받지 않고 보다 자연스러운 방식으로 받도록 하기 위함입니다. 무차별 대입 방식의 경우 기본값은 0-1000ms이지만 --rps | -r 플래그를 사용하여 변경할 수 있습니다.
저를 괴롭히는 한 가지 특정한 제한 사항은 DNS 리졸버가 도메인의 모든 IP를 반환하지 않는다는 점입니다. 따라서 모든(또는 대부분의) IP를 얻으려면 여러 번 쿼리해야 합니다. 하지만 다시 말해, 도메인에 IP가 몇 개 있는지 알 수 있는 방법은 없습니다. 이에 대한 해결책을 아직 마련해야 합니다. CNAME 레코드가 있는 도메인은 CNAME 대상의 IPv4 주소로 확인됩니다.
기본적으로 가능한 와일드카드 하위 도메인이 발견되면 무차별 대입은 건너뜁니다. 이는 도메인에 와일드카드 하위 도메인이 있는 경우 무차별 대입이 가능한 모든 하위 도메인에 대해 IPv4를 확인하기 때문입니다. 그래도 무차별 대입을 하려면 --force-brute | -f를 사용하십시오. 이 경우 와일드카드 IP가 먼저 감지되고 해당 IP로만 확인되는 하위 도메인은 폐기되므로 scanme.nmap.org와 같은 유효한 하위 도메인은 여전히 발견됩니다. 와일드카드 레코드와 IP를 공유하는 하위 도메인은 그것과 구별할 수 없으며 마찬가지로 폐기됩니다.