ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   PHP (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Автоматизация OSINT через Censys API: Практическое руководство с готовыми скриптами (https://forum.antichat.xyz/showthread.php?t=585879)

qwerty120 30.06.2025 15:17

https://forum.antichat.xyz/attachmen...1306847070.png

Как я нашел 47 забытых staging-серверов крупной компании за 3 минуты
ВАЖНО: Этот кейс приводится исключительно в образовательных целях. Все действия были выполнены в рамках официального контракта на пентест с письменным разрешением владельца. Несанкционированное сканирование чужой инфраструктуры является незаконным (ст. 272 УК РФ).

Представьте: пятничный вечер, заказчик просит проверить периметр перед выходными. Открываю Censys, ввожу специально подготовленный запрос — и через 3 минуты смотрю на список из 47 staging-серверов с дефолтными кредами. Половина с phpMyAdmin, четверть с открытым Elasticsearch. Общий объем утекших данных — 2.3TB.

Python:


Код:

# Обфусцированный пример запроса (НЕ используйте без разрешения!)
# Реальный запрос изменен для предотвращения злоупотребления
query
=
'parsed.names:/.*[REDACTED-PATTERN].*\.[TARGET-DOMAIN]/ AND services.port:[REDACTED]'
# Логика: поиск поддоменов с определенным паттерном + открытые сервисы
# ВСЕГДА получайте письменное разрешение перед тестированием!

Это не единичный случай. Censys находит то, что пропускают традиционные сканеры. И сегодня я покажу, как выжать из него максимум для профессиональной OSINT-разведки.
Цитата:


Важно: Эта статья — углубленное практическое дополнение к полному руководству по OSINT 2025, где разобрана вся экосистема инструментов разведки, включая интеграцию с AI, правовые аспекты и roadmap для специалистов. Если вы новичок в OSINT, рекомендую начать именно с него.

Содержание
  1. Архитектура Censys и техническое превосходство
  2. Продвинутая работа с API v2
  3. Построение экспертных запросов
  4. Автоматизация и интеграции
  5. Реальные кейсы из практики
  6. Bug Bounty и Red Team
  7. FAQ и решение проблем
  8. Инструменты и ресурсы
Архитектура Censys: Почему он находит то, что пропускают другие
Техническое превосходство над конкурентами
Главное отличие Censys — это не просто сканер портов, а система глубокого анализа с машинным обучением для attack surface management и asset discovery. В то время как Shodan делает простой banner grabbing, Censys выполняет полный TLS handshake, парсит сертификаты через Certificate Transparency logs и строит граф связей между хостами для эффективного subdomain enumeration. Эта технология vulnerability assessment позволяет выявлять даже скрытые элементы digital footprint организаций.

ПараметрCensysShodanFofaZoomEyeПочем это важноСкорость обновления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/годБесплатно*Оптимальное соотношение

*ZoomEye бесплатен, но данные часто устаревшие
Уникальные возможности для корпоративной разведки
Censys хранит не просто снимки, а полную историю изменений каждого хоста. Это позволяет увидеть:
  1. Временные уязвимости — сервисы, которые были открыты на несколько часов
  2. Миграции инфраструктуры — куда переехали сервера компании
  3. Shadow IT — неучтенные облачные ресурсы на корпоративных сертификатах
  4. Утечки через сертификаты — внутренние имена в 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

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
Комбинирование операторов для хирургически точного поиска

Цитата:


ПРЕДУПРЕЖДЕНИЕ О ЛЕГАЛЬНОСТИ:Следующие запросы предназначены исключительно для тестирования СОБСТВЕННОЙ инфраструктуры или в рамках официальных bug bounty программ. Несанкционированное сканирование является преступлением!

Censys поддерживает булеву логику, regex, range-запросы и wildcards. Вот продвинутые комбинации:

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-пайплайнах

https://forum.antichat.xyz/attachmen...2198558742.png

Правильная автоматизация OSINT — это не просто сбор данных, а построение полноценного pipeline с обратной связью для continuous asset discovery и threat intelligence.
Интеграция с Maltego без написания кода
Maltego Transform для Censys позволяет визуализировать связи между хостами. Настройка за 5 минут:
  1. Установите Censys Transform из Transform Hub
  2. Введите API ключи в настройках
  3. Используйте transforms:
    • Код:

      To Censys IP [Search]
      — поиск IP по домену
    • Код:

      To Certificates [Censys]
      — все сертификаты хоста
    • Код:

      To Domains [From Certificate]
      — домены из сертификата
Типичный workflow: Domain → IP addresses → Certificates → Related Domains → New IPs
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 хостов с открытыми базами данных
Ущерб предотвращен: ~500K USD (потенциальные штрафы за утечку персональных данных по 152-ФЗ)
Кейс 2: Bug Bounty автоматизация для российской программы

Цитата:


ВАЖНО:Всегда действуйте строго в рамках scope программы и её правил!

Задача: Автоматизировать поиск целей в рамках одной из крупных российских bug bounty программ.
Решение:

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 критические уязвимости найдены в первые 2 часа после запуска скрипта. Общий bounty: $4,500.
Кейс 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+ внутренних сервисов.
Причины неудачи:
  1. Банк использовал закрытую CDN с IP-whitelist
  2. Все сертификаты выпускались внутренним CA
  3. Reverse DNS был отключен на всех хостах
  4. 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 — мощный инструмент, но не серебряная пуля. Всегда имейте запасной план и комбинируйте источники. В данном случае GitHub dorking дал 80% результатов.
Censys для Bug Bounty и Red Team операций
КРИТИЧЕСКИ ВАЖНОЕ ПРЕДУПРЕЖДЕНИЕ:
Все техники в этом разделе предназначены ИСКЛЮЧИТЕЛЬНО для:
  • Тестирования собственной инфраструктуры
  • Официальных bug bounty программ (в рамках scope)
  • Контрактных пентестов с письменным разрешением
ЗАПРЕЩЕНО: Сканирование без разрешения является уголовным преступлением (ст. 272 УК РФ — до 5 лет лишения свободы). Мы не несем ответственности за незаконное использование этой информации.
Автоматизация 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

2. Зеркала и кеш-сервисы:
Используйте публичные зеркала данных 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 УК РФ)
Рекомендации:
  1. Всегда получайте письменное разрешение перед тестированием
  2. Используйте только для защиты, не для атаки
  3. Документируйте все действия
  4. При нахождении критических уязвимостей — сообщайте владельцу
Инструменты и ресурсы для работы с Censys
Где писать и тестировать код
Рекомендуемый стек разработки:

1. VS Code
с расширениями:
  • Python (Microsoft)
  • REST Client - для тестирования API
  • Thunder Client - визуальный API-клиент
2. Jupyter Notebook для интерактивной разработки:

Bash:


Код:

pip
install
notebook censys pandas matplotlib
jupyter notebook

3. Postman для тестирования API запросов:
  • Импортируйте коллекцию: https://www.getpostman.com/collections/censys-api-v2
  • Добавьте переменные окружения с API ключами
Готовые библиотеки и фреймворки

БиблиотекаЯзыкОписаниеУст ановкаcensys-pythonPythonОфициальная библиотека
Код:

pip install censys
censys-goGoВысокая производительность
Код:

go get github.com/censys/censys-go
pycensysPythonАльтернативная реализация
Код:

pip install pycensys
censys-rubyRubyДля Metasploit интеграции
Код:

gem install censys
node-censysJSДля веб-приложений
Код:

npm install censys
Полезные ресурсы и документация
  • Официальная документация API - полное описание endpoints
  • Примеры запросов - готовые скрипты
  • Censys Search Query Language - синтаксис запросов
  • Rate Limits калькулятор - рассчитайте необходимый тариф
Заключение: Ваш путь к мастерству Censys
Censys — это не просто поисковик, это микроскоп для изучения интернета. Правильное использование его возможностей отличает профессионала от любителя в OSINT-разведке.
Ключевые выводы:
  1. Начните с автоматизации — ручной поиск неэффективен
  2. Используйте историю — это уникальное преимущество Censys
  3. Комбинируйте данные — сертификаты + DNS + сервисы = полная картина
  4. Экономьте квоту — кешируйте, агрегируйте, оптимизируйте
  5. Думайте как атакующий — ищите то, что забыли защитить
Следующие шаги:
  • Настройте мониторинг своей инфраструктуры
  • Автоматизируйте рутинные проверки
  • Интегрируйте с существующими инструментами
  • Поделитесь находками с сообществом
Помните: сила не в инструменте, а в умении им пользоваться. Censys в руках профессионала — это рентген для любой инфраструктуры. Используйте эти знания ответственно и только в легальных целях.
Цитата:


Защита от разведки:Если вы администратор и хотите защитить свою инфраструктуру от подобного анализа, обязательно изучите практическое руководство по защите от OSINT-разведки.

Поделитесь опытом!
Нашли интересные техники работы с Censys? Столкнулись с нестандартными кейсами? Поделитесь в комментариях — давайте вместе развивать экспертизу русскоязычного OSINT-сообщества.
Больше продвинутых техник и эксклюзивных материалов — в нашем Telegram-канале по кибербезопасности.

Актуально на ноябрь 2025. API v2.0. При изменении API проверяйте документацию.


Время: 03:13