June 27

Анализ истории сайта: Wayback Machine, изменения контента, скрытые страницы

Анализ истории сайта: Wayback Machine, изменения контента, скрытые страницы

Веб-сайты постоянно меняются: дизайн обновляется, контент редактируется, страницы удаляются, а новые появляются. Однако интернет «помнит» многие из этих изменений благодаря архивам, таким как Wayback Machine. Для специалиста по техническому OSINT анализ истории сайта — это способ заглянуть в прошлое: восстановить удалённые страницы, найти забытые поддомены, обнаружить конфиденциальную информацию, которая была случайно опубликована, а затем удалена, а также проследить эволюцию политики и контента организации. Данная статья посвящена методам работы с веб-архивами, анализу изменений и поиску скрытых страниц.

Зачем анализировать историю сайта?

Основные архивы веба

Этап 1: Поиск истории сайта в Wayback Machine

Прямой доступ к архиву: https://web.archive.org/web/*/https://example.com

Что можно увидеть:

  • Календарь сохранений (синие кружки — даты, когда страница была сохранена).
  • Выбор конкретной даты.
  • Сравнение двух снимков (инструмент "Compare").
  • Доступ к сохранённым изображениям, CSS, JS (частично).

Основные параметры Wayback Machine API:

  • https://archive.org/wayback/available?url=https://example.com — проверка, есть ли архив для URL.
  • https://web.archive.org/cdx/search/cdx?url=example.com&output=json — список всех сохранений в JSON (для массового сбора).

Пример API-запроса (Python):

import requests
import json

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

snapshots = get_wayback_snapshots('example.com')
for s in snapshots[:5]:
    print(s['timestamp'], s['url'])

Этап 2: Поиск удалённых страниц и контента

Один из основных способов использования архива — найти страницы, которые были удалены с сайта, но сохранились в Wayback Machine.

Методика:

  1. Определить URL-шаблоны (например, /blog/, /docs/, /downloads/).
  2. Искать в архиве конкретные URL.
  3. Использовать оператор * для поиска всех сохранённых страниц с определённым префиксом.

Пример поиска всех файлов .pdf в архиве:

https://web.archive.org/web/*/https://example.com/*.pdf

Поиск всех страниц в подкаталоге:

https://web.archive.org/web/*/https://example.com/docs/*

Этап 3: Обнаружение скрытых страниц через архивы

Скрытые страницы — те, на которые нет ссылок с главной, но они могут существовать и быть проиндексированы архивом.

Где искать скрытые страницы:

  • /admin, /login, /backup, /test, /dev, /staging, /old, /temp, /private.
  • Панели управления: /cpanel, /webmail, /plesk, /phpmyadmin.
  • Файлы конфигурации: /config, /settings.
  • Директории с исходными кодами: /git, /svn, /cvs.

Как искать:

  1. Вручную перебирать возможные пути в архиве.
  2. Использовать поиск по * или анализировать список всех сохранённых страниц через CDX API.
  3. Парсить CDX-вывод и искать подозрительные пути.

Пример CDX-запроса для получения всех страниц сайта (включая подпапки):

curl "https://web.archive.org/cdx/search/cdx?url=example.com/*&output=json" > all_pages.json

Этап 4: Сравнение версий (diff) — что изменилось?

Wayback Machine позволяет сравнивать два снимка страницы. Это полезно для выявления изменений в контенте, политике или структуре.

Инструменты сравнения:

  • Веб-интерфейс: https://web.archive.org/web/20200101000000/https://example.com и https://web.archive.org/web/20250101000000/https://example.com → открыть в двух вкладках и сравнить.
  • Сторонние утилиты: wget --mirror для загрузки двух архивных версий и сравнения через diff.

Сравнение через Python:

import requests
import difflib

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

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 '\n'.join(diff)

# Пример
changes = compare_pages('example.com', '20200101000000', '20250101000000')
print(changes[:500])  # первые 500 символов

Этап 5: Поиск старых robots.txt, sitemap.xml и других служебных файлов

robots.txt и sitemap.xml часто меняются. В старых версиях могут содержаться пути, которые позже были удалены.

Пример:

https://web.archive.org/web/*/https://example.com/robots.txt
https://web.archive.org/web/*/https://example.com/sitemap.xml

Что можно найти:

  • Директории, запрещённые для индексации (например, /admin/, /private/).
  • Поддомены, которые не разрешено индексировать (Disallow: /subdomain/).
  • Карта сайта с перечнем всех страниц (удалённые, но сохранённые).

Этап 6: Поиск конфиденциальных данных в архивах

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

Что искать:

  • .env (файлы окружения с паролями).
  • .git/config (адреса репозиториев).
  • phpinfo() (информация о PHP-конфигурации).
  • backup.sql (дампы базы данных).
  • config.php, settings.php (конфигурационные файлы).

