Наткнулся я на сайт http://whoer.net/
Зашел я с VPN, у меня поднят pptp на впс, все секюрно все дела. И что же я вижу в поле DNS? IP своего провайдера. Как это возможно получить?
Первое что приходит на ум, это по IP выполнить обратный DNS запрос, получить домен, и его днс. Но у меня впн. Соответственно я получу совсем не своего провайдера.
Начал смотреть скрипты, так как я подумал что они как-то детектят DNS по средствам JS. Что же я увидел.
Код:
function flash_ajax_request(c, d, f) {
var g = false;
var h = f ? '' : '';
var i = '*';
$x(c).innerHTML = h;
d = encodeURI(d);
if (window.XMLHttpRequest) {
try {
g = new XMLHttpRequest()
} catch (e) {
g = false
}
} else if (window.ActiveXObject) {
try {
g = new ActiveXObject("Msxml2.XMLHTTP")
} catch (e) {
try {
g = new ActiveXObject("Microsoft.XMLHTTP")
} catch (e) {
g = false
}
}
} else {
g = false
}
if (g) {
g.open("GET", d, true);
g.onreadystatechange = function() {
if (g.readyState == 4) {
var a = d.replace(/\?.*$/, '');
if ((g.responseText.indexOf(a) >= 0 && a.indexOf('/whois') = 0 && a.indexOf('/whois') >= 0 && g.responseText.indexOf('viawhoer') ' + iloc("Anonymizer detected") + ''
} else {
var b = NAS;
if (g.responseText == NA || g.responseText == '') {
b = NAS
} else {
b = g.responseText
}
$x(c).innerHTML = b
}
} else {
$x(c).innerHTML = h
}
};
g.send(null)
} else {
$x(c).innerHTML = i
}
}
этот код отрисовывает наш DNS, а самое главное выполняет GET запрос
flash_ajax_request( "dns_unique_domain", "/dns?domain=spvbz1395603.br" );
и правда выполнив whoer.net/dns?domain=spvbz1395603.br я увидел свой DNS.
Стало понятно что JS тут не причем в определении DNS, ничего он не детектит. А DNS нам сообщает какой то непонятный запрос с параметром domain, я конечно понимал что у меня такого домена быть не может spvbz1395603.br, но все же я подставил туда google.com. В ответ я конечно получил пустую страничку.
посмотрев на код страницы я увидел ещё такой код
Резолв какой то херни http://spvbz1395603.br.whoer.net/, которая даже не пингуется И заметил закономерность, если выполнять запросы к http://whoer.net/ но каждый раз меняется spvbz1395603.br этот странный домен. И тут меня осенило как это работает.
И так по порядку.
whoer.net имеет свой DNS, на который собственно и запаркован домен. И логирует запросы поддоменов, вида spvbz1395603.br.whoer.net
при заходе на сайт whoer.net, вам присваивается id в данном случае spvbz1395603.br
происходит попытка загрузить со страницы link по ссылке spvbz1395603.br.whoer.net/css/null.css, т.е. происходит резолв, и DNS сервер логирует этот резолв и соответственно ip адрес dnsа вашего провайдера
выполняется запрос whoer.net/dns?domain=spvbz1395603.br, который собственно сопоставляет ваш id(spvbz1395603.br) c данными из лога DNS сервера и отдает вам IP
В принципе об этой схеме я знал и раньше, но не видел реализаций.
Кроме того можно заюзать сервис, не морочась со своим DNS.
Для этого нужно:
получить страницу, без исполнения JS скриптов, например wget http://whoer.net/
извлечь из неё сгенерированный id spvbz1395603.br
дать ссылку spvbz1395603.br.whoer.net у кого вы хотите узнать DNS, он должен перейти в браузере или просто пингануть её
выполнить http://whoer.net/dns?domain=spvbz1395603.br который покажет DNS
Для того что бы не палить свои DNS используйте сторонние, их просто можно указать вручную.
Например гугловые:
8.8.8.8
8.8.4.4
Скриптец с сайта, много разных полезных детектов, например времени (можно определить часовой пояс) и т.д.
https://www.dropbox.com/s/0dg5zh0gcm4q01g/whoer.packed.js.txt
http://cxx.cx:81/qodiyaxofo.coffee