# Поиск доменных имен

**Активный поиск**

Запросы к DNS-cервису организации

**1. Опрос DNS сервиса** на известные ему записи раскрывающие доменные имена, связанные с доменом 2-го уровня. Т.е. выполнение запросов к таким DNS записям, как: CNAME, MX, NS, SRV и т.д. [Подробнее](https://ru.wikipedia.org/wiki/%D0%A2%D0%B8%D0%BF%D1%8B_%D1%80%D0%B5%D1%81%D1%83%D1%80%D1%81%D0%BD%D1%8B%D1%85_%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D0%B5%D0%B9_DNS)

A – используется для указания доменного имени, например, testdomain.com, на IP-адрес его хост-сервера;  
MX – записи, отвечающие за обмен электронной почтой;  
NS – предназначены для идентификации DNS-серверов, ответственных за домен;  
SRV – записи для выделения службы, размещенной на определенных серверах;  
PTR – обратный поиск DNS: с помощью IP вы можете получить связанный с ним домен;  
SOA – начало записи: это информация о зоне DNS и других записях DNS;  
CNAME – сопоставляет целевое доменное имя с другим доменным именем.

Чтобы получить записи всех типов можно использовать тип запроса ANY

```bash
┌──(kali㉿kali)-[~]
└─$ nslookup -q=ANY cyber-ed.ru 8.8.8.8
Server:         8.8.8.8
Address:        8.8.8.8#53

Non-authoritative answer:
Name:   cyber-ed.ru
Address: 178.154.245.151
cyber-ed.ru     nameserver = ns2.reg.ru.
cyber-ed.ru     nameserver = ns1.reg.ru.

Authoritative answers can be found from:


┌──(kali㉿kali)-[~]
└─$ nslookup -q=ANY cyber-ed.ru ns1.reg.ru
Server:         ns1.reg.ru
Address:        194.58.117.17#53

Name:   cyber-ed.ru
Address: 178.154.245.151
```

**2. Перебор доменных имен**. Делаем или используем готовый список возможных поддоменов и опрашиваем DNS сервис в формате *слово.example.com*. Есть списки часто используемых поддоменов. Называются gists. В Kali они есть по /usr/share/wordlists/amass/bitquark\_subdomains\_top100K.txt Или можно в google "subdomain wordlist site:gist.github.com".

```bash
#!/bin/bash

DOMAIN=$1
FILE=$2

while read -r subdomain; do
  echo "${subdomain}.${DOMAIN}"
done < "${FILE}" > ${DOMAIN}.txt
```

Пример использования утилиты [subfinder](https://github.com/projectdiscovery/subfinder) со стандартным словарем для перебора доменных имен:

```
subfinder -d cyber-ed.ru
```

В kali они называются gists. Есть скрипт в [Black hat bash](http://bobrobotirk.ru/books/informacionnaia-bezopasnost/page/black-hat-bash "Black hat bash")

Последняя версия через docker:

```
docker run projectdiscovery/subfinder:latest -d cyber-ed.ru
```

**3. Выполнение запроса AXFR**. AXFR запрос, или Zone transfer — это процесс передачи копии базы данных с DNS-зоной от главного сервера к вторичному. В идеале трансфер зоны ограничен только для определенных доверенных серверов, но неправильно сконфигурированные серверы разрешают трансферы любому, кто их попросит.

Пример выполнения такого запроса: `nslookup -q=AXFR example.com` (зачастую требует указания конкретного DNS-сервера, к которому будет отправлен запрос).

```
─$ nslookup -q=AXFR cyber-ed.ru ns1.reg.ru
Server:         ns1.reg.ru
Address:        176.99.13.15#53

** server can't find cyber-ed.ru: NOTAUTH
; Transfer failed.
```

**4. amass**

```
amass enum -d <host>
```

Текущая 4 версия. Работает архидолго, находит не так чтобы много. Но может найти что-то интересное. Формат вывода:

```bash
test.cyber-ed.ru (FQDN) --> a_record --> 185.215.4.43 (IPAddress)
infra.cyber-ed.ru (FQDN) --> a_record --> 84.54.44.31 (IPAddress)
84.201.128.0/18 (Netblock) --> contains --> 84.201.134.36 (IPAddress)
84.54.44.0/23 (Netblock) --> contains --> 84.54.44.31 (IPAddress)
200350 (ASN) --> managed_by --> AS200350 - Yandex.Cloud LLC (RIROrganization)
```

amass v3

Работает быстрее, доступен через docker

```
docker run caffix/amass:v3 enum -d <host>
```

Для amass v3 ключ -passive запрещает искать ip адреса. Ключи amass v3 и v4 сильно отличаются.

**5. The Harvester**

-b указывается источник данных (sitedossier, duckduckgo  
-d домен

```python
#!/usr/bin/python
import sys
import os
if len(sys.argv) < 2:
    sys.exit(-1)
providers = [ 'duckduckgo', 'bing', 'baidu', 'dnsdumpster', 'hunter', 'sitedossier' ]
for a in providers:
    cmd = 'theHarvester -d {0} -b {1} -f {2}.html'.format(sys.argv[1], a, a)
    os.system(cmd)
```

**6. Другие инструменты:**

- [Sublist3r](https://github.com/aboul3la/Sublist3r) — OSINT инструмент поиска поддоменов
- [assetfinder](https://github.com/tomnomnom/assetfinder) — пассивный сканер поддоменов на Go
- Также страница [Shodan.io, Google](http://bobrobotirk.ru/books/informacionnaia-bezopasnost/page/shodanio-google "Shodan.io, Google")

**Пассивный поиск**

Использование служб и сайтов, которые произвели активный поиск за нас или агрегировали известную информацию среди открытых источников. Примеры:

- dnsdumpster.com
- shodan.io
- censys.io
- crt.sh
- pentest-tools.com

**Объединение данных из разных источников**

Нужно преобразовать выходную информацию к одному формату и сделать итоговый список имен. Задача: сохранить файлы из разных источников по одному шаблону и создать итоговый файл (включая вручную созданные из web ресурсов файлы). Шаблон создаваемых файлов: domain\_tool.txt (например bobrobotirk.ru\_subfinder.txt). Часть скрипта по объединению файлов:

```bash
#!/bin/bash

DOMAIN=$1
OUTPUT_FILE="$DOMAIN/subdomains_merged.txt"

mkdir -p $DOMAIN
#вызов инструментов

cat "$DOMAIN/${DOMAIN}_"*.txt | sort | uniq > "$OUTPUT_FILE"
```

Осталось в часть *\#вызов инструментов* добавить конкретные инструменты.

**Описание nslookup**

<table border="1" id="bkmrk--type%3Dtext-%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D0%B8-%D0%BE%D0%BF" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 24.8215%;"></col><col style="width: 75.2977%;"></col></colgroup><tbody><tr><td>-type=TEXT</td><td>записи определенного типа</td></tr><tr><td>  
</td><td>  
</td></tr><tr><td>  
</td><td>  
</td></tr></tbody></table>

Перебор DNS записей из списка доменных имен