Как искать:

  1. Вручную проверять типичные пути: /backup, /tmp, /downloads.
  2. Использовать поиск по * и фильтровать по расширениям.
  3. Использовать инструменты парсинга архивов для массового поиска.

Пример поиска .env файлов:

https://web.archive.org/web/*/https://example.com/*.env

Wayback Machine не сохраняет все файлы (только HTML, CSS, JS), но дампы баз или бинарные файлы могут быть недоступны.

Этап 7: Анализ изменений в SSL-сертификатах через архивы

Хотя Wayback Machine не сохраняет SSL-сертификаты, история сертификатов доступна через CT-логи (см. статью 7). Однако, анализируя старые снимки сайта, можно заметить:

  • Когда на сайте появилась поддержка HTTPS (по редиректам).
  • Когда был заменён логотип или изменилась политика безопасности (по заголовкам HTTP в сохранённых снимках, если они есть).

Этап 8: Использование Archive.today для поиска удалённого контента

Archive.today часто сохраняет страницы, которые не попали в Wayback Machine (например, из-за robots.txt). Он позволяет архивировать страницы вручную.

Как использовать:

  1. Ввести URL на archive.today.
  2. Если страница была сохранена, она отобразится.
  3. Можно найти сохранения по дате.

Нет публичного API. Только веб-интерфейс.

Этап 9: Автоматизированный сбор изменений с помощью Wayback Machine API

Для долгосрочного мониторинга сайта можно автоматизировать проверку новых снимков в архиве.

Скрипт мониторинга новых версий:

import requests
import time

def get_latest_snapshot(url):
    # CDX API
    cdx_url = f"https://web.archive.org/cdx/search/cdx?url={url}&output=json&limit=1&sort=timestamp"
    resp = requests.get(cdx_url)
    if resp.status_code == 200:
        data = resp.json()
        if len(data) > 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"Обнаружена новая версия {url} в архиве: {latest}")
            # Здесь можно обработать изменения
            last_timestamp = latest
        time.sleep(check_interval)

Этап 10: Поиск через CDX API для составления карты сайта

CDX API можно использовать для получения полного списка всех когда-либо сохранённых страниц сайта. Это позволяет восстановить структуру сайта даже без текущего доступа.

Получение списка всех страниц (с ограничениями):

curl "https://web.archive.org/cdx/search/cdx?url=example.com/*&output=json&limit=100000" > all_pages.json

Парсинг результатов для построения карты сайта:

import json
import re

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

# Пример использования
paths = extract_all_paths('all_pages.json')
for p in paths[:50]:
    print(p)

Практический пример: полное исследование сайта через архивы

Задача: собрать максимально полную информацию о сайте target.org через архивы.

  1. Wayback Machine CDX → получаем список всех 5000 сохранённых страниц.
  2. Анализ путей:
    • Обнаружены пути /admin, /test, /backup_2022, /temp.
    • Страница /admin/login.html существует в архиве с 2020 года.
  3. Поиск файлов:
    • https://web.archive.org/web/20220101000000/target.org/.git/config — найден конфиг репозитория.
    • https://web.archive.org/web/20200101000000/target.org/backup.sql — дамп базы данных.
  4. Сравнение версий:
    • Сравнили index.html в 2020 и 2024 → структура сильно изменилась, добавилась поддержка HTTPS, появился CSP.
  5. Скрытые поддомены:
    • На старой robots.txt найдена запись Disallow: /dev/. Открываем архивный URL https://web.archive.org/web/20200101000000/target.org/dev/ → обнаруживаем тестовый сайт с открытыми ошибками PHP.
  6. Вывод: Найдены забытые тестовые страницы, конфигурационный файл и дамп базы данных. В текущей версии сайта они удалены, но остались в архиве.

Инструменты для работы с архивами

  • Данные Wayback Machine являются публичными, их сбор легален.
  • Не используйте найденные уязвимости для атак на сайт без разрешения.
  • Если вы нашли конфиденциальные данные (пароли, токены) в архиве, сообщите об этом владельцу сайта через официальный канал (без распространения информации третьим лицам).
  • Некоторые страны требуют удаления личных данных из архивов — уважайте такие запросы.

Анализ истории сайта через Wayback Machine и другие архивы — важный этап технического OSINT, позволяющий заглянуть в прошлое веб-ресурса. Удалённые страницы, забытые поддомены, случайно опубликованные конфиденциальные данные, старая robots.txt — всё это может быть восстановлено, если было сохранено в архиве. Комбинируя CDX API, поиск по шаблонам и ручной анализ, исследователь может восстановить почти полную ист