Автор перевода: GooDWin
w00w00!
Привет, люди, вы можете не знать, что такое Хакинг (или Спуфинг) DNS
ID. Хакинг DNS ID - это необычный способ хакинга/спуфинга. Этот метод основан на уязвимости самого механизма DNS. Грубо говоря хакинг/спуфинг DNS ID -
очень эффективен и очень силен, так как нет поколения DNS демонов, которые позволяют избежать этого (даже
WinNT!).
Объяснение механизма работы DNS
На первом этапе вы должны знать, как работает DNS. Я объясню только наиболее важные детали этого протокола. Для того, чтобы сделать это, мы
проследим пакет DNS запроса от A до Z!
1: клиент (bla.bibi.com) посылает запрос на разрешение домена "www.heike.com".
Для трансляции имени bla.bibi.com использует "dns.bibi.com" для DNS. Давайте
взглянем на следующую картинку.
111.1.2.123 = bla.bibi.com
111.1.2.222 = dns.bibi.com
формат:
IP_АДРЕС:ПОРТ->IP_АДРЕС:ПОРТ
пример:
111.1.2.123:2999->111.1.2.222:53
gethosbyname("www.heike.com");
[bla.bibi.com] [dns.bibi.com]
111.1.2.123:1999 --->[?www.heike.com]------> 111.1.2.222:53
Здесь мы видим наш запрос на разрешение имени из
нашего порта 1999, который посылается на 53
порт dns.
[примечание: DNS всегда на порту 53]
Теперь, когда dns.bibi.com получил запрос на
трансляцию имени в IP от bla.bibi.com, dns.bibi.com, он должен
сопоставить это имя с адресом, давайте посмотрим,
как это происходит...
[dns.bibi.com] [ns.internic.net]
111.1.2.222:53 -------->[dns?www.heike.com]----> 198.41.0.4:53
dns.bibi.com запрашивает ns.internic.net, который является корневым сервером имен для адреса www.heike.com, и если там нет этого, то он посылает запрос серверу имен, который отвечает за '.com' домены.
[примечание: мы запрашиваем internic, так как он мог содержать этот запрос в своем кеше]
[ns.internic.net] [ns.bibi.com]
198.41.0.4:53 ------>[ns for.com это 144.44.44.4]------> 111.1.2.222:53
Здесь мы можем увидеть, как ns.internic.net отвечает ns.bibi.com (чей
DNS отвечает за домен bibi.com), что вышестоящий сервер имен
- for.com, его IP адрес 144.44.44.4 [позвольте назвать его ns.for.com]. Теперь наш ns.bibi.com
запрашивает у ns.for.com адрес www.heike.com:
[ns.bibi.com] [ns.for.com]
111.1.2.222:53 ------>[?www.heike.com]-----> 144.44.44.4:53
Ответ от ns.for.com
[ns.for.com] [ns.bibi.com]
144.44.44.4:53 ------>[ns для heike.com это 31.33.7.4]---> 144.44.44.4:53
Теперь, когда мы знаем, какой IP адрес имеет отвечающий за домен
"heike.com" [назовем его ns.heike.com], мы запрашиваем у него IP машины на www
[затем www.heike.com :)].
[ns.bibi.com] [ns.heike.com]
111.1.2.222:53 ----->[?www.heike.com]----> 31.33.7.4:53
И теперь мы по крайней мере получили наш ответ!!
Уф... Утрем лоб платочком.
[ns.heike.com] [ns.bibi.com]
31.33.7.4:53 ------->[www.heike.com == 31.33.7.44] ----> 111.1.2.222:53
Великолепно, у нас есть ответ, теперь мы можем переслать его нашему клиенту
на bla.bibi.com.
[ns.bibi.com] [bla.bibi.com]
111.1.2.222:53 ------->[www.heike.com == 31.33.7.44]----> 111.1.2.123:1999
Хе-хе, теперь bla.bibi.com знает IP адрес www.heike.com 🙂
Итак, все круто, у нас наконец то есть адрес.
Теперь давайте представим, что мы хотим узнать имя машины по
этому IP, чтобы сделать это, мы продолжим несколько иным путем. так
как нам нужно трансформировать:
пример:
100.20.40.3 станет 3.40.20.100.in-addr.arpa
Внимание!! Этот метод только для запроса разрешения IP (обратный
DNS).
Итак давайте посмотрим практически, когда мы возьмем IP www.heike.com
(31.33.7.44 или "44.7.33.31.in-addr.arpa" после перевода его в понятный DNS формат).
...
gethostbyaddr("31.33.7.44");
...
[bla.bibi.com] [ns.bibi.com]
111.1.2.123:2600 ----->[?44.7.33.31.in-addr.arpa]-----> 111.1.2.222:53
Мы шлем наш запрос на ns.bibi.com
[ns.bibi.com] [ns.internic.net]
111.1.2.222:53 ----->[?44.7.33.31.in-addr.arpa]------> 198.41.0.4:53
ns.internic.net пошлет IP сервера имен, который ответственен за '31.in-addr.arpa'.
[ns.internic.net] [ns.bibi.com]
198.41.0.4:53 --> [DNS для 31.in-addr.arpa - 144.44.44.4] -> 111.1.2.222:53
Теперь ns.bibi.com запросит то же самое у DNS на 144.44.44.4.
[ns.bibi.com] [ns.for.com]
111.1.2.222:53 ----->[?44.7.33.31.in-addr.arpa]------> 144.44.44.4:53
и так далее...
Фактически механизм тот же, что был использован для разрешения имени.
Я надеюсь вы поняли диалог, по которому работает DNS. Теперь давайте
изучим формат DNS сообщений.