Как узнать реальный IP сайта за CDN и Cloudflare

Как узнать реальный IP сайта, если он спрятан за CDN или WAF? Сегодня подавляющее большинство сайтов работает через такие системы, что заметно усложняет их тестирование.

image 17

Как WAF, так и CDN скрывают настоящий IP-адрес сайта, и один из самых надёжных способов обойти WAF целиком — это узнать реальный IP сайта и обращаться к серверу напрямую, минуя защитный слой.

Как работают WAF и CDN

WAF функционирует как прокси-сервер, который анализирует входящие запросы и решает, пропустить их к реальному серверу или заблокировать. Именно поэтому настоящий адрес сервера оказывается скрыт за WAF — весь трафик проходит через промежуточный узел.

Схема работы WAF и CDN

CDN устроен иначе: его основная задача — доставка контента пользователям с минимальной задержкой и снижение нагрузки на основной сервер. Серверы CDN распределены по всему миру, и пользователь автоматически подключается к географически ближайшему из них, откуда и получает закэшированный ответ. Как и WAF, CDN тоже скрывает реальный IP-адрес сайта и попутно обеспечивает защиту от DDoS-атак.

Как определить, используется ли на сайте WAF или CDN

Стандартные инструменты для детекта WAF/CDN работают по принципу анализа ответа сервера: в запрос подставляется базовая полезная нагрузка вроде <script>alert(1)</script>, после чего проверяется реакция — не начал ли WAF блокировать или иначе помечать запрос. Проблема в том, что такой подход срабатывает не всегда.

Часть WAF-решений настроена так, что явно не сообщает о блокировке запроса — внешне ответ выглядит обычным, без сообщений вроде «Ваш запрос заблокирован». Показательный пример — встроенный WAF в Bitrix: он определяет потенциально вредоносный запрос, автоматически нейтрализует опасную часть и передаёт уже безопасную версию на сервер, из-за чего атака просто теряет смысл, а видимых признаков блокировки при этом не возникает. Такое поведение стоит учитывать при тестировании — отсутствие явного отказа ещё не означает отсутствие защиты.

Wappalyzer — быстрый способ определить технологии сайта

Один из самых простых и быстрых методов первичного анализа — расширение Wappalyzer. Инструмент настолько универсален, что регулярно фигурирует в материалах по разведке технологий, применяемых на сайте.

Для задачи определения WAF/CDN у Wappalyzer есть существенное ограничение — он анализирует технологии довольно приблизительно, в основном по заголовкам ответа. Тем не менее в качестве быстрой первичной проверки в один клик — есть ли на сайте вообще признаки WAF или CDN — он вполне подходит. Если сигналов не обнаружено, имеет смысл переходить к более специализированному инструменту.

WhatWaf — детальное определение типа WAF

WhatWaf — один из наиболее эффективных инструментов среди аналогов для обнаружения и определения конкретного типа WAF на целевом сайте. Его преимущество складывается из нескольких факторов.

WhatWaf

Большая база payload’ов. Инструмент использует широкий набор стандартных полезных нагрузок — XSS, SQLi и другие типы атак, — способных спровоцировать реакцию WAF, причём под каждый конкретный WAF применяется свой набор триггеров.

Встроенные tamper-скрипты. WhatWaf содержит собственные tamper-скрипты для попыток обхода обнаруженного WAF, причём часть из них совместима и с sqlmap — таким образом, один прогон инструмента параллельно даёт материал для дальнейшей работы с sqlmap.

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

WafW00f — быстрое обнаружение WAF при массовом тестировании

WafW00f — ещё один инструмент для обнаружения WAF, который отличается высокой скоростью работы. Особенно удобен на этапе первичной фильтрации целей: например, при массовом сборе ссылок через Google Dorks инструмент позволяет быстро отсеять из общего списка все таргеты, защищённые файрволом, и сосредоточиться на менее защищённых целях.

обход CDN

Поиск через IoT-поисковики (Shodan, Censys, FOFA и аналоги)

IoT-поисковики — специализированные поисковые системы, которые непрерывно сканируют интернет и индексируют информацию об устройствах, серверах и сервисах, доступных в сети. Наиболее известные примеры — Shodan и ZoomEye, но подобных сервисов существует значительно больше, и каждый из них полезен для поиска реального IP-адреса сайта за CDN.

Как составлять поисковые запросы (дорки)

Общий принцип построения запросов одинаков для большинства подобных сервисов:

  • вместо site.com подставляется исследуемый домен;
  • вместо Example Title — заголовок страницы (тег <title> в исходном коде, который удобно скопировать через просмотр исходного кода страницы);
  • дополнительно стоит проверить исходный код страницы (Ctrl+U) на наличие уникальных фрагментов — специфичных комментариев, необычно названных файлов и других характерных элементов, которые можно использовать как поисковый запрос.

Shodan

ssl:site.com
hostname:site.com
http.title:"Example Title"
http.html:"text"

ZoomEye

hostname=site.com
title="Example Title"
http.body="text"
site="site.com"

Censys

Censys работает несколько иначе: специальных поисковых операторов здесь нет, достаточно ввести домен в поисковую строку и проверить результаты во вкладках Hosts и Certificates.

FOFA

cert.subject.cn="site.com"
cert="site.com"
host="site.com"
domain="site.com"
title="Example Title"
body="text"

Netlas

