Анализ истории сайта: 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 (для массового сбора).
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.
- Определить URL-шаблоны (например,
/blog/,/docs/,/downloads/). - Искать в архиве конкретные URL.
- Использовать оператор
*для поиска всех сохранённых страниц с определённым префиксом.
Пример поиска всех файлов .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.
- Вручную перебирать возможные пути в архиве.
- Использовать поиск по
*или анализировать список всех сохранённых страниц через CDX API. - Парсить 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.
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(конфигурационные файлы).
- Вручную проверять типичные пути:
/backup,/tmp,/downloads. - Использовать поиск по
*и фильтровать по расширениям. - Использовать инструменты парсинга архивов для массового поиска.
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). Он позволяет архивировать страницы вручную.
- Ввести URL на archive.today.
- Если страница была сохранена, она отобразится.
- Можно найти сохранения по дате.
Нет публичного 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 через архивы.
- Wayback Machine CDX → получаем список всех 5000 сохранённых страниц.
- Анализ путей:
- Обнаружены пути
/admin,/test,/backup_2022,/temp. - Страница
/admin/login.htmlсуществует в архиве с 2020 года. - Поиск файлов:
https://web.archive.org/web/20220101000000/target.org/.git/config— найден конфиг репозитория.https://web.archive.org/web/20200101000000/target.org/backup.sql— дамп базы данных.- Сравнение версий:
- Сравнили
index.htmlв 2020 и 2024 → структура сильно изменилась, добавилась поддержка HTTPS, появился CSP. - Скрытые поддомены:
- На старой robots.txt найдена запись
Disallow: /dev/. Открываем архивный URLhttps://web.archive.org/web/20200101000000/target.org/dev/→ обнаруживаем тестовый сайт с открытыми ошибками PHP. - Вывод: Найдены забытые тестовые страницы, конфигурационный файл и дамп базы данных. В текущей версии сайта они удалены, но остались в архиве.
Инструменты для работы с архивами
- Данные Wayback Machine являются публичными, их сбор легален.
- Не используйте найденные уязвимости для атак на сайт без разрешения.
- Если вы нашли конфиденциальные данные (пароли, токены) в архиве, сообщите об этом владельцу сайта через официальный канал (без распространения информации третьим лицам).
- Некоторые страны требуют удаления личных данных из архивов — уважайте такие запросы.
Анализ истории сайта через Wayback Machine и другие архивы — важный этап технического OSINT, позволяющий заглянуть в прошлое веб-ресурса. Удалённые страницы, забытые поддомены, случайно опубликованные конфиденциальные данные, старая robots.txt — всё это может быть восстановлено, если было сохранено в архиве. Комбинируя CDX API, поиск по шаблонам и ручной анализ, исследователь может восстановить почти полную ист