Как я нашел 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 проверяйте документацию.
Последнее редактирование модератором: