<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>Shadow</title><author><name>Shadow</name></author><id>https://teletype.in/atom/specialist_infosec</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/specialist_infosec?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@specialist_infosec?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=specialist_infosec"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/specialist_infosec?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-07-07T19:30:59.455Z</updated><entry><id>specialist_infosec:psheasJMkJG</id><link rel="alternate" type="text/html" href="https://teletype.in/@specialist_infosec/psheasJMkJG?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=specialist_infosec"></link><title>Мониторинг изменений инфраструктуры: уведомления о новых поддоменах, сертификатах, изменениях в DNS</title><published>2026-07-06T05:11:38.614Z</published><updated>2026-07-06T05:12:16.435Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/13/86/1386e3cf-dbb6-410b-b229-2d238476136a.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/5d/35/5d3562b7-5004-4f7d-abda-b6e306585276.png&quot;&gt;Инфраструктура организации не статична. Появляются новые поддомены, меняются IP-адреса, выпускаются новые сертификаты, обновляются технологии. Для специалиста по техническому OSINT отслеживание этих изменений критически важно: новые поддомены могут раскрыть неанонсированные проекты, свежие сертификаты — указать на новые серверы, а изменения в DNS — на смену хостинг-провайдера или CDN. Мониторинг изменений позволяет реагировать на появление новых активов в реальном времени, не дожидаясь, пока они будут обнаружены случайно. Данная статья посвящена методам и инструментам мониторинга инфраструктуры, а также настройке автоматических уведомлений.</summary><content type="html">
  &lt;figure id=&quot;Gequ&quot; class=&quot;m_retina&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/5d/35/5d3562b7-5004-4f7d-abda-b6e306585276.png&quot; width=&quot;1102&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;tT7R&quot;&gt;Мониторинг изменений инфраструктуры: уведомления о новых поддоменах, сертификатах, изменениях в DNS&lt;/h3&gt;
  &lt;p id=&quot;NCqc&quot;&gt;Инфраструктура организации не статична. Появляются новые поддомены, меняются IP-адреса, выпускаются новые сертификаты, обновляются технологии. Для специалиста по техническому OSINT отслеживание этих изменений критически важно: новые поддомены могут раскрыть неанонсированные проекты, свежие сертификаты — указать на новые серверы, а изменения в DNS — на смену хостинг-провайдера или CDN. Мониторинг изменений позволяет реагировать на появление новых активов в реальном времени, не дожидаясь, пока они будут обнаружены случайно. Данная статья посвящена методам и инструментам мониторинга инфраструктуры, а также настройке автоматических уведомлений.&lt;/p&gt;
  &lt;p id=&quot;fpSv&quot;&gt;&lt;strong&gt;Зачем мониторить изменения?&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;5OhT&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/d1/9f/d19fd63f-faf9-4b1b-9054-2eae791cf5ee.png&quot; width=&quot;1210&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Ov5j&quot;&gt;&lt;strong&gt;Типы мониторинга изменений&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;62bO&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/8a/f4/8af402fc-ba40-4415-bf0a-0358ca89c470.png&quot; width=&quot;1202&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;WRxS&quot;&gt;&lt;strong&gt;Этап 1: Мониторинг поддоменов через crt.sh и CertSpotter&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;yJTl&quot;&gt;&lt;strong&gt;crt.sh&lt;/strong&gt; позволяет выполнять поиск новых сертификатов для домена. Поскольку каждый новый сертификат (и соответственно, поддомен) попадает в CT-логи, crt.sh — идеальный источник для обнаружения новых поддоменов.&lt;/p&gt;
  &lt;p id=&quot;XyoT&quot;&gt;&lt;strong&gt;Алгоритм мониторинга:&lt;/strong&gt;&lt;/p&gt;
  &lt;ol id=&quot;dSuP&quot;&gt;
    &lt;li id=&quot;jv1Y&quot;&gt;Ежедневно выполнять запрос к crt.sh: &lt;code&gt;?q=%.example.com&amp;amp;output=json&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;TOGG&quot;&gt;Сравнивать полученный список доменов с предыдущим.&lt;/li&gt;
    &lt;li id=&quot;lxHF&quot;&gt;При появлении новых — отправлять уведомление.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;lDAZ&quot;&gt;&lt;strong&gt;Пример скрипта для мониторинга поддоменов через crt.sh:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;CqNJ&quot;&gt;import requests
import json
import time
import hashlib

