Статья Находим бекенд айпи сайта за CDN через дедупликацию

Admin

Администратор

Находим бекенд айпи сайта за CDN через дедупликацию.​


Нередко сайт находится за WAF; CDN и нам известен тогда домен и веб сервер.
Представим что есть необходимость найти спрятанный IP бекенда.
Брать рейнджи хостинг провайдеров; сканировать все ip; резолвить хедеры это головная боль.

Сегодня посмотрим как сделать все это путем дедупликации.
Мне прислали таргет на бесплатный пробив данных о домене.
Вот его и используем.
Содержание
  • Субдомены + crt.sh
  • Wayback домены
  • DNS записи
  • TLS фингерпринт
  • Сравнение и вывод данных
Субдомены + crt.sh
Входной точкой является домен - таргет.тлд.лд
Для начала ищем субдомены через sublist3r-
Bash:
sublist3r -d таргет.ком -o файл.txt

1768246893028


Затем используем theHarvester копируя в отдельный txt найденные hostnames в нормальном виде-
Bash:
theHarvester -d таргет.ком -b all

1768246917214


В конце ищем данные с помощью assetfindeк-
Bash:
assetfinder --subs-only таргет.ком > файл.txt

1768246938838


Получив все 3 списка субдоменов проводим дедупликацию и приводим к единому списку-
Bash:
cat файл1.txt файл2.txt файл3.txt | sort -u > файл4.txt

Как я обычно говорю - лучше иметь много источников данных.
Поэтому можно не ограничиваться и использовать другие тулзы типа subfinder: amass: findomain и тп.
Один не нашел но найдет другой.

Переходим к поиску через crt.sh.
Объясняю зачем.
SAN записи могут содержать внутренние или альтернативные хосты которые указывали на связь с таргетом.
Поэтому нам надо получить вот такой массив данных по домену-
Bash:
curl -s "https://crt.sh/?q=%25.таргет.ком&output=json" -o crtфайл.json

1768246972886


Теперь получаем список хостнеймов с помощью jq-
Bash:
jq -r '.[].name_value' crtфайл.json | sed 's/\*\.//g' | sort -u > crtхосты.txt

1768247019456


Проводим дедупликацию с нашим списком субдоменов-

1768247035943


Список получили.
Он будет использоваться для дальнейших слияний с найденными хостами.

Wayback домены
Архивированные и исторические страницы так же содержат крошки.
Некоторые содержат ссылки; апи; direct hostname и тп. Которые тоже указывают на бек IP.

Собираем архивы-
Bash:
curl -s "http://web.archive.org/cdx/search/cdx?url=*.param.com.tr&output=json&fl=original,timestamp" -o targwb.json

1768247062086


Теперь надо найти в этом всем хосты.
Делаем-
Bash:
jq -r '.[1:][] | .[0]' targwb.json \
sed 's|https\?://||' \
cut -d'/' -f1 \
sort -u > targwbhosts.txt

1768247083782


Список в том же виде что и в первом этапе.
Точно таким же образом смешиваем и выделяем уникальные.

DNS записи
A&AAAA записи доменов содержат не меньше отсылок к pre-cdn.
Поэтому наш получившийся список таргет хостов мы процеживаем.
Начать можно с dnsdumpster и собрать список там-

1768247097425


Вторым шагом в этом эатпе мы получаем историческую dns инфу из viewdns-


1768247110151


Лайвхак - удобнее выкачать все в xlsx и потом в excel чем работать в txt-

1768247124569


Финальным шагом получаем все наши текущие записи через dig+импорт-
Bash:
while read -r h; do
echo "HOST: $h"
dig +short A $h
done < targstage3.txt > targdns.txt

1768247147922


Как и всегда приводим к единому уникальному списку IP.
Стоит обращать внимание на хосты&адреса в самом низу списка, которые еще до CF или других провайдеров.

TLS фингерпринт
Теперь вспоминаем что мы выгружали json через crt.sh.
Именно тот который мы потом приводили к списку имен хостов.

Берем и каждый хост прогоняем вот таким образом-
Bash:
echo | openssl s_client -connect hd.param.com.tr:443 -servername hd.param.com.tr 2>/dev/null | openssl x509 -noout -text

1768247170084


Либо же мы используем силу гпт и просим нам сделать единую булк команду как это сделал я.
Bash:
while read domain; do

echo "===== $domain ====="

echo | openssl s_client -connect $domain:443 -servername $domain 2>/dev/null \

| openssl x509 -noout -subject -issuer -dates -ext subjectAltName

done < домены.txt

1768247195478


Домены берем из этапа дедупликации после wayback.
Это все нам выдает вот такого рода список-

1768247206691


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

Код:
Issuer: COMODO RSA Organization Validation Secure Server CA.

Country: TR

Organization: Turk Elektronik Para A.S.

CN: *.param.com.tr

SANs: *.param.com.tr, param.com.tr

Validity: Feb 25 2025 → Mar 28 2026
Click to expand...
Click to expand...

Важно обратить внимание на того кто выпускал сертификат.
У меня COMODO RSA Organization Validation Secure Server CA .
Отличительная особенность в том что в отличии от CF они не выдают сертификат при подклбчении просто так.
Серт покупается и устанавливается намеренно поэтому такие хосты под подозрением.

Сравнение и вывод данных

1768247284567


Здесь можно было бы сравнить с SAN листом IP который мы собрали и методом исклчючения получить адрес.
Есть немного другая особенность.
В моем кейсе почти все субдомены с
CN=*.param.com.tr

SAN=*.param.com.tr, param.com.tr

Issuer: COMODO RSA OV CA

И везде одинаковые даты (Feb 25 2025 – Mar 28 2026).

Можно отправить в Censys-

SQL:
host.services.cert.parsed.subject.common_name = "*.param.com.tr"

1768247329425



Находим выделяющиеся хосты.
В моем случае это были все с LE сертификатом
desk.param.com.tr - который имел нерелевантные SAN записи и относился ко всем суппорт доменам.
Скорее всего Saas страницы на хостинге сервис провайдера;

talep.param.com.tr - SAN привели к тикет системным Saas провайдерам;

tech.param.com.tr - собрал в себе весь тех.инфраструктурный стек;

hub.param.com.tr - на отдельном хостинге без каких-либо SAN связей;
Я выбираю его.

DNS Dumpster нам выдал IP-

1768247354425


Мы всего в 1 шаге.
Пробуем
Bash:
curl -vk --resolve hub.param.com.tr:443:95.173.181.164 https://hub.param.com.tr/
Эта команда позволяет нам обратиться напрямую к вероятному IP, но при этом отправлять sni request к домену.
Здесь нас интересует ответ об аптайме; активности серта; хедерах; отсутствии упоминания CDN.
В таком случае это то, что нам надо.
Мой резульат-
1768247381264




Эта куча текста теперь просматривается и находим подтверждение того, что это оно.
IP - 95.173.181.164

Выпустили - Let’s Encrypt R12

Response - HTTP/1.1 200 OK

Хедеры указывают на nginx/1.26.3 + cookies + cache-control