Как я нашел 47 забытых staging-серверов крупной компании за 3 минуты
Представьте: пятничный вечер, заказчик просит проверить периметр перед выходными. Открываю Censys, ввожу специально подготовленный запрос — и через 3 минуты смотрю на список из 47 staging-серверов с дефолтными кредами. Половина с phpMyAdmin, четверть с открытым Elasticsearch. Общий объем утекших данных — 2.3TB.
		Python:
	
	# Обфусцированный пример запроса (НЕ используйте без разрешения!)
# Реальный запрос изменен для предотвращения злоупотребления
query = 'parsed.names:/.*[REDACTED-PATTERN].*\.[TARGET-DOMAIN]/ AND services.port:[REDACTED]'
# Логика: поиск поддоменов с определенным паттерном + открытые сервисы
# ВСЕГДА получайте письменное разрешение перед тестированием!
	Важно: Эта статья — углубленное практическое дополнение к полному руководству по OSINT 2025, где разобрана вся экосистема инструментов разведки, включая интеграцию с AI, правовые аспекты и roadmap для специалистов. Если вы новичок в OSINT, рекомендую начать именно с него.
Содержание
- Архитектура Censys и техническое превосходство
 - Продвинутая работа с API v2
 - Построение экспертных запросов
 - Автоматизация и интеграции
 - Реальные кейсы из практики
 - Bug Bounty и Red Team
 - FAQ и решение проблем
 - Инструменты и ресурсы
 
Архитектура Censys: Почему он находит то, что пропускают другие
Техническое превосходство над конкурентами
Главное отличие Censys — это не просто сканер портов, а система глубокого анализа с машинным обучением для attack surface management и asset discovery. В то время как Shodan делает простой banner grabbing, Censys выполняет полный TLS handshake, парсит сертификаты через Certificate Transparency logs и строит граф связей между хостами для эффективного subdomain enumeration. Эта технология vulnerability assessment позволяет выявлять даже скрытые элементы digital footprint организаций.| Параметр | Censys | Shodan | Fofa | ZoomEye | Почему это важно | 
|---|---|---|---|---|---|
| Скорость обновления | 24-48ч | 7-14 дней | 3-5 дней | 7-10 дней | Находите изменения первыми | 
| Исторические данные | 5+ лет полная история | 30 дней | Нет | 90 дней | Отслеживание эволюции инфраструктуры | 
| SSL/TLS анализ | Полная цепочка + CT logs | Базовый | Средний | Базовый | Поиск по всем доменам в сертификате | 
| API лимиты (free) | 250 запросов/месяц | 100/месяц | 100/месяц | 10000/месяц | Достаточно для разведки | 
| Regex в запросах | Полная поддержка | Частичная | Нет | Нет | Гибкий поиск по паттернам | 
| Точность данных | 99.2% | 94.1% | 92.3% | 89.7% | Меньше ложных срабатываний | 
| Цена Pro | $99/месяц | $89/месяц | $200/год | Бесплатно* | Оптимальное соотношение | 
Уникальные возможности для корпоративной разведки
Censys хранит не просто снимки, а полную историю изменений каждого хоста. Это позволяет увидеть:- Временные уязвимости — сервисы, которые были открыты на несколько часов
 - Миграции инфраструктуры — куда переехали сервера компании
 - Shadow IT — неучтенные облачные ресурсы на корпоративных сертификатах
 - Утечки через сертификаты — внутренние имена в Subject Alternative Names
 
Продвинутая работа с Censys API v2
Архитектура и оптимальные паттерны запросов
API v2 Censys построен на принципах REST и использует курсорную пагинацию. Ключевое отличие от v1 — асинхронная обработка и возможность подписки на изменения через webhooks.
		Python:
	
	# Оптимальная структура запроса с обработкой ошибок
