
Lepus는 서브도메인을 열거하고, 서브도메인 탈취 가능 여부를 확인하며, 포트 스캔을 수행하는 도구입니다. 그 속도가 정말 빠릅니다!
lepus.py yahoo.com
열거 모드는 Lepus가 주어진 도메인의 서브도메인을 식별하기 위해 사용하는 다양한 방법입니다. 모드는 다음과 같습니다:
또한:
수집기 모드는 다음 서비스로부터 서브도메인을 수집합니다:
config.ini 파일에 API 키를 추가할 수 있습니다.
수집기 모듈은 기본적으로 Lepus에서 실행됩니다. Lepus 실행 중 수집기를 사용하지 않으려면 (API 키 한도를 소진하지 않기 위해) -nc 또는 --no-collectors 인자를 사용할 수 있습니다.
사전 모드는 Lepus에 서브도메인 목록을 제공하고자 할 때 사용할 수 있습니다. -w 또는 --wordlist 인자 뒤에 파일을 지정하면 됩니다. Lepus에는 lists/subdomains.txt에 위치한 커스텀 목록이 함께 제공됩니다. 예시 실행은 다음과 같습니다:
lepus.py -w lists/subdomains.txt yahoo.com
순열 모드는 식별된 서브도메인 목록에 대해 변형을 수행합니다. 각 서브도메인에 대해 lists/words.txt 파일을 기반으로 여러 순열이 생성됩니다. 순열을 위한 커스텀 단어 목록을 제공하려면 -pw 또는 --permutation-wordlist 인자 뒤에 파일 이름을 지정할 수 있습니다. 예시 실행은 다음과 같습니다:
lepus.py --permutate yahoo.com
또는
lepus.py --permutate -pw customsubdomains.txt yahoo.com
역방향 DNS 모드는 해석된 모든 IP 주소를 수집하고 각 IP에 대해 역방향 DNS를 수행하여 더 많은 서브도메인을 탐지합니다. 예를 들어 www.example.com이 1.2.3.4로 해석되면, Lepus는 1.2.3.4에 대해 역방향 DNS를 수행하고 example.com에 속하는 다른 서브도메인(예: www2, internal, oldsite)을 수집합니다.
역방향 DNS 모듈을 실행하려면 --reverse 인자를 사용하세요. 추가로 --ripe (또는 -ripe)를 사용하면 모듈이 두 번째 수준 도메인을 사용하여 RIPE 데이터베이스에서 잠재적 네트워크 범위를 조회하도록 지시할 수 있습니다. 또한 Lepus는 --ranges (또는 -r) 인자를 지원합니다. 이를 사용하여 대상 도메인에 속하는 CIDR에 대해 역방향 DNS 확인을 수행할 수 있습니다.
기본적으로 이 모듈은 이전에 식별된 모든 IP, 정의된 범위, RIPE 데이터베이스를 통해 식별된 범위를 모두 고려합니다. 특정 또는 RIPE 식별 범위에 대해서만 모듈을 실행하고 이미 식별된 모든 IP에 대해서는 실행하지 않으려면 --only-ranges (-or) 인자를 사용할 수 있습니다.
예시 실행은 다음과 같습니다:
lepus.py --reverse yahoo.com
또는
lepus.py --reverse -ripe -r 172.216.0.0/16,183.177.80.0/23 yahoo.com
또는 정의된 범위 또는 RIPE에서 식별된 범위에 대해서만
lepus.py --reverse -or -ripe -r 172.216.0.0/16,183.177.80.0/23 yahoo.com
힌트: Lepus는 열거 중에 ASN 및 네트워크를 식별하므로, 이후 실행에서 이러한 범위를 사용하여 더 많은 서브도메인을 식별할 수도 있습니다.
이 모듈을 통해 Lepus는 마르코프 체인을 활용하여 스스로 학습한 후 이미 알려진 서브도메인을 기반으로 새로운 서브도메인을 생성합니다. 일반적인 표면이 클수록 도구가 더 잘 학습할 수 있으며, 결과도 더 좋아집니다.
모듈은 --markovify 인자로 활성화할 수 있습니다. 매개변수로는 마르코프 상태 크기, 생성된 후보 추가 항목의 최대 길이, 생성할 후보 개수가 포함됩니다. 기본값은 각각 3, 5, 5입니다. 이러한 인자는 -ms (--markov-state), -ml (--markov-length), -mq (--markov-quantity)로 변경하여 필요에 맞출 수 있습니다. 값이 클수록 Lepus가 후보를 생성하는 데 더 많은 시간이 필요합니다.
이 모듈의 실행마다 다른 후보가 생성될 수 있으므로 여러 번 연속해서 실행해도 좋습니다. -ms, -ml, -mq 값이 높을수록 후보 생성에 더 많은 시간이 필요합니다.
lepus.py --markovify yahoo.com
또는
lepus.py --markovify -ms 5 -ml 10 -mq 10
Lepus에는 도메인이 탈취 가능한지 식별하기 위한 시그니처 목록이 있습니다. --takeover 인자를 제공하여 사용할 수 있습니다. 이 모듈은 잠재적 탈취가 식별되면 Slack 알림도 지원하며, config.ini 파일에 Slack 토큰을 추가하면 됩니다. 확인은 다음 서비스에 대해 수행됩니다:
포트 스캔 모듈은 대상에 대해 열린 포트를 확인하고 결과에 기록합니다. --portscan 인자를 사용할 수 있으며, 기본적으로 80, 443, 8000, 8080, 8443 포트를 스캔합니다. 사용자 정의 포트를 사용하거나 미리 정의된 포트 세트를 선택할 수도 있습니다.
| 포트 세트 | 포트 |
|---|---|
| 작음 | 80, 443 |
| 중간 (기본값) | 80, 443, 8000, 8080, 8443 |
| 큼 | 80, 81, 443, 591, 2082, 2087, 2095, 2096, 3000, 8000, 8001, 8008, 8080, 8083, 8443, 8834, 8888, 9000, 9090, 9443 |
예시 실행은 다음과 같습니다:
lepus.py --portscan yahoo.com
또는
lepus.py --portscan -p huge yahoo.com
또는
lepus.py --portscan -p 80,443,8082,65123 yahoo.com
일반 설치:
$ python3.7 -m pip install -r requirements.txt
가능하면 virtualenv에 설치:
$ pyenv virtualenv 3.7.4 lepus
$ pyenv activate lepus
$ pip install -r requirements.txt
debian에 최신 python 설치:
$ apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev libsqlite3-dev wget
$ curl -O https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tar.xz
$ tar -xf Python-3.7.4.tar.xz
$ cd Python-3.7.4
$ ./configure --enable-optimizations --enable-loadable-sqlite-extensions
$ make
$ make altinstall
usage: lepus.py [-h] [-w WORDLIST] [-hw] [-t THREADS] [-nc] [-zt]
[--permutate] [-pw PERMUTATION_WORDLIST] [--reverse]
[-r RANGES] [--portscan] [-p PORTS] [--takeover] [--markovify]
[-ms MARKOV_STATE] [-ml MARKOV_LENGTH] [-mq MARKOV_QUANTITY]
[-f] [-v]
domain
Infrastructure OSINT
positional arguments:
domain 검색할 도메인
optional arguments:
-h, --help 도움말 메시지를 표시하고 종료
-w WORDLIST, --wordlist WORDLIST
서브도메인 목록이 있는 단어 목록
-hw, --hide-wildcards
와일드카드 해석 결과 숨기기
-t THREADS, --threads THREADS
스레드 수 [기본값은 100]
-nc, --no-collectors 수동적 서브도메인 열거 건너뛰기
-zt, --zone-transfer 식별된 네임 서버에서 영역 전송 시도
--permutate 해석된 도메인에 대해 순열 수행
-pw PERMUTATION_WORDLIST, --permutation-wordlist PERMUTATION_WORDLIST
순열을 수행할 단어 목록 [기본값은 lists/words.txt]
--reverse 해석된 공인 IP 주소에 대해 역방향 DNS 조회 수행
-ripe, --ripe 두 번째 수준 도메인으로 RIPE 데이터베이스 조회하여
역방향 조회에 사용할 네트워크 찾기
-r RANGES, --ranges RANGES
역방향 DNS 조회를 수행할 쉼표로 구분된 IP 범위
-or, --only-ranges -r 또는 -ripe로 제공된 범위만 사용하고 이전에 식별된 모든 IP는 사용하지 않음
--portscan 해석된 공인 IP 주소의 열린 포트 스캔
-p PORTS, --ports PORTS
포트스캔 모듈에서 사용할 포트 세트 [기본값은 medium]
--takeover 식별된 호스트에 대해 잠재적 서브도메인 탈취 확인
--markovify 마르코프 체인을 사용하여 추가 서브도메인 식별
-ms MARKOV_STATE, --markov-state MARKOV_STATE
마르코프 상태 크기 [기본값은 3]
-ml MARKOV_LENGTH, --markov-length MARKOV_LENGTH
마르코프 치환 최대 길이 [기본값은 5]
-mq MARKOV_QUANTITY, --markov-quantity MARKOV_QUANTITY
후보 길이당 마르코프 결과 최대 개수 [기본값은 5]
-f, --flush 데이터베이스에서 지정된 도메인의 모든 레코드 제거
-v, --version 프로그램 버전 번호를 표시하고 종료
다음은 사용 가능한 모든 활성 인자를 포함한 예시 실행입니다:
./lepus.py python.org --wordlist lists/subdomains.txt --permutate -pw ~/mypermsword.lst --reverse -ripe -r 10.11.12.0/24 --portscan -p huge --takeover --markovify -ms 3 -ml 10 -mq 10
다음 명령어는 특정 도메인의 모든 데이터베이스 항목을 제거합니다:
./lepus.py python.org --flush
| 서비스 | API 필요 |
|---|
| 매우 큼 | 80, 81, 300, 443, 591, 593, 832, 981, 1010, 1311, 2082, 2087, 2095, 2096, 2480, 3000, 3128, 3333, 4243, 4567, 4711, 4712, 4993, 5000, 5104, 5108, 5800, 6543, 7000, 7396, 7474, 8000, 8001, 8008, 8014, 8042, 8069, 8080, 8081, 8088, 8090, 8091, 8118, 8123, 8172, 8222, 8243, 8280, 8281, 8333, 8443, 8500, 8834, 8880, 8888, 8983, 9000, 9043, 9060, 9080, 9090, 9091, 9200, 9443, 9800, 9943, 9980, 9981, 12443, 16080, 18091, 18092, 20720, 28017 |