def get_subdomains(domain):
    url = f&amp;quot;https://crt.sh/?q=%25.{domain}&amp;amp;output=json&amp;quot;
    try:
        resp = requests.get(url, timeout=30)
        if resp.status_code == 200:
            data = resp.json()
            subdomains = set()
            for entry in data:
                name = entry.get(&amp;#x27;name_value&amp;#x27;, &amp;#x27;&amp;#x27;)
                if name.endswith(f&amp;#x27;.{domain}&amp;#x27;) or name == domain:
                    subdomains.add(name.lower())
            return sorted(subdomains)
    except Exception as e:
        print(f&amp;quot;Ошибка crt.sh: {e}&amp;quot;)
    return []

def monitor_subdomains(domain, state_file=&amp;#x27;subdomains_state.json&amp;#x27;):
    # Загрузка предыдущего состояния
    try:
        with open(state_file, &amp;#x27;r&amp;#x27;) as f:
            previous = set(json.load(f))
    except:
        previous = set()
    
    # Получение текущего состояния
    current = set(get_subdomains(domain))
    
    # Поиск изменений
    new = current - previous
    removed = previous - current
    
    if new:
        print(f&amp;quot;Новые поддомены: {&amp;#x27;, &amp;#x27;.join(new)}&amp;quot;)
        # Здесь отправка уведомления
    if removed:
        print(f&amp;quot;Удалены: {&amp;#x27;, &amp;#x27;.join(removed)}&amp;quot;)
    
    # Сохранение состояния
    with open(state_file, &amp;#x27;w&amp;#x27;) as f:
        json.dump(list(current), f)
    
    return new, removed

# Запуск ежедневно
monitor_subdomains(&amp;#x27;example.com&amp;#x27;)&lt;/pre&gt;
  &lt;p id=&quot;MSr8&quot;&gt;&lt;strong&gt;CertSpotter&lt;/strong&gt; — сервис, который автоматически отслеживает новые сертификаты для указанных доменов и присылает уведомления по email. Бесплатно до 10 доменов.&lt;/p&gt;
  &lt;p id=&quot;24uH&quot;&gt;&lt;strong&gt;Как настроить CertSpotter:&lt;/strong&gt;&lt;/p&gt;
  &lt;ol id=&quot;ZEyZ&quot;&gt;
    &lt;li id=&quot;Rrmf&quot;&gt;Зарегистрироваться на &lt;a href=&quot;https://sslmate.com/certspotter&quot; target=&quot;_blank&quot;&gt;sslmate.com/certspotter&lt;/a&gt;.&lt;/li&gt;
    &lt;li id=&quot;ffwu&quot;&gt;Добавить домены для мониторинга.&lt;/li&gt;
    &lt;li id=&quot;Y8e2&quot;&gt;Получать уведомления о новых сертификатах (с указанием SAN и даты истечения).&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;s639&quot;&gt;&lt;strong&gt;Этап 2: Мониторинг DNS-изменений&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;KUsB&quot;&gt;Изменения DNS-записей могут указывать на смену хостинга, добавление новых сервисов или изменение почтовой инфраструктуры.&lt;/p&gt;
  &lt;p id=&quot;mtga&quot;&gt;&lt;strong&gt;Инструменты для мониторинга DNS:&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;2y9b&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/c8/37/c83747d2-07e9-4d0f-b90d-d4483b1ceb0d.png&quot; width=&quot;1001&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;tx2b&quot;&gt;&lt;strong&gt;Собственный скрипт для мониторинга DNS-записей(пример):&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;Ola2&quot;&gt;import dns.resolver
import json
import time

def get_dns_records(domain, record_types=[&amp;#x27;A&amp;#x27;, &amp;#x27;MX&amp;#x27;, &amp;#x27;TXT&amp;#x27;, &amp;#x27;NS&amp;#x27;, &amp;#x27;CNAME&amp;#x27;]):
    records = {}
    for rtype in record_types:
        try:
            answers = dns.resolver.resolve(domain, rtype)
            records[rtype] = [str(r) for r in answers]
        except:
            records[rtype] = []
    return records

def monitor_dns(domain, state_file=&amp;#x27;dns_state.json&amp;#x27;):
    try:
        with open(state_file, &amp;#x27;r&amp;#x27;) as f:
            previous = json.load(f)
    except:
        previous = {}
    
    current = get_dns_records(domain)
    
    changes = {}
    for rtype in set(previous.keys()) | set(current.keys()):
        prev = previous.get(rtype, [])
        curr = current.get(rtype, [])
        if set(prev) != set(curr):
            changes[rtype] = {
                &amp;#x27;old&amp;#x27;: prev,
                &amp;#x27;new&amp;#x27;: curr
            }
    
    if changes:
        print(f&amp;quot;DNS изменения для {domain}:&amp;quot;)
        for rtype, change in changes.items():
            print(f&amp;quot;  {rtype}: {change[&amp;#x27;old&amp;#x27;]} → {change[&amp;#x27;new&amp;#x27;]}&amp;quot;)
        # здесь отправка уведомления
    
    with open(state_file, &amp;#x27;w&amp;#x27;) as f:
        json.dump(current, f)
    
    return changes

# Запуск
monitor_dns(&amp;#x27;example.com&amp;#x27;)&lt;/pre&gt;
  &lt;p id=&quot;6EiM&quot;&gt;&lt;strong&gt;Этап 3: Мониторинг SSL-сертификатов&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;qROE&quot;&gt;Новые SSL-сертификаты часто появляются при запуске новых серверов или обновлении старых.&lt;/p&gt;
  &lt;p id=&quot;sYwt&quot;&gt;&lt;strong&gt;CertSpotter&lt;/strong&gt; (см. выше) — лучший бесплатный способ мониторинга.&lt;/p&gt;
  &lt;p id=&quot;1fUQ&quot;&gt;&lt;strong&gt;Альтернатива: регулярный запрос к crt.sh с фильтром по дате:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;QlnO&quot;&gt;https://crt.sh/?q=%.example.com&amp;amp;exclude=expired&amp;amp;limit=100&amp;amp;output=json&lt;/pre&gt;
  &lt;p id=&quot;PHcN&quot;&gt;&lt;strong&gt;Скрипт для отслеживания сертификатов, истекающих в ближайшее время:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;2KUX&quot;&gt;import requests
from datetime import datetime, timedelta

def get_expiring_certs(domain, days=30):
    url = f&amp;quot;https://crt.sh/?q=%25.{domain}&amp;amp;output=json&amp;quot;
    resp = requests.get(url)
    if resp.status_code == 200:
        data = resp.json()
        expiring = []
        now = datetime.now()
        for entry in data:
            if len(entry) &amp;lt; 5:
                continue
            valid_to = entry[4]  # дата истечения
            if valid_to:
                try:
                    exp_date = datetime.strptime(valid_to, &amp;#x27;%Y-%m-%dT%H:%M:%S&amp;#x27;)
                    if (exp_date - now).days &amp;lt; days:
                        expiring.append({
                            &amp;#x27;name&amp;#x27;: entry[1],
                            &amp;#x27;expires&amp;#x27;: valid_to
                        })
                except:
                    pass
        return expiring
    return []

expiring = get_expiring_certs(&amp;#x27;example.com&amp;#x27;, 30)
for cert in expiring:
    print(f&amp;quot;Сертификат для {cert[&amp;#x27;name&amp;#x27;]} истекает {cert[&amp;#x27;expires&amp;#x27;]}&amp;quot;)&lt;/pre&gt;
  &lt;p id=&quot;8u5H&quot;&gt;&lt;strong&gt;Этап 4: Мониторинг изменений контента сайта&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;0xtu&quot;&gt;Изменения на сайте (новые страницы, обновлённый текст, новые файлы) могут указывать на новые проекты, изменения в стратегии или утечку информации.&lt;/p&gt;
  &lt;p id=&quot;VtFO&quot;&gt;&lt;strong&gt;Инструменты для мониторинга изменений страниц:&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;aOaS&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/1b/4e/1b4e0528-83d5-469d-a274-88b4c724f74a.png&quot; width=&quot;1200&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;HkBP&quot;&gt;&lt;strong&gt;Пример использования &lt;a href=&quot;https://changedetection.io/&quot; target=&quot;_blank&quot;&gt;Changedetection.io&lt;/a&gt; (Docker):&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;nTLh&quot;&gt;docker run -d --name changedetection -p 5000:5000 ghcr.io/dgtlmoon/changedetection.io&lt;/pre&gt;
  &lt;p id=&quot;SOTs&quot;&gt;Затем через веб-интерфейс добавить URL для мониторинга, настроить интервал проверки и канал уведомлений.&lt;/p&gt;
  &lt;p id=&quot;eiRY&quot;&gt;&lt;strong&gt;Собственный скрипт мониторинга контента (с хэшированием)&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;1Sxo&quot;&gt;import requests
import hashlib
import json
import time

def fetch_page_hash(url):
    try:
        resp = requests.get(url, timeout=10)
        return hashlib.sha256(resp.text.encode()).hexdigest()
    except:
        return None

def monitor_url(url, state_file=&amp;#x27;url_state.json&amp;#x27;):
    try:
        with open(state_file, &amp;#x27;r&amp;#x27;) as f:
            state = json.load(f)
            previous_hash = state.get(url)
    except:
        previous_hash = None
    
    current_hash = fetch_page_hash(url)
    if current_hash and current_hash != previous_hash:
        print(f&amp;quot;Страница {url} изменилась!&amp;quot;)
        # уведомление
        state[url] = current_hash
        with open(state_file, &amp;#x27;w&amp;#x27;) as f:
            json.dump(state, f)
        return True
    return False

# Мониторинг нескольких страниц
urls = [&amp;#x27;https://example.com&amp;#x27;, &amp;#x27;https://example.com/about&amp;#x27;]
for url in urls:
    monitor_url(url)&lt;/pre&gt;
  &lt;p id=&quot;VEeE&quot;&gt;&lt;strong&gt;Этап 5: Мониторинг WHOIS-изменений&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;wNf4&quot;&gt;Изменения в WHOIS (смена владельца, регистратора, дат) могут указывать на продажу домена или смену контактов.&lt;/p&gt;
  &lt;p id=&quot;Y8D3&quot;&gt;&lt;strong&gt;Инструменты:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;9Pgx&quot;&gt;
    &lt;li id=&quot;rVQY&quot;&gt;&lt;strong&gt;DomainTools&lt;/strong&gt; (платный мониторинг).&lt;/li&gt;
    &lt;li id=&quot;MW33&quot;&gt;&lt;strong&gt;WhoisXML API&lt;/strong&gt; (есть платный мониторинг).&lt;/li&gt;
    &lt;li id=&quot;eAno&quot;&gt;&lt;strong&gt;Собственные скрипты&lt;/strong&gt; через &lt;code&gt;whois&lt;/code&gt; и сравнение.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;qNM9&quot;&gt;&lt;strong&gt;Пример мониторинга WHOIS (с использованием python-whois):&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;R2Fh&quot;&gt;import whois
import json
import time

def get_whois_info(domain):
    try:
        w = whois.whois(domain)
        return {
            &amp;#x27;registrar&amp;#x27;: w.registrar,
            &amp;#x27;creation_date&amp;#x27;: str(w.creation_date),
            &amp;#x27;expiration_date&amp;#x27;: str(w.expiration_date),
            &amp;#x27;name_servers&amp;#x27;: w.name_servers,
            &amp;#x27;emails&amp;#x27;: w.emails
        }
    except:
        return None

def monitor_whois(domain, state_file=&amp;#x27;whois_state.json&amp;#x27;):
    try:
        with open(state_file, &amp;#x27;r&amp;#x27;) as f:
            previous = json.load(f)
    except:
        previous = {}
    
    current = get_whois_info(domain)
    if current and current != previous:
        print(f&amp;quot;WHOIS для {domain} изменился!&amp;quot;)
        # Здесь уведомление
        with open(state_file, &amp;#x27;w&amp;#x27;) as f:
            json.dump(current, f)
        return True
    return False

monitor_whois(&amp;#x27;example.com&amp;#x27;)&lt;/pre&gt;
  &lt;p id=&quot;Md20&quot;&gt;&lt;strong&gt;Этап 6: Мониторинг технологического стека (Wappalyzer)&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;gmKD&quot;&gt;Изменения в технологиях могут указывать на обновление CMS, переход на новый фреймворк.&lt;/p&gt;
  &lt;p id=&quot;KP0f&quot;&gt;&lt;strong&gt;Метод:&lt;/strong&gt; периодически запускать Wappalyzer CLI и сравнивать результаты.&lt;/p&gt;
  &lt;p id=&quot;Qv4W&quot;&gt;&lt;strong&gt;Пример (через subprocess):&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;sI08&quot;&gt;import subprocess
import json

def get_tech_stack(url):
    result = subprocess.run([&amp;#x27;wappalyzer&amp;#x27;, url], capture_output=True, text=True)
    if result.returncode == 0:
        return json.loads(result.stdout)
    return None

# Сравнение результатов за разные даты&lt;/pre&gt;
  &lt;p id=&quot;zHqJ&quot;&gt;&lt;strong&gt;Этап 7: Мониторинг через агрегаторы (SecurityTrails, Censys)&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;SA2T&quot;&gt;SecurityTrails предлагает функцию мониторинга (Alerts) для платных подписок. Вы можете отслеживать:&lt;/p&gt;
  &lt;ul id=&quot;rAqC&quot;&gt;
    &lt;li id=&quot;tzSd&quot;&gt;Новые поддомены.&lt;/li&gt;
    &lt;li id=&quot;AxBP&quot;&gt;Изменения в DNS-записях.&lt;/li&gt;
    &lt;li id=&quot;4XrC&quot;&gt;Изменения в WHOIS.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;aB7g&quot;&gt;&lt;strong&gt;Censys&lt;/strong&gt; позволяет отслеживать изменения в сертификатах и открытых портах.&lt;/p&gt;
  &lt;p id=&quot;sYIQ&quot;&gt;&lt;strong&gt;Этап 8: Настройка уведомлений&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;6X2c&quot;&gt;После обнаружения изменений важно получать уведомления в удобном формате.&lt;/p&gt;
  &lt;p id=&quot;jPxS&quot;&gt;&lt;strong&gt;Способы уведомлений:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;ntWd&quot;&gt;
    &lt;li id=&quot;IRsc&quot;&gt;&lt;strong&gt;Email&lt;/strong&gt; (через &lt;code&gt;smtplib&lt;/code&gt; в Python или сервисы типа SendGrid).&lt;/li&gt;
    &lt;li id=&quot;SRSx&quot;&gt;&lt;strong&gt;Telegram Bot&lt;/strong&gt; (см. код ниже).&lt;/li&gt;
    &lt;li id=&quot;6Hsq&quot;&gt;&lt;strong&gt;Slack / Discord&lt;/strong&gt; (вебхуки).&lt;/li&gt;
    &lt;li id=&quot;XZPw&quot;&gt;&lt;strong&gt;SMS&lt;/strong&gt; (платные сервисы).&lt;/li&gt;
    &lt;li id=&quot;vPJh&quot;&gt;&lt;strong&gt;Pushover&lt;/strong&gt; (мобильные уведомления).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;7s9D&quot;&gt;&lt;strong&gt;Пример уведомления через Telegram-бота:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;snwl&quot;&gt;import requests

def send_telegram_alert(token, chat_id, message):
    url = f&amp;quot;https://api.telegram.org/bot{token}/sendMessage&amp;quot;
    payload = {
        &amp;#x27;chat_id&amp;#x27;: chat_id,
        &amp;#x27;text&amp;#x27;: message
    }
    requests.post(url, json=payload)

# Использование
send_telegram_alert(&amp;#x27;YOUR_BOT_TOKEN&amp;#x27;, &amp;#x27;YOUR_CHAT_ID&amp;#x27;, &amp;#x27;Обнаружены новые поддомены: dev.example.com, test.example.com&amp;#x27;)&lt;/pre&gt;
  &lt;p id=&quot;6N81&quot;&gt;&lt;strong&gt;Этап 9: Полный конвейер мониторинга&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;J6t9&quot;&gt;Для эффективного мониторинга все инструменты можно объединить в единый конвейер:&lt;/p&gt;
  &lt;ol id=&quot;Ux1V&quot;&gt;
    &lt;li id=&quot;Iug1&quot;&gt;&lt;strong&gt;Ежедневный запуск&lt;/strong&gt; (через cron или Task Scheduler).&lt;/li&gt;
    &lt;li id=&quot;eZlX&quot;&gt;&lt;strong&gt;Проверка поддоменов&lt;/strong&gt; (crt.sh, SecurityTrails).&lt;/li&gt;
    &lt;li id=&quot;zq6u&quot;&gt;&lt;strong&gt;Проверка DNS&lt;/strong&gt; (собственный скрипт).&lt;/li&gt;
    &lt;li id=&quot;FUvN&quot;&gt;&lt;strong&gt;Проверка SSL-сертификатов&lt;/strong&gt; (CertSpotter / crt.sh).&lt;/li&gt;
    &lt;li id=&quot;hFoy&quot;&gt;&lt;strong&gt;Проверка контента&lt;/strong&gt; (&lt;a href=&quot;https://changedetection.io/&quot; target=&quot;_blank&quot;&gt;Changedetection.io&lt;/a&gt; / собственный скрипт).&lt;/li&gt;
    &lt;li id=&quot;dZ4j&quot;&gt;&lt;strong&gt;Проверка WHOIS&lt;/strong&gt; (собственный скрипт).&lt;/li&gt;
    &lt;li id=&quot;DOVx&quot;&gt;&lt;strong&gt;Сбор изменений в единый отчёт&lt;/strong&gt;.&lt;/li&gt;
    &lt;li id=&quot;M1WK&quot;&gt;&lt;strong&gt;Отправка уведомления&lt;/strong&gt; (Telegram, Email).&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;QEu9&quot;&gt;&lt;strong&gt;Пример крона для ежедневного запуска:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;MkeQ&quot;&gt;0 8 * * * /usr/bin/python3 /path/to/monitor_all.py&lt;/pre&gt;
  &lt;p id=&quot;r3s7&quot;&gt;&lt;strong&gt;Практический пример: мониторинг компании-конкурента&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;kRBz&quot;&gt;&lt;em&gt;Задача:&lt;/em&gt; отслеживать изменения в инфраструктуре конкурента &lt;code&gt;compete.com&lt;/code&gt;.&lt;/p&gt;
  &lt;ol id=&quot;FVny&quot;&gt;
    &lt;li id=&quot;31M9&quot;&gt;&lt;strong&gt;Настройка CertSpotter&lt;/strong&gt; для &lt;code&gt;compete.com&lt;/code&gt; и &lt;code&gt;*.compete.com&lt;/code&gt; → получение уведомлений о новых сертификатах.&lt;/li&gt;
    &lt;li id=&quot;7CMW&quot;&gt;&lt;strong&gt;Ежедневный скрипт для crt.sh&lt;/strong&gt; → запись всех поддоменов, сравнение с предыдущим днём. При появлении нового отправка в Telegram.&lt;/li&gt;
    &lt;li id=&quot;UJoY&quot;&gt;&lt;strong&gt;Мониторинг DNS&lt;/strong&gt; → раз в неделю проверка A, MX, TXT записей. При изменении — уведомление.&lt;/li&gt;
    &lt;li id=&quot;Rlr9&quot;&gt;&lt;strong&gt;Мониторинг сайта&lt;/strong&gt; → &lt;a href=&quot;https://changedetection.io/&quot; target=&quot;_blank&quot;&gt;Changedetection.io&lt;/a&gt; для главной страницы и страницы &lt;code&gt;/careers&lt;/code&gt; (появление новых вакансий может указывать на расширение).&lt;/li&gt;
    &lt;li id=&quot;zUNw&quot;&gt;&lt;strong&gt;Обнаружение:&lt;/strong&gt; спустя неделю появился поддомен &lt;code&gt;app.compete.com&lt;/code&gt;. В сертификате указан AWS CloudFront. Это указывает на запуск нового веб-приложения. Мониторинг подтверждает, что сайт стал доступен.&lt;/li&gt;
    &lt;li id=&quot;ppFL&quot;&gt;&lt;strong&gt;Вывод:&lt;/strong&gt; компания запускает новый продукт. Информация может быть использована для анализа конкурентной среды.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;RERN&quot;&gt;&lt;strong&gt;Инструменты для мониторинга (сводная таблица)&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;v4eg&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/82/8f/828f6cd1-af48-4243-a065-92298fa6e6fd.png&quot; width=&quot;1196&quot; /&gt;
  &lt;/figure&gt;
  &lt;ul id=&quot;Bykc&quot;&gt;
    &lt;li id=&quot;9WoA&quot;&gt;Мониторинг публичных данных (DNS, сертификаты, поддомены, WHOIS) легален.&lt;/li&gt;
    &lt;li id=&quot;nHkY&quot;&gt;Использование автоматизированных скриптов для частых запросов к crt.sh или другим сервисам должно соответствовать их условиям использования (не превышать лимиты).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;ul id=&quot;JUE2&quot;&gt;
    &lt;li id=&quot;pJrS&quot;&gt;Если вы мониторите конкурента, не нарушайте законы о коммерческой тайне и не используйте методы, требующие несанкционированного доступа.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;O9AX&quot;&gt;Мониторинг изменений инфраструктуры — это непрерывный процесс, позволяющий быть в курсе всех изменений в цифровых активах цели. Комбинация автоматических скриптов (crt.sh, DNS, WHOIS), готовых сервисов (CertSpotter, Changedetection) и уведомлений (Telegram) создаёт систему раннего обнаружения новых поддоменов, сертификатов, DNS-записей и контента. Это позволяет оперативно реагировать на появление новых проектов, смену хостинга и другие изменения, важные для технической разведки.&lt;/p&gt;

</content></entry><entry><id>specialist_infosec:Site-History-Analysis</id><link rel="alternate" type="text/html" href="https://teletype.in/@specialist_infosec/Site-History-Analysis?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=specialist_infosec"></link><title>Анализ истории сайта: Wayback Machine, изменения контента, скрытые страницы</title><published>2026-06-27T17:59:12.899Z</published><updated>2026-06-27T17:59:12.899Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/51/6f/516f6185-e099-45da-ac77-465dd4dbb7a1.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img3.teletype.in/files/aa/f8/aaf8fd7c-7439-4b18-a2d7-f476ccf27f73.png&quot;&gt;Веб-сайты постоянно меняются: дизайн обновляется, контент редактируется, страницы удаляются, а новые появляются. Однако интернет «помнит» многие из этих изменений благодаря архивам, таким как Wayback Machine. Для специалиста по техническому OSINT анализ истории сайта — это способ заглянуть в прошлое: восстановить удалённые страницы, найти забытые поддомены, обнаружить конфиденциальную информацию, которая была случайно опубликована, а затем удалена, а также проследить эволюцию политики и контента организации. Данная статья посвящена методам работы с веб-архивами, анализу изменений и поиску скрытых страниц.</summary><content type="html">
  &lt;figure id=&quot;P6ZY&quot; class=&quot;m_retina&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/aa/f8/aaf8fd7c-7439-4b18-a2d7-f476ccf27f73.png&quot; width=&quot;1102&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;sbQM&quot;&gt;Анализ истории сайта: Wayback Machine, изменения контента, скрытые страницы&lt;/h3&gt;
  &lt;p id=&quot;7bcm&quot;&gt;Веб-сайты постоянно меняются: дизайн обновляется, контент редактируется, страницы удаляются, а новые появляются. Однако интернет «помнит» многие из этих изменений благодаря архивам, таким как Wayback Machine. Для специалиста по техническому OSINT анализ истории сайта — это способ заглянуть в прошлое: восстановить удалённые страницы, найти забытые поддомены, обнаружить конфиденциальную информацию, которая была случайно опубликована, а затем удалена, а также проследить эволюцию политики и контента организации. Данная статья посвящена методам работы с веб-архивами, анализу изменений и поиску скрытых страниц.&lt;/p&gt;
  &lt;p id=&quot;okS7&quot;&gt;&lt;strong&gt;Зачем анализировать историю сайта?&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;0QXn&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/da/43/da434446-5147-4d3f-b937-5ef373012460.png&quot; width=&quot;1114&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;ASRd&quot;&gt;&lt;strong&gt;Основные архивы веба&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;fBRy&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/1d/16/1d16ac4a-295b-4b69-93a1-f2083fbe1fa1.png&quot; width=&quot;1145&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;1fy2&quot;&gt;&lt;strong&gt;Этап 1: Поиск истории сайта в Wayback Machine&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;DsXl&quot;&gt;&lt;strong&gt;Прямой доступ к архиву:&lt;/strong&gt; &lt;code&gt;https://web.archive.org/web/*/https://example.com&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;vxBs&quot;&gt;&lt;strong&gt;Что можно увидеть:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;zGAA&quot;&gt;
    &lt;li id=&quot;ilH3&quot;&gt;Календарь сохранений (синие кружки — даты, когда страница была сохранена).&lt;/li&gt;
    &lt;li id=&quot;qwcU&quot;&gt;Выбор конкретной даты.&lt;/li&gt;
    &lt;li id=&quot;eW1e&quot;&gt;Сравнение двух снимков (инструмент &amp;quot;Compare&amp;quot;).&lt;/li&gt;
    &lt;li id=&quot;dGXK&quot;&gt;Доступ к сохранённым изображениям, CSS, JS (частично).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;VBLJ&quot;&gt;&lt;strong&gt;Основные параметры Wayback Machine API:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;wqiE&quot;&gt;
    &lt;li id=&quot;zt79&quot;&gt;&lt;code&gt;https://archive.org/wayback/available?url=https://example.com&lt;/code&gt; — проверка, есть ли архив для URL.&lt;/li&gt;
    &lt;li id=&quot;gjES&quot;&gt;&lt;code&gt;https://web.archive.org/cdx/search/cdx?url=example.com&amp;amp;output=json&lt;/code&gt; — список всех сохранений в JSON (для массового сбора).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;zfY1&quot;&gt;&lt;strong&gt;Пример API-запроса (Python):&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;yarb&quot;&gt;import requests
import json

def get_wayback_snapshots(url):
    cdx_url = f&amp;quot;https://web.archive.org/cdx/search/cdx?url={url}&amp;amp;output=json&amp;quot;
    resp = requests.get(cdx_url)
    if resp.status_code == 200:
        data = resp.json()
        if len(data) &amp;gt; 1:
            snapshots = []
            for row in data[1:]:  # первая строка — заголовки
                timestamp = row[1]
                snapshot_url = f&amp;quot;https://web.archive.org/web/{timestamp}/{url}&amp;quot;
                snapshots.append({
                    &amp;#x27;timestamp&amp;#x27;: timestamp,
                    &amp;#x27;url&amp;#x27;: snapshot_url
                })
            return snapshots
    return []

snapshots = get_wayback_snapshots(&amp;#x27;example.com&amp;#x27;)
for s in snapshots[:5]:
    print(s[&amp;#x27;timestamp&amp;#x27;], s[&amp;#x27;url&amp;#x27;])&lt;/pre&gt;
  &lt;p id=&quot;cxWS&quot;&gt;&lt;strong&gt;Этап 2: Поиск удалённых страниц и контента&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;Zk9K&quot;&gt;Один из основных способов использования архива — найти страницы, которые были удалены с сайта, но сохранились в Wayback Machine.&lt;/p&gt;
  &lt;p id=&quot;15wh&quot;&gt;&lt;strong&gt;Методика:&lt;/strong&gt;&lt;/p&gt;
  &lt;ol id=&quot;LwMa&quot;&gt;
    &lt;li id=&quot;spP2&quot;&gt;Определить URL-шаблоны (например, &lt;code&gt;/blog/&lt;/code&gt;, &lt;code&gt;/docs/&lt;/code&gt;, &lt;code&gt;/downloads/&lt;/code&gt;).&lt;/li&gt;
    &lt;li id=&quot;dOaN&quot;&gt;Искать в архиве конкретные URL.&lt;/li&gt;
    &lt;li id=&quot;U896&quot;&gt;Использовать оператор &lt;code&gt;*&lt;/code&gt; для поиска всех сохранённых страниц с определённым префиксом.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;JwKO&quot;&gt;&lt;strong&gt;Пример поиска всех файлов &lt;code&gt;.pdf&lt;/code&gt; в архиве:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;NFdG&quot;&gt;https://web.archive.org/web/*/https://example.com/*.pdf&lt;/pre&gt;
  &lt;p id=&quot;QvhU&quot;&gt;&lt;strong&gt;Поиск всех страниц в подкаталоге:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;kPkI&quot;&gt;https://web.archive.org/web/*/https://example.com/docs/*&lt;/pre&gt;
  &lt;p id=&quot;QqoA&quot;&gt;&lt;strong&gt;Этап 3: Обнаружение скрытых страниц через архивы&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;TrqB&quot;&gt;Скрытые страницы — те, на которые нет ссылок с главной, но они могут существовать и быть проиндексированы архивом.&lt;/p&gt;
  &lt;p id=&quot;6ZJn&quot;&gt;&lt;strong&gt;Где искать скрытые страницы:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;7uDr&quot;&gt;
    &lt;li id=&quot;uemy&quot;&gt;&lt;code&gt;/admin&lt;/code&gt;, &lt;code&gt;/login&lt;/code&gt;, &lt;code&gt;/backup&lt;/code&gt;, &lt;code&gt;/test&lt;/code&gt;, &lt;code&gt;/dev&lt;/code&gt;, &lt;code&gt;/staging&lt;/code&gt;, &lt;code&gt;/old&lt;/code&gt;, &lt;code&gt;/temp&lt;/code&gt;, &lt;code&gt;/private&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;l3PW&quot;&gt;Панели управления: &lt;code&gt;/cpanel&lt;/code&gt;, &lt;code&gt;/webmail&lt;/code&gt;, &lt;code&gt;/plesk&lt;/code&gt;, &lt;code&gt;/phpmyadmin&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;CIrm&quot;&gt;Файлы конфигурации: &lt;code&gt;/config&lt;/code&gt;, &lt;code&gt;/settings&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;4y0Z&quot;&gt;Директории с исходными кодами: &lt;code&gt;/git&lt;/code&gt;, &lt;code&gt;/svn&lt;/code&gt;, &lt;code&gt;/cvs&lt;/code&gt;.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;Ruhd&quot;&gt;&lt;strong&gt;Как искать:&lt;/strong&gt;&lt;/p&gt;
  &lt;ol id=&quot;xKUn&quot;&gt;
    &lt;li id=&quot;V5Bi&quot;&gt;Вручную перебирать возможные пути в архиве.&lt;/li&gt;
    &lt;li id=&quot;3pM7&quot;&gt;Использовать поиск по &lt;code&gt;*&lt;/code&gt; или анализировать список всех сохранённых страниц через CDX API.&lt;/li&gt;
    &lt;li id=&quot;7Ejt&quot;&gt;Парсить CDX-вывод и искать подозрительные пути.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;3vey&quot;&gt;&lt;strong&gt;Пример CDX-запроса для получения всех страниц сайта (включая подпапки):&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;5JZ7&quot;&gt;curl &amp;quot;https://web.archive.org/cdx/search/cdx?url=example.com/*&amp;amp;output=json&amp;quot; &amp;gt; all_pages.json&lt;/pre&gt;
  &lt;p id=&quot;SZnY&quot;&gt;&lt;strong&gt;Этап 4: Сравнение версий (diff) — что изменилось?&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;QCZ2&quot;&gt;Wayback Machine позволяет сравнивать два снимка страницы. Это полезно для выявления изменений в контенте, политике или структуре.&lt;/p&gt;
  &lt;p id=&quot;tAfx&quot;&gt;&lt;strong&gt;Инструменты сравнения:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;3DgV&quot;&gt;
    &lt;li id=&quot;YpIR&quot;&gt;&lt;strong&gt;Веб-интерфейс:&lt;/strong&gt; &lt;code&gt;https://web.archive.org/web/20200101000000/https://example.com&lt;/code&gt; и &lt;code&gt;https://web.archive.org/web/20250101000000/https://example.com&lt;/code&gt; → открыть в двух вкладках и сравнить.&lt;/li&gt;
    &lt;li id=&quot;wHvw&quot;&gt;&lt;strong&gt;Сторонние утилиты:&lt;/strong&gt; &lt;code&gt;wget --mirror&lt;/code&gt; для загрузки двух архивных версий и сравнения через &lt;code&gt;diff&lt;/code&gt;.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;tJ9o&quot;&gt;&lt;strong&gt;Сравнение через Python:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;qnBF&quot;&gt;import requests
import difflib

def fetch_archived_page(timestamp, url):
    archive_url = f&amp;quot;https://web.archive.org/web/{timestamp}/{url}&amp;quot;
    resp = requests.get(archive_url)
    return resp.text if resp.status_code == 200 else &amp;quot;&amp;quot;

def compare_pages(url, ts1, ts2):
    text1 = fetch_archived_page(ts1, url)
    text2 = fetch_archived_page(ts2, url)
    diff = difflib.unified_diff(text1.splitlines(), text2.splitlines())
    return &amp;#x27;\n&amp;#x27;.join(diff)

# Пример
changes = compare_pages(&amp;#x27;example.com&amp;#x27;, &amp;#x27;20200101000000&amp;#x27;, &amp;#x27;20250101000000&amp;#x27;)
print(changes[:500])  # первые 500 символов&lt;/pre&gt;
  &lt;p id=&quot;tmGL&quot;&gt;&lt;strong&gt;Этап 5: Поиск старых robots.txt, sitemap.xml и других служебных файлов&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;eY24&quot;&gt;&lt;code&gt;robots.txt&lt;/code&gt; и &lt;code&gt;sitemap.xml&lt;/code&gt; часто меняются. В старых версиях могут содержаться пути, которые позже были удалены.&lt;/p&gt;
  &lt;p id=&quot;cVPJ&quot;&gt;&lt;strong&gt;Пример:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;spBW&quot;&gt;https://web.archive.org/web/*/https://example.com/robots.txt
https://web.archive.org/web/*/https://example.com/sitemap.xml&lt;/pre&gt;
  &lt;p id=&quot;3GXx&quot;&gt;&lt;strong&gt;Что можно найти:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;dtuF&quot;&gt;
    &lt;li id=&quot;DpNk&quot;&gt;Директории, запрещённые для индексации (например, &lt;code&gt;/admin/&lt;/code&gt;, &lt;code&gt;/private/&lt;/code&gt;).&lt;/li&gt;
    &lt;li id=&quot;fZfw&quot;&gt;Поддомены, которые не разрешено индексировать (&lt;code&gt;Disallow: /subdomain/&lt;/code&gt;).&lt;/li&gt;
    &lt;li id=&quot;2W8q&quot;&gt;Карта сайта с перечнем всех страниц (удалённые, но сохранённые).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;9NXQ&quot;&gt;&lt;strong&gt;Этап 6: Поиск конфиденциальных данных в архивах&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;E4OX&quot;&gt;Одна из самых опасных ситуаций — случайная публикация конфиденциальных данных, которые затем были удалены, но остались в архиве.&lt;/p&gt;
  &lt;p id=&quot;uL3p&quot;&gt;&lt;strong&gt;Что искать:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;kpKY&quot;&gt;
    &lt;li id=&quot;Lwkj&quot;&gt;&lt;code&gt;.env&lt;/code&gt; (файлы окружения с паролями).&lt;/li&gt;
    &lt;li id=&quot;LLu3&quot;&gt;&lt;code&gt;.git/config&lt;/code&gt; (адреса репозиториев).&lt;/li&gt;
    &lt;li id=&quot;Adnr&quot;&gt;&lt;code&gt;phpinfo()&lt;/code&gt; (информация о PHP-конфигурации).&lt;/li&gt;
    &lt;li id=&quot;IIp0&quot;&gt;&lt;code&gt;backup.sql&lt;/code&gt; (дампы базы данных).&lt;/li&gt;
    &lt;li id=&quot;1i4u&quot;&gt;&lt;code&gt;config.php&lt;/code&gt;, &lt;code&gt;settings.php&lt;/code&gt; (конфигурационные файлы).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;1iQt&quot;&gt;&lt;strong&gt;Как искать:&lt;/strong&gt;&lt;/p&gt;
  &lt;ol id=&quot;ME4N&quot;&gt;
    &lt;li id=&quot;6P3T&quot;&gt;Вручную проверять типичные пути: &lt;code&gt;/backup&lt;/code&gt;, &lt;code&gt;/tmp&lt;/code&gt;, &lt;code&gt;/downloads&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;c83e&quot;&gt;Использовать поиск по &lt;code&gt;*&lt;/code&gt; и фильтровать по расширениям.&lt;/li&gt;
    &lt;li id=&quot;UZrm&quot;&gt;Использовать инструменты парсинга архивов для массового поиска.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;Kqiv&quot;&gt;&lt;strong&gt;Пример поиска &lt;code&gt;.env&lt;/code&gt; файлов:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;rEkH&quot;&gt;https://web.archive.org/web/*/https://example.com/*.env&lt;/pre&gt;
  &lt;p id=&quot;ti53&quot;&gt;Wayback Machine не сохраняет все файлы (только HTML, CSS, JS), но дампы баз или бинарные файлы могут быть недоступны.&lt;/p&gt;
  &lt;p id=&quot;CpER&quot;&gt;&lt;strong&gt;Этап 7: Анализ изменений в SSL-сертификатах через архивы&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;VKPd&quot;&gt;Хотя Wayback Machine не сохраняет SSL-сертификаты, история сертификатов доступна через CT-логи (см. статью 7). Однако, анализируя старые снимки сайта, можно заметить:&lt;/p&gt;
  &lt;ul id=&quot;kl9R&quot;&gt;
    &lt;li id=&quot;14rl&quot;&gt;Когда на сайте появилась поддержка HTTPS (по редиректам).&lt;/li&gt;
    &lt;li id=&quot;5xzx&quot;&gt;Когда был заменён логотип или изменилась политика безопасности (по заголовкам HTTP в сохранённых снимках, если они есть).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;npTP&quot;&gt;&lt;strong&gt;Этап 8: Использование &lt;a href=&quot;https://archive.today/&quot; target=&quot;_blank&quot;&gt;Archive.today&lt;/a&gt; для поиска удалённого контента&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;s1lj&quot;&gt;&lt;a href=&quot;https://archive.today/&quot; target=&quot;_blank&quot;&gt;Archive.today&lt;/a&gt; часто сохраняет страницы, которые не попали в Wayback Machine (например, из-за robots.txt). Он позволяет архивировать страницы вручную.&lt;/p&gt;
  &lt;p id=&quot;Fcxh&quot;&gt;&lt;strong&gt;Как использовать:&lt;/strong&gt;&lt;/p&gt;
  &lt;ol id=&quot;4MH6&quot;&gt;
    &lt;li id=&quot;oWZp&quot;&gt;Ввести URL на &lt;a href=&quot;https://archive.today/&quot; target=&quot;_blank&quot;&gt;archive.today&lt;/a&gt;.&lt;/li&gt;
    &lt;li id=&quot;5lPU&quot;&gt;Если страница была сохранена, она отобразится.&lt;/li&gt;
    &lt;li id=&quot;rJsF&quot;&gt;Можно найти сохранения по дате.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;uIDZ&quot;&gt;Нет публичного API. Только веб-интерфейс.&lt;/p&gt;
  &lt;p id=&quot;d4Gi&quot;&gt;&lt;strong&gt;Этап 9: Автоматизированный сбор изменений с помощью Wayback Machine API&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;1hrY&quot;&gt;Для долгосрочного мониторинга сайта можно автоматизировать проверку новых снимков в архиве.&lt;/p&gt;
  &lt;p id=&quot;FyBn&quot;&gt;&lt;strong&gt;Скрипт мониторинга новых версий:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;Vn7e&quot;&gt;import requests
import time

def get_latest_snapshot(url):
    # CDX API
    cdx_url = f&amp;quot;https://web.archive.org/cdx/search/cdx?url={url}&amp;amp;output=json&amp;amp;limit=1&amp;amp;sort=timestamp&amp;quot;
    resp = requests.get(cdx_url)
    if resp.status_code == 200:
        data = resp.json()
        if len(data) &amp;gt; 1:
            timestamp = data[1][1]
            return timestamp
    return None

def monitor_website(url, check_interval=86400):  # 1 день
    last_timestamp = None
    while True:
        latest = get_latest_snapshot(url)
        if latest and latest != last_timestamp:
            print(f&amp;quot;Обнаружена новая версия {url} в архиве: {latest}&amp;quot;)
            # Здесь можно обработать изменения
            last_timestamp = latest
        time.sleep(check_interval)&lt;/pre&gt;
  &lt;p id=&quot;xz1I&quot;&gt;&lt;strong&gt;Этап 10: Поиск через CDX API для составления карты сайта&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;MZS8&quot;&gt;CDX API можно использовать для получения полного списка всех когда-либо сохранённых страниц сайта. Это позволяет восстановить структуру сайта даже без текущего доступа.&lt;/p&gt;
  &lt;p id=&quot;VY4v&quot;&gt;&lt;strong&gt;Получение списка всех страниц (с ограничениями):&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;AtVg&quot;&gt;curl &amp;quot;https://web.archive.org/cdx/search/cdx?url=example.com/*&amp;amp;output=json&amp;amp;limit=100000&amp;quot; &amp;gt; all_pages.json&lt;/pre&gt;
  &lt;p id=&quot;sK7T&quot;&gt;&lt;strong&gt;Парсинг результатов для построения карты сайта:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;XXYw&quot;&gt;import json
import re

def extract_all_paths(cdx_json_file):
    with open(cdx_json_file, &amp;#x27;r&amp;#x27;) as f:
        data = json.load(f)
    paths = set()
    for row in data[1:]:
        url = row[2]  # полный URL
        # извлекаем путь
        path = re.sub(r&amp;#x27;^https?://[^/]+&amp;#x27;, &amp;#x27;&amp;#x27;, url)
        paths.add(path)
    return sorted(paths)

# Пример использования
paths = extract_all_paths(&amp;#x27;all_pages.json&amp;#x27;)
for p in paths[:50]:
    print(p)&lt;/pre&gt;
  &lt;p id=&quot;adTp&quot;&gt;&lt;strong&gt;Практический пример: полное исследование сайта через архивы&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;7zyf&quot;&gt;&lt;em&gt;Задача:&lt;/em&gt; собрать максимально полную информацию о сайте &lt;code&gt;target.org&lt;/code&gt; через архивы.&lt;/p&gt;
  &lt;ol id=&quot;aSoS&quot;&gt;
    &lt;li id=&quot;hiEe&quot;&gt;&lt;strong&gt;Wayback Machine CDX&lt;/strong&gt; → получаем список всех 5000 сохранённых страниц.&lt;/li&gt;
    &lt;li id=&quot;5kpz&quot;&gt;&lt;strong&gt;Анализ путей:&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;iDb1&quot;&gt;
      &lt;li id=&quot;x9AE&quot;&gt;Обнаружены пути &lt;code&gt;/admin&lt;/code&gt;, &lt;code&gt;/test&lt;/code&gt;, &lt;code&gt;/backup_2022&lt;/code&gt;, &lt;code&gt;/temp&lt;/code&gt;.&lt;/li&gt;
      &lt;li id=&quot;rr8B&quot;&gt;Страница &lt;code&gt;/admin/login.html&lt;/code&gt; существует в архиве с 2020 года.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;OwRU&quot;&gt;&lt;strong&gt;Поиск файлов:&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;Slfb&quot;&gt;
      &lt;li id=&quot;8o0K&quot;&gt;&lt;code&gt;https://web.archive.org/web/20220101000000/target.org/.git/config&lt;/code&gt; — найден конфиг репозитория.&lt;/li&gt;
      &lt;li id=&quot;uv0H&quot;&gt;&lt;code&gt;https://web.archive.org/web/20200101000000/target.org/backup.sql&lt;/code&gt; — дамп базы данных.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;Vmah&quot;&gt;&lt;strong&gt;Сравнение версий:&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;QqWT&quot;&gt;
      &lt;li id=&quot;ZAFX&quot;&gt;Сравнили &lt;code&gt;index.html&lt;/code&gt; в 2020 и 2024 → структура сильно изменилась, добавилась поддержка HTTPS, появился CSP.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;g1VX&quot;&gt;&lt;strong&gt;Скрытые поддомены:&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;8XlX&quot;&gt;
      &lt;li id=&quot;6AC2&quot;&gt;На старой robots.txt найдена запись &lt;code&gt;Disallow: /dev/&lt;/code&gt;. Открываем архивный URL &lt;code&gt;https://web.archive.org/web/20200101000000/target.org/dev/&lt;/code&gt; → обнаруживаем тестовый сайт с открытыми ошибками PHP.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;YBVv&quot;&gt;&lt;strong&gt;Вывод:&lt;/strong&gt; Найдены забытые тестовые страницы, конфигурационный файл и дамп базы данных. В текущей версии сайта они удалены, но остались в архиве.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;ITAF&quot;&gt;&lt;strong&gt;Инструменты для работы с архивами&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;8j2P&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/8c/9a/8c9a77a3-3940-469d-a7ed-dcf8e2b95d43.png&quot; width=&quot;1004&quot; /&gt;
  &lt;/figure&gt;
  &lt;ul id=&quot;Fl2g&quot;&gt;
    &lt;li id=&quot;Euvt&quot;&gt;Данные Wayback Machine являются публичными, их сбор легален.&lt;/li&gt;
    &lt;li id=&quot;4DG2&quot;&gt;Не используйте найденные уязвимости для атак на сайт без разрешения.&lt;/li&gt;
    &lt;li id=&quot;vfIu&quot;&gt;Если вы нашли конфиденциальные данные (пароли, токены) в архиве, сообщите об этом владельцу сайта через официальный канал (без распространения информации третьим лицам).&lt;/li&gt;
    &lt;li id=&quot;cy8b&quot;&gt;Некоторые страны требуют удаления личных данных из архивов — уважайте такие запросы.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;ZXD8&quot;&gt;Анализ истории сайта через Wayback Machine и другие архивы — важный этап технического OSINT, позволяющий заглянуть в прошлое веб-ресурса. Удалённые страницы, забытые поддомены, случайно опубликованные конфиденциальные данные, старая robots.txt — всё это может быть восстановлено, если было сохранено в архиве. Комбинируя CDX API, поиск по шаблонам и ручной анализ, исследователь может восстановить почти полную ист&lt;/p&gt;

</content></entry><entry><id>specialist_infosec:Vulnerability-search-through-OSINT</id><link rel="alternate" type="text/html" href="https://teletype.in/@specialist_infosec/Vulnerability-search-through-OSINT?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=specialist_infosec"></link><title>Поиск уязвимостей через открытые источники: базы CVE, NVD, Exploit-DB и связь с версиями ПО</title><published>2026-06-27T16:28:23.150Z</published><updated>2026-06-27T16:28:34.363Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/90/b2/90b2d41c-87cb-450f-a82b-012a4c2e7ea7.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img3.teletype.in/files/6c/1c/6c1c1980-fe76-4005-a8dc-20cb2d941a65.png&quot;&gt;После того как в ходе технического OSINT выявлены версии программного обеспечения, используемого целью (веб-сервер, CMS, библиотеки, операционная система), логичный следующий шаг — выяснить, есть ли у этих версий известные уязвимости. Открытые базы данных уязвимостей (CVE, NVD, Exploit-DB, Vulners и др.) позволяют сопоставить версию ПО с известными CVE (Common Vulnerabilities and Exposures), оценить критичность и даже найти готовые эксплойты. Это помогает понять, насколько цель подвержена атакам, и приоритезировать дальнейшие действия. Данная статья посвящена методам поиска уязвимостей по версиям ПО с использованием открытых источников.</summary><content type="html">
  &lt;figure id=&quot;zxLK&quot; class=&quot;m_retina&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/6c/1c/6c1c1980-fe76-4005-a8dc-20cb2d941a65.png&quot; width=&quot;1099&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;R5Kp&quot;&gt;Поиск уязвимостей через открытые источники: базы CVE, NVD, Exploit-DB и связь с версиями ПО&lt;/h3&gt;
  &lt;p id=&quot;P50k&quot;&gt;После того как в ходе технического OSINT выявлены версии программного обеспечения, используемого целью (веб-сервер, CMS, библиотеки, операционная система), логичный следующий шаг — выяснить, есть ли у этих версий известные уязвимости. Открытые базы данных уязвимостей (CVE, NVD, Exploit-DB, Vulners и др.) позволяют сопоставить версию ПО с известными CVE (Common Vulnerabilities and Exposures), оценить критичность и даже найти готовые эксплойты. Это помогает понять, насколько цель подвержена атакам, и приоритезировать дальнейшие действия. Данная статья посвящена методам поиска уязвимостей по версиям ПО с использованием открытых источников.&lt;/p&gt;
  &lt;p id=&quot;aVvw&quot;&gt;&lt;strong&gt;Что такое CVE, CVSS, NVD, Exploit-DB&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;Sel7&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/27/03/27031fce-341d-42a3-8a66-fa48f9fc69e7.png&quot; width=&quot;1207&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;0mNK&quot;&gt;&lt;strong&gt;Зачем это нужно в техническом OSINT?&lt;/strong&gt;&lt;/p&gt;
  &lt;ol id=&quot;uM35&quot;&gt;
    &lt;li id=&quot;Mcyw&quot;&gt;&lt;strong&gt;Оценка рисков:&lt;/strong&gt; понять, насколько критичны уязвимости в используемом ПО.&lt;/li&gt;
    &lt;li id=&quot;zmRU&quot;&gt;&lt;strong&gt;Приоритизация проверок:&lt;/strong&gt; какие уязвимости следует тестировать в первую очередь.&lt;/li&gt;
    &lt;li id=&quot;GX1v&quot;&gt;&lt;strong&gt;Обнаружение уже скомпрометированных систем:&lt;/strong&gt; если на целевой системе есть уязвимая версия и известен активный эксплойт — она могла быть взломана.&lt;/li&gt;
    &lt;li id=&quot;5GxT&quot;&gt;&lt;strong&gt;Помощь в легальном пентесте:&lt;/strong&gt; знание уязвимостей позволяет сосредоточить усилия.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;nB55&quot;&gt;Простое наличие уязвимой версии ПО не означает, что цель автоматически скомпрометирована. Это лишь индикатор потенциальной уязвимости.&lt;/p&gt;
  &lt;p id=&quot;ZETQ&quot;&gt;&lt;strong&gt;Этап 1: Поиск CVE по названию продукта и версии&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;4JRm&quot;&gt;Самый простой способ — использовать поисковые системы по CVE с фильтрацией.&lt;/p&gt;
  &lt;p id=&quot;wJDg&quot;&gt;&lt;strong&gt;Основные базы данных:&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;C5Py&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/b6/c3/b6c3c705-30dc-4006-a5e9-ad6126c56496.png&quot; width=&quot;1206&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;lifm&quot;&gt;&lt;strong&gt;Поиск по продукту в NVD:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;2ZXQ&quot;&gt;https://nvd.nist.gov/vuln/search/results?query=nginx&amp;amp;results_type=overview&lt;/pre&gt;
  &lt;p id=&quot;C40H&quot;&gt;&lt;strong&gt;Поиск с версией в NVD (сложно):&lt;/strong&gt; NVD не всегда индексирует версии, лучше использовать Vulners.&lt;/p&gt;
  &lt;p id=&quot;pFBh&quot;&gt;&lt;strong&gt;Vulners search (пример):&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;lZ7b&quot;&gt;https://vulners.com/search?query=nginx%201.18.0&lt;/pre&gt;
  &lt;p id=&quot;QbXa&quot;&gt;&lt;strong&gt;Этап 2: Использование Vulners API для массового поиска&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;5oYT&quot;&gt;Vulners предоставляет бесплатный API с лимитами. Позволяет искать по CPE (Common Platform Enumeration) — стандартизированному формату описания ПО.&lt;/p&gt;
  &lt;p id=&quot;QBPm&quot;&gt;&lt;strong&gt;Формат CPE:&lt;/strong&gt; &lt;code&gt;cpe:2.3:a:nginx:nginx:1.18.0:*:*:*:*:*:*:*&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;eIOg&quot;&gt;&lt;strong&gt;Упрощённый поиск через API Vulners:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;xMeU&quot;&gt;import requests
import json

VULNERS_API_KEY = &amp;quot;YOUR_API_KEY&amp;quot;

def search_vulnerabilities(product, version, api_key=VULNERS_API_KEY):
    &amp;quot;&amp;quot;&amp;quot;
    Поиск уязвимостей по названию продукта и версии.
    &amp;quot;&amp;quot;&amp;quot;
    query = f&amp;#x27;{product} {version}&amp;#x27;
    url = &amp;quot;https://vulners.com/api/v3/search/lucene/&amp;quot;
    payload = {
        &amp;quot;query&amp;quot;: query,
        &amp;quot;apiKey&amp;quot;: api_key
    }
    response = requests.post(url, json=payload)
    if response.status_code == 200:
        data = response.json()
        if &amp;#x27;data&amp;#x27; in data and &amp;#x27;search&amp;#x27; in data[&amp;#x27;data&amp;#x27;]:
            return data[&amp;#x27;data&amp;#x27;][&amp;#x27;search&amp;#x27;]
    return []

def get_cves_for_software(software_list):
    results = {}
    for sw in software_list:
        cves = search_vulnerabilities(sw[&amp;#x27;name&amp;#x27;], sw[&amp;#x27;version&amp;#x27;])
        results[f&amp;quot;{sw[&amp;#x27;name&amp;#x27;]} {sw[&amp;#x27;version&amp;#x27;]}&amp;quot;] = cves
    return results

# Пример
software = [
    {&amp;#x27;name&amp;#x27;: &amp;#x27;nginx&amp;#x27;, &amp;#x27;version&amp;#x27;: &amp;#x27;1.18.0&amp;#x27;},
    {&amp;#x27;name&amp;#x27;: &amp;#x27;php&amp;#x27;, &amp;#x27;version&amp;#x27;: &amp;#x27;7.4.33&amp;#x27;},
    {&amp;#x27;name&amp;#x27;: &amp;#x27;wordpress&amp;#x27;, &amp;#x27;version&amp;#x27;: &amp;#x27;6.2&amp;#x27;}
]
vulns = get_cves_for_software(software)
for k, v in vulns.items():
    print(f&amp;quot;{k}: {len(v)} vulnerabilities&amp;quot;)&lt;/pre&gt;
  &lt;p id=&quot;kgz4&quot;&gt;&lt;strong&gt;Этап 3: Использование CIRCL CVE Search API (без ключа)&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;13CH&quot;&gt;CIRCL предлагает публичный API, не требующий авторизации.&lt;/p&gt;
  &lt;p id=&quot;JY7c&quot;&gt;&lt;strong&gt;Пример запроса для поиска CVE по ключевому слову nginx:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;Vk5m&quot;&gt;curl https://cve.circl.lu/api/search/nginx&lt;/pre&gt;
  &lt;p id=&quot;WFew&quot;&gt;&lt;strong&gt;Для извлечения информации о конкретном CVE:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;PR5M&quot;&gt;curl https://cve.circl.lu/api/cve/CVE-2021-23017&lt;/pre&gt;
  &lt;p id=&quot;GWOW&quot;&gt;CIRCL не позволяет фильтровать по версии, ищет по тексту.&lt;/p&gt;
  &lt;p id=&quot;COUy&quot;&gt;&lt;strong&gt;Этап 4: Поиск эксплойтов (Exploit-DB, Rapid7, Packet Storm)&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;Pjl0&quot;&gt;Наличие эксплойта повышает вероятность того, что уязвимость будет использована.&lt;/p&gt;
  &lt;p id=&quot;pkUV&quot;&gt;&lt;strong&gt;Exploit-DB:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;CHcM&quot;&gt;
    &lt;li id=&quot;4grd&quot;&gt;Поиск по продукту и версии: &lt;code&gt;https://www.exploit-db.com/search?q=nginx+1.18.0&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;o9Dz&quot;&gt;Можно скачать готовый код (на свой страх и риск).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;jUWr&quot;&gt;&lt;strong&gt;Rapid7 DB (Metasploit modules):&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;vGsd&quot;&gt;
    &lt;li id=&quot;VAHb&quot;&gt;Поиск: &lt;code&gt;https://www.rapid7.com/db/search/?q=nginx&lt;/code&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;UEYg&quot;&gt;&lt;strong&gt;Packet Storm Security:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;2UzU&quot;&gt;
    &lt;li id=&quot;kTvR&quot;&gt;&lt;code&gt;https://packetstormsecurity.com/search/?q=nginx&lt;/code&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;WfRw&quot;&gt;&lt;strong&gt;Пример автоматизации через Exploit-DB (неофициальный API, лучше парсить):&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;tCQY&quot;&gt;import requests
from bs4 import BeautifulSoup

def search_exploitdb(product, version):
    url = f&amp;quot;https://www.exploit-db.com/search?q={product}+{version}&amp;quot;
    resp = requests.get(url)
    soup = BeautifulSoup(resp.text, &amp;#x27;html.parser&amp;#x27;)
    # Парсинг таблицы результатов (сложно, зависит от структуры)
    # Возвращает список заголовков эксплойтов
    return []

# Ручной поиск вручную часто проще&lt;/pre&gt;
  &lt;p id=&quot;nMGR&quot;&gt;&lt;strong&gt;Этап 5: Сопоставление версий ПО с CPE для точного поиска&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;pqEX&quot;&gt;Чтобы искать CVE, лучше преобразовать название и версию в CPE-формат. Это повышает точность.&lt;/p&gt;
  &lt;p id=&quot;TKZB&quot;&gt;&lt;strong&gt;Сервис CPE Dictionary (NVD):&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;Ju7p&quot;&gt;
    &lt;li id=&quot;3Mjw&quot;&gt;&lt;code&gt;https://nvd.nist.gov/products/cpe/search&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;ZJeo&quot;&gt;API: &lt;code&gt;https://services.nvd.nist.gov/rest/json/cpes/2.0?keyword=nginx&lt;/code&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;Dxlm&quot;&gt;&lt;strong&gt;Автоматическое определение CPE через cpe-guesser (исследовательский):&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;AX3P&quot;&gt;def guess_cpe(product, version):
    # упрощённый пример
    product_lower = product.lower()
    if product_lower == &amp;#x27;nginx&amp;#x27;:
        return f&amp;quot;cpe:2.3:a:nginx:nginx:{version}:*:*:*:*:*:*:*&amp;quot;
    elif product_lower == &amp;#x27;wordpress&amp;#x27;:
        return f&amp;quot;cpe:2.3:a:wordpress:wordpress:{version}:*:*:*:*:*:*:*&amp;quot;
    # ...
    return None&lt;/pre&gt;
  &lt;p id=&quot;2StY&quot;&gt;&lt;strong&gt;Этап 6: Анализ CVSS (критичность уязвимости)&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;iddC&quot;&gt;Каждому CVE присваивается оценка CVSS. Чем выше, тем критичнее.&lt;/p&gt;
  &lt;p id=&quot;zlfF&quot;&gt;&lt;strong&gt;CVSS v3 шкала:&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;W7mk&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/54/56/54561dd9-0302-4330-acc7-752cdb9c77ae.png&quot; width=&quot;929&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;b1Qj&quot;&gt;&lt;strong&gt;Вектор CVSS&lt;/strong&gt; (пример): &lt;code&gt;CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H&lt;/code&gt; означает: сетевой доступ, низкая сложность, не требуется привилегий, полное воздействие на конфиденциальность, целостность и доступность.&lt;/p&gt;
  &lt;p id=&quot;8wed&quot;&gt;&lt;strong&gt;Где брать CVSS:&lt;/strong&gt; NVD, Vulners, некоторые API.&lt;/p&gt;
  &lt;p id=&quot;tiPI&quot;&gt;&lt;strong&gt;Этап 7: Автоматизированный сбор уязвимостей для всех технологий стека&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;MKvZ&quot;&gt;Комбинируем результаты предыдущих статей (технологический стек) с базами уязвимостей.&lt;/p&gt;
  &lt;p id=&quot;xtcr&quot;&gt;&lt;strong&gt;Python-скрипт для массовой проверки (на основе данных из Wappalyzer, BuiltWith):&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;nYk6&quot;&gt;import requests
import time
import json

def get_cves_from_nvd(keyword, api_key=None):
    &amp;quot;&amp;quot;&amp;quot;
    Поиск в NVD через API (требуется ключ, можно получить бесплатно).
    Без ключа возвращает только первые 20 результатов.
    &amp;quot;&amp;quot;&amp;quot;
    url = &amp;quot;https://services.nvd.nist.gov/rest/json/cves/2.0&amp;quot;
    params = {
        &amp;#x27;keywordSearch&amp;#x27;: keyword,
        &amp;#x27;resultsPerPage&amp;#x27;: 10
    }
    if api_key:
        params[&amp;#x27;apiKey&amp;#x27;] = api_key
    response = requests.get(url, params=params)
    if response.status_code == 200:
        data = response.json()
        cves = []
        for vuln in data.get(&amp;#x27;vulnerabilities&amp;#x27;, []):
            cve_id = vuln[&amp;#x27;cve&amp;#x27;][&amp;#x27;id&amp;#x27;]
            cvss_score = vuln[&amp;#x27;cve&amp;#x27;].get(&amp;#x27;metrics&amp;#x27;, {}).get(&amp;#x27;cvssMetricV31&amp;#x27;, [{}])[0].get(&amp;#x27;cvssData&amp;#x27;, {}).get(&amp;#x27;baseScore&amp;#x27;, &amp;#x27;N/A&amp;#x27;)
            cves.append({&amp;#x27;id&amp;#x27;: cve_id, &amp;#x27;cvss_score&amp;#x27;: cvss_score})
        return cves
    else:
        print(f&amp;quot;Ошибка NVD: {response.status_code}&amp;quot;)
        return []

# Пример для nginx 1.18.0
cves = get_cves_from_nvd(&amp;quot;nginx 1.18.0&amp;quot;)
for cve in cves:
    print(f&amp;quot;{cve[&amp;#x27;id&amp;#x27;]} (CVSS {cve[&amp;#x27;cvss_score&amp;#x27;]})&amp;quot;)&lt;/pre&gt;
  &lt;p id=&quot;6DN6&quot;&gt;NVD API имеет rate limit (без ключа ~5 запросов в 30 секунд). Используйте ключ или библиотеку с задержками.&lt;/p&gt;
  &lt;p id=&quot;qJxj&quot;&gt;&lt;strong&gt;Этап 8: Поиск уязвимостей в WordPress плагинах и темах&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;IcdP&quot;&gt;WordPress — особая категория: уязвимости часто связаны с плагинами и темами, а не с ядром.&lt;/p&gt;
  &lt;p id=&quot;5pQP&quot;&gt;&lt;strong&gt;Базы для WordPress:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;CS5I&quot;&gt;
    &lt;li id=&quot;WwGP&quot;&gt;&lt;strong&gt;WPScan Vulnerability Database:&lt;/strong&gt; &lt;code&gt;https://wpscan.com/api&lt;/code&gt; (есть бесплатный API с ограничениями).&lt;/li&gt;
    &lt;li id=&quot;il6l&quot;&gt;&lt;strong&gt;Patchstack:&lt;/strong&gt; &lt;code&gt;https://patchstack.com/database/&lt;/code&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;UXkG&quot;&gt;&lt;strong&gt;Пример поиска через WPScan API:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;hK24&quot;&gt;def check_wpscan_plugin(plugin_slug):
    url = f&amp;quot;https://wpscan.com/api/v3/plugins/{plugin_slug}&amp;quot;
    response = requests.get(url)
    if response.status_code == 200:
        data = response.json()
        return data.get(&amp;#x27;vulnerabilities&amp;#x27;, [])
    return []&lt;/pre&gt;
  &lt;p id=&quot;5NJt&quot;&gt;&lt;strong&gt;Этап 9: Анализ базы Known Exploited Vulnerabilities (CISA KEV)&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;BRWA&quot;&gt;CISA ведёт список активно эксплуатируемых уязвимостей (KEV). Если CVE есть в этом списке, оно представляет большую угрозу.&lt;/p&gt;
  &lt;p id=&quot;gCmT&quot;&gt;&lt;strong&gt;API KEV:&lt;/strong&gt; &lt;a href=&quot;https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json&quot; target=&quot;_blank&quot;&gt;https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json&lt;/a&gt;&lt;/p&gt;
  &lt;pre id=&quot;65tP&quot;&gt;def is_in_kev(cve_id):
    url = &amp;quot;https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json&amp;quot;
    resp = requests.get(url)
    if resp.status_code == 200:
        data = resp.json()
        for item in data[&amp;#x27;vulnerabilities&amp;#x27;]:
            if item[&amp;#x27;cveID&amp;#x27;] == cve_id:
                return True
    return False&lt;/pre&gt;
  &lt;p id=&quot;bddm&quot;&gt;&lt;strong&gt;Этап 10: Составление отчёта об уязвимостях&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;9HmG&quot;&gt;Для каждой версии ПО, найденной на цели, следует создать таблицу:&lt;/p&gt;
  &lt;figure id=&quot;0IP1&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/e4/83/e4837925-ab85-4e55-ab93-f6bc56444913.png&quot; width=&quot;907&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;70fR&quot;&gt;Суммировать количество критических уязвимостей, наличие эксплойтов, попадание в KEV.&lt;/p&gt;
  &lt;p id=&quot;Yldi&quot;&gt;&lt;strong&gt;Практический пример: оценка рисков для веб-сервера цели&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;dWpj&quot;&gt;&lt;em&gt;Задача:&lt;/em&gt; для сервера nginx 1.18.0 + PHP 7.4.33 найти известные уязвимости.&lt;/p&gt;
  &lt;ol id=&quot;ehHE&quot;&gt;
    &lt;li id=&quot;0U41&quot;&gt;&lt;strong&gt;Поиск через Vulners:&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;Xx1V&quot;&gt;
      &lt;li id=&quot;2h3H&quot;&gt;nginx 1.18.0: 3 CVE, все с CVSS ниже 6.0. Эксплойтов нет.&lt;/li&gt;
      &lt;li id=&quot;bE77&quot;&gt;PHP 7.4.33: 12 CVE, из них 4 с CVSS &amp;gt; 7.0. Один эксплойт в Metasploit.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;u1R2&quot;&gt;&lt;strong&gt;Проверка CISA KEV:&lt;/strong&gt; PHP 7.4.33 не в списке KEV.&lt;/li&gt;
    &lt;li id=&quot;KmQF&quot;&gt;&lt;strong&gt;Вывод:&lt;/strong&gt; основной риск — уязвимости PHP (особенно CVE-2022-31628, позволяющая удалённое выполнение кода). Рекомендуется обновить PHP до 8.x.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;ul id=&quot;68sC&quot;&gt;
    &lt;li id=&quot;8wIw&quot;&gt;Поиск уязвимостей в открытых базах данных легален.&lt;/li&gt;
    &lt;li id=&quot;tJ9m&quot;&gt;Запуск эксплойтов на целевой системе без разрешения — уголовное преступление.&lt;/li&gt;
    &lt;li id=&quot;1UQO&quot;&gt;Обнаруженную уязвимость следует сообщить владельцу системы через программы Bug Bounty или координаторы (CERT).&lt;/li&gt;
    &lt;li id=&quot;bCtd&quot;&gt;Не следует тестировать эксплойты на чужих системах.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;pz1M&quot;&gt;Поиск уязвимостей по версиям ПО — неотъемлемая часть технического OSINT. Базы CVE, NVD, Vulners, Exploit-DB и CISA KEV дают исследователю возможность оценить поверхность атаки, не прибегая к активным сканерам уязвимостей. Сопоставление версий из предыдущих статей (технологический стек, версии ПО, заголовки) с уязвимостями позволяет построить рейтинг рисков и определить приоритет для дальнейшего тестирования.&lt;/p&gt;

</content></entry><entry><id>specialist_infosec:Headline-Analysis</id><link rel="alternate" type="text/html" href="https://teletype.in/@specialist_infosec/Headline-Analysis?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=specialist_infosec"></link><title>Анализ заголовков HTTP: серверы, cookies, политики безопасности</title><published>2026-06-24T08:29:47.248Z</published><updated>2026-06-24T08:29:47.248Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/dd/21/dd211fb3-5814-4a2d-9527-9f9725b7a7ad.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/98/b2/98b2a327-44d0-47ce-924f-402d58919182.png&quot;&gt;HTTP-заголовки — это метаданные, которыми обмениваются клиент (браузер) и сервер при каждом запросе. Для специалиста по техническому OSINT заголовки — ценный источник информации: они раскрывают версии программного обеспечения, используемые технологии, настройки безопасности и даже особенности конфигурации. Помимо этого, заголовки безопасности (CSP, HSTS, X-Frame-Options) позволяют оценить уровень защищённости веб-приложения и выявить потенциальные уязвимости. Данная статья посвящена методам сбора и анализа HTTP-заголовков, а также извлечению разведывательной информации из них.</summary><content type="html">
  &lt;figure id=&quot;1ash&quot; class=&quot;m_retina&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/98/b2/98b2a327-44d0-47ce-924f-402d58919182.png&quot; width=&quot;1102&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;DpJO&quot;&gt;Анализ заголовков HTTP: серверы, cookies, политики безопасности (CSP, HSTS, X-Frame-Options и другие)&lt;/h3&gt;
  &lt;p id=&quot;677c&quot;&gt;HTTP-заголовки — это метаданные, которыми обмениваются клиент (браузер) и сервер при каждом запросе. Для специалиста по техническому OSINT заголовки — ценный источник информации: они раскрывают версии программного обеспечения, используемые технологии, настройки безопасности и даже особенности конфигурации. Помимо этого, заголовки безопасности (CSP, HSTS, X-Frame-Options) позволяют оценить уровень защищённости веб-приложения и выявить потенциальные уязвимости. Данная статья посвящена методам сбора и анализа HTTP-заголовков, а также извлечению разведывательной информации из них.&lt;/p&gt;
  &lt;p id=&quot;KpN1&quot;&gt;&lt;strong&gt;Почему HTTP-заголовки важны для технического OSINT?&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;gvRN&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/51/e9/51e9b4d7-59e3-478b-96a2-37d55de03f24.png&quot; width=&quot;1203&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;YeYR&quot;&gt;&lt;strong&gt;Этап 1: Сбор заголовков (базовые инструменты)&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;GSEO&quot;&gt;&lt;strong&gt;1. curl&lt;/strong&gt;  — самый простой способ:&lt;/p&gt;
  &lt;pre id=&quot;wlFl&quot;&gt;# Показать только заголовки ответа
curl -I https://example.com

# Показать заголовки запроса и ответа
curl -v https://example.com

# Сохранить заголовки в файл
curl -D headers.txt https://example.com&lt;/pre&gt;
  &lt;p id=&quot;DbkW&quot;&gt;&lt;strong&gt;2. wget&lt;/strong&gt;:&lt;/p&gt;
  &lt;pre id=&quot;2LVx&quot;&gt;wget --server-response -O /dev/null https://example.com&lt;/pre&gt;
  &lt;p id=&quot;t82e&quot;&gt;&lt;strong&gt;3. Browser DevTools&lt;/strong&gt; (F12 → Network → выбрать запрос → Headers).&lt;/p&gt;
  &lt;p id=&quot;HHOD&quot;&gt;&lt;strong&gt;4. Онлайн сервисы:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;rcRM&quot;&gt;
    &lt;li id=&quot;CrJX&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://securityheaders.com/&quot; target=&quot;_blank&quot;&gt;SecurityHeaders.com&lt;/a&gt;&lt;/strong&gt; — проверяет наличие и корректность заголовков безопасности, выставляет оценку.&lt;/li&gt;
    &lt;li id=&quot;BxsH&quot;&gt;&lt;strong&gt;HTTPHeaderCheck&lt;/strong&gt; (&lt;a href=&quot;https://httpheadercheck.com/&quot; target=&quot;_blank&quot;&gt;httpheadercheck.com&lt;/a&gt;) — анализирует заголовки и даёт рекомендации.&lt;/li&gt;
    &lt;li id=&quot;enPC&quot;&gt;&lt;strong&gt;Mozilla Observatory&lt;/strong&gt; — глубокий анализ безопасности с рекомендациями.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;gEnS&quot;&gt;&lt;strong&gt;Этап 2: Анализ идентификационных заголовков&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;AFdb&quot;&gt;Эти заголовки могут выдать технологии, версии ПО, что полезно для обнаружения устаревших или уязвимых компонентов.&lt;/p&gt;
  &lt;p id=&quot;M6Bz&quot;&gt;&lt;strong&gt;&lt;code&gt;Server:&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;rInk&quot;&gt;
    &lt;li id=&quot;F2pV&quot;&gt;Указывает тип и версию веб-сервера. Примеры: &lt;code&gt;nginx/1.18.0&lt;/code&gt;, &lt;code&gt;Apache/2.4.41 (Ubuntu)&lt;/code&gt;, &lt;code&gt;Microsoft-IIS/10.0&lt;/code&gt;, &lt;code&gt;Cloudflare&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;aBpM&quot;&gt;Часто скрывается администраторами (&lt;code&gt;Server: Apache&lt;/code&gt;, без версии). Если версия показана — сверьте с базами уязвимостей.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;HLI9&quot;&gt;&lt;strong&gt;&lt;code&gt;X-Powered-By:&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;dVhk&quot;&gt;
    &lt;li id=&quot;Dedf&quot;&gt;Показывает технологию бэкенда. Например: &lt;code&gt;PHP/7.4.33&lt;/code&gt;, &lt;code&gt;ASP.NET&lt;/code&gt;, &lt;code&gt;Express&lt;/code&gt;. Может дать версию языка/фреймворка.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;vaM0&quot;&gt;&lt;strong&gt;&lt;code&gt;X-Generator:&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;znte&quot;&gt;
    &lt;li id=&quot;KUho&quot;&gt;Иногда содержит название CMS или генератора контента (например, &lt;code&gt;WordPress 6.2&lt;/code&gt;).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;Sb0C&quot;&gt;&lt;strong&gt;&lt;code&gt;X-AspNet-Version:&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;jxVW&quot;&gt;
    &lt;li id=&quot;h7Tx&quot;&gt;Для &lt;a href=&quot;https://asp.net/&quot; target=&quot;_blank&quot;&gt;ASP.NET&lt;/a&gt;. Пример: &lt;code&gt;X-AspNet-Version: 4.0.30319&lt;/code&gt;.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;bkEa&quot;&gt;&lt;strong&gt;&lt;code&gt;X-Powered-By-Plesk:&lt;/code&gt;&lt;/strong&gt; (если используется панель управления хостингом).&lt;/p&gt;
  &lt;p id=&quot;8PST&quot;&gt;&lt;strong&gt;Этап 3: Анализ cookie и сессионных заголовков&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;XL8h&quot;&gt;Заголовок &lt;code&gt;Set-Cookie&lt;/code&gt; не только управляет сессиями, но и выдаёт технологии.&lt;/p&gt;
  &lt;p id=&quot;Qgd1&quot;&gt;&lt;strong&gt;&lt;code&gt;Set-Cookie:&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;ZvoF&quot;&gt;
    &lt;li id=&quot;cAt9&quot;&gt;&lt;code&gt;PHPSESSID=...&lt;/code&gt; → PHP (версия сессионного механизма).&lt;/li&gt;
    &lt;li id=&quot;W1dy&quot;&gt;&lt;code&gt;JSESSIONID=...&lt;/code&gt; → Java (JSP).&lt;/li&gt;
    &lt;li id=&quot;Kj7D&quot;&gt;&lt;code&gt;ASPSESSIONID...&lt;/code&gt; → &lt;a href=&quot;https://asp.net/&quot; target=&quot;_blank&quot;&gt;ASP.NET&lt;/a&gt;.&lt;/li&gt;
    &lt;li id=&quot;NkAq&quot;&gt;&lt;code&gt;laravel_session=...&lt;/code&gt; → Laravel (PHP-фреймворк).&lt;/li&gt;
    &lt;li id=&quot;9058&quot;&gt;&lt;code&gt;XSRF-TOKEN&lt;/code&gt; → часто используется в Angular, Laravel, Django.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;uvdA&quot;&gt;&lt;strong&gt;Флаги cookie (httponly, secure, samesite):&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;PFKG&quot;&gt;
    &lt;li id=&quot;KIGi&quot;&gt;&lt;code&gt;HttpOnly&lt;/code&gt; — недоступен для JavaScript (хорошо для безопасности).&lt;/li&gt;
    &lt;li id=&quot;y3F4&quot;&gt;&lt;code&gt;Secure&lt;/code&gt; — только через HTTPS.&lt;/li&gt;
    &lt;li id=&quot;MaLg&quot;&gt;&lt;code&gt;SameSite=Lax/Strict&lt;/code&gt; — защита от CSRF.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;WJf8&quot;&gt;&lt;strong&gt;Этап 4: Заголовки безопасности (Security Headers)&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;MMxV&quot;&gt;Оценка безопасности веб-приложения — важная часть разведки. Слабые настройки могут привести к уязвимостям (кликджекинг, XSS, перехват сессий).&lt;/p&gt;
  &lt;p id=&quot;LP8t&quot;&gt;&lt;strong&gt;4.1. Content-Security-Policy (CSP)&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;EDCA&quot;&gt;CSP — белый список источников загрузки ресурсов (скриптов, стилей, изображений). Хорошо настроенный CSP сильно уменьшает риск XSS.&lt;/p&gt;
  &lt;p id=&quot;V39N&quot;&gt;&lt;strong&gt;Анализ CSP:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;iDXM&quot;&gt;
    &lt;li id=&quot;DFir&quot;&gt;&lt;code&gt;default-src &amp;#x27;none&amp;#x27;&lt;/code&gt; — жёсткая политика.&lt;/li&gt;
    &lt;li id=&quot;7YUL&quot;&gt;&lt;code&gt;script-src &amp;#x27;self&amp;#x27;&lt;/code&gt; — разрешены скрипты только с того же домена.&lt;/li&gt;
    &lt;li id=&quot;ryPG&quot;&gt;&lt;code&gt;unsafe-inline&lt;/code&gt;, &lt;code&gt;unsafe-eval&lt;/code&gt; — опасные директивы, делают CSP бесполезным.&lt;/li&gt;
    &lt;li id=&quot;dFii&quot;&gt;&lt;code&gt;report-uri /report-csp-violation&lt;/code&gt; — куда отправлять отчёты о нарушениях.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;vFsn&quot;&gt;&lt;strong&gt;Ошибки:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;KXIB&quot;&gt;
    &lt;li id=&quot;5DVA&quot;&gt;Отсутствие CSP — распространённая проблема.&lt;/li&gt;
    &lt;li id=&quot;wI5u&quot;&gt;Наличие &lt;code&gt;unsafe-inline&lt;/code&gt; без nonce/hash — снижает защиту.&lt;/li&gt;
    &lt;li id=&quot;UYUv&quot;&gt;Слишком широкие источники (&lt;code&gt;*.example.com&lt;/code&gt;, &lt;code&gt;https:&lt;/code&gt;).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;8Fo3&quot;&gt;&lt;strong&gt;4.2. HSTS (HTTP Strict Transport Security)&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;efPa&quot;&gt;Принудительное использование HTTPS для всех подключений к домену.&lt;/p&gt;
  &lt;p id=&quot;KMXW&quot;&gt;&lt;strong&gt;Пример:&lt;/strong&gt; &lt;code&gt;Strict-Transport-Security: max-age=31536000; includeSubDomains; preload&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;9U1Y&quot;&gt;&lt;strong&gt;Анализ:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;TimN&quot;&gt;
    &lt;li id=&quot;BZOg&quot;&gt;&lt;code&gt;max-age=0&lt;/code&gt; — отключено (опасно).&lt;/li&gt;
    &lt;li id=&quot;g57z&quot;&gt;&lt;code&gt;includeSubDomains&lt;/code&gt; — принудительный HTTPS для всех поддоменов.&lt;/li&gt;
    &lt;li id=&quot;7Xi0&quot;&gt;&lt;code&gt;preload&lt;/code&gt; — домен включён в предзагружаемый список браузеров (максимальный уровень).&lt;/li&gt;
    &lt;li id=&quot;02ri&quot;&gt;Отсутствие HSTS — возможность атаки «понижения до HTTP» (SSL stripping).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;Webn&quot;&gt;&lt;strong&gt;4.3. X-Frame-Options&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;LUTv&quot;&gt;Защита от кликджекинга (встраивания сайта в frame).&lt;/p&gt;
  &lt;p id=&quot;4C47&quot;&gt;&lt;strong&gt;Значения:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;2HrA&quot;&gt;
    &lt;li id=&quot;cqOE&quot;&gt;&lt;code&gt;DENY&lt;/code&gt; — запрещено встраивание в frame.&lt;/li&gt;
    &lt;li id=&quot;3i2f&quot;&gt;&lt;code&gt;SAMEORIGIN&lt;/code&gt; — разрешено только с того же домена.&lt;/li&gt;
    &lt;li id=&quot;ojt7&quot;&gt;&lt;code&gt;ALLOW-FROM uri&lt;/code&gt; — устаревшее.&lt;/li&gt;
    &lt;li id=&quot;LNeN&quot;&gt;Отсутствие заголовка — сайт можно встроить в &lt;code&gt;&amp;lt;iframe&amp;gt;&lt;/code&gt; (угроза UI redressing).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;0CjR&quot;&gt;&lt;strong&gt;4.4. X-Content-Type-Options&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;KbdL&quot;&gt;Защита от MIME-тип-путаницы (MIME sniffing).&lt;/p&gt;
  &lt;p id=&quot;QQtS&quot;&gt;&lt;strong&gt;Единственное допустимое значение:&lt;/strong&gt; &lt;code&gt;nosniff&lt;/code&gt;. Если отсутствует — браузер может выполнить script, даже если тип указан как текст.&lt;/p&gt;
  &lt;p id=&quot;itT6&quot;&gt;&lt;strong&gt;4.5. X-XSS-Protection&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;zy81&quot;&gt;Старый заголовок для защиты от XSS (в основном для старых браузеров).&lt;/p&gt;
  &lt;p id=&quot;aqKs&quot;&gt;&lt;strong&gt;Значения:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;x8MK&quot;&gt;
    &lt;li id=&quot;Ob0H&quot;&gt;&lt;code&gt;1; mode=block&lt;/code&gt; — блокировать страницу при обнаружении XSS.&lt;/li&gt;
    &lt;li id=&quot;Zvbk&quot;&gt;&lt;code&gt;1&lt;/code&gt; — попытаться очистить (менее безопасно).&lt;/li&gt;
    &lt;li id=&quot;SMaU&quot;&gt;&lt;code&gt;0&lt;/code&gt; — отключено.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;kdmG&quot;&gt;В современных браузерах во многом заменён CSP, но его наличие всё же полезно.&lt;/p&gt;
  &lt;p id=&quot;A9T7&quot;&gt;&lt;strong&gt;4.6. Referrer-Policy&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;8xz5&quot;&gt;Контролирует передачу referer при переходе по ссылкам.&lt;/p&gt;
  &lt;p id=&quot;3gks&quot;&gt;&lt;strong&gt;Настройки:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;zFcD&quot;&gt;
    &lt;li id=&quot;uoMB&quot;&gt;&lt;code&gt;no-referrer&lt;/code&gt; — вообще не передавать.&lt;/li&gt;
    &lt;li id=&quot;wrvk&quot;&gt;&lt;code&gt;strict-origin&lt;/code&gt; — передавать только схему и домен (при HTTPS→HTTPS).&lt;/li&gt;
    &lt;li id=&quot;i6jx&quot;&gt;&lt;code&gt;unsafe-url&lt;/code&gt; — всегда передавать полный URL (опасно, утечка параметров).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;NEbS&quot;&gt;&lt;strong&gt;4.7. Feature-Policy / Permissions-Policy&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;4bsS&quot;&gt;Ограничивает доступ к функциям браузера (камера, микрофон, геолокация). Может содержать информацию о политиках организации.&lt;/p&gt;
  &lt;p id=&quot;03ra&quot;&gt;&lt;strong&gt;Этап 5: Заголовки, указывающие на CDN, прокси, кэширование&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;ZXZD&quot;&gt;Эти заголовки помогают понять, скрыт ли реальный IP сервера за CDN, используется ли балансировка, кэширование.&lt;/p&gt;
  &lt;p id=&quot;VjmM&quot;&gt;&lt;strong&gt;Cloudflare:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;lXzN&quot;&gt;
    &lt;li id=&quot;OvbA&quot;&gt;&lt;code&gt;CF-Cache-Status&lt;/code&gt; (HIT, MISS, EXPIRED, DYNAMIC).&lt;/li&gt;
    &lt;li id=&quot;wYMV&quot;&gt;&lt;code&gt;CF-RAY&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;nm2j&quot;&gt;&lt;code&gt;CF-Connection-Connecting&lt;/code&gt;.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;YgVj&quot;&gt;&lt;strong&gt;Akamai:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;xNfe&quot;&gt;
    &lt;li id=&quot;5SDk&quot;&gt;&lt;code&gt;X-Akamai-Transformed&lt;/code&gt;, &lt;code&gt;X-Akamai-Cache-Status&lt;/code&gt;.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;gH5T&quot;&gt;&lt;strong&gt;AWS CloudFront:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;kovb&quot;&gt;
    &lt;li id=&quot;zz51&quot;&gt;&lt;code&gt;X-Amz-Cf-Id&lt;/code&gt;, &lt;code&gt;X-Cache&lt;/code&gt; (Hit from cloudfront).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;dXlF&quot;&gt;&lt;strong&gt;Varnish:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;Hh6q&quot;&gt;
    &lt;li id=&quot;ZYin&quot;&gt;&lt;code&gt;X-Varnish&lt;/code&gt;, &lt;code&gt;X-Cache&lt;/code&gt; (HIT, MISS).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;jbhK&quot;&gt;&lt;strong&gt;Этап 6: Анализ заголовков на предмет утечки внутренней информации&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;Qhkq&quot;&gt;Некоторые заголовки могут раскрывать внутреннюю инфраструктуру:&lt;/p&gt;
  &lt;ul id=&quot;d1DQ&quot;&gt;
    &lt;li id=&quot;Ahmz&quot;&gt;&lt;code&gt;X-Backend-Server&lt;/code&gt; — имя внутреннего сервера.&lt;/li&gt;
    &lt;li id=&quot;Psm6&quot;&gt;&lt;code&gt;X-Debug-Token&lt;/code&gt;, &lt;code&gt;X-Debug-Token-Link&lt;/code&gt; — утечка отладочной информации.&lt;/li&gt;
    &lt;li id=&quot;wzCw&quot;&gt;&lt;code&gt;X-Server-Name&lt;/code&gt; — имя сервера внутри сети.&lt;/li&gt;
    &lt;li id=&quot;2KfV&quot;&gt;&lt;code&gt;X-Forwarded-For&lt;/code&gt; (иногда) — реальный IP клиента, но может содержать IP прокси.&lt;/li&gt;
    &lt;li id=&quot;bfph&quot;&gt;&lt;code&gt;Via&lt;/code&gt; — прокси-серверы (например, &lt;code&gt;Via: 1.1 varnish&lt;/code&gt;).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;wJja&quot;&gt;&lt;strong&gt;Если увидели &lt;code&gt;X-Backend-Server: web01.internal.company.com&lt;/code&gt; — это очень ценно: можно узнать внутреннюю структуру и возможные имена хостов.&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;0sIS&quot;&gt;&lt;strong&gt;Этап 7: Инструменты для массового сбора заголовков&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;Ns8z&quot;&gt;&lt;strong&gt;Httpx (от ProjectDiscovery)&lt;/strong&gt; — быстрый HTTP-клиент, собирает заголовки, извлекает технологии, поддерживает вывод в JSON.&lt;/p&gt;
  &lt;pre id=&quot;e9ZG&quot;&gt;httpx -u https://example.com -sc -title -tech-detect -json -o headers.json&lt;/pre&gt;
  &lt;p id=&quot;dKHg&quot;&gt;&lt;strong&gt;HTTPX (Python-библиотека) — позволяет автоматизировать запросы:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;XmTb&quot;&gt;import httpx

def get_headers(url):
    try:
        response = httpx.get(url, follow_redirects=True, timeout=10)
        headers = dict(response.headers)
        # дополнительные данные
        headers[&amp;#x27;_status_code&amp;#x27;] = response.status_code
        headers[&amp;#x27;_url&amp;#x27;] = str(response.url)
        return headers
    except Exception as e:
        return {&amp;#x27;_error&amp;#x27;: str(e)}

# Пример для одного сайта
print(get_headers(&amp;#x27;https://example.com&amp;#x27;))&lt;/pre&gt;
  &lt;p id=&quot;mRGD&quot;&gt;&lt;strong&gt;Этап 8: Автоматический анализ с помощью &lt;a href=&quot;https://securityheaders.com/&quot; target=&quot;_blank&quot;&gt;SecurityHeaders.com&lt;/a&gt; API&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;wPSD&quot;&gt;&lt;a href=&quot;https://securityheaders.com/&quot; target=&quot;_blank&quot;&gt;SecurityHeaders.com&lt;/a&gt; предоставляет API для оценки заголовков.&lt;/p&gt;
  &lt;pre id=&quot;qad3&quot;&gt;curl https://securityheaders.com/?q=https://example.com&amp;amp;hide=on&lt;/pre&gt;
  &lt;p id=&quot;gGpU&quot;&gt;Ответ — HTML, но можно парсить. Оценка от A+ до F (рекомендуется A).&lt;/p&gt;
  &lt;p id=&quot;hECp&quot;&gt;&lt;strong&gt;Пример из утилиты:&lt;/strong&gt; можно использовать &lt;code&gt;curl&lt;/code&gt; и &lt;code&gt;grep&lt;/code&gt; для извлечения рейтинга.&lt;/p&gt;
  &lt;p id=&quot;imXk&quot;&gt;&lt;strong&gt;Этап 9: Оценка качества и потенциальных уязвимостей по заголовкам&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;lDeM&quot;&gt;&lt;strong&gt;Недостатки в заголовках безопасности могут указывать на слабую защиту:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;7NbQ&quot;&gt;
    &lt;li id=&quot;tJDo&quot;&gt;Нет HSTS → риск с stripping (особенно для сайтов с логинами).&lt;/li&gt;
    &lt;li id=&quot;9i7U&quot;&gt;Нет CSP → уязвимость XSS.&lt;/li&gt;
    &lt;li id=&quot;nIFu&quot;&gt;Нет X-Frame-Options → риск кликджекинга.&lt;/li&gt;
    &lt;li id=&quot;Q3Tu&quot;&gt;Наличие &lt;code&gt;X-Powered-By&lt;/code&gt; с точной версией → может помочь злоумышленнику (но не является уязвимостью).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;k0ft&quot;&gt;&lt;strong&gt;Практический пример: разбор заголовков сайта с логином&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;XEN7&quot;&gt;&lt;em&gt;Задача:&lt;/em&gt; проверить защищённость сайта &lt;code&gt;login.target.com&lt;/code&gt; по заголовкам.&lt;/p&gt;
  &lt;ol id=&quot;XlhH&quot;&gt;
    &lt;li id=&quot;ht1N&quot;&gt;&lt;strong&gt;Запрос заголовков:&lt;/strong&gt;textcurl -I https://login.target.comОтвет:textHTTP/2 200 server: nginx/1.22.0 x-powered-by: PHP/7.4.33 set-cookie: PHPSESSID=abc123; path=/; HttpOnly; Secure strict-transport-security: max-age=0 x-frame-options: DENY x-content-type-options: nosniff x-xss-protection: 1; mode=block content-security-policy: default-src &amp;#x27;self&amp;#x27;&lt;/li&gt;
    &lt;li id=&quot;mYpX&quot;&gt;&lt;strong&gt;Анализ:&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;NsrE&quot;&gt;
      &lt;li id=&quot;RRLK&quot;&gt;&lt;code&gt;server: nginx/1.22.0&lt;/code&gt; — версия Nginx актуальна на момент проверки.&lt;/li&gt;
      &lt;li id=&quot;Z6zv&quot;&gt;&lt;code&gt;x-powered-by: PHP/7.4.33&lt;/code&gt; — PHP 7.4.33 EOL? Проверить (на момент написания 7.4 достиг EOL, могут быть уязвимости).&lt;/li&gt;
      &lt;li id=&quot;Nv5J&quot;&gt;&lt;code&gt;PHPSESSID&lt;/code&gt; с &lt;code&gt;HttpOnly; Secure&lt;/code&gt; — хорошо.&lt;/li&gt;
      &lt;li id=&quot;xq9B&quot;&gt;&lt;code&gt;strict-transport-security: max-age=0&lt;/code&gt; — HSTS выключен! Очень плохо для страницы логина.&lt;/li&gt;
      &lt;li id=&quot;GpEW&quot;&gt;CSP: &lt;code&gt;default-src &amp;#x27;self&amp;#x27;&lt;/code&gt; — хорошо, но лучше конкретные директивы.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;Pfek&quot;&gt;&lt;strong&gt;Рекомендации:&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;6md8&quot;&gt;
      &lt;li id=&quot;c8hx&quot;&gt;Включить HSTS с долгим max-age.&lt;/li&gt;
      &lt;li id=&quot;2H4x&quot;&gt;Обновить PHP до поддерживаемой версии.&lt;/li&gt;
      &lt;li id=&quot;2VGT&quot;&gt;Расширить CSP, запретив inline-скрипты.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;s28z&quot;&gt;&lt;strong&gt;Этап 10: Мониторинг изменений заголовков&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;viQH&quot;&gt;Заголовки могут меняться со временем: администраторы могут включить HSTS, изменить версии ПО. Мониторинг изменений помогает отслеживать обновления безопасности.&lt;/p&gt;
  &lt;p id=&quot;H6aD&quot;&gt;&lt;strong&gt;Как организовать мониторинг:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;izbo&quot;&gt;
    &lt;li id=&quot;bRGL&quot;&gt;Периодически запрашивать заголовки (раз в день, раз в неделю).&lt;/li&gt;
    &lt;li id=&quot;XZcX&quot;&gt;Сравнивать хэши ответов (или конкретных заголовков).&lt;/li&gt;
    &lt;li id=&quot;yj8x&quot;&gt;При изменении — уведомление.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;Bolf&quot;&gt;&lt;strong&gt;Python-скрипт мониторинга:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;TkOU&quot;&gt;import hashlib
import httpx
import time

def fetch_headers_hash(url):
    response = httpx.get(url, follow_redirects=True)
    # конкатенируем все заголовки в строку
    headers_str = str(sorted(response.headers.items()))
    return hashlib.sha256(headers_str.encode()).hexdigest()

def monitor(url, interval_hours=24):
    last_hash = None
    while True:
        current_hash = fetch_headers_hash(url)
        if last_hash is None:
            last_hash = current_hash
            print(f&amp;quot;Initial hash: {current_hash}&amp;quot;)
        elif current_hash != last_hash:
            print(f&amp;quot;Headers changed for {url}!&amp;quot;)
            # здесь можно отправить уведомление
            last_hash = current_hash
        time.sleep(interval_hours * 3600)&lt;/pre&gt;
  &lt;p id=&quot;bp9o&quot;&gt;&lt;strong&gt;Этические и правовые ограничения&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;rxU1&quot;&gt;
    &lt;li id=&quot;K8mr&quot;&gt;Сбор заголовков с помощью curl/httpx — это обычный HTTP-запрос, который не нарушает закон (аналогично посещению сайта браузером).&lt;/li&gt;
    &lt;li id=&quot;UXPF&quot;&gt;Использование &lt;a href=&quot;https://securityheaders.com/&quot; target=&quot;_blank&quot;&gt;SecurityHeaders.com&lt;/a&gt; и аналогичных сервисов также легально.&lt;/li&gt;
    &lt;li id=&quot;Hljj&quot;&gt;Массовый сбор заголовков (тысячи доменов) может привести к блокировке IP, если сайт расценит это как сканирование. Используйте разумные интервалы.&lt;/li&gt;
    &lt;li id=&quot;ncjG&quot;&gt;Анализ заголовков безопасности не даёт права атаковать сайт. Информация используется для оценки защищённости (в рамках разрешённого тестирования).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;23Uj&quot;&gt;HTTP-заголовки — богатый источник информации при пассивном техническом OSINT. Идентификационные заголовки (&lt;code&gt;Server&lt;/code&gt;, &lt;code&gt;X-Powered-By&lt;/code&gt;) раскрывают версии ПО, что позволяет искать уязвимости. Заголовки cookie указывают на используемые технологии и фреймворки. Заголовки безопасности (CSP, HSTS, X-Frame-Options) оценивают защищённость веб-приложения. Заголовки кэширования и прокси помогают определить CDN и скрыть реальный IP. Комбинация этих данных с результатами других статей цикла даёт наиболее полную картину инфраструктуры цели.&lt;/p&gt;

</content></entry><entry><id>specialist_infosec:Technological-stack-of-sites</id><link rel="alternate" type="text/html" href="https://teletype.in/@specialist_infosec/Technological-stack-of-sites?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=specialist_infosec"></link><title>Технологический стек сайтов: Wappalyzer, BuiltWith, определение CMS и библиотек</title><published>2026-06-20T06:34:15.280Z</published><updated>2026-06-20T06:34:15.280Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/08/2f/082fb125-00c7-48bd-803a-d3a971966ffb.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/59/5e/595eb634-927c-4d7f-ad88-ed0e91cd451e.png&quot;&gt;Веб-сайты редко создаются с нуля. Они собираются из компонентов: систем управления контентом (CMS), фреймворков, библиотек JavaScript, аналитических платформ, рекламных сетей и т.д. Знание технологического стека цели позволяет не только понять её архитектуру, но и выявить уязвимости (устаревшие версии WordPress, известные уязвимости jQuery), а также получить подсказки о бюджете, кадровом составе и используемых облачных сервисах. Определение стека возможно пассивно (по заголовкам, HTML-коду, паттернам) или активно (запросы к специальным файлам). Данная статья посвящена методам и инструментам идентификации технологий веб-сайтов.</summary><content type="html">
  &lt;figure id=&quot;Tmik&quot; class=&quot;m_retina&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/59/5e/595eb634-927c-4d7f-ad88-ed0e91cd451e.png&quot; width=&quot;1117&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;W651&quot;&gt;Технологический стек сайтов: Wappalyzer, BuiltWith, определение CMS и библиотек&lt;/h3&gt;
  &lt;p id=&quot;fxzi&quot;&gt;Веб-сайты редко создаются с нуля. Они собираются из компонентов: систем управления контентом (CMS), фреймворков, библиотек JavaScript, аналитических платформ, рекламных сетей и т.д. Знание технологического стека цели позволяет не только понять её архитектуру, но и выявить уязвимости (устаревшие версии WordPress, известные уязвимости jQuery), а также получить подсказки о бюджете, кадровом составе и используемых облачных сервисах. Определение стека возможно пассивно (по заголовкам, HTML-коду, паттернам) или активно (запросы к специальным файлам). Данная статья посвящена методам и инструментам идентификации технологий веб-сайтов.&lt;/p&gt;
  &lt;p id=&quot;4unq&quot;&gt;&lt;strong&gt;Категории технологий, которые можно определить&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;GWXD&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/d9/10/d910516d-f8f8-4b12-ae60-67110831add4.png&quot; width=&quot;1197&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;61IJ&quot;&gt;&lt;strong&gt;Этап 1: Пассивное определение через HTTP-заголовки&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;jZvE&quot;&gt;Самый простой метод — отправить HTTP-запрос к сайту и проанализировать заголовки ответа.&lt;/p&gt;
  &lt;p id=&quot;d8k5&quot;&gt;&lt;strong&gt;Что дают заголовки:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;DvDF&quot;&gt;
    &lt;li id=&quot;VHaj&quot;&gt;&lt;code&gt;Server&lt;/code&gt; — тип и версия веб-сервера (например, &lt;code&gt;nginx/1.18.0&lt;/code&gt;).&lt;/li&gt;
    &lt;li id=&quot;Wplw&quot;&gt;&lt;code&gt;X-Powered-By&lt;/code&gt; — технология бэкенда (&lt;code&gt;PHP/7.4&lt;/code&gt;, &lt;code&gt;ASP.NET&lt;/code&gt;).&lt;/li&gt;
    &lt;li id=&quot;sOax&quot;&gt;&lt;code&gt;X-CMS&lt;/code&gt; — иногда CMS указывает себя (редко).&lt;/li&gt;
    &lt;li id=&quot;n9AP&quot;&gt;&lt;code&gt;Set-Cookie&lt;/code&gt; — может содержать идентификаторы CMS (например, &lt;code&gt;wp-settings-1&lt;/code&gt; для WordPress).&lt;/li&gt;
    &lt;li id=&quot;Kbwm&quot;&gt;&lt;code&gt;X-Drupal-Cache&lt;/code&gt;, &lt;code&gt;X-Generator&lt;/code&gt;, &lt;code&gt;X-Request-ID&lt;/code&gt; и др.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;Ii3c&quot;&gt;&lt;strong&gt;Инструменты для просмотра заголовков:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;cbEC&quot;&gt;
    &lt;li id=&quot;R76h&quot;&gt;&lt;strong&gt;curl&lt;/strong&gt; (командная строка): &lt;code&gt;curl -I https://example.com&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;8uXt&quot;&gt;&lt;strong&gt;Browser DevTools&lt;/strong&gt; (вкладка Network).&lt;/li&gt;
    &lt;li id=&quot;hmKM&quot;&gt;&lt;strong&gt;Online сервисы:&lt;/strong&gt; &lt;a href=&quot;https://securityheaders.io/&quot; target=&quot;_blank&quot;&gt;SecurityHeaders.io&lt;/a&gt;, HTTPHeaderCheck.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;yM7d&quot;&gt;&lt;strong&gt;Пример curl:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;6k1i&quot;&gt;curl -I https://www.example.com&lt;/pre&gt;
  &lt;p id=&quot;5xJh&quot;&gt;&lt;strong&gt;Анализ cookies:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;L3Am&quot;&gt;
    &lt;li id=&quot;EwdB&quot;&gt;&lt;code&gt;PHPSESSID&lt;/code&gt; → PHP.&lt;/li&gt;
    &lt;li id=&quot;61o6&quot;&gt;&lt;code&gt;JSESSIONID&lt;/code&gt; → Java (JSP).&lt;/li&gt;
    &lt;li id=&quot;GOZl&quot;&gt;&lt;code&gt;ASPSESSIONID&lt;/code&gt; → &lt;a href=&quot;https://asp.net/&quot; target=&quot;_blank&quot;&gt;ASP.NET&lt;/a&gt;.&lt;/li&gt;
    &lt;li id=&quot;yLFS&quot;&gt;&lt;code&gt;wp-settings-*&lt;/code&gt;, &lt;code&gt;wordpress_logged_in_*&lt;/code&gt; → WordPress.&lt;/li&gt;
    &lt;li id=&quot;J41q&quot;&gt;&lt;code&gt;laravel_session&lt;/code&gt; → Laravel.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;p12A&quot;&gt;&lt;strong&gt;Этап 2: Автоматические детекторы (Wappalyzer, BuiltWith, WhatRuns)&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;px3d&quot;&gt;&lt;strong&gt;Wappalyzer&lt;/strong&gt; — расширение для браузера (и CLI-инструмент), определяющее технологии по множеству сигнатур: HTML, JavaScript, заголовки, паттерны URL, meta-теги.&lt;/p&gt;
  &lt;p id=&quot;fHww&quot;&gt;&lt;strong&gt;Как установить:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;BLJZ&quot;&gt;
    &lt;li id=&quot;xRM2&quot;&gt;Расширение для Chrome/Firefox (бесплатно).&lt;/li&gt;
    &lt;li id=&quot;IHvF&quot;&gt;CLI-версия: &lt;code&gt;npm install -g wappalyzer&lt;/code&gt;.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;XOnb&quot;&gt;&lt;strong&gt;Использование CLI:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;TUdP&quot;&gt;wappalyzer https://example.com&lt;/pre&gt;
  &lt;p id=&quot;Kco7&quot;&gt;&lt;strong&gt;Пример вывода (сокращённо):&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;6CI9&quot;&gt;{
  &amp;quot;url&amp;quot;: &amp;quot;https://example.com&amp;quot;,
  &amp;quot;technologies&amp;quot;: [
    {&amp;quot;name&amp;quot;: &amp;quot;Nginx&amp;quot;, &amp;quot;version&amp;quot;: &amp;quot;1.18.0&amp;quot;},
    {&amp;quot;name&amp;quot;: &amp;quot;PHP&amp;quot;, &amp;quot;version&amp;quot;: &amp;quot;7.4.33&amp;quot;},
    {&amp;quot;name&amp;quot;: &amp;quot;WordPress&amp;quot;, &amp;quot;version&amp;quot;: &amp;quot;6.2&amp;quot;},
    {&amp;quot;name&amp;quot;: &amp;quot;jQuery&amp;quot;, &amp;quot;version&amp;quot;: &amp;quot;3.6.0&amp;quot;},
    {&amp;quot;name&amp;quot;: &amp;quot;Google Analytics&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;UA-12345678-1&amp;quot;}
  ]
}&lt;/pre&gt;
  &lt;p id=&quot;4Y8x&quot;&gt;&lt;strong&gt;BuiltWith&lt;/strong&gt; — онлайн-сервис, который не только определяет технологии, но и показывает историю их использования, а также другие домены, использующие те же идентификаторы (например, Google Analytics ID). Платный API позволяет массовые запросы.&lt;/p&gt;
  &lt;p id=&quot;T8kK&quot;&gt;&lt;strong&gt;Как использовать BuiltWith бесплатно:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;pEry&quot;&gt;
    &lt;li id=&quot;HZYV&quot;&gt;Ввести URL на &lt;a href=&quot;https://builtwith.com/&quot; target=&quot;_blank&quot;&gt;builtwith.com&lt;/a&gt;.&lt;/li&gt;
    &lt;li id=&quot;5VPS&quot;&gt;Получить подробный отчёт: веб-сервер, CMS, аналитика, виджеты, хостинг, SSL-провайдер.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;gzSP&quot;&gt;&lt;strong&gt;Что можно найти через BuiltWith:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;SK6p&quot;&gt;
    &lt;li id=&quot;Gcpo&quot;&gt;Связанные сайты по общему Google Analytics ID или AdSense ID.&lt;/li&gt;
    &lt;li id=&quot;7z1E&quot;&gt;Пересечения по хостингу, IP.&lt;/li&gt;
    &lt;li id=&quot;IATq&quot;&gt;Историю изменений технологий.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;pbFL&quot;&gt;&lt;strong&gt;WhatRuns&lt;/strong&gt; — аналог Wappalyzer, но с фокусом на библиотеки фронтенда. Есть веб-интерфейс и расширение.&lt;/p&gt;
  &lt;p id=&quot;9ToI&quot;&gt;&lt;strong&gt;Сравнение детекторов:&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;j91t&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/4b/0e/4b0e6579-64dc-4e6c-9354-18ff3065ef28.png&quot; width=&quot;1010&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;oYg3&quot;&gt;&lt;strong&gt;Этап 3: Определение CMS по характерным путям и файлам&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;P8Bw&quot;&gt;Каждая CMS имеет уникальную структуру URL, файлы и мета-теги.&lt;/p&gt;
  &lt;p id=&quot;DltC&quot;&gt;&lt;strong&gt;WordPress:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;VcVS&quot;&gt;
    &lt;li id=&quot;uew7&quot;&gt;&lt;code&gt;/wp-admin&lt;/code&gt;, &lt;code&gt;/wp-content&lt;/code&gt;, &lt;code&gt;/wp-includes&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;6FKR&quot;&gt;&lt;code&gt;Generator&lt;/code&gt; мета-тег: &lt;code&gt;&amp;lt;meta name=&amp;quot;generator&amp;quot; content=&amp;quot;WordPress X.X.X&amp;quot;&amp;gt;&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;wvTZ&quot;&gt;Файл &lt;code&gt;/wp-login.php&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;4ga8&quot;&gt;Robots.txt часто содержит &lt;code&gt;Disallow: /wp-admin/&lt;/code&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;gwFR&quot;&gt;&lt;strong&gt;Drupal:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;Ru0v&quot;&gt;
    &lt;li id=&quot;Dvlm&quot;&gt;&lt;code&gt;/sites/default/files&lt;/code&gt;, &lt;code&gt;/core&lt;/code&gt;, &lt;code&gt;/modules&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;X3pM&quot;&gt;&lt;code&gt;Generator&lt;/code&gt; мета-тег: &lt;code&gt;&amp;lt;meta name=&amp;quot;Generator&amp;quot; content=&amp;quot;Drupal X (http://drupal.org)&amp;quot;&amp;gt;&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;Cof5&quot;&gt;Страница &lt;code&gt;/user/login&lt;/code&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;yozt&quot;&gt;&lt;strong&gt;Joomla:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;nrEA&quot;&gt;
    &lt;li id=&quot;Ds4Z&quot;&gt;&lt;code&gt;/administrator&lt;/code&gt;, &lt;code&gt;/media&lt;/code&gt;, &lt;code&gt;/components&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;yrpx&quot;&gt;Мета-тег: &lt;code&gt;&amp;lt;meta name=&amp;quot;generator&amp;quot; content=&amp;quot;Joomla! - Open Source Content Management&amp;quot;&amp;gt;&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;5swF&quot;&gt;Robots.txt: &lt;code&gt;Disallow: /administrator/&lt;/code&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;BWpq&quot;&gt;&lt;strong&gt;Bitrix (1С-Битрикс):&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;Tyqp&quot;&gt;
    &lt;li id=&quot;cFBS&quot;&gt;&lt;code&gt;/bitrix&lt;/code&gt;, &lt;code&gt;/bitrix/admin&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;2kWJ&quot;&gt;&lt;code&gt;/bitrix/tools&lt;/code&gt;, &lt;code&gt;/bitrix/js&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;74HD&quot;&gt;Мета-тег: редко указывает версию.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;BaBX&quot;&gt;&lt;strong&gt;Tilda (тильда):&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;AhX7&quot;&gt;
    &lt;li id=&quot;nRPt&quot;&gt;URL с &lt;code&gt;project123456.tilda.ws&lt;/code&gt; или кастомный домен, но в коде есть &lt;code&gt;//tilda.cc&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;NKj5&quot;&gt;Блоки &lt;code&gt;.t396&lt;/code&gt;, &lt;code&gt;.t-carousel&lt;/code&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;vW2Z&quot;&gt;&lt;strong&gt;Этап 4: Определение версии CMS&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;fWew&quot;&gt;Версия может быть указана в:&lt;/p&gt;
  &lt;ul id=&quot;eTzx&quot;&gt;
    &lt;li id=&quot;OqrL&quot;&gt;Meta-теге &lt;code&gt;generator&lt;/code&gt; (WordPress, Drupal, иногда Joomla).&lt;/li&gt;
    &lt;li id=&quot;NoOV&quot;&gt;Файле &lt;code&gt;readme.html&lt;/code&gt; или &lt;code&gt;readme.txt&lt;/code&gt; в корне (WordPress, Drupal).&lt;/li&gt;
    &lt;li id=&quot;IFVK&quot;&gt;Странице &lt;code&gt;/wp-admin/&lt;/code&gt; в HTML-комментариях (WordPress).&lt;/li&gt;
    &lt;li id=&quot;88Na&quot;&gt;Специфических файлах стилей (например, &lt;code&gt;/wp-content/themes/twentytwenty/style.css&lt;/code&gt; содержит &lt;code&gt;Version:&lt;/code&gt;).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;Nbtq&quot;&gt;&lt;strong&gt;Пример получения версии WordPress:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;MGL6&quot;&gt;curl -s https://example.com/readme.html | grep -i &amp;quot;Version&amp;quot;&lt;/pre&gt;
  &lt;p id=&quot;oHDd&quot;&gt;или&lt;/p&gt;
  &lt;pre id=&quot;EFrx&quot;&gt;curl -s https://example.com/wp-content/themes/twentytwenty/style.css | grep -i &amp;quot;Version:&amp;quot;&lt;/pre&gt;
  &lt;p id=&quot;ivIH&quot;&gt;&lt;strong&gt;Ограничения:&lt;/strong&gt; версии могут быть скрыты или изменены.&lt;/p&gt;
  &lt;p id=&quot;4OzF&quot;&gt;&lt;strong&gt;Этап 5: Анализ фронтенд-библиотек&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;1bwF&quot;&gt;Библиотеки JavaScript часто оставляют следы в глобальных объектах, версиях в исходном коде, а также в путях к файлам.&lt;/p&gt;
  &lt;p id=&quot;8uyX&quot;&gt;&lt;strong&gt;Способы определения:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;JUGp&quot;&gt;
    &lt;li id=&quot;Gynv&quot;&gt;&lt;strong&gt;Браузерная консоль:&lt;/strong&gt; ввести &lt;code&gt;jQuery().jquery&lt;/code&gt; (если jQuery загружен), &lt;code&gt;React.version&lt;/code&gt;, &lt;code&gt;Vue.version&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;h80m&quot;&gt;&lt;strong&gt;Поиск в исходном коде страницы:&lt;/strong&gt; &lt;code&gt;//ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;krak&quot;&gt;&lt;strong&gt;Проверка на уязвимости:&lt;/strong&gt; &lt;strong&gt;Retire.js&lt;/strong&gt; (расширение для браузера) или CLI.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;93Un&quot;&gt;&lt;strong&gt;Retire.js CLI:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;3ILK&quot;&gt;npm install -g retire
retire --url https://example.com&lt;/pre&gt;
  &lt;p id=&quot;n7l6&quot;&gt;&lt;strong&gt;Этап 6: Определение хостинга и CDN&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;P3yw&quot;&gt;&lt;strong&gt;Хостинг:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;TGCY&quot;&gt;
    &lt;li id=&quot;q7Qa&quot;&gt;&lt;strong&gt;whois IP&lt;/strong&gt; покажет организацию.&lt;/li&gt;
    &lt;li id=&quot;z9j5&quot;&gt;&lt;strong&gt;BuiltWith&lt;/strong&gt; в разделе &amp;quot;Hosting&amp;quot;.&lt;/li&gt;
    &lt;li id=&quot;29xO&quot;&gt;&lt;strong&gt;Поиск по IP в Shodan&lt;/strong&gt; → раздел &amp;quot;org&amp;quot;.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;gsiG&quot;&gt;&lt;strong&gt;CDN:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;LvpT&quot;&gt;
    &lt;li id=&quot;4FAS&quot;&gt;Проверить наличие заголовка &lt;code&gt;CF-Cache-Status&lt;/code&gt; (Cloudflare).&lt;/li&gt;
    &lt;li id=&quot;TUte&quot;&gt;Наличие &lt;code&gt;X-Cache&lt;/code&gt;, &lt;code&gt;X-Cache-Hits&lt;/code&gt; (Akamai, AWS CloudFront).&lt;/li&gt;
    &lt;li id=&quot;vpIG&quot;&gt;CNAME записи: например, &lt;code&gt;cdn.example.com CNAME&lt;/code&gt; &lt;code&gt;cdn.shopify.com&lt;/code&gt;.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;Nrw3&quot;&gt;&lt;strong&gt;Список известных CDN:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;5AnD&quot;&gt;
    &lt;li id=&quot;pLNt&quot;&gt;Cloudflare (IP-диапазоны публикуются)&lt;/li&gt;
    &lt;li id=&quot;VX1V&quot;&gt;Akamai&lt;/li&gt;
    &lt;li id=&quot;2B2U&quot;&gt;Amazon CloudFront (&lt;code&gt;.cloudfront.net&lt;/code&gt;)&lt;/li&gt;
    &lt;li id=&quot;4iB7&quot;&gt;Fastly&lt;/li&gt;
    &lt;li id=&quot;NrjF&quot;&gt;StackPath&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;Ex7X&quot;&gt;&lt;strong&gt;Этап 7: Определение аналитических систем (Google Analytics, Yandex.Metrica)&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;lnop&quot;&gt;Идентификаторы аналитики можно использовать для поиска других сайтов, принадлежащих той же организации.&lt;/p&gt;
  &lt;p id=&quot;CQeq&quot;&gt;&lt;strong&gt;Как найти ID:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;oIVi&quot;&gt;
    &lt;li id=&quot;wFDp&quot;&gt;Поиск в HTML-коде: &lt;code&gt;UA-12345678-1&lt;/code&gt; (Google Analytics Universal), &lt;code&gt;G-XXXXXXXX&lt;/code&gt; (GA4).&lt;/li&gt;
    &lt;li id=&quot;WPsj&quot;&gt;Для Яндекс.Метрики: &lt;code&gt;&amp;lt;meta name=&amp;quot;yandex-verification&amp;quot; content=&amp;quot;...&amp;quot;&amp;gt;&lt;/code&gt; или &lt;code&gt;Ya.Metrika.informer&lt;/code&gt;.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;kXyT&quot;&gt;&lt;strong&gt;Поиск по идентификатору через BuiltWith:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;NPoO&quot;&gt;
    &lt;li id=&quot;P1sm&quot;&gt;Ввести &lt;code&gt;UA-12345678-1&lt;/code&gt; в поисковую строку BuiltWith → список сайтов с этим ID.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;Zt2n&quot;&gt;&lt;strong&gt;Google Analytics ID может быть одинаковым для нескольких доменов одной компании.&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;LVwz&quot;&gt;&lt;strong&gt;Этап 8: Обнаружение скрытых директорий и файлов (active)&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;YRjS&quot;&gt;Это уже активный метод, но его можно использовать с разрешения. Инструменты: &lt;strong&gt;Dirb&lt;/strong&gt;, &lt;strong&gt;Gobuster&lt;/strong&gt;, &lt;strong&gt;FFUF&lt;/strong&gt;.&lt;/p&gt;
  &lt;p id=&quot;cSgR&quot;&gt;&lt;strong&gt;Пример Gobuster:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;VwI4&quot;&gt;gobuster dir -u https://example.com -w /usr/share/wordlists/dirb/common.txt&lt;/pre&gt;
  &lt;p id=&quot;BGJu&quot;&gt;&lt;strong&gt;Что можно найти:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;WoJR&quot;&gt;
    &lt;li id=&quot;1KyN&quot;&gt;&lt;code&gt;/phpmyadmin&lt;/code&gt;, &lt;code&gt;/adminer&lt;/code&gt;, &lt;code&gt;/pma&lt;/code&gt; — инструменты управления БД.&lt;/li&gt;
    &lt;li id=&quot;id8G&quot;&gt;&lt;code&gt;/git&lt;/code&gt;, &lt;code&gt;/.git/config&lt;/code&gt; — утечка репозитория.&lt;/li&gt;
    &lt;li id=&quot;I8gj&quot;&gt;&lt;code&gt;/backup&lt;/code&gt;, &lt;code&gt;/old&lt;/code&gt; — старые версии сайта.&lt;/li&gt;
    &lt;li id=&quot;uPOG&quot;&gt;&lt;code&gt;/api&lt;/code&gt; — API-эндпоинты.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;tPRH&quot;&gt;&lt;strong&gt;Важно:&lt;/strong&gt; не сканируйте чужие сайты без разрешения.&lt;/p&gt;
  &lt;p id=&quot;5xBI&quot;&gt;&lt;strong&gt;Этап 9: Объединение данных с другими источниками&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;piD9&quot;&gt;Технологический стек дополняет картину, полученную из DNS, поддоменов и сканирования портов.&lt;/p&gt;
  &lt;p id=&quot;KH08&quot;&gt;&lt;strong&gt;Практический пример: полный разбор веб-инфраструктуры&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;9PUx&quot;&gt;&lt;em&gt;Задача:&lt;/em&gt; охарактеризовать сайт &lt;code&gt;target.org&lt;/code&gt;.&lt;/p&gt;
  &lt;ol id=&quot;kOin&quot;&gt;
    &lt;li id=&quot;8HIf&quot;&gt;&lt;strong&gt;HTTP-заголовки:&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;kfMd&quot;&gt;
      &lt;li id=&quot;M41q&quot;&gt;&lt;code&gt;Server: nginx/1.22.1&lt;/code&gt;&lt;/li&gt;
      &lt;li id=&quot;dJy0&quot;&gt;&lt;code&gt;X-Powered-By: PHP/8.1.2&lt;/code&gt;&lt;/li&gt;
      &lt;li id=&quot;AejS&quot;&gt;&lt;code&gt;Set-Cookie: PHPSESSID=...&lt;/code&gt; → PHP.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;x3Gj&quot;&gt;&lt;strong&gt;Wappalyzer:&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;mURJ&quot;&gt;
      &lt;li id=&quot;Y7iM&quot;&gt;CMS: Drupal 9.5&lt;/li&gt;
      &lt;li id=&quot;h5Fs&quot;&gt;Фронтенд: jQuery 3.6.0, Bootstrap 4.6&lt;/li&gt;
      &lt;li id=&quot;ms8I&quot;&gt;Аналитика: Google Analytics (UA-12345678-1)&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;YyFa&quot;&gt;&lt;strong&gt;BuiltWith:&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;ifVW&quot;&gt;
      &lt;li id=&quot;xJQS&quot;&gt;Хостинг: Amazon AWS (us-east-1)&lt;/li&gt;
      &lt;li id=&quot;UTQv&quot;&gt;CDN: CloudFront&lt;/li&gt;
      &lt;li id=&quot;JbS8&quot;&gt;SSL: Let&amp;#x27;s Encrypt&lt;/li&gt;
      &lt;li id=&quot;qkSN&quot;&gt;Ecommerce: нет.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;pB1M&quot;&gt;&lt;strong&gt;Поиск по Google Analytics ID через BuiltWith:&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;iXCV&quot;&gt;
      &lt;li id=&quot;hdx7&quot;&gt;Найдены ещё два сайта: &lt;code&gt;other.target.org&lt;/code&gt; и &lt;code&gt;blog.target.org&lt;/code&gt;. Оба на Drupal, тот же хостинг.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;qyYF&quot;&gt;&lt;strong&gt;Проверка версии Drupal:&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;Aj0n&quot;&gt;
      &lt;li id=&quot;BP7D&quot;&gt;&lt;code&gt;/README.txt&lt;/code&gt; → Drupal 9.5.3.&lt;/li&gt;
      &lt;li id=&quot;IkK3&quot;&gt;&lt;code&gt;/core/CHANGELOG.txt&lt;/code&gt; → подтверждает.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;EXME&quot;&gt;&lt;strong&gt;Анализ фронтенда:&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;qIi7&quot;&gt;
      &lt;li id=&quot;8MPq&quot;&gt;jQuery 3.6.0 (без уязвимостей).&lt;/li&gt;
      &lt;li id=&quot;kAHh&quot;&gt;Bootstrap 4.6 (устаревший, но не критично).&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;qeWa&quot;&gt;&lt;strong&gt;CDN:&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;8yYz&quot;&gt;
      &lt;li id=&quot;5vLj&quot;&gt;IP-адрес сайта скрыт за CloudFront (проверено через &lt;code&gt;dig A target.org&lt;/code&gt; → IP принадлежит AWS CloudFront).&lt;/li&gt;
      &lt;li id=&quot;v2lr&quot;&gt;Но есть другие поддомены, указывающие на реальные IP (можно найти через SecurityTrails).&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;44s6&quot;&gt;&lt;strong&gt;Вывод:&lt;/strong&gt; организация использует AWS с CloudFront, Drupal 9.5, имеет связанные сайты. Версия Drupal 9.5.x имеет несколько известных уязвимостей (CVE-2023-XXXX), требуется обновление. Google Analytics ID связывает три сайта, что указывает на единую структуру.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;eghM&quot;&gt;&lt;strong&gt;Автоматизация: сбор технологического стека через API Wappalyzer&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;ZLkL&quot;&gt;import json
import requests

def wappalyzer_detect(url):
    # Wappalyzer CLI (если установлен) или можно использовать их API (платно)
    # Пример через subprocess
    import subprocess
    result = subprocess.run([&amp;#x27;wappalyzer&amp;#x27;, url], capture_output=True, text=True)
    if result.returncode == 0:
        return json.loads(result.stdout)
    else:
        return None

def builtwith_lookup(url):
    # BuiltWith API (требуется ключ)
    api_key = &amp;quot;YOUR_API_KEY&amp;quot;
    endpoint = f&amp;quot;https://api.builtwith.com/free1/api.json?KEY={api_key}&amp;amp;LOOKUP={url}&amp;quot;
    resp = requests.get(endpoint)
    if resp.status_code == 200:
        return resp.json()
    return None

# Пример
tech = wappalyzer_detect(&amp;quot;https://example.com&amp;quot;)
print(json.dumps(tech, indent=2))&lt;/pre&gt;
  &lt;ul id=&quot;ot9m&quot;&gt;
    &lt;li id=&quot;fEWy&quot;&gt;Определение технологического стека через пассивные методы (заголовки, HTML) — легально.&lt;/li&gt;
    &lt;li id=&quot;GaoR&quot;&gt;Активный поиск файлов (Dirb, Gobuster) — требует разрешения владельца.&lt;/li&gt;
    &lt;li id=&quot;3VTE&quot;&gt;Использование BuiltWith для поиска по ID (Google Analytics) легально, но может быть сочтено навязчивым, если используется для массового сбора данных.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;l7u4&quot;&gt;Идентификация технологического стека — обязательный этап при исследовании веб-приложения. Wappalyzer и BuiltWith автоматизируют большую часть работы. Важно не только определить технологии, но и оценить версии (особенно устаревшие) и выявить связи по аналитическим идентификаторам. Эта информация может привести к обнаружению других активов организации. В связке с SSL-сертификатами, поддоменами и портами технологический стек закрывает ещё одну часть пазла внешней инфраструктуры.&lt;/p&gt;

</content></entry><entry><id>specialist_infosec:ObGrLJ_4SR6</id><link rel="alternate" type="text/html" href="https://teletype.in/@specialist_infosec/ObGrLJ_4SR6?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=specialist_infosec"></link><title>Анализ SSL/TLS сертификатов: Certificate Transparency logs, выявление скрытых хостов</title><published>2026-06-14T05:45:48.647Z</published><updated>2026-06-14T05:47:01.136Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img3.teletype.in/files/a0/32/a0325faf-107a-4f8d-a30f-bca56906280f.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/1b/e6/1be6116b-e074-4d9f-b681-106e836d9f05.png&quot;&gt;SSL/TLS сертификаты — это цифровые удостоверения, которые обеспечивают шифрование соединений и подтверждают подлинность веб-сайтов. В контексте технического OSINT сертификаты становятся золотоносной жилой: они часто содержат имена доменов и поддоменов, которые не видны в DNS, а также могут раскрывать внутренние и тестовые хосты организации. Благодаря механизму Certificate Transparency (CT), каждый выданный сертификат публикуется в публичных логах, доступных для поиска. Данная статья посвящена методам анализа сертификатов, использованию CT-логов и выявлению скрытых активов.</summary><content type="html">
  &lt;figure id=&quot;MjPB&quot; class=&quot;m_retina&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/1b/e6/1be6116b-e074-4d9f-b681-106e836d9f05.png&quot; width=&quot;1091.5&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;xojR&quot;&gt;Анализ SSL/TLS сертификатов: Certificate Transparency logs, выявление скрытых хостов&lt;/h3&gt;
  &lt;p id=&quot;8l30&quot;&gt;&lt;strong&gt;Введение&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;wmz3&quot;&gt;SSL/TLS сертификаты — это цифровые удостоверения, которые обеспечивают шифрование соединений и подтверждают подлинность веб-сайтов. В контексте технического OSINT сертификаты становятся золотоносной жилой: они часто содержат имена доменов и поддоменов, которые не видны в DNS, а также могут раскрывать внутренние и тестовые хосты организации. Благодаря механизму Certificate Transparency (CT), каждый выданный сертификат публикуется в публичных логах, доступных для поиска. Данная статья посвящена методам анализа сертификатов, использованию CT-логов и выявлению скрытых активов.&lt;/p&gt;
  &lt;p id=&quot;aUuG&quot;&gt;&lt;strong&gt;Что такое Certificate Transparency (CT)?&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;QigP&quot;&gt;CT — это открытая система аудита сертификатов, созданная для обнаружения ошибочных или злонамеренно выданных сертификатов. Когда центр сертификации (CA) выпускает сертификат, он обязан отправить его в несколько публичных CT-логов. Логи неизменяемы и доступны для всех. Благодаря этому любой исследователь может найти все сертификаты, выданные для домена (или любого шаблона), включая сертификаты для внутренних поддоменов, которые никогда не публиковались в DNS.&lt;/p&gt;
  &lt;p id=&quot;S6oQ&quot;&gt;&lt;strong&gt;Почему сертификаты ценны для OSINT?&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;JF4o&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/c0/29/c029e897-7188-4429-95c9-3da179738e79.png&quot; width=&quot;941&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;lfvA&quot;&gt;&lt;strong&gt;Основные источники CT-логов&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;7dpi&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/2b/eb/2beb4fb7-28a6-4583-b6dd-75a4aedaeb40.png&quot; width=&quot;944&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;QqN9&quot;&gt;&lt;strong&gt;Этап 1: Базовый поиск сертификатов через crt.sh&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;igia&quot;&gt;crt.sh (&lt;a href=&quot;https://crt.sh&quot; target=&quot;_blank&quot;&gt;https://crt.sh&lt;/a&gt;) — это общедоступный интерфейс к CT-логам. Проще всего начать с запроса:&lt;/p&gt;
  &lt;pre id=&quot;T5jP&quot;&gt;https://crt.sh/?q=%.example.com&lt;/pre&gt;
  &lt;p id=&quot;bSPc&quot;&gt;где &lt;code&gt;%&lt;/code&gt; заменяет любой префикс. Этот запрос найдёт все сертификаты, содержащие строку &lt;code&gt;example.com&lt;/code&gt; в любом поле (&lt;code&gt;name_value&lt;/code&gt;).&lt;/p&gt;
  &lt;p id=&quot;r11O&quot;&gt;&lt;strong&gt;Параметры crt.sh:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;f6vF&quot;&gt;
    &lt;li id=&quot;tdVU&quot;&gt;&lt;code&gt;q&lt;/code&gt; — поисковый запрос (можно использовать SQL-подобные операторы).&lt;/li&gt;
    &lt;li id=&quot;9e4I&quot;&gt;&lt;code&gt;excluded&lt;/code&gt; — исключить мёртвые сертификаты (expired, revoked).&lt;/li&gt;
    &lt;li id=&quot;C1YA&quot;&gt;&lt;code&gt;output&lt;/code&gt; — формат вывода (json, csv, html).&lt;/li&gt;
    &lt;li id=&quot;WLaZ&quot;&gt;&lt;code&gt;limit&lt;/code&gt; — количество результатов (по умолчанию 2000).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;HNKb&quot;&gt;&lt;strong&gt;Примеры запросов:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;42Py&quot;&gt;
    &lt;li id=&quot;LW63&quot;&gt;&lt;code&gt;?q=example.com&lt;/code&gt; — ищет точное совпадение в любом поле.&lt;/li&gt;
    &lt;li id=&quot;vai5&quot;&gt;&lt;code&gt;?q=%.example.com&lt;/code&gt; — ищет все поддомены.&lt;/li&gt;
    &lt;li id=&quot;NhV0&quot;&gt;&lt;code&gt;?q=*.example.com&lt;/code&gt; — ищет wildcard-сертификаты.&lt;/li&gt;
    &lt;li id=&quot;IsGN&quot;&gt;&lt;code&gt;?q=example.com&amp;amp;excluded=expired&lt;/code&gt; — исключить истекшие.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;97fF&quot;&gt;&lt;strong&gt;Использование API crt.sh (JSON):&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;TPGI&quot;&gt;https://crt.sh/?q=%.example.com&amp;amp;output=json&lt;/pre&gt;
  &lt;p id=&quot;NKSz&quot;&gt;&lt;strong&gt;Python-функция для получения сертификатов:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;xkEZ&quot;&gt;import requests
import json

def get_certificates(domain, exclude_expired=True):
    url = f&amp;quot;https://crt.sh/?q=%25.{domain}&amp;amp;output=json&amp;quot;
    if exclude_expired:
        url += &amp;quot;&amp;amp;excluded=expired&amp;quot;
    resp = requests.get(url)
    if resp.status_code == 200:
        try:
            data = resp.json()
            # crt.sh возвращает список списков, каждый подсписок — запись
            # Поля: idx, name, issuer, validity_start, validity_end, ca, cert
            certs = []
            for row in data:
                cert = {
                    &amp;#x27;name&amp;#x27;: row[1],
                    &amp;#x27;issuer&amp;#x27;: row[2],
                    &amp;#x27;valid_from&amp;#x27;: row[3],
                    &amp;#x27;valid_to&amp;#x27;: row[4],
                    &amp;#x27;ca&amp;#x27;: row[5],
                    &amp;#x27;certificate&amp;#x27;: row[6]
                }
                certs.append(cert)
            return certs
        except:
            return []
    return []

certs = get_certificates(&amp;quot;example.com&amp;quot;)
for c in certs:
    print(c[&amp;#x27;name&amp;#x27;], c[&amp;#x27;valid_to&amp;#x27;])&lt;/pre&gt;
  &lt;p id=&quot;tFr2&quot;&gt;&lt;strong&gt;Этап 2: Извлечение доменов из Subject Alternative Names (SAN)&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;7PEF&quot;&gt;Большинство современных сертификатов используют расширение SAN (Subject Alternative Names), которое содержит список всех имён, для которых действителен сертификат. Это наиболее ценный источник поддоменов.&lt;/p&gt;
  &lt;p id=&quot;Ycfq&quot;&gt;&lt;strong&gt;Пример записи SAN из crt.sh:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;1G8I&quot;&gt;name_value: example.com
           www.example.com
           mail.example.com
           admin.example.com
           *.example.com&lt;/pre&gt;
  &lt;p id=&quot;EPgt&quot;&gt;Обратите внимание, что &lt;code&gt;*.example.com&lt;/code&gt; — wildcard-сертификат, который покрывает все поддомены первого уровня. Однако с 2023 года некоторые CA начали ограничивать выдачу wildcard-сертификатов.&lt;/p&gt;
  &lt;p id=&quot;DXDl&quot;&gt;&lt;strong&gt;Как извлечь все уникальные имена из набора сертификатов:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;o1TT&quot;&gt;def extract_domains(certificates):
    domains = set()
    for cert in certificates:
        names = cert[&amp;#x27;name&amp;#x27;].split(&amp;#x27;\n&amp;#x27;)  # часто имена разделены \n
        for name in names:
            name = name.strip().lower()
            if name and not name.startswith(&amp;#x27;*.&amp;#x27;):
                domains.add(name)
            elif name.startswith(&amp;#x27;*.&amp;#x27;):  # wildcard
                domains.add(name[2:])    # добавляем зону, но с пометкой
    return sorted(domains)&lt;/pre&gt;
  &lt;p id=&quot;wo9w&quot;&gt;&lt;strong&gt;Этап 3: Поиск по части имени (через SQL-запросы crt.sh)&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;38Em&quot;&gt;crt.sh поддерживает прямые SQL-запросы (язык PostgreSQL). Это позволяет делать сложные поиски, например:&lt;/p&gt;
  &lt;pre id=&quot;rbnv&quot;&gt;https://crt.sh/?q=SELECT name_value FROM certificate_identity WHERE name_value LIKE &amp;#x27;%.example.com%&amp;#x27; AND name_value NOT LIKE &amp;#x27;%.%.%&amp;#x27;&lt;/pre&gt;
  &lt;p id=&quot;NFAF&quot;&gt;Этот запрос найдёт только поддомены первого уровня (без точек в средней части).&lt;/p&gt;
  &lt;p id=&quot;wOmq&quot;&gt;&lt;strong&gt;Полезные SQL-шаблоны:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;TcBV&quot;&gt;
    &lt;li id=&quot;frXq&quot;&gt;Все сертификаты, выданные определённым CA: &lt;code&gt;q=SELECT * FROM certificate WHERE issuer LIKE &amp;#x27;%Let%27s Encrypt%&amp;#x27;&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;iNYW&quot;&gt;Сертификаты, истекающие в ближайшие 30 дней: &lt;code&gt;q=SELECT name_value, not_after FROM certificate WHERE not_after &amp;lt; NOW() + interval &amp;#x27;30 days&amp;#x27; AND name_value LIKE &amp;#x27;%.example.com&amp;#x27;&lt;/code&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;NyhP&quot;&gt;&lt;strong&gt;Этап 4: Выявление скрытых хостов через сертификаты&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;p2O6&quot;&gt;Скрытые хосты — это внутренние или тестовые поддомены, которые не разрешаются в DNS публично, но для них был выпущен сертификат (например, &lt;code&gt;dev-db.internal.example.com&lt;/code&gt;). Такой сертификат будет в CT-логах, даже если DNS-запрос к &lt;code&gt;dev-db.internal.example.com&lt;/code&gt; не вернёт IP.&lt;/p&gt;
  &lt;p id=&quot;GPmO&quot;&gt;&lt;strong&gt;Почему это возможно?&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;FW6w&quot;&gt;
    &lt;li id=&quot;pbp4&quot;&gt;Сертификат мог быть выпущен до того, как поддомен был удалён из DNS.&lt;/li&gt;
    &lt;li id=&quot;a0c9&quot;&gt;Внутренние серверы могут иметь сертификаты для своих внутренних имён, но по ошибке они стали публичными.&lt;/li&gt;
    &lt;li id=&quot;SOaf&quot;&gt;Некоторые организации используют общие сертификаты для многих внутренних серверов, и эти сертификаты попадают в CT.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;bk8k&quot;&gt;&lt;strong&gt;Как найти такие хосты:&lt;/strong&gt;&lt;/p&gt;
  &lt;ol id=&quot;e0KH&quot;&gt;
    &lt;li id=&quot;xioQ&quot;&gt;Выполните поиск &lt;code&gt;%.example.com&lt;/code&gt; в crt.sh.&lt;/li&gt;
    &lt;li id=&quot;ZkTk&quot;&gt;Извлеките все имена.&lt;/li&gt;
    &lt;li id=&quot;KAZA&quot;&gt;Для каждого имени выполните DNS-запрос A/AAAA. Если запрос не возвращает IP, но имя выглядит правдоподобно — это скрытый хост.&lt;/li&gt;
    &lt;li id=&quot;q6sI&quot;&gt;Проверьте IP через Shodan/Censys — возможно, сертификат был выдан для IP-адреса, который сейчас неактивен.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;EyqI&quot;&gt;&lt;strong&gt;Python-скрипт для обнаружения скрытых хостов:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;rsDc&quot;&gt;import dns.resolver
import requests

def check_dns(domain):
    try:
        answers = dns.resolver.resolve(domain, &amp;#x27;A&amp;#x27;)
        return [str(r) for r in answers]
    except:
        return []

# Получить все имена из сертификатов
certs = get_certificates(&amp;quot;example.com&amp;quot;)
domains = extract_domains(certs)

hidden = []
for domain in domains:
    ips = check_dns(domain)
    if not ips:
        print(f&amp;quot;Скрытый хост (не резолвится): {domain}&amp;quot;)
        hidden.append(domain)
    else:
        print(f&amp;quot;{domain} -&amp;gt; {ips}&amp;quot;)

print(f&amp;quot;Найдено скрытых хостов: {len(hidden)}&amp;quot;)&lt;/pre&gt;
  &lt;p id=&quot;GxP3&quot;&gt;&lt;strong&gt;Этап 5: Анализ времени действия сертификата&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;3Ayf&quot;&gt;Дата истечения сертификата может указывать на то, насколько активно используется хост. Сертификаты, которые истекают, обычно обновляются, если хост жив. Если сертификат истёк давно, а новых нет — хост, вероятно, выведен из эксплуатации.&lt;/p&gt;
  &lt;p id=&quot;DauU&quot;&gt;&lt;strong&gt;Применение:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;llOp&quot;&gt;
    &lt;li id=&quot;VK4g&quot;&gt;Найти старые сертификаты для &lt;code&gt;old-site.example.com&lt;/code&gt;, чтобы восстановить историю.&lt;/li&gt;
    &lt;li id=&quot;deiY&quot;&gt;Определить закономерности обновления сертификатов (например, каждые 90 дней — Let&amp;#x27;s Encrypt).&lt;/li&gt;
    &lt;li id=&quot;ZPHT&quot;&gt;Обнаружить сертификаты с очень длинным сроком действия (могут быть самоподписными или тестовыми).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;3u2s&quot;&gt;&lt;strong&gt;Этап 6: Поиск сертификатов по серийному номеру&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;JOQO&quot;&gt;Если у вас есть серийный номер сертификата (например, из утечки файла), можно найти его в CT-логах и получить связанные домены.&lt;/p&gt;
  &lt;p id=&quot;c56S&quot;&gt;&lt;strong&gt;Поиск в crt.sh по серийному номеру:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;arJZ&quot;&gt;https://crt.sh/?q=serial_number_string&lt;/pre&gt;
  &lt;p id=&quot;Ouq5&quot;&gt;&lt;strong&gt;Серийные номера обычно шестнадцатеричные.&lt;/strong&gt; Этот метод полезен, если вы нашли сертификат на сервере (через OpenSSL) и хотите узнать, какие ещё домены есть в том же сертификате.&lt;/p&gt;
  &lt;p id=&quot;5Wx7&quot;&gt;&lt;strong&gt;Этап 7: Интеграция с Shodan/Censys для поиска по хэшу сертификата&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;GthK&quot;&gt;Shodan и Censys позволяют искать устройства по хэшу сертификата (SHA1 или SHA256). Это позволяет найти все серверы в интернете, использующие тот же сертификат (или тот же ключ).&lt;/p&gt;
  &lt;p id=&quot;39dr&quot;&gt;&lt;strong&gt;Shodan фильтр &lt;code&gt;ssl.cert.sha256&lt;/code&gt;:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;lw9K&quot;&gt;ssl.cert.sha256:5f5a5f5a5f5a5f5a5f5a5f5a5f5a5f5a5f5a5f5a&lt;/pre&gt;
  &lt;p id=&quot;Pt6g&quot;&gt;Так можно обнаружить все серверы организации, использующие единый сертификат.&lt;/p&gt;
  &lt;p id=&quot;pTwP&quot;&gt;&lt;strong&gt;Censys аналогично:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;L0vE&quot;&gt;services.tls.certificate.leaf_fingerprint_sha256: &amp;lt;hash&amp;gt;&lt;/pre&gt;
  &lt;p id=&quot;Q30c&quot;&gt;&lt;strong&gt;Этап 8: Мониторинг новых сертификатов (CertSpotter)&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;Gvcs&quot;&gt;CertSpotter (&lt;a href=&quot;https://sslmate.com/certspotter/&quot; target=&quot;_blank&quot;&gt;https://sslmate.com/certspotter/&lt;/a&gt;) — это сервис, который отслеживает CT-логи и уведомляет вас о появлении новых сертификатов для указанных доменов. Он особенно полезен для мониторинга инфраструктуры конкурентов или собственной.&lt;/p&gt;
  &lt;p id=&quot;n3vg&quot;&gt;&lt;strong&gt;Как использовать:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;51eF&quot;&gt;
    &lt;li id=&quot;4YDK&quot;&gt;Бесплатный аккаунт позволяет добавить до 10 доменов.&lt;/li&gt;
    &lt;li id=&quot;qfmP&quot;&gt;При обнаружении нового сертификата приходит email.&lt;/li&gt;
    &lt;li id=&quot;Gnoi&quot;&gt;Можно также использовать API для автоматической обработки.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;gDK6&quot;&gt;&lt;strong&gt;Этап 9: Обнаружение сертификатов, связанных с организацией&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;2Gz5&quot;&gt;Если вы знаете юридическое название организации (Organization field в сертификате), можно найти все сертификаты, выпущенные на это имя (даже если домены не связаны явно).&lt;/p&gt;
  &lt;p id=&quot;oMF5&quot;&gt;&lt;strong&gt;Поиск в crt.sh по организации:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;5VdG&quot;&gt;https://crt.sh/?q=O%3DExample%20Inc&lt;/pre&gt;
  &lt;p id=&quot;8hAv&quot;&gt;&lt;strong&gt;Пример:&lt;/strong&gt; &lt;code&gt;O=Google Trust Services&lt;/code&gt; найдёт сертификаты Google.&lt;/p&gt;
  &lt;p id=&quot;XgaJ&quot;&gt;&lt;strong&gt;Осторожно:&lt;/strong&gt; поле O не всегда заполняется, особенно для сертификатов Let&amp;#x27;s Encrypt (там только O=Let&amp;#x27;s Encrypt).&lt;/p&gt;
  &lt;p id=&quot;x5wr&quot;&gt;&lt;strong&gt;Практический пример: полное исследование компании через сертификаты&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;mRYA&quot;&gt;&lt;em&gt;Задача:&lt;/em&gt; найти все домены, связанные с компанией &lt;code&gt;acme.com&lt;/code&gt;, включая тестовые поддомены и внутренние хосты.&lt;/p&gt;
  &lt;ol id=&quot;cGLv&quot;&gt;
    &lt;li id=&quot;fhxn&quot;&gt;&lt;strong&gt;crt.sh для &lt;code&gt;%.acme.com&lt;/code&gt;&lt;/strong&gt; → 120 сертификатов, 350 уникальных имён.&lt;/li&gt;
    &lt;li id=&quot;pxBp&quot;&gt;&lt;strong&gt;Очистка:&lt;/strong&gt; убрать дубликаты, домены, не заканчивающиеся на &lt;code&gt;acme.com&lt;/code&gt; (убрать сторонние).&lt;/li&gt;
    &lt;li id=&quot;TBse&quot;&gt;&lt;strong&gt;DNS-проверка:&lt;/strong&gt; 80 имён резолвятся в IP, 270 — нет (скрытые).&lt;/li&gt;
    &lt;li id=&quot;T6hL&quot;&gt;&lt;strong&gt;Среди скрытых&lt;/strong&gt; находим &lt;code&gt;test.acme.com&lt;/code&gt;, &lt;code&gt;staging.api.acme.com&lt;/code&gt;, &lt;code&gt;jenkins.acme.com&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;AX1a&quot;&gt;&lt;strong&gt;Проверка Shodan&lt;/strong&gt; для &lt;code&gt;jenkins.acme.com&lt;/code&gt; (хотя IP не резолвится, возможно, сертификат есть на каком-то IP). Shodan: &lt;code&gt;ssl.cert.subject.CN:jenkins.acme.com&lt;/code&gt; → находим IP &lt;code&gt;198.51.100.45&lt;/code&gt; с открытым 8080.&lt;/li&gt;
    &lt;li id=&quot;SfbO&quot;&gt;&lt;strong&gt;Анализ:&lt;/strong&gt; Jenkins сервер доступен по IP, но не имеет DNS-записи. Уязвимость.&lt;/li&gt;
    &lt;li id=&quot;EBvr&quot;&gt;&lt;strong&gt;Исторические сертификаты:&lt;/strong&gt; старый сертификат &lt;code&gt;old.acme.com&lt;/code&gt; истёк в 2022, но в логах есть. Его IP &lt;code&gt;203.0.113.88&lt;/code&gt; уже не доступен.&lt;/li&gt;
    &lt;li id=&quot;fVce&quot;&gt;&lt;strong&gt;Вывод:&lt;/strong&gt; обнаружены забытые, но активные серверы, требующие внимания.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;6ufo&quot;&gt;&lt;strong&gt;Автоматизация мониторинга через crt.sh API&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;LIXK&quot;&gt;import requests
import time
import hashlib

def monitor_new_certs(domain, last_check_file):
    # загружаем последний известный хэш
    try:
        with open(last_check_file, &amp;#x27;r&amp;#x27;) as f:
            last_hash = f.read().strip()
    except:
        last_hash = &amp;#x27;&amp;#x27;
    
    url = f&amp;quot;https://crt.sh/?q=%25.{domain}&amp;amp;output=json&amp;quot;
    resp = requests.get(url)
    if resp.status_code == 200:
        data = resp.json()
        # вычисляем хэш от всего содержимого (как дешёвый способ детектировать изменения)
        content_str = json.dumps(data)
        new_hash = hashlib.sha256(content_str.encode()).hexdigest()
        if new_hash != last_hash:
            print(f&amp;quot;Обнаружены новые сертификаты для {domain}&amp;quot;)
            # здесь можно отправить уведомление
            with open(last_check_file, &amp;#x27;w&amp;#x27;) as f:
                f.write(new_hash)
        else:
            print(&amp;quot;Нет изменений&amp;quot;)&lt;/pre&gt;
  &lt;p id=&quot;BmG5&quot;&gt;&lt;/p&gt;
  &lt;ul id=&quot;dbAC&quot;&gt;
    &lt;li id=&quot;IQSg&quot;&gt;Данные CT-логов публичны. Их сбор полностью легален.&lt;/li&gt;
    &lt;li id=&quot;REYp&quot;&gt;Не пытайтесь получить информацию о сертификатах, используя уязвимости (это не требуется — всё открыто).&lt;/li&gt;
    &lt;li id=&quot;TWXy&quot;&gt;Даже если вы нашли внутренний поддомен, не пытайтесь взломать его без разрешения владельца. Используйте информацию только для защиты или информирования организации.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;vLOC&quot;&gt;Анализ SSL/TLS сертификатов через CT-логи — один из самых мощных методов пассивного технического OSINT. Позволяет обнаруживать поддомены, которые не видны в DNS, включая тестовые, внутренние и исторические хосты. Основные инструменты — crt.sh, CertSpotter, Censys. Комбинация извлечения доменов из сертификатов, проверки DNS-резолвинга и дальнейшего сканирования (Shodan) позволяет выявить скрытую инфраструктуру организации.&lt;/p&gt;

</content></entry><entry><id>specialist_infosec:Port-scanning</id><link rel="alternate" type="text/html" href="https://teletype.in/@specialist_infosec/Port-scanning?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=specialist_infosec"></link><title>Сканирование портов и сервисов: Nmap, массовое сканирование, интерпретация результатов</title><published>2026-06-09T06:21:10.734Z</published><updated>2026-06-09T06:21:10.734Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/59/67/59674a41-00e9-4b28-a6ee-980d3dafed76.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/31/e5/31e5064f-72e2-4a28-934e-d5a4451de774.png&quot;&gt;Сканирование портов — это процесс проверки сетевых портов на целевой системе для определения, какие сетевые службы (веб-сервер, SSH, FTP, база данных и т.д.) запущены и доступны. Это один из самых информативных, но и наиболее «активных» методов технического OSINT. В отличие от пассивной разведки (DNS, WHOIS, сертификаты), сканирование портов напрямую взаимодействует с целью, оставляя следы в логах. Поэтому критически важно различать легальное сканирование (с разрешения владельца, в рамках пентеста или исследования собственной инфраструктуры) и несанкционированное (противозаконное).</summary><content type="html">
  &lt;figure id=&quot;GHqY&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/31/e5/31e5064f-72e2-4a28-934e-d5a4451de774.png&quot; width=&quot;2199&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;j5Ff&quot;&gt;Сканирование портов и сервисов: Nmap, массовое сканирование, интерпретация результатов&lt;/h3&gt;
  &lt;p id=&quot;bdvN&quot;&gt;Сканирование портов — это процесс проверки сетевых портов на целевой системе для определения, какие сетевые службы (веб-сервер, SSH, FTP, база данных и т.д.) запущены и доступны. Это один из самых информативных, но и наиболее «активных» методов технического OSINT. В отличие от пассивной разведки (DNS, WHOIS, сертификаты), сканирование портов напрямую взаимодействует с целью, оставляя следы в логах. Поэтому критически важно различать легальное сканирование (с разрешения владельца, в рамках пентеста или исследования собственной инфраструктуры) и несанкционированное (противозаконное).&lt;/p&gt;
  &lt;p id=&quot;d1ns&quot;&gt;Данная статья описывает методы и инструменты сканирования портов, а также способы получения аналогичной информации &lt;strong&gt;пассивно&lt;/strong&gt; через публичные базы (Shodan, Censys). Акцент будет сделан на интерпретации результатов и на том, как использовать эти данные для составления картины инфраструктуры.&lt;/p&gt;
  &lt;p id=&quot;CX2A&quot;&gt;&lt;strong&gt;Активное vs пассивное сканирование&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;xTTO&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/d8/b9/d8b9827b-2dc4-44ad-aa80-039d095c3f80.png&quot; width=&quot;946&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Um4R&quot;&gt;для разведки без риска сначала используйте Shodan/Censys. Только при наличии письменного разрешения (или на собственной инфраструктуре) переходите к активному Nmap.&lt;/p&gt;
  &lt;p id=&quot;GN2P&quot;&gt;&lt;strong&gt;Этап 1: Пассивное сканирование через Shodan&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;6O4E&quot;&gt;Shodan — поисковая система по интернет-подключенным устройствам. Она постоянно сканирует весь интернет по многим портам (80, 443, 22, 21, 25, 3389, 3306, 5900 и т.д.) и сохраняет баннеры (ответы сервисов). Вы можете искать по IP, домену, организации, порту, географической локации и многим другим фильтрам.&lt;/p&gt;
  &lt;p id=&quot;uacP&quot;&gt;&lt;strong&gt;Поиск по IP в Shodan:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;QuhO&quot;&gt;https://www.shodan.io/host/8.8.8.8&lt;/pre&gt;
  &lt;p id=&quot;DsbB&quot;&gt;&lt;strong&gt;Что покажет Shodan:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;B6kL&quot;&gt;
    &lt;li id=&quot;CdGD&quot;&gt;Открытые порты (с номером и названием службы).&lt;/li&gt;
    &lt;li id=&quot;Kdzc&quot;&gt;Баннер (HTTP заголовки, версия SSH, сообщение FTP).&lt;/li&gt;
    &lt;li id=&quot;X8iN&quot;&gt;Страна, город, ASN, организация.&lt;/li&gt;
    &lt;li id=&quot;O36e&quot;&gt;История изменений (даты сканирований, если подписка).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;9Lpd&quot;&gt;&lt;strong&gt;Пример фильтрации:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;1xQi&quot;&gt;hostname:example.com                     # все IP, связанные с example.com
port:443 org:&amp;quot;Google&amp;quot;                    # порт 443 у организаций, содержащих Google
ssl.cert.subject.CN:&amp;quot;*.example.com&amp;quot;      # сертификаты&lt;/pre&gt;
  &lt;p id=&quot;oAK9&quot;&gt;&lt;strong&gt;Shodan API (Python):&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;yCDn&quot;&gt;import shodan

api = shodan.Shodan(&amp;#x27;YOUR_API_KEY&amp;#x27;)
host = api.host(&amp;#x27;8.8.8.8&amp;#x27;)
for item in host[&amp;#x27;data&amp;#x27;]:
    print(f&amp;quot;Port {item[&amp;#x27;port&amp;#x27;]}: {item.get(&amp;#x27;banner&amp;#x27;, &amp;#x27;&amp;#x27;)[:100]}&amp;quot;)&lt;/pre&gt;
  &lt;p id=&quot;pdoE&quot;&gt;&lt;strong&gt;Censys&lt;/strong&gt; — альтернатива Shodan, с фокусом на сертификаты и глубокую информацию о портах. Интерфейс сложнее, но часто даёт больше данных.&lt;/p&gt;
  &lt;p id=&quot;2uAt&quot;&gt;&lt;strong&gt;Этап 2: Активное сканирование с Nmap (с разрешения!)&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;XYxg&quot;&gt;Nmap (Network Mapper) — стандарт де-факто для активного сканирования портов. Он поддерживает десятки техник сканирования (TCP SYN, TCP connect, UDP, NULL, FIN и т.д.), определение служб, версий, ОС и скриптовые проверки.&lt;/p&gt;
  &lt;p id=&quot;IjXF&quot;&gt;&lt;strong&gt;Основные типы сканов:&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;Xt3l&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/6b/ed/6bed2897-f173-4caf-9fd3-a8da8f3c3c0e.png&quot; width=&quot;941&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;6EGn&quot;&gt;&lt;strong&gt;Базовые команды Nmap:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;i8SN&quot;&gt;# Сканирование топ-1000 портов TCP
nmap example.com

# Сканирование определённого диапазона портов
nmap -p 22,80,443,8080 example.com

# Сканирование всех портов (медленно!)
nmap -p- example.com

# Определение версий служб (баннеры)
nmap -sV example.com

# Использование скриптового движка (безопасные скрипты)
nmap -sC example.com

# Сохранение результатов в файл
nmap -oA scan_results example.com&lt;/pre&gt;
  &lt;p id=&quot;z8yR&quot;&gt;&lt;strong&gt;Пример сканирования с определением служб и скриптов:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;JEzq&quot;&gt;nmap -sV -sC -p- --min-rate 1000 -T4 example.com&lt;/pre&gt;
  &lt;p id=&quot;t58H&quot;&gt;&lt;em&gt;Примечание:&lt;/em&gt; &lt;code&gt;--min-rate 1000&lt;/code&gt; и &lt;code&gt;-T4&lt;/code&gt; ускоряют сканирование, но могут вызвать срабатывание IDS. Для легальных тестов это допустимо, для разведки — нежелательно.&lt;/p&gt;
  &lt;p id=&quot;J2Xs&quot;&gt;&lt;strong&gt;Продвинутые техники Nmap:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;ZVWQ&quot;&gt;
    &lt;li id=&quot;8zTu&quot;&gt;&lt;strong&gt;Сканирование подсети:&lt;/strong&gt; &lt;code&gt;nmap 192.0.2.0/24&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;ZWi6&quot;&gt;&lt;strong&gt;Сканирование из файла со списком IP:&lt;/strong&gt; &lt;code&gt;nmap -iL hosts.txt&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;UO8Z&quot;&gt;&lt;strong&gt;Использование специальных профайлов для времени&lt;/strong&gt; (для скрытности): &lt;code&gt;-T0&lt;/code&gt; (очень медленно) или &lt;code&gt;-T1&lt;/code&gt; (параноидальный).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;zKnh&quot;&gt;&lt;strong&gt;Этап 3: Массовое сканирование (masscan, Zmap)&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;Kp4p&quot;&gt;Для сканирования больших диапазонов IP (например, всей сети /16) используют массовые сканеры. Они не определяют версии служб, а только проверяют, открыт ли порт.&lt;/p&gt;
  &lt;figure id=&quot;UBEB&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/3c/59/3c59038c-395d-4fc5-97aa-4b661c4e59ce.png&quot; width=&quot;947&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;97BT&quot;&gt;&lt;strong&gt;Пример masscan:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;XBmp&quot;&gt;masscan 192.0.2.0/24 -p80,443,22 --rate=10000&lt;/pre&gt;
  &lt;p id=&quot;4aHO&quot;&gt;массовое сканирование легко обнаруживается и может быть расценено как атака.&lt;/p&gt;
  &lt;p id=&quot;5URe&quot;&gt;&lt;strong&gt;Этап 4: Интерпретация результатов сканирования&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;43bT&quot;&gt;Результат сканирования (например, из Nmap или Shodan) — это перечень портов и служб. Что делать дальше?&lt;/p&gt;
  &lt;p id=&quot;0yYw&quot;&gt;&lt;strong&gt;Таблица портов и типовых служб:&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;sS5h&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/cd/45/cd450bc6-9c11-4031-b3ab-b87c6de70086.png&quot; width=&quot;706&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;B5wc&quot;&gt;&lt;strong&gt;Особые случаи:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;ufBT&quot;&gt;
    &lt;li id=&quot;mGcV&quot;&gt;&lt;strong&gt;Порт 8080, 8443, 8000&lt;/strong&gt; — часто альтернативные веб-порты (панели администрирования, прокси).&lt;/li&gt;
    &lt;li id=&quot;rOQd&quot;&gt;&lt;strong&gt;Порты с нестандартными службами&lt;/strong&gt; (например, SSH на 2222) — попытка скрыть сервис.&lt;/li&gt;
    &lt;li id=&quot;pEmQ&quot;&gt;&lt;strong&gt;Большое количество открытых портов&lt;/strong&gt; может указывать на отсутствие файрвола или наличие docker-контейнеров.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;xe1w&quot;&gt;&lt;strong&gt;Этап 5: Анализ баннеров&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;HtCw&quot;&gt;Баннер — это текстовая строка, которую сервер отправляет при подключении (например, HTTP заголовок &lt;code&gt;Server: nginx/1.18.0&lt;/code&gt;). Из баннера можно узнать версию ПО, что важно для оценки уязвимостей.&lt;/p&gt;
  &lt;p id=&quot;Pefm&quot;&gt;&lt;strong&gt;Примеры:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;jLtx&quot;&gt;
    &lt;li id=&quot;TdkS&quot;&gt;&lt;code&gt;SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5&lt;/code&gt; → уязвимости OpenSSH 8.2.&lt;/li&gt;
    &lt;li id=&quot;ErvN&quot;&gt;&lt;code&gt;220 ProFTPD 1.3.5 Server&lt;/code&gt; → старая версия ProFTPD (много уязвимостей).&lt;/li&gt;
    &lt;li id=&quot;AMIi&quot;&gt;&lt;code&gt;HTTP/1.1 200 OK&lt;/code&gt; → баннер неинформативен (скрыт).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;NN83&quot;&gt;&lt;strong&gt;Инструменты для анализа баннеров:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;4nHf&quot;&gt;
    &lt;li id=&quot;mKtk&quot;&gt;&lt;strong&gt;WhatWeb&lt;/strong&gt; — определяет CMS, технологии по HTTP баннерам.&lt;/li&gt;
    &lt;li id=&quot;bu3N&quot;&gt;&lt;strong&gt;Wappalyzer&lt;/strong&gt; (расширение для браузера) — удобно для быстрого анализа веб-сайтов.&lt;/li&gt;
    &lt;li id=&quot;RjKg&quot;&gt;&lt;strong&gt;Httpx&lt;/strong&gt; (от ProjectDiscovery) — быстрый HTTP-клиент для массового извлечения баннеров.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;aBGu&quot;&gt;&lt;strong&gt;Этап 6: Скриптовые проверки (NSE)&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;XTkS&quot;&gt;Скриптовый движок Nmap содержит сотни скриптов для обнаружения уязвимостей, брутфорса, сбора информации.&lt;/p&gt;
  &lt;p id=&quot;9uL3&quot;&gt;&lt;strong&gt;Категории скриптов:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;2DIl&quot;&gt;
    &lt;li id=&quot;SFFs&quot;&gt;&lt;code&gt;safe&lt;/code&gt; — не опасные, не нарушающие работу сервиса.&lt;/li&gt;
    &lt;li id=&quot;wAD3&quot;&gt;&lt;code&gt;intrusive&lt;/code&gt; — могут вызвать сбои или оставить следы.&lt;/li&gt;
    &lt;li id=&quot;54aH&quot;&gt;&lt;code&gt;vuln&lt;/code&gt; — проверяют на известные уязвимости.&lt;/li&gt;
    &lt;li id=&quot;UdJL&quot;&gt;&lt;code&gt;brute&lt;/code&gt; — подбор паролей.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;KK7U&quot;&gt;&lt;strong&gt;Пример безопасного скрипта:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;YF1W&quot;&gt;nmap --script=http-title,http-headers,ssl-cert -p 443 example.com&lt;/pre&gt;
  &lt;p id=&quot;Xtew&quot;&gt;&lt;strong&gt;Этап 7: Мониторинг изменений портов&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;0V91&quot;&gt;Инфраструктура меняется: открываются новые порты, закрываются старые. Важно отслеживать эти изменения.&lt;/p&gt;
  &lt;p id=&quot;R9OE&quot;&gt;&lt;strong&gt;Методы:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;KU8d&quot;&gt;
    &lt;li id=&quot;BP49&quot;&gt;Периодическое сканирование с сохранением результатов в файл.&lt;/li&gt;
    &lt;li id=&quot;yAWj&quot;&gt;Использование Shodan (есть история сканирований, но не для всех портов).&lt;/li&gt;
    &lt;li id=&quot;k1tT&quot;&gt;Censys — предоставляет снимки на разные даты.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;URm9&quot;&gt;&lt;strong&gt;Автоматизация сбора данных через Shodan API:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;0adD&quot;&gt;import shodan
import time

api = shodan.Shodan(&amp;#x27;YOUR_API_KEY&amp;#x27;)
domains = [&amp;#x27;example.com&amp;#x27;, &amp;#x27;target.org&amp;#x27;]
for domain in domains:
    try:
        results = api.search(f&amp;#x27;hostname:{domain}&amp;#x27;)
        for result in results[&amp;#x27;matches&amp;#x27;]:
            print(f&amp;quot;{domain}: {result[&amp;#x27;ip_str&amp;#x27;]} port {result[&amp;#x27;port&amp;#x27;]} - {result.get(&amp;#x27;data&amp;#x27;,&amp;#x27;&amp;#x27;)[:80]}&amp;quot;)
        time.sleep(1)  # не превышать rate limit
    except Exception as e:
        print(e)&lt;/pre&gt;
  &lt;p id=&quot;lYEF&quot;&gt;&lt;strong&gt;Этап 8: Обнаружение ложных срабатываний&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;iA6E&quot;&gt;
    &lt;li id=&quot;EU4T&quot;&gt;Некоторые порты могут быть открыты, но фильтроваться файрволом (Nmap покажет &lt;code&gt;filtered&lt;/code&gt; или &lt;code&gt;closed&lt;/code&gt;).&lt;/li&gt;
    &lt;li id=&quot;A1xp&quot;&gt;Порты, отображаемые как открытые в Shodan, могут быть уже закрыты (данные устарели).&lt;/li&gt;
    &lt;li id=&quot;x6Ku&quot;&gt;Облачные провайдеры часто перенаправляют трафик через глобальные балансировщики (порты могут быть открыты на всех IP одновременно).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;mrAG&quot;&gt;&lt;strong&gt;Практический пример: анализ инфраструктуры по портам&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;RjYE&quot;&gt;&lt;em&gt;Задача:&lt;/em&gt; проанализировать открытые порты домена &lt;code&gt;target.org&lt;/code&gt;.&lt;/p&gt;
  &lt;ol id=&quot;t5wS&quot;&gt;
    &lt;li id=&quot;eZBj&quot;&gt;&lt;strong&gt;Shodan:&lt;/strong&gt; по IP &lt;code&gt;203.0.113.20&lt;/code&gt; найдены порты 80, 443, 22, 8080.&lt;/li&gt;
    &lt;ul id=&quot;dHz4&quot;&gt;
      &lt;li id=&quot;efWg&quot;&gt;&lt;code&gt;80&lt;/code&gt; → HTTP (nginx/1.18.0).&lt;/li&gt;
      &lt;li id=&quot;Aihq&quot;&gt;&lt;code&gt;443&lt;/code&gt; → HTTPS, сертификат для &lt;code&gt;target.org&lt;/code&gt;.&lt;/li&gt;
      &lt;li id=&quot;I8rX&quot;&gt;&lt;code&gt;22&lt;/code&gt; → SSH, баннер &lt;code&gt;OpenSSH 8.2&lt;/code&gt;.&lt;/li&gt;
      &lt;li id=&quot;kmxL&quot;&gt;&lt;code&gt;8080&lt;/code&gt; → панель управления &lt;code&gt;Jenkins&lt;/code&gt;.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;Y4hB&quot;&gt;&lt;strong&gt;Nmap (с разрешения):&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;W3jE&quot;&gt;
      &lt;li id=&quot;bx3Z&quot;&gt;&lt;code&gt;nmap -sV -p 22,80,443,8080 -sC target.org&lt;/code&gt;&lt;/li&gt;
      &lt;li id=&quot;WwKF&quot;&gt;На порту 8080 Jenkins версия 2.277 (уязвимая, возможно CVE-2024-23897).&lt;/li&gt;
      &lt;li id=&quot;nZHv&quot;&gt;На порту 22 слабые алгоритмы шифрования (можно попробовать брутфорс).&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;BEcS&quot;&gt;&lt;strong&gt;Анализ:&lt;/strong&gt; Jenkins доступен из интернета (потенциальная уязвимость). SSH устаревший. Веб-сервер требует проверки на веб-уязвимости.&lt;/li&gt;
    &lt;li id=&quot;EQXW&quot;&gt;&lt;strong&gt;Рекомендация:&lt;/strong&gt; закрыть порт 8080 для внешнего доступа, обновить SSH.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;62Ij&quot;&gt;&lt;/p&gt;
  &lt;ul id=&quot;DETu&quot;&gt;
    &lt;li id=&quot;i7n6&quot;&gt;&lt;strong&gt;Никогда не сканируйте чужие системы без письменного разрешения.&lt;/strong&gt; Даже SYN-сканирование может быть расценено как попытка взлома.&lt;/li&gt;
    &lt;li id=&quot;6xo7&quot;&gt;Для обучения используйте собственные VPS, локальные виртуальные машины, или специальные площадки (HackTheBox, TryHackMe).&lt;/li&gt;
    &lt;li id=&quot;mntn&quot;&gt;Если вам нужны данные о публичных системах для исследования — используйте Shodan, Censys, BinaryEdge.&lt;/li&gt;
    &lt;li id=&quot;kLmn&quot;&gt;В некоторых странах несанкционированное сканирование портов является уголовным преступлением.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;7XAK&quot;&gt;Сканирование портов и служб — мощный метод технического OSINT, но он должен применяться с осторожностью и только на законных основаниях. Пассивные источники (Shodan, Censys) дают почти ту же информацию без риска. Активное сканирование (Nmap) — для глубокого анализа по разрешению. Интерпретация результатов требует знаний о типовых портах, службах и уязвимостях. В связке с поддоменами и DNS это позволяет картировать внешнюю поверхность атаки.&lt;/p&gt;

</content></entry><entry><id>specialist_infosec:Analysis-of-IP-addresses-and-ASN</id><link rel="alternate" type="text/html" href="https://teletype.in/@specialist_infosec/Analysis-of-IP-addresses-and-ASN?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=specialist_infosec"></link><title>Анализ IP-адресов и ASN: геолокация, владельцы, соседние сети, BGP</title><published>2026-06-08T18:50:10.731Z</published><updated>2026-06-08T18:50:10.731Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/3a/b2/3ab221b9-7bc9-437a-a09d-bd62099e79cb.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/39/c0/39c06254-4baa-482f-a929-94ade4f02a39.png&quot;&gt;IP-адреса — это «координаты» устройств в интернете. Зная IP-адрес сервера цели, можно определить его географическое положение, узнать, какому интернет-провайдеру или хостинговой компании он принадлежит, выявить другие сайты, находящиеся на том же сервере, и даже восстановить структуру сетевой инфраструктуры организации через BGP-маршрутизацию. Анализ IP и ASN (автономных систем) — важнейший этап технического OSINT, позволяющий перейти от доменных имен к физическим сетям и их владельцам.</summary><content type="html">
  &lt;figure id=&quot;WI5D&quot; class=&quot;m_retina&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/39/c0/39c06254-4baa-482f-a929-94ade4f02a39.png&quot; width=&quot;1099&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;H9wm&quot;&gt;Анализ IP-адресов и ASN: геолокация, владельцы, соседние сети, BGP&lt;/h3&gt;
  &lt;p id=&quot;joxl&quot;&gt;IP-адреса — это «координаты» устройств в интернете. Зная IP-адрес сервера цели, можно определить его географическое положение, узнать, какому интернет-провайдеру или хостинговой компании он принадлежит, выявить другие сайты, находящиеся на том же сервере, и даже восстановить структуру сетевой инфраструктуры организации через BGP-маршрутизацию. Анализ IP и ASN (автономных систем) — важнейший этап технического OSINT, позволяющий перейти от доменных имен к физическим сетям и их владельцам.&lt;/p&gt;
  &lt;p id=&quot;xjvx&quot;&gt;&lt;strong&gt;Что такое ASN и зачем он нужен?&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;0Ujf&quot;&gt;ASN (Autonomous System Number) — это уникальный номер, присваиваемый автономной системе (Autonomous System, AS). Автономная система — это совокупность IP-сетей (подсетей) под единым административным управлением (например, Ростелеком, МГТС, Amazon AWS, Google). Организации, имеющие собственные IP-диапазоны и публично объявляющие о них через BGP, получают ASN.&lt;/p&gt;
  &lt;p id=&quot;nuXd&quot;&gt;&lt;strong&gt;Ценность ASN для технического OSINT:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;TAgB&quot;&gt;
    &lt;li id=&quot;O6NE&quot;&gt;Зная ASN цели, можно получить все IP-диапазоны, которые принадлежат организации (полная картина её «цифровой земли»).&lt;/li&gt;
    &lt;li id=&quot;i1CA&quot;&gt;Можно обнаружить соседние подсети (соседние AS) — потенциальных партнёров или транзитных провайдеров.&lt;/li&gt;
    &lt;li id=&quot;DpT7&quot;&gt;Выявить изменения (появление новых подсетей, выбытие старых) через мониторинг BGP.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;QIiK&quot;&gt;&lt;strong&gt;Этап 1: Базовый анализ IP-адреса&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;7XNU&quot;&gt;Самый простой способ начать анализ IP — использовать онлайн-сервисы или утилиты командной строки.&lt;/p&gt;
  &lt;p id=&quot;gZPK&quot;&gt;&lt;strong&gt;Что можно узнать по IP:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;9QNW&quot;&gt;
    &lt;li id=&quot;RgFM&quot;&gt;&lt;strong&gt;Геолокация&lt;/strong&gt; (страна, регион, город, иногда координаты) — не всегда точная, основывается на базах данных организаций.&lt;/li&gt;
    &lt;li id=&quot;gvMR&quot;&gt;&lt;strong&gt;Провайдер / хостинг-компания&lt;/strong&gt; (название, контакты).&lt;/li&gt;
    &lt;li id=&quot;bxjT&quot;&gt;&lt;strong&gt;ASN&lt;/strong&gt; (номер автономной системы, которой принадлежит IP).&lt;/li&gt;
    &lt;li id=&quot;hCCQ&quot;&gt;&lt;strong&gt;Тип IP&lt;/strong&gt; (провайдерский, хостинговый, прокси, VPN, Tor exit node).&lt;/li&gt;
    &lt;li id=&quot;VeNb&quot;&gt;&lt;strong&gt;История IP&lt;/strong&gt; (к каким доменам привязывался ранее).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;7diq&quot;&gt;&lt;strong&gt;Инструменты быстрого анализа IP:&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;cbMo&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/4a/ca/4aca1140-6a61-4fff-9f48-5bdee65b4792.png&quot; width=&quot;1212&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Oohd&quot;&gt;&lt;strong&gt;Команды:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;lNtb&quot;&gt;# whois по IP
whois 8.8.8.8

# curl к ipinfo.io
curl ipinfo.io/8.8.8.8
curl ipinfo.io/8.8.8.8/json

# dig для обратного DNS (PTR)
dig -x 8.8.8.8 +short&lt;/pre&gt;
  &lt;p id=&quot;X2CV&quot;&gt;&lt;strong&gt;Пример ответа &lt;a href=&quot;https://ipinfo.io/&quot; target=&quot;_blank&quot;&gt;ipinfo.io&lt;/a&gt;:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;gWtO&quot;&gt;{
  &amp;quot;ip&amp;quot;: &amp;quot;8.8.8.8&amp;quot;,
  &amp;quot;hostname&amp;quot;: &amp;quot;dns.google&amp;quot;,
  &amp;quot;city&amp;quot;: &amp;quot;Mountain View&amp;quot;,
  &amp;quot;region&amp;quot;: &amp;quot;California&amp;quot;,
  &amp;quot;country&amp;quot;: &amp;quot;US&amp;quot;,
  &amp;quot;loc&amp;quot;: &amp;quot;37.4056,-122.0775&amp;quot;,
  &amp;quot;org&amp;quot;: &amp;quot;AS15169 Google LLC&amp;quot;,
  &amp;quot;postal&amp;quot;: &amp;quot;94043&amp;quot;,
  &amp;quot;timezone&amp;quot;: &amp;quot;America/Los_Angeles&amp;quot;
}&lt;/pre&gt;
  &lt;p id=&quot;sJ23&quot;&gt;&lt;strong&gt;Этап 2: ASN и BGP — что скрывается за номером AS?&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;g76k&quot;&gt;Каждый IP принадлежит какой-то автономной системе (AS). Узнав ASN, можно запросить BGP-информацию: какие IP-диапазоны анонсирует эта AS (то есть какие адреса принадлежат организации), а также с кем эта AS граничит (пировые связи, транзитные провайдеры).&lt;/p&gt;
  &lt;p id=&quot;p5WT&quot;&gt;&lt;strong&gt;Инструменты для получения ASN по IP:&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;m5lY&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/f3/81/f381f91c-8b90-4b1a-8554-95753f30e727.png&quot; width=&quot;1227&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;sMsH&quot;&gt;&lt;strong&gt;Пример через Team Cymru:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;hat7&quot;&gt;dig +short 8.8.8.8.origin.asn.cymru.com TXT
# результат: &amp;quot;15169 | 8.8.8.0/24 | US | arin | 1992-12-01&amp;quot;&lt;/pre&gt;
  &lt;p id=&quot;Y7VE&quot;&gt;&lt;strong&gt;Этап 3: Получение всех IP-диапазонов AS&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;jhTC&quot;&gt;Зная ASN, можно скачать все подсети (CIDR-блоки), которые эта AS объявляет в BGP. Это даст полную картину всех IP-адресов, находящихся под контролем организации (включая те, что не связаны напрямую с доменом).&lt;/p&gt;
  &lt;p id=&quot;6rjA&quot;&gt;&lt;strong&gt;Где взять данные:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;JR6x&quot;&gt;
    &lt;li id=&quot;FywI&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://bgp.he.net/&quot; target=&quot;_blank&quot;&gt;BGP.he.net&lt;/a&gt;&lt;/strong&gt; — по ASN отображает список подсетей.&lt;/li&gt;
    &lt;li id=&quot;3MfU&quot;&gt;&lt;strong&gt;RIPE Stat&lt;/strong&gt; — API для получения маршрутов AS.&lt;/li&gt;
    &lt;li id=&quot;5AFS&quot;&gt;&lt;strong&gt;CAIDA&lt;/strong&gt; — архив BGP.&lt;/li&gt;
    &lt;li id=&quot;MuXb&quot;&gt;&lt;strong&gt;Radb&lt;/strong&gt; (&lt;a href=&quot;https://whois.radb.net/&quot; target=&quot;_blank&quot;&gt;whois.radb.net&lt;/a&gt;) — база маршрутов.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;rz9a&quot;&gt;&lt;strong&gt;Пример через &lt;a href=&quot;https://whois.radb.net/&quot; target=&quot;_blank&quot;&gt;whois.radb.net&lt;/a&gt;:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;6KVn&quot;&gt;whois -h whois.radb.net -- &amp;#x27;-i origin AS15169&amp;#x27; | grep -Eo &amp;#x27;([0-9]{1,3}\.){3}[0-9]{1,3}/[0-9]+&amp;#x27;&lt;/pre&gt;
  &lt;p id=&quot;Dca0&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://bgp.he.net/&quot; target=&quot;_blank&quot;&gt;BGP.he.net&lt;/a&gt; API (пример):&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;pdU4&quot;&gt;curl https://bgp.he.net/AS15169
# нужно парсить HTML, есть неофициальное API&lt;/pre&gt;
  &lt;p id=&quot;hT5m&quot;&gt;&lt;strong&gt;Python-функция (через Team Cymru):&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;dFGo&quot;&gt;import requests

def get_ip_routes_by_asn(asn):
    url = f&amp;quot;https://api.cymon.io/bgp/routes/origin/{asn}&amp;quot;
    # можно использовать альтернативные сервисы
    # более простой: whois -h whois.radb.net -- &amp;#x27;-i origin AS15169&amp;#x27;&lt;/pre&gt;
  &lt;p id=&quot;7oG5&quot;&gt;&lt;strong&gt;Этап 4: Поиск соседних доменов на том же IP (Reverse IP Lookup)&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;PEJQ&quot;&gt;Один IP-адрес может хостить множество доменов (shared hosting, виртуальные серверы). Если цель использует невыделенный IP, то можно найти другие домены, связанные с той же инфраструктурой.&lt;/p&gt;
  &lt;p id=&quot;Mm7J&quot;&gt;&lt;strong&gt;Инструменты Reverse IP:&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;l9jZ&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/0b/dd/0bdd4606-700c-4b7d-8ab3-d136997c8bc0.png&quot; width=&quot;1209&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;vyPa&quot;&gt;&lt;strong&gt;SecurityTrails API пример:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;2UeW&quot;&gt;curl -H &amp;quot;APIKEY: YOUR_KEY&amp;quot; https://api.securitytraits.com/v1/domain/8.8.8.8/domain&lt;/pre&gt;
  &lt;p id=&quot;YvWb&quot;&gt;&lt;strong&gt;Ограничения:&lt;/strong&gt; на shared-хостинге могут быть тысячи доменов, большинство не связано с целью. Используйте фильтрацию (похожие тематики, SSL-сертификаты, даты создания).&lt;/p&gt;
  &lt;p id=&quot;ooP9&quot;&gt;&lt;strong&gt;Этап 5: Анализ BGP-пиров (соседних AS)&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;zIiX&quot;&gt;Смотря на BGP-таблицы, можно увидеть, между какими AS существует прямое сетевое соединение (пиринг). Это может указывать на деловые отношения, транзитный трафик или использование CDN.&lt;/p&gt;
  &lt;p id=&quot;lvU9&quot;&gt;&lt;strong&gt;Инструменты:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;Qqvo&quot;&gt;
    &lt;li id=&quot;KwKO&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://bgp.he.net/&quot; target=&quot;_blank&quot;&gt;BGP.he.net&lt;/a&gt;&lt;/strong&gt; → страница AS, раздел “Peers” (соседние AS).&lt;/li&gt;
    &lt;li id=&quot;0CGj&quot;&gt;&lt;strong&gt;BGPView&lt;/strong&gt; → альтернативный визуализатор.&lt;/li&gt;
    &lt;li id=&quot;Jq6d&quot;&gt;&lt;strong&gt;CAIDA AS Rank&lt;/strong&gt; — ранжирование AS по количеству пиров.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;jrdp&quot;&gt;&lt;strong&gt;Анализ пиров:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;nqJR&quot;&gt;
    &lt;li id=&quot;BLQ5&quot;&gt;Если AS цели пирится с крупным облачным провайдером (AWS, Google Cloud), часть инфраструктуры может быть там.&lt;/li&gt;
    &lt;li id=&quot;9Hub&quot;&gt;Если пирится с AS, принадлежащим провайдеру DDoS-защиты (Cloudflare, Akamai), то сайт использует их услуги.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;5JRy&quot;&gt;&lt;strong&gt;Этап 6: Геолокация IP — методы и ограничения&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;VEor&quot;&gt;Геолокация по IP основана на базах данных (MaxMind, IP2Location), которые не всегда точны (особенно для мобильных сетей, VPN, облаков). Следует относиться к ней как к ориентиру, а не к истине.&lt;/p&gt;
  &lt;p id=&quot;fdis&quot;&gt;&lt;strong&gt;Как повысить точность:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;DuHz&quot;&gt;
    &lt;li id=&quot;fgZ5&quot;&gt;Сравнить несколько баз: &lt;a href=&quot;https://ipinfo.io/&quot; target=&quot;_blank&quot;&gt;ipinfo.io&lt;/a&gt;, MaxMind, IP2Location.&lt;/li&gt;
    &lt;li id=&quot;90SY&quot;&gt;Использовать обратный DNS (PTR) — иногда содержит географические указатели (например, &lt;code&gt;hosting-in-moscow.example.com&lt;/code&gt;).&lt;/li&gt;
    &lt;li id=&quot;qsLE&quot;&gt;Проверить сертификаты (в них может быть указан юридический адрес).&lt;/li&gt;
    &lt;li id=&quot;jZLD&quot;&gt;Запросить BGP-локацию (определённые AS имеют географическую привязку, но не точную).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;1SON&quot;&gt;&lt;strong&gt;Инструменты для сравнения геолокации:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;AsJJ&quot;&gt;
    &lt;li id=&quot;8e5N&quot;&gt;&lt;strong&gt;IP2Location&lt;/strong&gt; (разные версии).&lt;/li&gt;
    &lt;li id=&quot;2ccL&quot;&gt;&lt;strong&gt;DB-IP&lt;/strong&gt;.&lt;/li&gt;
    &lt;li id=&quot;m4iX&quot;&gt;&lt;strong&gt;GeoIP Tool&lt;/strong&gt; (&lt;a href=&quot;https://geoiptool.com/&quot; target=&quot;_blank&quot;&gt;geoiptool.com&lt;/a&gt;).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;DkIy&quot;&gt;&lt;strong&gt;Этап 7: История IP (предыдущие домены, предыдущие владельцы)&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;8qbd&quot;&gt;IP-адреса переходят от одного сервера к другому, меняются владельцы блоков. История IP позволяет найти, какие домены ранее были привязаны к этому адресу, и восстановить старые конфигурации.&lt;/p&gt;
  &lt;p id=&quot;saCx&quot;&gt;&lt;strong&gt;Источники истории IP:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;bLPI&quot;&gt;
    &lt;li id=&quot;5kcZ&quot;&gt;&lt;strong&gt;SecurityTrails Historical IP&lt;/strong&gt; (показывает домены, привязанные к IP в прошлом).&lt;/li&gt;
    &lt;li id=&quot;WwDl&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://viewdns.info/&quot; target=&quot;_blank&quot;&gt;ViewDNS.info&lt;/a&gt; IP History&lt;/strong&gt; (ограничен).&lt;/li&gt;
    &lt;li id=&quot;XKhA&quot;&gt;&lt;strong&gt;Censys&lt;/strong&gt; — сохраняет снимки IP-сканирований (порты, сертификаты) за разные даты.&lt;/li&gt;
    &lt;li id=&quot;c2CC&quot;&gt;&lt;strong&gt;Wayback Machine&lt;/strong&gt; для страниц, доступных по IP.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;3iTI&quot;&gt;&lt;strong&gt;Этап 8: Выявление cloud-сервисов и CDN&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;6ayH&quot;&gt;Многие IP-адреса принадлежат облачным платформам. Идентификация облачного провайдера может помочь сузить географию или определить используемые сервисы.&lt;/p&gt;
  &lt;p id=&quot;i434&quot;&gt;&lt;strong&gt;Как определить облачный IP:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;WgE4&quot;&gt;
    &lt;li id=&quot;DMBx&quot;&gt;&lt;code&gt;whois&lt;/code&gt; покажет организацию (например, &amp;quot;AWS&amp;quot;, &amp;quot;Microsoft Corporation&amp;quot;, &amp;quot;Google Cloud&amp;quot;).&lt;/li&gt;
    &lt;li id=&quot;vy36&quot;&gt;Сравнить ASN со списками облачных AS (например, AS15169 — Google, AS14618 — AWS, AS8075 — Microsoft).&lt;/li&gt;
    &lt;li id=&quot;3Q8m&quot;&gt;Специальные списки: (например, &lt;code&gt;https://raw.githubusercontent.com/cloudflare/ip-list/master/cloudflare.ipv4&lt;/code&gt; для Cloudflare).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;AUrQ&quot;&gt;&lt;strong&gt;Практический пример: анализ инфраструктуры домена&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;zi0n&quot;&gt;&lt;em&gt;Задача:&lt;/em&gt; проанализировать IP-адреса домена &lt;code&gt;target.com&lt;/code&gt;.&lt;/p&gt;
  &lt;ol id=&quot;B0D2&quot;&gt;
    &lt;li id=&quot;xH8B&quot;&gt;&lt;strong&gt;DNS-запрос A&lt;/strong&gt; → &lt;code&gt;target.com&lt;/code&gt; -&amp;gt; &lt;code&gt;192.0.2.10&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;dBrC&quot;&gt;&lt;strong&gt;whois 192.0.2.10&lt;/strong&gt; → организация &lt;code&gt;Example Hosting Ltd.&lt;/code&gt;, страна &lt;code&gt;US&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;YbMO&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://ipinfo.io/&quot; target=&quot;_blank&quot;&gt;ipinfo.io&lt;/a&gt;&lt;/strong&gt; → &lt;code&gt;&amp;quot;org&amp;quot;: &amp;quot;AS65535 Example Hosting&amp;quot;, &amp;quot;city&amp;quot;: &amp;quot;New York&amp;quot;&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;jNOH&quot;&gt;&lt;strong&gt;Reverse IP (SecurityTrails)&lt;/strong&gt; → на том же IP еще 50 доменов, в основном мелкие сайты. Shared-хостинг.&lt;/li&gt;
    &lt;li id=&quot;bIhK&quot;&gt;&lt;strong&gt;ASN&lt;/strong&gt; → &lt;code&gt;AS65535&lt;/code&gt;. Через &lt;a href=&quot;https://bgp.he.net/&quot; target=&quot;_blank&quot;&gt;BGP.he.net&lt;/a&gt; получаем все подсети этой AS: &lt;code&gt;192.0.2.0/24&lt;/code&gt;, &lt;code&gt;198.51.100.0/24&lt;/code&gt;, ...&lt;/li&gt;
    &lt;li id=&quot;M1zI&quot;&gt;&lt;strong&gt;Поиск других IP в этих подсетях&lt;/strong&gt;, которые могут принадлежать цели.&lt;/li&gt;
    &lt;li id=&quot;3Q9W&quot;&gt;&lt;strong&gt;BGP-пиры&lt;/strong&gt; → ASN цели соединен с AS15169 (Google). Возможно, сайт использует Google Cloud CDN.&lt;/li&gt;
    &lt;li id=&quot;XvRw&quot;&gt;&lt;strong&gt;История IP&lt;/strong&gt; → 2 года назад IP был &lt;code&gt;203.0.113.55&lt;/code&gt;, который принадлежал другой AS (предыдущий хостинг).&lt;/li&gt;
    &lt;li id=&quot;rmtr&quot;&gt;&lt;strong&gt;Вывод&lt;/strong&gt;: цель использует shared-хостинг у Example Hosting; старый сервер больше не активен; через Google Cloud, вероятно, используется кэширование.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;zqmN&quot;&gt;&lt;strong&gt;Автоматизация сбора данных по IP и ASN (Python)&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;4XDT&quot;&gt;import requests
import ipaddress

def ip_info(ip):
    resp = requests.get(f&amp;quot;https://ipinfo.io/{ip}/json&amp;quot;)
    return resp.json() if resp.status_code == 200 else None

def get_asn(ip):
    info = ip_info(ip)
    org = info.get(&amp;quot;org&amp;quot;, &amp;quot;&amp;quot;)
    if org.startswith(&amp;quot;AS&amp;quot;):
        asn = org.split()[0][2:]  # &amp;quot;AS15169&amp;quot; -&amp;gt; &amp;quot;15169&amp;quot;
        return asn
    return None

def get_prefixes_by_asn(asn):
    # через whois.radb.net (упрощённо)
    import subprocess
    cmd = f&amp;quot;whois -h whois.radb.net -- &amp;#x27;-i origin AS{asn}&amp;#x27; | grep -Eo &amp;#x27;([0-9]+\\.){3}[0-9]+/[0-9]+&amp;#x27;&amp;quot;
    result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
    return result.stdout.splitlines()

# Пример
ip = &amp;quot;8.8.8.8&amp;quot;
print(ip_info(ip))
asn = get_asn(ip)
print(f&amp;quot;ASN: {asn}&amp;quot;)
prefixes = get_prefixes_by_asn(asn)
print(f&amp;quot;Prefixes: {prefixes[:5]}...&amp;quot;)&lt;/pre&gt;
  &lt;p id=&quot;xXoB&quot;&gt;&lt;/p&gt;
  &lt;ul id=&quot;jnLC&quot;&gt;
    &lt;li id=&quot;oOTu&quot;&gt;WHOIS по IP, DNS-запросы, BGP-данные — это публичные данные. Их сбор безопасен и легален.&lt;/li&gt;
    &lt;li id=&quot;2f8J&quot;&gt;Массовый reverse DNS или перебор IP-диапазонов без разрешения может считаться активным сканированием, если выполняется в больших объёмах. Используйте осторожно и с уважением к чужой инфраструктуре.&lt;/li&gt;
    &lt;li id=&quot;j0TX&quot;&gt;Сервисы типа SecurityTrails имеют условия использования, запрещающие массовые автоматические запросы без оплаты.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;AkYr&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;qz5g&quot;&gt;Анализ IP и ASN позволяет преобразовать сетевую инфраструктуру организации в карту подсетей, обнаружить скрытые активы и соседние ресурсы, определить географическое расположение и используемые облачные провайдеры. Ключевые инструменты: whois, &lt;a href=&quot;https://ipinfo.io/&quot; target=&quot;_blank&quot;&gt;ipinfo.io&lt;/a&gt;, &lt;a href=&quot;https://bgp.he.net/&quot; target=&quot;_blank&quot;&gt;BGP.he.net&lt;/a&gt;, SecurityTrails. В сочетании с данными о поддоменах и DNS это даёт практически полную картину внешней поверхности атаки.&lt;/p&gt;
  &lt;p id=&quot;bQaD&quot;&gt;В следующей статье цикла мы рассмотрим &lt;strong&gt;сканирование портов и сервисов&lt;/strong&gt; — активный этап, который требует особой осторожности, а также освоим инструменты Nmap, массовое сканирование и Shodan.&lt;/p&gt;

</content></entry><entry><id>specialist_infosec:Subdomain-Search</id><link rel="alternate" type="text/html" href="https://teletype.in/@specialist_infosec/Subdomain-Search?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=specialist_infosec"></link><title>Поиск поддоменов: инструменты и методы</title><published>2026-06-07T18:09:02.678Z</published><updated>2026-06-07T18:09:02.678Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/4f/a9/4fa9c58d-2df8-4bfc-b98b-885190b4190f.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img1.teletype.in/files/c5/b3/c5b36f43-a8a7-41b0-a8af-3804519a4def.png&quot;&gt;Поддомены — это «входные двери» в инфраструктуру организации. Часто основные сервисы располагаются на поддоменах типа www.example.com, mail.example.com, vpn.example.com, а забытые поддомены (test.example.com, dev.example.com) могут быть уязвимы или раскрывать внутреннюю структуру. Поиск поддоменов — ключевой этап технического OSINT, позволяющий обнаружить скрытые активы, не связанные напрямую с основным доменом. Данная статья посвящена методам и инструментам пассивного поиска поддоменов.</summary><content type="html">
  &lt;figure id=&quot;DftG&quot; class=&quot;m_retina&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/c5/b3/c5b36f43-a8a7-41b0-a8af-3804519a4def.png&quot; width=&quot;1099&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;Tw21&quot;&gt;Поиск поддоменов: инструменты и методы &lt;/h3&gt;
  &lt;p id=&quot;0hzP&quot;&gt;Поддомены — это «входные двери» в инфраструктуру организации. Часто основные сервисы располагаются на поддоменах типа &lt;code&gt;www.example.com&lt;/code&gt;, &lt;code&gt;mail.example.com&lt;/code&gt;, &lt;code&gt;vpn.example.com&lt;/code&gt;, а забытые поддомены (&lt;code&gt;test.example.com&lt;/code&gt;, &lt;code&gt;dev.example.com&lt;/code&gt;) могут быть уязвимы или раскрывать внутреннюю структуру. Поиск поддоменов — ключевой этап технического OSINT, позволяющий обнаружить скрытые активы, не связанные напрямую с основным доменом. Данная статья посвящена методам и инструментам пассивного поиска поддоменов.&lt;/p&gt;
  &lt;p id=&quot;NJ3o&quot;&gt;&lt;strong&gt;Почему поддомены важны для разведки?&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;1Mdp&quot; class=&quot;m_retina&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/4f/74/4f74782c-d6fa-455a-8bb0-b1485eea9d1e.png&quot; width=&quot;634&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;eyMs&quot;&gt;&lt;strong&gt;Классификация методов поиска поддоменов&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;5xFd&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/f6/80/f68006f6-5840-4e79-8b7a-37ae5213c99f.png&quot; width=&quot;1284&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;8llH&quot;&gt;&lt;strong&gt;Этап 1: Поиск через сертификаты (Certificate Transparency Logs)&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;ESnA&quot;&gt;Современные SSL/TLS сертификаты публикуются в публичные логи Certificate Transparency (CT). Каждый выданный сертификат (включая те, что для поддоменов) появляется в этих логах. Это наиболее надежный пассивный источник поддоменов.&lt;/p&gt;
  &lt;p id=&quot;2s6A&quot;&gt;&lt;strong&gt;Инструменты CT-логов:&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;58Bj&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/90/5a/905a83a6-ee0e-4bfd-9520-934afd55470c.png&quot; width=&quot;1282&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;WLge&quot;&gt;&lt;strong&gt;Использование crt.sh:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;3PdA&quot;&gt;
    &lt;li id=&quot;DvI1&quot;&gt;Веб-интерфейс: &lt;code&gt;https://crt.sh/?q=%25.example.com&lt;/code&gt; (где &lt;code&gt;%25&lt;/code&gt; — это URL-кодированный символ &lt;code&gt;%&lt;/code&gt;, означающий &amp;quot;любые символы перед .&lt;a href=&quot;https://example.com/&quot; target=&quot;_blank&quot;&gt;example.com&lt;/a&gt;&amp;quot;).&lt;/li&gt;
    &lt;li id=&quot;bbKj&quot;&gt;API: &lt;code&gt;https://crt.sh/?q=.example.com&amp;amp;output=json&lt;/code&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;xK3Z&quot;&gt;&lt;strong&gt;Пример API-запроса (Python):&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;s0sj&quot;&gt;import requests
import json

def get_subdomains_from_crt(domain):
    url = f&amp;quot;https://crt.sh/?q=%25.{domain}&amp;amp;output=json&amp;quot;
    response = requests.get(url)
    if response.status_code == 200:
        data = response.json()
        subdomains = set()
        for entry in data:
            name = entry.get(&amp;#x27;name_value&amp;#x27;, &amp;#x27;&amp;#x27;)
            if name.endswith(f&amp;#x27;.{domain}&amp;#x27;) or name == domain:
                subdomains.add(name)
        return sorted(subdomains)
    else:
        return []

subs = get_subdomains_from_crt(&amp;#x27;example.com&amp;#x27;)
print(subs)&lt;/pre&gt;
  &lt;p id=&quot;jYXR&quot;&gt;crt.sh возвращает много дублей, мёртвые сертификаты, включает домены, принадлежащие другим организациям (если сертификат содержит несколько имен). Требуется пост-обработка.&lt;/p&gt;
  &lt;p id=&quot;zbj2&quot;&gt;&lt;strong&gt;Этап 2: Поиск через DNS-историю&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;JpHZ&quot;&gt;Исторические DNS-записи содержат поддомены, которые уже могли быть удалены, но все еще могут указывать на активные IP.&lt;/p&gt;
  &lt;p id=&quot;wlR4&quot;&gt;&lt;strong&gt;Инструменты:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;gSnc&quot;&gt;
    &lt;li id=&quot;6nWH&quot;&gt;&lt;strong&gt;SecurityTrails&lt;/strong&gt; — позволяет искать поддомены по домену и видеть историю.&lt;/li&gt;
    &lt;li id=&quot;GDQR&quot;&gt;&lt;strong&gt;DNSdumpster&lt;/strong&gt; — отображает все поддомены, найденные из разных источников.&lt;/li&gt;
    &lt;li id=&quot;dyF8&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://viewdns.info/&quot; target=&quot;_blank&quot;&gt;ViewDNS.info&lt;/a&gt; (Reverse IP lookup)&lt;/strong&gt; — показывает домены на одном IP, что может косвенно выявить поддомены.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;xdTw&quot;&gt;&lt;strong&gt;SecurityTrails API (пример):&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;uR0e&quot;&gt;curl -H &amp;quot;APIKEY: YOUR_KEY&amp;quot; https://api.securitytrails.com/v1/domain/example.com/subdomains&lt;/pre&gt;
  &lt;p id=&quot;2XyE&quot;&gt;&lt;strong&gt;Этап 3: Активный DNS-брутфорс (словарный перебор)&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;GxRT&quot;&gt;Перебор возможных имен поддоменов с использованием словаря (или генерация на основе правил). Это активный метод, так как генерирует множество DNS-запросов к резолверам цели или к публичным DNS.&lt;/p&gt;
  &lt;p id=&quot;dR2C&quot;&gt;&lt;strong&gt;Плюсы:&lt;/strong&gt; находит поддомены, которые не попали в сертификаты или историю.&lt;br /&gt;&lt;strong&gt;Минусы:&lt;/strong&gt; шумный, может быть расценен как атака, требует хорошего словаря.&lt;/p&gt;
  &lt;p id=&quot;35xV&quot;&gt;&lt;strong&gt;Инструменты брутфорса:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;GqDr&quot;&gt;
    &lt;li id=&quot;pZjW&quot;&gt;&lt;strong&gt;Sublist3r&lt;/strong&gt; — комбинирует пассивные источники + брутфорс.&lt;/li&gt;
    &lt;li id=&quot;jTdP&quot;&gt;&lt;strong&gt;Amass&lt;/strong&gt; — мощный фреймворк (пассивный + активный).&lt;/li&gt;
    &lt;li id=&quot;KKy3&quot;&gt;&lt;strong&gt;dnsrecon&lt;/strong&gt; — включает брутфорс и AXFR.&lt;/li&gt;
    &lt;li id=&quot;cceC&quot;&gt;&lt;strong&gt;dnsenum&lt;/strong&gt; — классика.&lt;/li&gt;
    &lt;li id=&quot;i5bz&quot;&gt;&lt;strong&gt;Gobuster&lt;/strong&gt; с модулем dns.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;k0Hj&quot;&gt;&lt;strong&gt;Пример использования Sublist3r:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;KpEG&quot;&gt;sublist3r -d example.com -o subdomains.txt&lt;/pre&gt;
  &lt;pre id=&quot;O8UD&quot;&gt;amass enum -passive -d example.com -o subdomains.txt&lt;/pre&gt;
  &lt;p id=&quot;itE1&quot;&gt;&lt;strong&gt;Активный брутфорс с Amass:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;ORgF&quot;&gt;amass enum -active -d example.com -brute -w wordlist.txt&lt;/pre&gt;
  &lt;p id=&quot;WgUy&quot;&gt;&lt;strong&gt;Словари для брутфорса:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;eq86&quot;&gt;
    &lt;li id=&quot;ZYeo&quot;&gt;&lt;strong&gt;SecLists/Discovery/DNS/&lt;code&gt;subdomains-top1million-5000.txt&lt;/code&gt;&lt;/strong&gt; — популярный.&lt;/li&gt;
    &lt;li id=&quot;JFj2&quot;&gt;&lt;strong&gt;&lt;code&gt;commonspeak2-wordlists&lt;/code&gt;&lt;/strong&gt;.&lt;/li&gt;
    &lt;li id=&quot;0N5d&quot;&gt;Собственные списки, сформированные из известных поддоменов (например, www, mail, remote, vpn, dev, test, staging, api, admin, portal, blog, shop, support, ftp, ns1, mx1).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;Rd7h&quot;&gt;&lt;strong&gt;Этап 4: Поиск через поисковые системы&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;Zr6E&quot;&gt;Использование операторов поиска для нахождения страниц, индексированных на поддоменах.&lt;/p&gt;
  &lt;p id=&quot;XKnm&quot;&gt;&lt;strong&gt;Google Search:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;M3e5&quot;&gt;site:*.example.com
site:example.com -www&lt;/pre&gt;
  &lt;p id=&quot;t9Cg&quot;&gt;&lt;strong&gt;Bing / Yandex&lt;/strong&gt; — аналогично.&lt;/p&gt;
  &lt;p id=&quot;fEXC&quot;&gt;&lt;strong&gt;Особенности:&lt;/strong&gt; находит только проиндексированные поисковиком поддомены; часто дает неполный результат.&lt;/p&gt;
  &lt;p id=&quot;NQI4&quot;&gt;&lt;strong&gt;Этап 5: Поиск через ASN и IP-диапазоны&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;Rqco&quot;&gt;Если известен ASN (автономная система) цели или диапазон IP-адресов, можно выполнить обратный поиск PTR-записей для всех IP в диапазоне.&lt;/p&gt;
  &lt;p id=&quot;BtuV&quot;&gt;&lt;strong&gt;Метод:&lt;/strong&gt;&lt;/p&gt;
  &lt;ol id=&quot;1kIB&quot;&gt;
    &lt;li id=&quot;PyVM&quot;&gt;Определить ASN цели (через &lt;code&gt;whois&lt;/code&gt; IP или &lt;a href=&quot;https://bgp.he.net/&quot; target=&quot;_blank&quot;&gt;BGP.he.net&lt;/a&gt;).&lt;/li&gt;
    &lt;li id=&quot;r8AI&quot;&gt;Получить список IP-диапазонов этого ASN (из базы RIPE/ARIN).&lt;/li&gt;
    &lt;li id=&quot;SAcF&quot;&gt;Выполнить массовый reverse DNS-запрос (но осторожно, чтобы не перегружать сеть). Инструменты: &lt;code&gt;dnsrecon -r&lt;/code&gt;, &lt;code&gt;massdns&lt;/code&gt;, собственные скрипты.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;LB26&quot;&gt;&lt;strong&gt;Пассивный вариант:&lt;/strong&gt; использовать сервис Censys (ранее — Project Sonar), который публикует данные reverse DNS сканирований.&lt;/p&gt;
  &lt;p id=&quot;7odj&quot;&gt;&lt;strong&gt;Этап 6: Поиск в репозиториях кода (GitHub, GitLab)&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;gF3s&quot;&gt;В коде, конфигурационных файлах, документации часто встречаются поддомены.&lt;/p&gt;
  &lt;p id=&quot;J0zR&quot;&gt;&lt;strong&gt;GitHub поиск:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;VRPg&quot;&gt;*.example.com extension:conf
&amp;quot;example.com&amp;quot; path:config&lt;/pre&gt;
  &lt;p id=&quot;UNDN&quot;&gt;&lt;strong&gt;Инструменты:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;G170&quot;&gt;
    &lt;li id=&quot;GuNR&quot;&gt;&lt;strong&gt;GitHub Code Search&lt;/strong&gt; (веб).&lt;/li&gt;
    &lt;li id=&quot;oFUt&quot;&gt;&lt;strong&gt;TruffleHog&lt;/strong&gt; (поиск секретов, может найти и поддомены).&lt;/li&gt;
    &lt;li id=&quot;hMgc&quot;&gt;&lt;strong&gt;GitRob&lt;/strong&gt; / &lt;strong&gt;GitGrab&lt;/strong&gt; — поиск по организациям.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;iQ4A&quot;&gt;&lt;strong&gt;Этап 7: Комплексные фреймворки для поддоменов&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;33og&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/28/13/2813162f-7bdd-4c4a-aed9-a80cb0fc6c7e.png&quot; width=&quot;1284&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;4b1l&quot;&gt;Для полного покрытия использовать комбинацию: &lt;strong&gt;Amass&lt;/strong&gt; (пассивный режим) + &lt;strong&gt;Subfinder&lt;/strong&gt; + &lt;strong&gt;crt.sh&lt;/strong&gt; + &lt;strong&gt;SecurityTrails&lt;/strong&gt; (если есть ключ).&lt;/p&gt;
  &lt;p id=&quot;IFyN&quot;&gt;&lt;strong&gt;Этап 8: Обработка и фильтрация результатов&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;3fkG&quot;&gt;Список поддоменов обычно содержит:&lt;/p&gt;
  &lt;ul id=&quot;NyyA&quot;&gt;
    &lt;li id=&quot;LUUz&quot;&gt;Дубликаты.&lt;/li&gt;
    &lt;li id=&quot;Cl7t&quot;&gt;Поддомены, не относящиеся к цели (например, из общих сертификатов).&lt;/li&gt;
    &lt;li id=&quot;n81V&quot;&gt;Некорректные записи (звездочки, wildcards).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;ipqg&quot;&gt;&lt;strong&gt;Фильтрация:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;cO1Z&quot;&gt;def clean_subdomains(raw_list, target_domain):
    cleaned = set()
    for sub in raw_list:
        sub = sub.strip().lower().rstrip(&amp;#x27;.&amp;#x27;)
        if sub.endswith(target_domain) and sub != target_domain:
            # Убрать wildcard (*)
            if sub.startswith(&amp;#x27;*.&amp;#x27;):
                sub = sub[2:]
            cleaned.add(sub)
    return sorted(cleaned)&lt;/pre&gt;
  &lt;p id=&quot;DLE3&quot;&gt;&lt;strong&gt;Валидация:&lt;/strong&gt; для каждого поддомена выполнить DNS-запрос (A или AAAA), чтобы убедиться, что он резолвится в IP.&lt;/p&gt;
  &lt;p id=&quot;4t72&quot;&gt;&lt;strong&gt;Этап 9: Визуализация и анализ поддоменов&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;WzgR&quot;&gt;После сбора поддоменов полезно:&lt;/p&gt;
  &lt;ul id=&quot;mvmw&quot;&gt;
    &lt;li id=&quot;7wry&quot;&gt;Сгруппировать их по IP-адресам (один IP — несколько поддоменов).&lt;/li&gt;
    &lt;li id=&quot;5Wti&quot;&gt;Выявить общие подсети.&lt;/li&gt;
    &lt;li id=&quot;Khif&quot;&gt;Обнаружить поддомены, указывающие на облачные сервисы (AWS, Azure, GCP).&lt;/li&gt;
    &lt;li id=&quot;pxAa&quot;&gt;Построить граф связей.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;XmUO&quot;&gt;&lt;strong&gt;Инструменты визуализации:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;ro1u&quot;&gt;
    &lt;li id=&quot;zWve&quot;&gt;&lt;strong&gt;Aquatone&lt;/strong&gt; — создает скриншоты поддоменов, отображает сгруппированные по IP.&lt;/li&gt;
    &lt;li id=&quot;PgVx&quot;&gt;&lt;strong&gt;EyeWitness&lt;/strong&gt; — аналогично.&lt;/li&gt;
    &lt;li id=&quot;nh9k&quot;&gt;&lt;strong&gt;Gephi&lt;/strong&gt; — для графа связей.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;dQGc&quot;&gt;&lt;strong&gt;Практический пример: поиск поддоменов &lt;code&gt;example.org&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
  &lt;ol id=&quot;xxQb&quot;&gt;
    &lt;li id=&quot;UCEc&quot;&gt;&lt;strong&gt;crt.sh&lt;/strong&gt; → найдено 45 поддоменов, включая &lt;code&gt;admin.example.org&lt;/code&gt;, &lt;code&gt;dev-api.example.org&lt;/code&gt;, &lt;code&gt;test.example.org&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;pRYV&quot;&gt;&lt;strong&gt;Subfinder&lt;/strong&gt; → добавил &lt;code&gt;mail.example.org&lt;/code&gt;, &lt;code&gt;remote.example.org&lt;/code&gt;, &lt;code&gt;vpn.example.org&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;ENCA&quot;&gt;&lt;strong&gt;Amass (пассивный)&lt;/strong&gt; → нашел &lt;code&gt;grafana.internal.example.org&lt;/code&gt;, &lt;code&gt;jenkins.example.org&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;kFTq&quot;&gt;&lt;strong&gt;DNSdumpster&lt;/strong&gt; → подтвердил большинство и добавил &lt;code&gt;ftp.example.org&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;IZF9&quot;&gt;&lt;strong&gt;Проверка через DNS:&lt;/strong&gt; &lt;code&gt;dev-api.example.org&lt;/code&gt; разрешается в &lt;code&gt;203.0.113.89&lt;/code&gt;, &lt;code&gt;jenkins.example.org&lt;/code&gt; — в &lt;code&gt;198.51.100.22&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;jahU&quot;&gt;&lt;strong&gt;Анализ IP:&lt;/strong&gt; оба IP принадлежат одному хостинг-провайдеру, но разным подсетям. &lt;code&gt;jenkins.example.org&lt;/code&gt; имеет открытый порт 8080 (Jenkins), что является потенциально критичным.&lt;/li&gt;
    &lt;li id=&quot;6EhF&quot;&gt;&lt;strong&gt;Вывод:&lt;/strong&gt; обнаружен Jenkins-сервер, доступный из интернета, который можно проверить на наличие уязвимостей.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;nQ9h&quot;&gt;&lt;strong&gt;Автоматизация сбора поддоменов (Python-скрипт-агрегатор)&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;ZCVY&quot;&gt;import subprocess
import requests

def get_subdomains(domain):
    subs = set()
    # crt.sh
    url = f&amp;quot;https://crt.sh/?q=%25.{domain}&amp;amp;output=json&amp;quot;
    resp = requests.get(url)
    if resp.status_code == 200:
        for entry in resp.json():
            name = entry.get(&amp;#x27;name_value&amp;#x27;, &amp;#x27;&amp;#x27;)
            if name.endswith(domain):
                subs.add(name)
    # Subfinder (запуск внешней команды)
    result = subprocess.run([&amp;#x27;subfinder&amp;#x27;, &amp;#x27;-d&amp;#x27;, domain, &amp;#x27;-silent&amp;#x27;], capture_output=True, text=True)
    for line in result.stdout.split():
        subs.add(line.strip())
    return sorted(subs)

domains = get_subdomains(&amp;#x27;example.com&amp;#x27;)
for d in domains:
    print(d)&lt;/pre&gt;
  &lt;p id=&quot;Ldzm&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;dLSs&quot;&gt;&lt;strong&gt;Пассивный поиск&lt;/strong&gt; (crt.sh, SecurityTrails, DNS-история) легален и безопасен.&lt;/p&gt;
  &lt;p id=&quot;w6KD&quot;&gt;&lt;strong&gt;Активный брутфорс&lt;/strong&gt; может генерировать тысячи запросов к DNS-серверам цели, что может быть расценено как атака или нарушение условий хостинга. &lt;/p&gt;
  &lt;p id=&quot;t7ms&quot;&gt;Использование публичных резолверов (8.8.8.8) для брутфорса предпочтительнее, чем запросы напрямую к NS цели, но все равно генерирует сетевой трафик.&lt;/p&gt;
  &lt;p id=&quot;zm5H&quot;&gt;Поиск поддоменов — многоэтапный процесс, требующий комбинации пассивных источников (crt.sh, SecurityTrails, DNS-история) и аккуратного активного брутфорса. Самые мощные инструменты — Amass и Subfinder. Полученный список поддоменов необходимо очистить, провалидировать и проанализировать (выявить IP, открытые порты, технологии). Это позволит составить полную карту внешней инфраструктуры организации.&lt;/p&gt;

</content></entry><entry><id>specialist_infosec:6vXd2ZTrp7v</id><link rel="alternate" type="text/html" href="https://teletype.in/@specialist_infosec/6vXd2ZTrp7v?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=specialist_infosec"></link><title>DNS-разведка: whois, dig, nslookup, история DNS, reverse DNS</title><published>2026-06-03T19:52:38.670Z</published><updated>2026-06-03T19:52:38.670Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/1d/fa/1dfa20c3-27d6-4ad8-bb06-eb232c82cfd8.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/74/19/7419a89d-0202-4e51-b9d7-78b270a99eda.png&quot;&gt;DNS (Domain Name System) — это «телефонная книга» интернета, преобразующая доменные имена в IP-адреса и обратно. Для специалиста по техническому OSINT DNS является одним из самых информативных источников: записи DNS раскрывают инфраструктуру организации, ее почтовые серверы, поддомены, политики безопасности и даже историю изменений. Данная статья посвящена методам DNS-разведки с использованием открытых инструментов и баз данных.</summary><content type="html">
  &lt;figure id=&quot;pI1j&quot; class=&quot;m_retina&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/74/19/7419a89d-0202-4e51-b9d7-78b270a99eda.png&quot; width=&quot;1099&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;DnaD&quot;&gt;DNS-разведка: whois, dig, nslookup, история DNS, reverse DNS&lt;/h3&gt;
  &lt;p id=&quot;veT0&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;3HZz&quot;&gt;DNS (Domain Name System) — это «телефонная книга» интернета, преобразующая доменные имена в IP-адреса и обратно. Для специалиста по техническому OSINT DNS является одним из самых информативных источников: записи DNS раскрывают инфраструктуру организации, ее почтовые серверы, поддомены, политики безопасности и даже историю изменений. Данная статья посвящена методам DNS-разведки с использованием открытых инструментов и баз данных.&lt;/p&gt;
  &lt;p id=&quot;jc0E&quot;&gt;&lt;strong&gt;Почему DNS-разведка важна?&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;tnY1&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/06/61/06611365-ae59-49b4-9cd7-1c40cda2472d.png&quot; width=&quot;947&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;cnFp&quot;&gt;&lt;strong&gt;Этап 1: WHOIS — кто владелец домена или IP?&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;6VrM&quot;&gt;WHOIS-запрос возвращает регистрационные данные домена (или IP-диапазона). Хотя многие регистраторы скрывают персональные данные за PrivacyGuard, многое остается доступным.&lt;/p&gt;
  &lt;p id=&quot;UQEZ&quot;&gt;&lt;strong&gt;Что можно узнать из WHOIS:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;UD5J&quot;&gt;
    &lt;li id=&quot;YX5C&quot;&gt;&lt;strong&gt;Дата регистрации домена&lt;/strong&gt; (дата создания).&lt;/li&gt;
    &lt;li id=&quot;nlIc&quot;&gt;&lt;strong&gt;Дата окончания регистрации&lt;/strong&gt; (можно оценить, активен ли домен).&lt;/li&gt;
    &lt;li id=&quot;lo3F&quot;&gt;&lt;strong&gt;Регистратор&lt;/strong&gt; (например, GoDaddy, Namecheap, &lt;a href=&quot;https://reg.ru/&quot; target=&quot;_blank&quot;&gt;REG.RU&lt;/a&gt;).&lt;/li&gt;
    &lt;li id=&quot;pyLe&quot;&gt;&lt;strong&gt;DNS-серверы&lt;/strong&gt; (NS записи).&lt;/li&gt;
    &lt;li id=&quot;gUx1&quot;&gt;&lt;strong&gt;Контактная информация&lt;/strong&gt; (имя, email, телефон, адрес — если не скрыта).&lt;/li&gt;
    &lt;li id=&quot;gnX0&quot;&gt;&lt;strong&gt;Для IP-блока:&lt;/strong&gt; организация-владелец, страна, диапазон.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;1nuN&quot;&gt;&lt;strong&gt;Инструменты WHOIS:&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;a4kj&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/f8/69/f8696a4d-4976-4cc2-bc61-84fbcb9f5edd.png&quot; width=&quot;947&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;9WHE&quot;&gt;&lt;strong&gt;Пример командной строки:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;awBn&quot;&gt;whois example.com
whois 8.8.8.8&lt;/pre&gt;
  &lt;p id=&quot;lufl&quot;&gt;&lt;strong&gt;Этап 2: Базовые DNS-записи (dig, nslookup)&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;0ZH7&quot;&gt;&lt;code&gt;dig&lt;/code&gt; (Linux/macOS) и &lt;code&gt;nslookup&lt;/code&gt; (Windows, Linux) — основные утилиты для прямых DNS-запросов.&lt;/p&gt;
  &lt;p id=&quot;YFaq&quot;&gt;&lt;strong&gt;Примеры dig:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;nMGA&quot;&gt;dig example.com A               # A запись (IPv4)
dig example.com AAAA            # AAAA запись (IPv6)
dig example.com MX              # MX записи (почта)
dig example.com TXT             # TXT записи
dig example.com NS              # NS записи
dig example.com CNAME           # CNAME записи
dig example.com SOA             # SOA запись

# Указание конкретного DNS-сервера
dig @8.8.8.8 example.com A

# Краткий вывод (+short)
dig example.com A +short&lt;/pre&gt;
  &lt;p id=&quot;gzjl&quot;&gt;&lt;strong&gt;Пример nslookup:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;srdM&quot;&gt;nslookup example.com
set type=MX
example.com&lt;/pre&gt;
  &lt;p id=&quot;9s8K&quot;&gt;&lt;strong&gt;Использование публичных DNS-серверов:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;6oE7&quot;&gt;
    &lt;li id=&quot;cA0E&quot;&gt;&lt;code&gt;8.8.8.8&lt;/code&gt; (Google Public DNS)&lt;/li&gt;
    &lt;li id=&quot;a1vy&quot;&gt;&lt;code&gt;1.1.1.1&lt;/code&gt; (Cloudflare)&lt;/li&gt;
    &lt;li id=&quot;5bp3&quot;&gt;&lt;code&gt;9.9.9.9&lt;/code&gt; (Quad9)&lt;/li&gt;
    &lt;li id=&quot;09hl&quot;&gt;&lt;code&gt;77.88.8.8&lt;/code&gt; (Яндекс DNS)&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;SOHi&quot;&gt;&lt;strong&gt;Этап 3: История DNS (DNS History)&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;nU9p&quot;&gt;Записи DNS меняются: серверы переезжают, поддомены создаются и удаляются. История DNS позволяет найти старые IP, забытые поддомены, предыдущих хостинг-провайдеров.&lt;/p&gt;
  &lt;p id=&quot;Nxtz&quot;&gt;&lt;strong&gt;Инструменты истории DNS:&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;EG3r&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/d3/24/d324aa0e-f959-46a4-8e6b-936183f8c3fa.png&quot; width=&quot;942&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;eGk9&quot;&gt;&lt;strong&gt;Пример использования SecurityTrails:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;pPmC&quot;&gt;# Через веб-интерфейс: https://securitytrails.com/domain/example.com/history
# Через API (требуется ключ)
curl -H &amp;quot;APIKEY: YOUR_KEY&amp;quot; https://api.securitytrails.com/v1/history/example.com/a&lt;/pre&gt;
  &lt;p id=&quot;QD0c&quot;&gt;&lt;strong&gt;Что можно найти:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;FpJg&quot;&gt;
    &lt;li id=&quot;a8oN&quot;&gt;Старые IP-адреса, где ранее хостился домен.&lt;/li&gt;
    &lt;li id=&quot;1K9C&quot;&gt;Удаленные поддомены (иногда забытые, но все еще разрешающиеся).&lt;/li&gt;
    &lt;li id=&quot;l0oe&quot;&gt;Смену DNS-провайдера.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;JGmp&quot;&gt;&lt;strong&gt;Этап 4: Reverse DNS (PTR запись)&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;yi09&quot;&gt;Reverse DNS преобразует IP-адрес в доменное имя. Часто используется почтовыми серверами для проверки подлинности.&lt;/p&gt;
  &lt;p id=&quot;rzh3&quot;&gt;&lt;strong&gt;Поиск PTR записи:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;8NYT&quot;&gt;dig -x 8.8.8.8 +short        # Результат: dns.google.
nslookup 8.8.8.8&lt;/pre&gt;
  &lt;p id=&quot;p6VR&quot;&gt;&lt;strong&gt;Для диапазона IP:&lt;/strong&gt; можно выполнить обратный поиск по всем IP в подсети (но массовые запросы могут быть заблокированы).&lt;/p&gt;
  &lt;p id=&quot;o5hm&quot;&gt;&lt;strong&gt;Применение в OSINT:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;QYXN&quot;&gt;
    &lt;li id=&quot;MZc7&quot;&gt;Подтверждение, что IP действительно принадлежит организации.&lt;/li&gt;
    &lt;li id=&quot;9HWC&quot;&gt;Поиск других доменов, указывающих на тот же IP (не всегда, только если PTR корректно настроен).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;8ErV&quot;&gt;&lt;strong&gt;Этап 5: DNS-трассировка (поиск всех поддоменов)&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;pLVu&quot;&gt;Базовые DNS-запросы не дают список поддоменов. Для их поиска используются другие методы (подробнее в статье 3). Но базово:&lt;/p&gt;
  &lt;ul id=&quot;DptH&quot;&gt;
    &lt;li id=&quot;XgYA&quot;&gt;&lt;strong&gt;NS записи&lt;/strong&gt; → указывают на DNS-серверы, но не перечисляют поддомены.&lt;/li&gt;
    &lt;li id=&quot;Lubw&quot;&gt;&lt;strong&gt;Зонная передача (AXFR)&lt;/strong&gt; — редкий случай, когда DNS-сервер разрешает выгрузку всей зоны. Проверить:bashdig @ns.example.com example.com AXFR&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;Ezul&quot;&gt;&lt;strong&gt;Этап 6: DNS-записи и безопасность (SPF, DKIM, DMARC)&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;FoSt&quot;&gt;TXT записи часто содержат политики безопасности почты.&lt;/p&gt;
  &lt;p id=&quot;brt3&quot;&gt;&lt;strong&gt;SPF (Sender Policy Framework):&lt;/strong&gt; перечисляет IP, которые могут отправлять почту от имени домена.&lt;/p&gt;
  &lt;pre id=&quot;94mt&quot;&gt;dig example.com TXT | grep &amp;quot;v=spf1&amp;quot;&lt;/pre&gt;
  &lt;p id=&quot;wbTs&quot;&gt;Пример: &lt;code&gt;v=spf1 include:_spf.google.com ~all&lt;/code&gt; → используется Google Workspace.&lt;/p&gt;
  &lt;p id=&quot;QeFO&quot;&gt;&lt;strong&gt;DKIM (DomainKeys Identified Mail):&lt;/strong&gt; цифровая подпись писем.&lt;/p&gt;
  &lt;pre id=&quot;ULXv&quot;&gt;dig selector._domainkey.example.com TXT&lt;/pre&gt;
  &lt;p id=&quot;uck4&quot;&gt;&lt;strong&gt;DMARC (Domain-based Message Authentication, Reporting &amp;amp; Conformance):&lt;/strong&gt; указывает, что делать с письмами, не прошедшими SPF/DKIM.&lt;/p&gt;
  &lt;pre id=&quot;RoV3&quot;&gt;dig _dmarc.example.com TXT&lt;/pre&gt;
  &lt;p id=&quot;JsLR&quot;&gt;&lt;strong&gt;Ценность для OSINT:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;Pnh6&quot;&gt;
    &lt;li id=&quot;IuWI&quot;&gt;Определение используемых почтовых провайдеров (Google, Microsoft, Яндекс, &lt;a href=&quot;https://mail.ru/&quot; target=&quot;_blank&quot;&gt;Mail.ru&lt;/a&gt;).&lt;/li&gt;
    &lt;li id=&quot;no6r&quot;&gt;Выявление устаревших или неправильных конфигураций.&lt;/li&gt;
    &lt;li id=&quot;OPKS&quot;&gt;Возможный email для отчетов (в DMARC).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;pcMZ&quot;&gt;&lt;strong&gt;Этап 7: DNS-серверы и CDN&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;Yxto&quot;&gt;CNAME записи часто указывают на CDN (Cloudflare, Akamai, Amazon CloudFront). Это маскирует реальный IP-адрес сервера.&lt;/p&gt;
  &lt;p id=&quot;8G5J&quot;&gt;&lt;strong&gt;Как определить CDN:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;6KxJ&quot;&gt;
    &lt;li id=&quot;q0Pp&quot;&gt;A запись ведет на IP, принадлежащий CDN (проверить WHOIS).&lt;/li&gt;
    &lt;li id=&quot;JM7b&quot;&gt;CNAME на &lt;code&gt;xxx.cloudfront.net&lt;/code&gt;, &lt;code&gt;xxx.cdn.cloudflare.net&lt;/code&gt; и т.д.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;TIaw&quot;&gt;&lt;strong&gt;Этап 8: Анализ DNS без командной строки — онлайн-сервисы&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;of4d&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/a9/9f/a99f49c8-e81b-4a8b-80a9-5033fa11a051.png&quot; width=&quot;946&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;pWmI&quot;&gt;&lt;strong&gt;Практический пример: разведка по домену&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;Bvyb&quot;&gt;&lt;em&gt;Задача:&lt;/em&gt; собрать информацию о домене &lt;code&gt;target.org&lt;/code&gt;.&lt;/p&gt;
  &lt;ol id=&quot;cPes&quot;&gt;
    &lt;li id=&quot;X2kI&quot;&gt;&lt;strong&gt;WHOIS&lt;/strong&gt; → регистратор Namecheap, дата создания 2010-05-01, дата окончания 2026-05-01, DNS-серверы &lt;code&gt;ns1.namecheap.com&lt;/code&gt;, контакты скрыты.&lt;/li&gt;
    &lt;li id=&quot;W30y&quot;&gt;&lt;strong&gt;DNS-записи (dig)&lt;/strong&gt;:&lt;/li&gt;
    &lt;ul id=&quot;QSZd&quot;&gt;
      &lt;li id=&quot;qSOo&quot;&gt;&lt;code&gt;A&lt;/code&gt; → &lt;code&gt;192.0.2.10&lt;/code&gt;&lt;/li&gt;
      &lt;li id=&quot;8NZT&quot;&gt;&lt;code&gt;MX&lt;/code&gt; → &lt;code&gt;mail.target.org&lt;/code&gt; (приоритет 10)&lt;/li&gt;
      &lt;li id=&quot;MqnM&quot;&gt;&lt;code&gt;TXT&lt;/code&gt; → &lt;code&gt;v=spf1 a mx include:spf.protection.outlook.com -all&lt;/code&gt; (использует Office 365)&lt;/li&gt;
      &lt;li id=&quot;ElRJ&quot;&gt;&lt;code&gt;NS&lt;/code&gt; → &lt;code&gt;ns1.namecheap.com&lt;/code&gt;, &lt;code&gt;ns2.namecheap.com&lt;/code&gt;&lt;/li&gt;
      &lt;li id=&quot;iMJ8&quot;&gt;&lt;code&gt;CNAME&lt;/code&gt; (www) → &lt;code&gt;target.org&lt;/code&gt; (тот же IP)&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;XOQz&quot;&gt;&lt;strong&gt;Reverse DNS для IP 192.0.2.10&lt;/strong&gt; → &lt;code&gt;web.target.org&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;oaZh&quot;&gt;&lt;strong&gt;SPF-анализ&lt;/strong&gt; → используются серверы Office 365. Предположительно, целевая организация использует Microsoft 365.&lt;/li&gt;
    &lt;li id=&quot;in7E&quot;&gt;&lt;strong&gt;История DNS (SecurityTrails)&lt;/strong&gt;:&lt;/li&gt;
    &lt;ul id=&quot;Dlew&quot;&gt;
      &lt;li id=&quot;hxIV&quot;&gt;2 года назад A-запись была &lt;code&gt;203.0.113.55&lt;/code&gt; (другой хостинг).&lt;/li&gt;
      &lt;li id=&quot;QvY5&quot;&gt;Был поддомен &lt;code&gt;dev.target.org&lt;/code&gt;, сейчас не разрешается.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;ZIs5&quot;&gt;&lt;strong&gt;DNSdumpster&lt;/strong&gt; → находит дополнительные поддомены: &lt;code&gt;mail.target.org&lt;/code&gt;, &lt;code&gt;remote.target.org&lt;/code&gt;, &lt;code&gt;vpn.target.org&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;zhkO&quot;&gt;&lt;strong&gt;Вывод&lt;/strong&gt;: инфраструктура включает веб-сервер на &lt;code&gt;192.0.2.10&lt;/code&gt;, почту на Office 365, VPN-поддомен. Ранее использовался другой хостинг.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;PMWO&quot;&gt;&lt;strong&gt;Инструменты для автоматизации DNS-запросов (Python)&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;svvl&quot;&gt;import dns.resolver

def query_dns(domain, record_type):
    try:
        answers = dns.resolver.resolve(domain, record_type)
        return [str(r) for r in answers]
    except Exception as e:
        return None

domain = &amp;quot;example.com&amp;quot;
for rtype in [&amp;quot;A&amp;quot;, &amp;quot;MX&amp;quot;, &amp;quot;TXT&amp;quot;, &amp;quot;NS&amp;quot;]:
    records = query_dns(domain, rtype)
    print(f&amp;quot;{rtype}: {records}&amp;quot;)&lt;/pre&gt;
  &lt;p id=&quot;FqGE&quot;&gt;&lt;strong&gt;ограничения&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;GeeS&quot;&gt;
    &lt;li id=&quot;riKQ&quot;&gt;DNS-запросы — это публичные данные. Их сбор не является активным сканированием и обычно разрешен.&lt;/li&gt;
    &lt;li id=&quot;YN6e&quot;&gt;Однако массовые запросы к DNS-серверу могут быть расценены как атака (DDoS). Используйте задержки, авторитетные публичные резолверы.&lt;/li&gt;
    &lt;li id=&quot;xwv5&quot;&gt;Некоторые сервисы (SecurityTrails) имеют условия использования, запрещающие автоматизированный массовый сбор без подписки.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;7vJj&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;7cFZ&quot;&gt;DNS-разведка — фундамент технического OSINT. WHOIS дает информацию о владельце и датах, dig/nslookup — текущие записи. История DNS и reverse DNS расширяют картину прошлых конфигураций. SPF/DKIM/DMARC раскрывают используемые почтовые сервисы. Владение этими методами позволяет бесконтактно составить детальную карту инфраструктуры домена.&lt;/p&gt;
  &lt;p id=&quot;maKE&quot;&gt;В следующей статье цикла мы рассмотрим более сложный этап — &lt;strong&gt;поиск поддоменов&lt;/strong&gt;, включая инструменты Amass, Sublist3r, crt.sh и техники перебора.&lt;/p&gt;

</content></entry></feed>