certificate.names:site.com
host:site.com
http.title:"Example Title"
http.body:"ключевое слово из сайта"

Hunter.how

cert.subject=="site.com"
domain=="site.com"
web.title=="Example Title"
web.body=="ключевое слово из сайта"

Более полный список аналогичных сервисов доступен в открытом репозитории awesome-ip-search-engines, хотя на практике перечисленных выше сервисов обычно достаточно для решения большинства задач.

Скрипт для автогенерации дорков

Ниже — небольшой Python-скрипт, который по введённому домену, заголовку страницы и ключевому слову автоматически формирует готовые поисковые запросы сразу для всех перечисленных сервисов:

def main():
    domain = input("Введите домен (например, site.com): ").strip()
    title = input("Введите title (например, Example Title): ").strip()
    body = input("Введите ключевое слово из текста страницы: ").strip()

    print("\n=== Shodan ===")
    print(f"ssl:{domain}")
    print(f"hostname:{domain}")
    print(f'http.title:"{title}"')
    print(f'http.html:"{body}"')

    print("\n=== ZoomEye ===")
    print(f"site={domain}")
    print(f"hostname={domain}")
    print(f'title="{title}"')
    print(f'http.body="{body}"')

    print("\n=== FOFA ===")
    print(f'cert.subject.cn="{domain}"')
    print(f'cert="{domain}"')
    print(f'host="{domain}"')
    print(f'domain="{domain}"')
    print(f'title="{title}"')
    print(f'body="{body}"')

    print("\n=== Netlas ===")
    print(f"certificate.names:{domain}")
    print(f"host:{domain}")
    print(f'http.title:"{title}"')
    print(f'http.body:"{body}"')

    print("\n=== Hunter.how ===")
    print(f'cert.subject=="{domain}"')
    print(f'domain=="{domain}"')
    print(f'web.title=="{title}"')
    print(f'web.body=="{body}"')


if __name__ == "__main__":
    main()

Диагностика и история DNS

Следующая группа сервисов относится к диагностике, мониторингу и историческому исследованию DNS-записей — эти данные особенно полезны, когда нужно узнать реальный IP сайта, который сменил CDN или WAF относительно недавно, но старые записи ещё сохранились в архивах.

Дополнительные сервисы

DNS history сайта
  • completedns.com — история изменений NS-серверов, мониторинг падений;
  • dnshistory.org — архив изменений DNS-записей (NS, A и другие типы);
  • ViewDNS — универсальный инструмент для просмотра любых DNS-записей;
  • dnschecker.org — проверка распространения (propagation) DNS-записей по разным регионам;
  • SecurityTrails — один из наиболее полных сервисов для исторического анализа DNS и поиска связанных доменов.

Отдельно стоит упомянуть инструменты, которые не попадают напрямую ни в категорию IoT-поисковиков, ни в категорию DNS-диагностики, но также полезны при поиске реального IP-адреса.

VirusTotal

Домен вводится в строку поиска VirusTotal, после чего стоит перейти во вкладку Relations — там отображаются связанные IP-адреса, поддомены и исторические записи, которые нередко указывают на реальный сервер за CDN.

virtustotal relations

Техники поиска реального IP через функционал сайта

Через отправку письма на email

Если на сайте есть функционал, взаимодействующий с почтой — регистрация, подписка на рассылку, форма обратной связи с уведомлением на email — этим можно воспользоваться для поиска реального IP. В поле ввода email указывается адрес на собственном домене, привязанном к Burp Collaborator либо к бесплатному аналогу вроде interactsh.com, в формате имя@ваш-сервер.

После отправки формы стоит проверить полученные на сервере обратные соединения (callback) и адреса, с которых они пришли. Этот метод срабатывает только в том случае, если на origin-сервере развёрнут собственный SMTP-сервер с некорректной конфигурацией — случай не самый частый, но встречающийся на практике.

XML-RPC Pingback (WordPress)

Файл xmlrpc.php — встроенный в WordPress механизм удалённого управления блогом через XML-запросы. Среди доступных методов есть pingback.ping, предназначенный для отправки pingback-уведомлений между блогами.

image 22

Эту функцию нередко отключают, поскольку она может использоваться для спама и других злоупотреблений. Но если метод доступен, на него можно отправить pingback-запрос со ссылкой на собственный Collaborator-домен и дождаться результата — есть вероятность, что уведомление придёт напрямую с реального IP-адреса сервера, минуя CDN.

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

<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>pingback.ping</methodName>
<params>
<param>
<value><string>Сервер с протоколом передачи</string></value>
</param>
<param>
<value><string>Любая ссылка на блог сайта</string></value>
</param>
</params>
</methodCall>

Как узнать реальный IP сайта: итоги

Рассмотренные методы — лишь часть возможных подходов к получению обратного соединения с реального сервера. Аналогичного результата можно добиться, например, через заголовки запроса при помощи Param Miner и Collaborator Everywhere — подробнее об этих расширениях рассказано в отдельном материале. В конечном счёте набор рабочих методов сильно зависит от функциональности конкретного тестируемого приложения и креативности исследователя.

Теперь вы знаете, как узнать реальный IP сайта за CDN и WAF — от простого детекта через Wappalyzer и WhatWaf до продвинутых техник вроде XML-RPC pingback и работы с IoT-поисковиками. Комбинация нескольких методов почти всегда даёт результат.

Похожие записи