LIMB
Вход Регистрация

тема

Поддомены под прицелом: практические методы обнаружения

YmbMember · · 7 ответов · 1к просмотров

Вступление
Вот как вы думаете, как можно собрать поддомены на сайте ? Многие мне ответят: все просто. Брутишь их через  knock и закидываешь в  subfinder, на выходе получаешь результат.  Но по правде говоря, результат будет такой себе. В этой статье я хочу вас научить, как правильно собирать поддомены с наибольшей эффективностью

В статье не содержатся призывы к нарушению законодательства. Автор не несёт ответственности за возможные действия третьих лиц, предпринятые на основе прочитанного.

Зачем собирать поддомены?
Вопрос на самом деле риторический.
  1. Больше поддоменов = больше шанс найти subdomain takeover. А для любителей всякого фишинга и спама такая находка на вес золота
  2. Больше поддоменов = больше уязвимостей. При детальной разведке, есть шанс найти какой-то не тронутый, старый субдомен какой просто пылиться с 1000 заходами в месяц. Если вы такой нашли - знайте, пахнет деньгами
  3. Скрытый функционал. На поддоменах часто стоят какие то корпоративные панельки. Кодеры думают, что так их никто не найдет, но они очень ошибаются.

Методы поиска

Давайте я вам покажу самые эффективные и интересные методы сбора по моему мнению, какими я всегда пользуюсь.
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
И так далее до 2025 года.

При этом правило простое:


 
    • чем больше ссылок проиндексировано за все время, тем меньше диапазон надо брать.
Полностью автоматизировать данный процесс было крайне сложно, так как гугл не любит когда его доркают и бросается капчами в лицо. Я написал инструмент на selenium, какой парсит ссылки играя с датами. Когда капча, то издает звук и ждет пока ее решат.
Знаю, звучит крайне убого и тупо. Если вы знаете, как обходить капчу в данном случае бесплатно (без платных сервисов какие решают капчу), то напишите в ЛС или раскритикуйте меня в комментариях
Не удалось прогрузить медиа

Выглядело это как-то так, продоркал я каждые 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
GAU (Get All Urls) это очень нужный инструмент для любого веб пентестера в принципе. Я его использую абсолютно всегда. Это спасение как и для ламеров, так и для seniors. Суть в том, что он собирает ссылки с сервисов AlienVault's Open Threat Exchange, the Wayback Machine, Common Crawl, и URLScan.. Возьмем и рассмотрим принцип работы Wayback machine. С веб архивом знакомы абсолютно все. Но не все знают, что с него можно получить все ссылки, какие он заархивировал для конкретного домена/поддомена.
Мы можем попросить как и выдать ссылки с site.com, так и c *.site.com, что становиться отличным методом для сбора не только поддоменов, но и для того, чтобы скормить эти ссылки всяким sqlmap’ам, dalfox’ам и т.д … Примерно так же это работает и для остальных сервисов, можно получить все ссылки какие есть у них в бд)
Не удалось прогрузить медиа

 
    • GitHub & GitLab subdomains
Вот это тоже не менее интересные инструменты. Вы наверное слышали, что есть https://github.com/search. С помощью этого поисковика мы можем выполнить поиск по всему что есть на гитхабе. Благодаря этой фичи появилось новое понятие “github dorking”. Юзеры поняли, что разработчики иногда забывают убрать API ключи из сурс кода, и можно найти слитые креды/апи ключи через search. У всех github dorking ассоциируется именно с этим. Но не все знают, что это мощная штука для сбора поддоменов и интересных директорий
Не удалось прогрузить медиа

Аналогично с 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
Раньше я парсил гугл обычным подключением большого пула копеечных проксей. Были раньше сервисы типо bestproxies и т.д...Каждая итерация и парсинг страницы = 1 прокся. Если запрашивало капчу, тогда просто бралась новая прокся и все. Все это работало в многопотоке, по этому результат получался в любом случае положительный. Сейчас думаю это тоже будет работать. Нужно только найти нормальный пул.
👍2
Не совсем понял, как этот скрипт отрабатывает. Хотел на ходу, пока читаю, его затестить, но ничего кроме пустой страницы не получил(
```
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();
```
👍5 ❤️1
Браво, маэстро! Статья хорошая, освещает все методы сбора сабдоменов, которые только могут пригодиться, очень полезный материал.
Касательно gau - очень улыбнуло. Очень люблю эту тулку, считаю ее достаточно недооцененной: маловато людей ее юзают, хоть она и очень полезна. Так что, тут только еще один вам плюс за то, что ее упомянули). Полезна не только в подобного рода разведке, есть и куча "ленивых пайплайнов", позволяющих немало так сэкономить свое время, взять только echo "URL" | gau --mc 200 | gf xss | urldedupe | ..., и сразу в далфоксу скармливаешь всю эту мишуру). Если торопишься или если возможных "дырок" слишком много, оптимальный и хороший вариант).

Про доркинг - тоже материал очень хорош. Admin упоминал скрап с проксями, вспомнился интересный инструмент dorks-eye, позволяющий довольно быстро отрабатывать с гугл дорками. Да и расширения вроде Link Gopher. Сам недавно тоже "давал еще один шанс" дорксу, прикольная тема, если еще и проксичейнз навесить - более чем удобно получается.
👍5 🔥1
Не удалось прогрузить медиа


Вот простой пример работы доркса с простенькой доркой, нацеленной на сабдомены. Без особой конкретизации, просто показать, как эта штуковина отрабатывает. Конечно же, дело вкуса, но упомянуть ее тоже захотелось, мало ли кому захочется попробовать чего нового.
👍3
ОтветYmbMember

в планах написать про ванлайнеры

Будет славно. Материал обширный, есть куча полезных действительно инструментов, как и много вариаций их применения. Да даже с тем же перебором очень много ванлайнов выйдет, которые будут действительно хороши: роляет конфигурация и фантазия.
👍1
Весьма информативно, нашел что-то новое
👍1

Гостевой просмотр. Чтобы отвечать и ставить реакции, войдите или зарегистрируйтесь.