import censys.search
from time import sleep
from typing import List, Dict
def smart_censys_search(query: str, max_results: int = 100) -> List[Dict]:
    """
    Умный поиск с обработкой rate limits и retry logic
    Используется экспоненциальный backoff при 429 ошибке
    Автоматически переключается на агрегацию при >1000 результатов
    """
    c = censys.search.CensysHosts()
    results = []
    try:
        # Сначала проверяем количество результатов
        count = c.search(query, per_page=1, pages=1)
        total = count.total
        if total > 1000:
            # Переключаемся на агрегацию для больших выборок
            return c.aggregate(query, field="ip", num_buckets=max_results)
        # Обычный поиск для небольших выборок
        for page in c.search(query, per_page=100, pages=(max_results//100)+1):
            results.extend(page)
            sleep(0.5)  # Избегаем rate limiting
    except censys.base.CensysRateLimitExceededException:
        sleep(60)  # Ждем минуту и повторяем
        return smart_censys_search(query, max_results)
    return results[:max_results]
	Обход лимитов и оптимизация квот
На бесплатном аккаунте у вас 250 запросов в месяц. Вот как использовать их максимально эффективно:
		Python:
	
	# Техника 1: Используйте агрегации вместо полного поиска
# Плохо - тратит много запросов:
results = c.search("services.port:3389", pages=10)  # 10 запросов
# Хорошо - один запрос:
stats = c.aggregate("services.port:3389",
                    field="location.country",
                    num_buckets=50)  # 1 запрос, статистика по 50 странам
# Техника 2: Кешируйте результаты локально
import pickle
from datetime import datetime, timedelta
def cached_search(query: str, cache_hours: int = 24):
    cache_file = f"cache_{hash(query)}.pkl"
    try:
        with open(cache_file, 'rb') as f:
            cached_data, timestamp = pickle.load(f)
            if datetime.now() - timestamp < timedelta(hours=cache_hours):
                return cached_data
    except FileNotFoundError:
        pass
    # Выполняем реальный запрос
    results = smart_censys_search(query)
    # Сохраняем в кеш
    with open(cache_file, 'wb') as f:
        pickle.dump((results, datetime.now()), f)
    return results
	Bulk-операции и пакетная обработка
Для массовой проверки IP-адресов используйте bulk API endpoint:
		Python:
	
	# Проверка списка IP одним запросом
def bulk_ip_lookup(ip_list: List[str]) -> Dict:
    """
    Получение информации о множестве IP одним запросом
    Экономит до 90% квоты при массовых проверках
    """
    c = censys.search.CensysHosts()
    # Формируем запрос для всех IP
    query_parts = [f"ip:{ip}" for ip in ip_list[:50]]  # Max 50 per request
    query = " OR ".join(query_parts)
    # Получаем все данные одним запросом
    results = {}
    for host in c.search(query, per_page=50, pages=1):
        results[host['ip']] = {
            'services': host.get('services', []),
            'location': host.get('location', {}),
            'autonomous_system': host.get('autonomous_system', {})
        }
    return results
	Построение поисковых запросов уровня Expert
Комбинирование операторов для хирургически точного поиска
Censys поддерживает булеву логику, regex, range-запросы и wildcards. Вот продвинутые комбинации:ПРЕДУПРЕЖДЕНИЕ О ЛЕГАЛЬНОСТИ: Следующие запросы предназначены исключительно для тестирования СОБСТВЕННОЙ инфраструктуры или в рамках официальных bug bounty программ. Несанкционированное сканирование является преступлением!
		SQL:
	
	-- Поиск уязвимых Exchange серверов с конкретными версиями
services.http.response.headers.x_owa_version:/15\.1\.2[0-2]/
AND services.tls.certificates.parsed.subject.organization:"Target Corp"
AND NOT tags:"honeypot"
-- Находим забытые Kubernetes dashboards
services.port:30000
AND services.http.response.body:"kubernetes-dashboard"
AND services.http.response.status_code:200
AND NOT services.http.response.headers.authorization:*
-- Shadow IT в облаках: AWS инстансы вне корпоративного контроля
ip:["52.0.0.0" TO "52.255.255.255"]  -- AWS IP range
AND services.tls.certificates.parsed.subject.organization:"Your Company"
AND NOT dns.reverse_dns.names:"*.yourcompany.com"
	Regex-магия: находим то, что другие пропускают
Regex в Censys — это мощнейший инструмент для поиска по паттернам:
		Python:
	
	# Поиск всех поддоменов с датами в названии (часто тестовые)
pattern = r'.*\d{4}[-_]?\d{2}[-_]?\d{2}.*\.example\.com'
query = f'dns_names:/{pattern}/'  # Новый синтаксис с октября 2025
# Находим сервера с версиями в баннерах
version_leak = r'services.banner:/.*[vV]ersion[:\s]+\d+\.\d+\.\d+.*/'
# Поиск API endpoints с предсказуемыми паттернами
api_pattern = r'services.http.response.body:/.*"api_key"[:\s]*"[A-Za-z0-9]{32}".*/'
	Кросс-референсы через сертификаты и DNS
Самая недооцененная фича Censys — поиск связей через SSL-сертификаты:
		Python:
	
	def find_related_infrastructure(domain: str) -> Dict:
    """
    Раскручиваем всю инфраструктуру компании через сертификаты
    """
    c = censys.search.CensysCertificates()
    related = {'domains': set(), 'ips': set(), 'organizations': set()}
    # Шаг 1: Находим все сертификаты для домена
    for cert in c.search(f"parsed.names:{domain}"):
        # Извлекаем все домены из сертификата
        for name in cert.get('parsed.names', []):
            related['domains'].add(name)
        # Находим организацию
        org = cert.get('parsed.subject.organization', [])
        if org:
            related['organizations'].update(org)
    # Шаг 2: Ищем хосты с этими сертификатами
    for domain in list(related['domains'])[:10]:  # Ограничиваем для экономии
        hosts = CensysHosts().search(f"services.tls.certificates.parsed.names:{domain}")
        for host in hosts:
            related['ips'].add(host['ip'])
    return related
	Автоматизация Censys в OSINT-пайплайнах
Правильная автоматизация OSINT — это не просто сбор данных, а построение полноценного pipeline с обратной связью для continuous asset discovery и threat intelligence.
Интеграция с Maltego без написания кода
Maltego Transform для Censys позволяет визуализировать связи между хостами. Настройка за 5 минут:- Установите Censys Transform из Transform Hub
 - Введите API ключи в настройках
 - Используйте transforms:
To Censys IP [Search]— поиск IP по доменуTo Certificates [Censys]— все сертификаты хостаTo Domains [From Certificate]— домены из сертификата
 
SpiderFoot: автоматическая разведка с Censys
SpiderFoot модульsfp_censys автоматизирует сбор данных. Подробное руководство по настройке всей платформы смотрите в полном гайде по SpiderFoot для автоматизированной разведки. Вот оптимальная конфигурация именно для Censys:
		YAML:
	
	# spiderfoot.cfg - оптимальные настройки для Censys
modules:
  sfp_censys:
    enabled: true
    opts:
      censys_api_key_uid: "YOUR_API_ID"
      censys_api_key_secret: "YOUR_SECRET"
      max_pages: 2  # Экономим квоту
      delay: 2  # Задержка между запросами
      search_hosts: true
      search_certs: true
      search_ipv4: true
	Построение автоматических мониторингов
Настройте cron для регулярной проверки изменений:
		Bash:
	
	#!/bin/bash
# censys_monitor.sh - Ежедневный мониторинг критической инфраструктуры
TARGETS="company.com competitor.com"
WEBHOOK="https://hooks.slack.com/services/YOUR/WEBHOOK/URL"
for target in $TARGETS; do
    # Получаем текущее состояние
    python3 -c "
import censys.search
import json
import requests
c = censys.search.CensysHosts()
current = []
for host in c.search('dns.names:$target'):
    current.append({
        'ip': host['ip'],
        'services': len(host.get('services', [])),
        'ports': [s['port'] for s in host.get('services', [])]
    })
# Сравниваем с предыдущим состоянием
try:
    with open('state_$target.json', 'r') as f:
        previous = json.load(f)
    # Находим изменения
    new_ips = set([h['ip'] for h in current]) - set([h['ip'] for h in previous])
    if new_ips:
        # Отправляем алерт в Slack
        requests.post('$WEBHOOK', json={
            'text': f'New IPs found for {target}: {new_ips}'
        })
except FileNotFoundError:
    pass
# Сохраняем текущее состояние
with open('state_$target.json', 'w') as f:
    json.dump(current, f)
"
done
	Продвинутые кейсы использования: Реальные истории успеха
Контекст: Эти кейсы взяты из практики корпоративного OSINT. Больше примеров и методологий для Red/Blue Team смотрите в полном гайде по корпоративному OSINT.
Кейс 1: Выявление теневой IT-инфраструктуры международной корпорации
Контекст: Крупная российская компания из топ-50 (название под NDA) подозревала, что сотрудники создают неучтенные облачные ресурсы.Метод поиска:
		Python:
	
	# ⚠️ LEGAL WARNING: Используйте только с письменного разрешения владельца!
# Ищем все хосты с сертификатами организации вне корпоративных AS
org_name = "[COMPANY NAME REDACTED]"
corp_asn = "AS[REDACTED]"
query = f'''
services.tls.certificates.parsed.subject.organization:"{org_name}"
AND NOT autonomous_system.asn:{corp_asn}
AND NOT dns.reverse_dns.names:"*.[DOMAIN-REDACTED]"
'''
	- Найдено 73 неучтенных хоста
 - 31 AWS EC2 инстанс с корпоративными данными
 - 15 Digital Ocean дроплетов с dev-версиями продуктов
 - 27 хостов с открытыми базами данных
 
Кейс 2: Bug Bounty автоматизация для российской программы
Задача: Автоматизировать поиск целей в рамках одной из крупных российских bug bounty программ.ВАЖНО: Всегда действуйте строго в рамках scope программы и её правил!
Решение:
		Python:
	
	def standoff_recon():
    """
    Автоматический сбор всех активов для bug bounty программы
    Сокращает время разведки с 8 часов до 15 минут
    """
    targets = []
    # Основные домены из scope
    in_scope = ["*.target1.ru", "*.target2.com", "api.target3.io"]
    for domain in in_scope:
        # Убираем wildcard для поиска
        clean_domain = domain.replace("*.", "")
        # Ищем все поддомены через сертификаты
        cert_query = f"parsed.names:/{clean_domain}/"
        for cert in CensysCertificates().search(cert_query):
            for name in cert.get('parsed.names', []):
                if clean_domain in name:
                    # Проверяем, жив ли хост
                    host_query = f"dns.names:{name}"
                    hosts = list(CensysHosts().search(host_query, pages=1))
                    if hosts:
                        targets.append({
                            'domain': name,
                            'ips': [h['ip'] for h in hosts],
                            'services': sum([len(h.get('services', [])) for h in hosts])
                        })
    # Приоритизация по количеству сервисов
    targets.sort(key=lambda x: x['services'], reverse=True)
    return targets
	Кейс 3: Tracking APT-инфраструктуры через уникальные сертификаты
Контекст: Отслеживание инфраструктуры APT-группы по уникальным характеристикам SSL-сертификатов.Индикаторы:
		Python:
	
	# APT использовала специфичные самоподписанные сертификаты
apt_pattern = {
    'issuer': 'CN=localhost.localdomain',
    'validity_days': 3650,  # Ровно 10 лет
    'key_length': 4096,
    'san_count': 0  # Без Subject Alternative Names
}
# Поиск похожих сертификатов
query = '''
parsed.issuer.common_name:"localhost.localdomain"
AND parsed.validity.days:3650
AND parsed.subject_key_info.key_algorithm.parameters.bits:4096
AND NOT parsed.extensions.subject_alt_name.dns_names:*
'''
	- 17 новых C2-серверов группы
 - 5 staging-серверов для подготовки атак
 - Паттерн ротации инфраструктуры (каждые 3 недели)
 
Кейс 4: Когда Censys не помог — важный урок
Контекст: Попытка найти скрытые API endpoints крупного банка в рамках официального пентеста.Проблема: Censys показал только 3 публичных домена, хотя мы знали о существовании 50+ внутренних сервисов.
Причины неудачи:
- Банк использовал закрытую CDN с IP-whitelist
 - Все сертификаты выпускались внутренним CA
 - Reverse DNS был отключен на всех хостах
 - WAF блокировал сканеры по User-Agent
 
		Python:
	
	# Комбинированный подход когда Censys не дает результатов
def advanced_recon_when_censys_fails(domain):
    results = {
        'censys': [],  # Пусто
        'alternative_sources': []
    }
    # План Б: Certificate Transparency Logs напрямую
    # crt.sh API часто находит то, что пропускает Censys
    ct_logs = query_crtsh(domain)
    # План В: Пассивный DNS
    # SecurityTrails, PassiveTotal для исторических записей
    passive_dns = query_passive_dns(domain)
    # План Г: GitHub dorking
    # Ищем упоминания внутренних endpoints в коде
    github_leaks = search_github(f'"{domain}" api endpoint')
    # План Д: Wayback Machine
    # Исторические снимки могут содержать старые поддомены
    archived = check_wayback(domain)
    return combine_sources([ct_logs, passive_dns, github_leaks, archived])
	Censys для Bug Bounty и Red Team операций
Все техники в этом разделе предназначены ИСКЛЮЧИТЕЛЬНО для:
- Тестирования собственной инфраструктуры
 - Официальных bug bounty программ (в рамках scope)
 - Контрактных пентестов с письменным разрешением
 
Автоматизация reconnaissance фазы
Первый этап любого пентеста — разведка. Вот скрипт, который сокращает её с дней до минут:
		Python:
	
	def full_recon_automation(target_domain: str) -> Dict:
    """
    Полная автоматизация разведки для пентеста
    Находит: поддомены, технологии, версии, потенциальные уязвимости
    """
    report = {
        'subdomains': set(),
        'technologies': {},
        'potential_vulns': [],
        'interesting_files': [],
        'api_endpoints': []
    }
    c = censys.search.CensysHosts()
    # Этап 1: Сбор всех поддоменов
    for host in c.search(f"dns.names:*.{target_domain}"):
        for name in host.get('dns', {}).get('names', []):
            report['subdomains'].add(name)
        # Анализируем сервисы
        for service in host.get('services', []):
            # Определяем технологии
            if 'http' in service:
                headers = service['http'].get('response', {}).get('headers', {})
                # Извлекаем версии
                if 'server' in headers:
                    tech = headers['server']
                    report['technologies'][tech] = report['technologies'].get(tech, 0) + 1
                    # Проверяем на известные уязвимости
                    if 'Apache/2.4.41' in tech:
                        report['potential_vulns'].append({
                            'host': host['ip'],
                            'vuln': 'CVE-2019-10082',
                            'severity': 'HIGH'
                        })
                # Ищем интересные файлы
                body = service['http'].get('response', {}).get('body', '')
                if 'Index of /' in body:
                    report['interesting_files'].append(f"http://{host['ip']}:{service['port']}")
                if '"api_key"' in body or '"apiKey"' in body:
                    report['api_endpoints'].append(f"http://{host['ip']}:{service['port']}")
    return report
	Поиск забытых staging и development серверов
Dev-сервера — золотая жила для баг-хантеров. Они часто имеют:- Отключенную аутентификацию
 - Debug-режим с полными ошибками
 - Тестовые данные, включая production-дампы
 
		Python:
	
	# Паттерны для поиска dev/staging окружений
dev_patterns = [
    'dns.names:/.*dev[-.].*/',
    'dns.names:/.*staging[-.].*/',
    'dns.names:/.*test[-.].*/',
    'dns.names:/.*uat[-.].*/',
    'dns.names:/.*demo[-.].*/',
    'dns.names:/.*temp[-.].*/',
    'dns.names:/.*tmp[-.].*/',
    'services.http.response.headers.x_powered_by:"PHP/5.*"',  # Старый PHP
    'services.http.response.body:"debug = true"',
    'services.http.response.body:"DEBUG = True"',  # Django debug
]
def find_dev_servers(domain: str) -> List[Dict]:
    """
    Находит забытые dev/staging сервера компании
    """
    vulnerable_servers = []
    for pattern in dev_patterns:
        query = f"{pattern} AND dns.names:*.{domain}"
        for host in CensysHosts().search(query, pages=1):
            # Проверяем на признаки уязвимости
            vuln_score = 0
            reasons = []
            for service in host.get('services', []):
                # Debug режим
                if 'debug' in str(service.get('http', {})).lower():
                    vuln_score += 3
                    reasons.append('Debug mode enabled')
                # Старые версии
                if service.get('software'):
                    for soft in service['software']:
                        if 'PHP/5' in soft.get('product', ''):
                            vuln_score += 2
                            reasons.append(f"Outdated {soft['product']}")
                # Дефолтные креды
                if service.get('port') in [8080, 8081, 8082]:
                    vuln_score += 1
                    reasons.append('Non-standard port (possible test)')
            if vuln_score >= 2:
                vulnerable_servers.append({
                    'ip': host['ip'],
                    'domains': host.get('dns', {}).get('names', []),
                    'risk_score': vuln_score,
                    'reasons': reasons
                })
    return sorted(vulnerable_servers, key=lambda x: x['risk_score'], reverse=True)
	Корреляция с CVE для приоритизации целей
Умная приоритизация целей на основе известных CVE:
		Python:
	
	# База критических CVE 2024-2025
CRITICAL_CVES = {
    'Apache/2.4.41': ['CVE-2019-10082'],
    'nginx/1.16': ['CVE-2019-9511', 'CVE-2019-9513'],
    'OpenSSL/1.0.1': ['CVE-2014-0160'],  # Heartbleed
    'Elasticsearch/7.0': ['CVE-2019-7611'],
    'Jenkins': ['CVE-2024-23897'],  # Recent Jenkins RCE
    'Confluence': ['CVE-2023-22527'],  # Recent Confluence RCE
}
def prioritize_targets_by_cve(hosts: List[Dict]) -> List[Dict]:
    """
    Приоритизация целей по критичности известных CVE
    """
    prioritized = []
    for host in hosts:
        host_vulns = []
        criticality = 0
        for service in host.get('services', []):
            # Проверяем версии софта
            for software in service.get('software', []):
                product = software.get('product', '')
                for vuln_product, cves in CRITICAL_CVES.items():
                    if vuln_product in product:
                        host_vulns.extend(cves)
                        criticality += len(cves) * 10
            # Проверяем специфичные признаки
            if service.get('port') == 445 and 'smb' in service:
                host_vulns.append('SMB_EXPOSED')
                criticality += 5
            if service.get('port') == 3389:
                host_vulns.append('RDP_EXPOSED')
                criticality += 7
        if host_vulns:
            prioritized.append({
                'target': host['ip'],
                'criticality': criticality,
                'vulnerabilities': host_vulns,
                'services': len(host.get('services', [])),
                'priority': 'CRITICAL' if criticality > 15 else 'HIGH' if criticality > 8 else 'MEDIUM'
            })
    return sorted(prioritized, key=lambda x: x['criticality'], reverse=True)
	FAQ: Решение сложных задач с Censys
Как найти все активы компании, включая неочевидные?
		Python:
	
	def find_all_company_assets(company_name: str, domain: str) -> Dict:
    """
    Комплексный поиск всех активов компании
    """
    assets = {
        'direct': [],      # Прямые упоминания
        'certificate': [], # Через сертификаты
        'reverse_dns': [], # Через PTR записи
        'asn': [],        # Через AS организации
        'related': []     # Связанные через общие сертификаты
    }
    # 1. Прямой поиск
    direct_query = f'dns.names:*.{domain}'
    assets['direct'] = [h['ip'] for h in CensysHosts().search(direct_query)]
    # 2. Поиск через сертификаты
    cert_query = f'parsed.subject.organization:"{company_name}"'
    for cert in CensysCertificates().search(cert_query):
        for name in cert.get('parsed.names', []):
            host_search = f'dns.names:{name}'
            for host in CensysHosts().search(host_search, pages=1):
                assets['certificate'].append(host['ip'])
    # 3. Поиск через ASN
    # Сначала находим AS организации
    asn_query = f'autonomous_system.organization:"{company_name}"'
    for host in CensysHosts().search(asn_query, pages=2):
        assets['asn'].append(host['ip'])
    return assets
	Можно ли отслеживать изменения в реальном времени?
Censys не предоставляет real-time API, но можно эмулировать через частые проверки:
		Python:
	
	import hashlib
import json
from datetime import datetime
def track_changes(target: str, check_interval: int = 3600):
    """
    Отслеживание изменений в инфраструктуре
    check_interval - интервал проверки в секундах
    """
    state_file = f"state_{hashlib.md5(target.encode()).hexdigest()}.json"
    # Получаем текущее состояние
    current_state = {}
    for host in CensysHosts().search(f"dns.names:{target}"):
        current_state[host['ip']] = {
            'services': host.get('services', []),
            'last_seen': datetime.now().isoformat()
        }
    # Сравниваем с предыдущим
    try:
        with open(state_file, 'r') as f:
            previous_state = json.load(f)
        # Находим изменения
        changes = {
            'new_hosts': set(current_state.keys()) - set(previous_state.keys()),
            'removed_hosts': set(previous_state.keys()) - set(current_state.keys()),
            'modified_hosts': []
        }
        # Проверяем изменения в сервисах
        for ip in set(current_state.keys()) & set(previous_state.keys()):
            if current_state[ip]['services'] != previous_state[ip]['services']:
                changes['modified_hosts'].append(ip)
        return changes
    except FileNotFoundError:
        # Первый запуск
        with open(state_file, 'w') as f:
            json.dump(current_state, f)
        return None
	Как обойти блокировку Censys в России?
Censys периодически блокируется РКН. Решения:1. VPN/Proxy для API:
		Python:
	
	import requests
from censys.search import CensysHosts
# Настройка прокси
proxies = {
    'http': 'socks5://127.0.0.1:9050',
    'https': 'socks5://127.0.0.1:9050'
}
# Патчим requests в censys
import censys.common.config
censys.common.config.session.proxies = proxies
	Используйте публичные зеркала данных Censys (обновляются реже, но доступны)
3. Альтернативные источники:
Комбинируйте с Fofa (китайский аналог) и ZoomEye для полноты данных
Какие запросы самые эффективные для поиска уязвимостей?
Топ-10 запросов с максимальным ROI:Альтернатива: Многие из этих поисков можно выполнять через Google Dorks. Сравнение методов и практические примеры смотрите в гайде Google Dorks как мощный инструмент OSINT в кибербезопасности.
		SQL:
	
	-- 1. Открытые базы данных
services.port:27017 AND services.service_name:"MongoDB" AND NOT services.mongodb.authentication_required:true
-- 2. Незащищенные админки
services.http.response.body:"Dashboard" AND services.http.response.status_code:200 AND NOT services.http.response.headers.authorization:*
-- 3. Дефолтные установки
services.http.response.html_title:"Welcome to nginx!" OR services.http.response.html_title:"Apache2 Ubuntu Default Page"
-- 4. Утечки через заголовки
services.http.response.headers.x_powered_by:* AND services.http.response.headers.server:*
-- 5. Старые версии с известными CVE
services.software.version:"1.*" OR services.software.version:"2.*"
-- 6. Открытые CI/CD
services.port:8080 AND (services.http.response.body:"Jenkins" OR services.http.response.body:"GitLab")
-- 7. Забытые бэкапы
services.http.response.body:"Index of" AND (dns.names:"backup" OR dns.names:"bak")
-- 8. API без аутентификации
services.http.response.body:"swagger" OR services.http.response.body:'"api":'
-- 9. Debug режимы
services.http.response.body:"debug" AND services.http.response.body:"true"
-- 10. Внутренние сервисы наружу
services.port:8500 OR services.port:2379 OR services.port:6443  -- Consul, etcd, k8s
	Легально ли использовать Censys для разведки?
Юридический аспект в РФ:Легально:
- Просмотр публично доступной информации
 - Анализ своей инфраструктуры
 - OSINT в рамках bug bounty с разрешением
 - Исследования с образовательными целями
 
- Использование найденных уязвимостей без разрешения
 - Подключение к найденным сервисам без авторизации
 - Массовое сканирование российских ресурсов (ст. 272 УК РФ)
 
- Всегда получайте письменное разрешение перед тестированием
 - Используйте только для защиты, не для атаки
 - Документируйте все действия
 - При нахождении критических уязвимостей — сообщайте владельцу
 
Инструменты и ресурсы для работы с Censys
Где писать и тестировать код
Рекомендуемый стек разработки:1. VS Code с расширениями:
- Python (Microsoft)
 - REST Client - для тестирования API
 - Thunder Client - визуальный API-клиент
 
		Bash:
	
	pip install notebook censys pandas matplotlib
jupyter notebook
	- Импортируйте коллекцию: 
	
Ссылка скрыта от гостей
 - Добавьте переменные окружения с API ключами
 
Готовые библиотеки и фреймворки
| Библиотека | Язык | Описание | Установка | 
|---|---|---|---|
| censys-python | Python | Официальная библиотека | pip install censys | 
| censys-go | Go | Высокая производительность | go get github.com/censys/censys-go | 
| pycensys | Python | Альтернативная реализация | pip install pycensys | 
| censys-ruby | Ruby | Для Metasploit интеграции | gem install censys | 
| node-censys | JS | Для веб-приложений | npm install censys | 
Полезные ресурсы и документация
- 
	
Ссылка скрыта от гостей- полное описание endpoints
 - Примеры запросов - готовые скрипты
 - 
	
Ссылка скрыта от гостей- синтаксис запросов
 - 
	
Ссылка скрыта от гостей- рассчитайте необходимый тариф
 
Заключение: Ваш путь к мастерству Censys
Censys — это не просто поисковик, это микроскоп для изучения интернета. Правильное использование его возможностей отличает профессионала от любителя в OSINT-разведке.Ключевые выводы:
- Начните с автоматизации — ручной поиск неэффективен
 - Используйте историю — это уникальное преимущество Censys
 - Комбинируйте данные — сертификаты + DNS + сервисы = полная картина
 - Экономьте квоту — кешируйте, агрегируйте, оптимизируйте
 - Думайте как атакующий — ищите то, что забыли защитить
 
- Настройте мониторинг своей инфраструктуры
 - Автоматизируйте рутинные проверки
 - Интегрируйте с существующими инструментами
 - Поделитесь находками с сообществом
 
Защита от разведки: Если вы администратор и хотите защитить свою инфраструктуру от подобного анализа, обязательно изучите практическое руководство по защите от OSINT-разведки.
Поделитесь опытом!
Нашли интересные техники работы с Censys? Столкнулись с нестандартными кейсами? Поделитесь в комментариях — давайте вместе развивать экспертизу русскоязычного OSINT-сообщества.Больше продвинутых техник и эксклюзивных материалов — в нашем Telegram-канале по кибербезопасности.
Актуально на ноябрь 2025. API v2.0. При изменении API проверяйте документацию.
			
				Последнее редактирование модератором: