Вступление
Вот как вы думаете, как можно собрать поддомены на сайте ? Многие мне ответят: все просто. Брутишь их через knock и закидываешь в subfinder, на выходе получаешь результат. Но по правде говоря, результат будет такой себе. В этой статье я хочу вас научить, как правильно собирать поддомены с наибольшей эффективностью
В статье не содержатся призывы к нарушению законодательства. Автор не несёт ответственности за возможные действия третьих лиц, предпринятые на основе прочитанного.
Зачем собирать поддомены?
Вопрос на самом деле риторический.
Методы поиска
Давайте я вам покажу самые эффективные и интересные методы сбора по моему мнению, какими я всегда пользуюсь.
P.s: в качестве демонстрации будем искать на .gov.uk. Выбрал я именно gov.uk потому что почти на все gov’ы сыпят очень много результатов, что в данном случае идеально для демонстрации. А еще у gov.uk есть своя VDP на H1. Так что любая находка просто так не пропадет.
1. Брут
Чтобы качественно пробрутить, я буду использовать лучший по моему мнению fuzzer и мощный словарь от assetnote. Покопавшись в –help я смог собрать вот такую команду:
ffuf -u https://fuzz.gov.uk -w словарь -H "Host: FUZZ.site.com" -mc 200,302,403,500 -o ffuf_result.json -t 280 -timeout 25 -ignore-body -http2 -rate 40
Словарь взял от сюда https://wordlists-cdn.assetnote.io/data/manual/2m-subdomains.txt
Запускаем и с ходу наблюдаем что уже что-то нашло. Но не акцентируем на этом внимание, пусть FFUF сам себе работает на фоне, а мы будем собирать дальше.
2. Subdomz
Subdomz это своего рода скрипт спаситель, лучший в своем роде. Он использует большой список инструментов и выполняет сканирование при помощи них. После завершения сканирования, скрипт чекает найденные поддомены через httpx и чистит от дубликатов. Очень удобно. Но мы вернемся к нему позже
3. Favicon
Favicon - это значок страницы. На фото внизу показаны примеры, где вы можете его увидеть при повседневном серфинге.
Особенность этого мелкого значка в том, что у него есть свое уникальное цыфровое значения хэша. То Есть каждый favicon уникален. Благодаря этому, мы можем получить сайты, какие используют такой же favicon. Давайте получим цифровой хэш gov.uk и сделаем по нему разведку:
python3 -c "import mmh3,requests,codecs,sys; print(mmh3.hash(codecs.encode(requests.get(sys.argv[1]).content, 'base64')))" "https://example.com/favicon.ico"
Путь к favicon почти всегда лежит в корне сайта, по пути сайт/favicon.ico . Но иногда иконки по этому пути нету. В таком случае, чтобы ее найти, вы можете через devtools открыть вкладку network и перезагрузить страницу. В запросах будет то что там надо.
Теперь для разведки нам нужны поисковики, такие как Shodan и Zoomeye. Вообще, при разведке favicon может быть полезен не только для сбора поддоменов. Я его использую еще чтоб найти реальный IP адрес сайта. Но это уже другая статья
Как же он нам может быть полезен в рамках этой статьи?
Если у двоих сайтов одинаковая иконка, значит, они как-то взаимосвязаны.
Если у blog.site.com favicon -1000000000, то у admin.blog.site.com с большой вероятностью будет тоже такоt же числовое значения хэша favicon’a.
Поисковой запрос: http.favicon.hash:<числ. знач.>
Вот что мне удалось найти, через числовое значение домена gov.uk
60 поддоменов. Если провести такие манипуляции с иконкой от subdomain.gov.uk, то получим другие результаты. Довольно интересно, не так-ли?
4. Гугл доркинг
Сразу скажу - гугл доркинг подойдет далеко не для всех таргетов. Чтобы понять, подходит ли он в вашем случае, взгляните на кол-во индексированных страниц:
Для того чтобы спарсить результаты гугл поиска, я на дне интернета нашел “Extract Serp”. Он очень прост в использовании и удобен, всем кто любит доркать советую.
javascript: var a = document.getElementsByTagName('a'), arr = '';for(var i=0; i<a.length; i++) if (a.ping && !a.href.includes('google'))arr +=('<p>' + a.href + '</p>');var newWindow = window.open();newWindow.document.write(arr);newWindow.document.close();
Чтобы его “установить”, просто добавляем код выше в качестве значения URL для закладки.
Теперь при поиске, в URL добавляем параметр num=999 в URL
И нажимаем на extract serp
Откроется новая вкладка со всеми ссылками. Но есть одна проблема: сделать, чтобы выдало все 123 000 000 результатов невозможно… Можно получить только 200 результатов. И тут вступают в помощь фильтры. Чтобы получить хотя бы тысяч 5, делаем следующее:
Парсим все ссылки, используя диапазоны дат. Например, берём только те, что были проиндексированы за последние полгода.
Двигаемся последовательно от (например 2009) года до 2025 года, разбивая каждый год на промежутки:
При этом правило простое:
Знаю, звучит крайне убого и тупо. Если вы знаете, как обходить капчу в данном случае бесплатно (без платных сервисов какие решают капчу), то напишите в ЛС или раскритикуйте меня в комментариях
Выглядело это как-то так, продоркал я каждые 4 месяца, начиная с 2015 по 2020 год. Спустя минут 15 я получил вот такие результаты:
Чем меньше диапазон тем лучше результат
Настраиваем SubDomz
Вот эта та часть, которая отнимет у вас лишние пару часов времени.
git clone https://github.com/0xPugal/SubDomz
cd SubDomz
При помощи bash check.sh мы можем узнать, какие инструменты у нас уже установлены, а какие следует установить. Вот тут конечно надо долго и муторно все ставить. Инструмент будет installed, если он в /usr/bin
Но тут есть некоторые нюансы. Не знаю как у вас, но у меня SubDomz.sh бросался ошибками. Я их пофиксил следуйщим образом:
На
Установка
У нас есть файл install.sh. Но он какой-то кривой, и ничего нормально не устанавливает.
Чтобы появились файлы resolvers.txt и dns.txt, прописываем следующие команды в терминал:
wget -O best-dns-wordlist.txt https://wordlists-cdn.assetnote.io/data/manual/best-dns-wordlist.txt (не обязательно, мы брутим поддомены отдельно)
git clone https://github.com/trickest/resolvers (список резолверов я бы рекомендовал обновлять перед каждым сканированием (если добавились в репозиторий свежие))
Если у вас что-то не установлено, то скрипт просто сообщит об этом, он не будет заканчивать работу. После успешной установки всех инструментов должно быть вот так:
Из этого списка я бы хотел разобрать парочку прикольных инструментов, чтобы вы поняли, какими техниками можно собирать поддомены. Не всегда под рукой может оказаться SubDomz
Мы можем попросить как и выдать ссылки с site.com, так и c *.site.com, что становиться отличным методом для сбора не только поддоменов, но и для того, чтобы скормить эти ссылки всяким sqlmap’ам, dalfox’ам и т.д … Примерно так же это работает и для остальных сервисов, можно получить все ссылки какие есть у них в бд)
Аналогично с gitlab. Эти инструменты делают такие поиски, и вытаскивают поддомены с чужого кода. Гениально и просто. Для их работы нужны только апи ключи
С этим разобрались. Теперь открываем файл config.txt
Тут мы добавляем все апи ключи, какие нас просят. Можете также изменить резолверы, словарь, конфиги под инструменты. Я советую вам записывать все апи ключи в текстовый файл. В будущем это сможет сэкономить очень много времени. В наше время много инструментов требуют апи ключи.
Конфиги для subfinder, amass, hacktrails
Знаете, каждый раз когда я вижу методы сбора поддоменов, про subfinder и amass пишут везде. Но никто не говорит что процент собранной инфы можно увеличить раз в 8 через посторонние сервисы. Часть моего конфига на subfinder (по пути ~/.config/subfinder/provider-config.yaml):
BeVigil - https://bevigil.com/osint-api
BinaryEdge - https://binaryedge.io
BufferOver - https://tls.bufferover.run
C99 - https://api.c99.nl/
Censys - https://censys.io
CertSpotter - https://sslmate.com/certspotter/api/
Chaos - https://chaos.projectdiscovery.io
Chinaz - http://my.chinaz.com/ChinazAPI/DataCenter/MyDataApi
DNSDB - https://api.dnsdb.info
Fofa - https://fofa.info/static_pages/api_help
FullHunt - https://fullhunt.io
GitHub - https://github.com
Intelx - https://intelx.io
PassiveTotal - http://passivetotal.org
quake - https://quake.360.cn
Robtex - https://www.robtex.com/api/
SecurityTrails - http://securitytrails.com
Shodan - https://shodan.io
ThreatBook - https://x.threatbook.cn/en
VirusTotal - https://www.virustotal.com
WhoisXML API - https://whoisxmlapi.com/
ZoomEye - https://www.zoomeye.org
ZoomEye API - https://api.zoomeye.org
dnsrepo - https://dnsrepo.noc.org
Hunter - https://hunter.qianxin.com/
Facebook - https://developers.facebook.com
BuiltWith - https://api.builtwith.com/domain-api
Заполняем конфиг файл еще и в amass. Также это можно сделать и в таких инструментах как findomain и Haktrails. Но я этого не делал, так как на мой взгляд это бессмысленно. Они используют все те самые апи что и amass с subfinder’ом.
Время протестить SubDomz. Запускаем
bash SubDomz.sh -d gov.uk -o out.txt
И получаем вот такое вот большое кол-во собранных поддоменов
Но пока мы все это делали, закончил свою работу и FFUF, собрав нам 178 поддоменов.
После всего этого, я по фану решил зайти на 10 из них, и просто потыкать. На 6-ом я увидел вот такую картину:
Найти XSS у меня заняло 36 минут. Еще одно доказательство, что на gov сайтах зачастую много дырок
Вот как вы думаете, как можно собрать поддомены на сайте ? Многие мне ответят: все просто. Брутишь их через knock и закидываешь в subfinder, на выходе получаешь результат. Но по правде говоря, результат будет такой себе. В этой статье я хочу вас научить, как правильно собирать поддомены с наибольшей эффективностью
В статье не содержатся призывы к нарушению законодательства. Автор не несёт ответственности за возможные действия третьих лиц, предпринятые на основе прочитанного.
Зачем собирать поддомены?
Вопрос на самом деле риторический.
- Больше поддоменов = больше шанс найти subdomain takeover. А для любителей всякого фишинга и спама такая находка на вес золота
- Больше поддоменов = больше уязвимостей. При детальной разведке, есть шанс найти какой-то не тронутый, старый субдомен какой просто пылиться с 1000 заходами в месяц. Если вы такой нашли - знайте, пахнет деньгами
- Скрытый функционал. На поддоменах часто стоят какие то корпоративные панельки. Кодеры думают, что так их никто не найдет, но они очень ошибаются.
Методы поиска
Давайте я вам покажу самые эффективные и интересные методы сбора по моему мнению, какими я всегда пользуюсь.
P.s: в качестве демонстрации будем искать на .gov.uk. Выбрал я именно gov.uk потому что почти на все gov’ы сыпят очень много результатов, что в данном случае идеально для демонстрации. А еще у gov.uk есть своя VDP на H1. Так что любая находка просто так не пропадет.
1. Брут
Чтобы качественно пробрутить, я буду использовать лучший по моему мнению fuzzer и мощный словарь от assetnote. Покопавшись в –help я смог собрать вот такую команду:
ffuf -u https://fuzz.gov.uk -w словарь -H "Host: FUZZ.site.com" -mc 200,302,403,500 -o ffuf_result.json -t 280 -timeout 25 -ignore-body -http2 -rate 40
Словарь взял от сюда https://wordlists-cdn.assetnote.io/data/manual/2m-subdomains.txt
Не удалось прогрузить медиа
Запускаем и с ходу наблюдаем что уже что-то нашло. Но не акцентируем на этом внимание, пусть FFUF сам себе работает на фоне, а мы будем собирать дальше.
2. Subdomz
Не удалось прогрузить медиа
Subdomz это своего рода скрипт спаситель, лучший в своем роде. Он использует большой список инструментов и выполняет сканирование при помощи них. После завершения сканирования, скрипт чекает найденные поддомены через httpx и чистит от дубликатов. Очень удобно. Но мы вернемся к нему позже
3. Favicon
Favicon - это значок страницы. На фото внизу показаны примеры, где вы можете его увидеть при повседневном серфинге.
Не удалось прогрузить медиа
Не удалось прогрузить медиа
Особенность этого мелкого значка в том, что у него есть свое уникальное цыфровое значения хэша. То Есть каждый favicon уникален. Благодаря этому, мы можем получить сайты, какие используют такой же favicon. Давайте получим цифровой хэш gov.uk и сделаем по нему разведку:
python3 -c "import mmh3,requests,codecs,sys; print(mmh3.hash(codecs.encode(requests.get(sys.argv[1]).content, 'base64')))" "https://example.com/favicon.ico"
Не удалось прогрузить медиа
Путь к favicon почти всегда лежит в корне сайта, по пути сайт/favicon.ico . Но иногда иконки по этому пути нету. В таком случае, чтобы ее найти, вы можете через devtools открыть вкладку network и перезагрузить страницу. В запросах будет то что там надо.
Не удалось прогрузить медиа
Теперь для разведки нам нужны поисковики, такие как Shodan и Zoomeye. Вообще, при разведке favicon может быть полезен не только для сбора поддоменов. Я его использую еще чтоб найти реальный IP адрес сайта. Но это уже другая статья
Как же он нам может быть полезен в рамках этой статьи?
Если у двоих сайтов одинаковая иконка, значит, они как-то взаимосвязаны.
Если у blog.site.com favicon -1000000000, то у admin.blog.site.com с большой вероятностью будет тоже такоt же числовое значения хэша favicon’a.
Поисковой запрос: http.favicon.hash:<числ. знач.>
Вот что мне удалось найти, через числовое значение домена gov.uk
Не удалось прогрузить медиа
60 поддоменов. Если провести такие манипуляции с иконкой от subdomain.gov.uk, то получим другие результаты. Довольно интересно, не так-ли?
4. Гугл доркинг
Сразу скажу - гугл доркинг подойдет далеко не для всех таргетов. Чтобы понять, подходит ли он в вашем случае, взгляните на кол-во индексированных страниц:
Не удалось прогрузить медиа
Не удалось прогрузить медиа
Для того чтобы спарсить результаты гугл поиска, я на дне интернета нашел “Extract Serp”. Он очень прост в использовании и удобен, всем кто любит доркать советую.
javascript: var a = document.getElementsByTagName('a'), arr = '';for(var i=0; i<a.length; i++) if (a.ping && !a.href.includes('google'))arr +=('<p>' + a.href + '</p>');var newWindow = window.open();newWindow.document.write(arr);newWindow.document.close();
Чтобы его “установить”, просто добавляем код выше в качестве значения URL для закладки.
Не удалось прогрузить медиа
Теперь при поиске, в URL добавляем параметр num=999 в URL
Не удалось прогрузить медиа
И нажимаем на extract serp
Не удалось прогрузить медиа
Откроется новая вкладка со всеми ссылками. Но есть одна проблема: сделать, чтобы выдало все 123 000 000 результатов невозможно… Можно получить только 200 результатов. И тут вступают в помощь фильтры. Чтобы получить хотя бы тысяч 5, делаем следующее:
Не удалось прогрузить медиа
Парсим все ссылки, используя диапазоны дат. Например, берём только те, что были проиндексированы за последние полгода.
Двигаемся последовательно от (например 2009) года до 2025 года, разбивая каждый год на промежутки:
- 1 января – 30 июня 2009
- 1 июля – 31 декабря 2009
- 1 января – 30 июня 2009
При этом правило простое:
- чем больше ссылок проиндексировано за все время, тем меньше диапазон надо брать.
Знаю, звучит крайне убого и тупо. Если вы знаете, как обходить капчу в данном случае бесплатно (без платных сервисов какие решают капчу), то напишите в ЛС или раскритикуйте меня в комментариях
Не удалось прогрузить медиа
Выглядело это как-то так, продоркал я каждые 4 месяца, начиная с 2015 по 2020 год. Спустя минут 15 я получил вот такие результаты:
Не удалось прогрузить медиа
Чем меньше диапазон тем лучше результат
Настраиваем SubDomz
Вот эта та часть, которая отнимет у вас лишние пару часов времени.
git clone https://github.com/0xPugal/SubDomz
cd SubDomz
При помощи bash check.sh мы можем узнать, какие инструменты у нас уже установлены, а какие следует установить. Вот тут конечно надо долго и муторно все ставить. Инструмент будет installed, если он в /usr/bin
Не удалось прогрузить медиа
Но тут есть некоторые нюансы. Не знаю как у вас, но у меня SubDomz.sh бросался ошибками. Я их пофиксил следуйщим образом:
- В файле SubDomz.sh меняем в 320 строке httpx на httpx-toolkit . Чтобы скачать httpx, пишем sudo apt install httpx-toolkit. Он скорее всего у вас будет показыватся как Install Manually, но это можете проигнорировать.
- Если вам нне дает запустить скрипт эта ошибка SubDomz.sh: line 17: syntax error near unexpected token $'{\r'' 'ubDomz.sh: line 17: Usage() {, пишем в терминал dos2unix SubDomz.sh
- Если ощибка When running SubDomz.sh script, it returned SubDomz.sh: line 512: syntax error: unexpected end of file., то Заменяем этот код:
Не удалось прогрузить медиа
На
Code:
VirusTotal() {
# Ensure domain and VIRUSTOTAL_API_KEY are set
if [ -z "$domain" ] || [ -z "$VIRUSTOTAL_API_KEY" ]; then
echo "Domain or API Key not set."
return 1
fi
if [ "$silent" == true ]; then
curl -s "https://www.virustotal.com/vtapi/v2/domain/report?apikey=$VIRUSTOTAL_API_KEY&domain=$domain" |
jq | egrep -v "http|Alexa domain info" |
grep "$domain" |
sed 's/[",]//g' |
sed 's/^[[:space:]]*//' |
anew subdomz-"$domain".txt
else
# Run the spinner in the background if PARALLEL is set to true
if [[ ${PARALLEL} == true ]]; then
spinner "${BOLD}VirusTotal${NC}" &
PID="$!"
fi
curl -s "https://www.virustotal.com/vtapi/v2/domain/report?apikey=$VIRUSTOTAL_API_KEY&domain=$domain" |
jq | egrep -v "http|Alexa domain info" |
grep "$domain" |
sed 's/[",]//g' |
sed 's/^[[:space:]]*//' |
sort -u > tmp-virustotal-"$domain"
if [[ ${PARALLEL} == true ]]; then
kill ${PID} 2>/dev/null
fi
# Print the result
echo -e "$BOLD[*] VirusTotal$NC: $(wc -l < tmp-virustotal-"$domain")"
fi
}
Установка
У нас есть файл install.sh. Но он какой-то кривой, и ничего нормально не устанавливает.
Чтобы появились файлы resolvers.txt и dns.txt, прописываем следующие команды в терминал:
wget -O best-dns-wordlist.txt https://wordlists-cdn.assetnote.io/data/manual/best-dns-wordlist.txt (не обязательно, мы брутим поддомены отдельно)
git clone https://github.com/trickest/resolvers (список резолверов я бы рекомендовал обновлять перед каждым сканированием (если добавились в репозиторий свежие))
Если у вас что-то не установлено, то скрипт просто сообщит об этом, он не будет заканчивать работу. После успешной установки всех инструментов должно быть вот так:
Не удалось прогрузить медиа
Из этого списка я бы хотел разобрать парочку прикольных инструментов, чтобы вы поняли, какими техниками можно собирать поддомены. Не всегда под рукой может оказаться SubDomz
- GAU
Мы можем попросить как и выдать ссылки с site.com, так и c *.site.com, что становиться отличным методом для сбора не только поддоменов, но и для того, чтобы скормить эти ссылки всяким sqlmap’ам, dalfox’ам и т.д … Примерно так же это работает и для остальных сервисов, можно получить все ссылки какие есть у них в бд)
Не удалось прогрузить медиа
- GitHub & GitLab subdomains
Не удалось прогрузить медиа
Аналогично с gitlab. Эти инструменты делают такие поиски, и вытаскивают поддомены с чужого кода. Гениально и просто. Для их работы нужны только апи ключи
С этим разобрались. Теперь открываем файл config.txt
Тут мы добавляем все апи ключи, какие нас просят. Можете также изменить резолверы, словарь, конфиги под инструменты. Я советую вам записывать все апи ключи в текстовый файл. В будущем это сможет сэкономить очень много времени. В наше время много инструментов требуют апи ключи.
Конфиги для subfinder, amass, hacktrails
Знаете, каждый раз когда я вижу методы сбора поддоменов, про subfinder и amass пишут везде. Но никто не говорит что процент собранной инфы можно увеличить раз в 8 через посторонние сервисы. Часть моего конфига на subfinder (по пути ~/.config/subfinder/provider-config.yaml):
Не удалось прогрузить медиа
BeVigil - https://bevigil.com/osint-api
BinaryEdge - https://binaryedge.io
BufferOver - https://tls.bufferover.run
C99 - https://api.c99.nl/
Censys - https://censys.io
CertSpotter - https://sslmate.com/certspotter/api/
Chaos - https://chaos.projectdiscovery.io
Chinaz - http://my.chinaz.com/ChinazAPI/DataCenter/MyDataApi
DNSDB - https://api.dnsdb.info
Fofa - https://fofa.info/static_pages/api_help
FullHunt - https://fullhunt.io
GitHub - https://github.com
Intelx - https://intelx.io
PassiveTotal - http://passivetotal.org
quake - https://quake.360.cn
Robtex - https://www.robtex.com/api/
SecurityTrails - http://securitytrails.com
Shodan - https://shodan.io
ThreatBook - https://x.threatbook.cn/en
VirusTotal - https://www.virustotal.com
WhoisXML API - https://whoisxmlapi.com/
ZoomEye - https://www.zoomeye.org
ZoomEye API - https://api.zoomeye.org
dnsrepo - https://dnsrepo.noc.org
Hunter - https://hunter.qianxin.com/
Facebook - https://developers.facebook.com
BuiltWith - https://api.builtwith.com/domain-api
Заполняем конфиг файл еще и в amass. Также это можно сделать и в таких инструментах как findomain и Haktrails. Но я этого не делал, так как на мой взгляд это бессмысленно. Они используют все те самые апи что и amass с subfinder’ом.
Время протестить SubDomz. Запускаем
bash SubDomz.sh -d gov.uk -o out.txt
И получаем вот такое вот большое кол-во собранных поддоменов
Не удалось прогрузить медиа
Но пока мы все это делали, закончил свою работу и FFUF, собрав нам 178 поддоменов.
Не удалось прогрузить медиа
После всего этого, я по фану решил зайти на 10 из них, и просто потыкать. На 6-ом я увидел вот такую картину:
Не удалось прогрузить медиа
Найти XSS у меня заняло 36 минут. Еще одно доказательство, что на gov сайтах зачастую много дырок
👍67
🔥12
😁9
😢7
LIMB