Авторские статьи Деанонимизация по DNS

Discussion in 'Статьи' started by e17, 24 Mar 2014.

  1. e17

    e17 Member

    Joined:
    8 Feb 2013
    Messages:
    47
    Likes Received:
    57
    Reputations:
    81
    Наткнулся я на сайт http://whoer.net/



    [​IMG]





    Зашел я с VPN, у меня поднят pptp на впс, все секюрно все дела. И что же я вижу в поле DNS? IP своего провайдера. Как это возможно получить?



    Первое что приходит на ум, это по IP выполнить обратный DNS запрос, получить домен, и его днс. Но у меня впн. Соответственно я получу совсем не своего провайдера.



    Начал смотреть скрипты, так как я подумал что они как-то детектят DNS по средствам JS. Что же я увидел.
    Code:
    function flash_ajax_request(c, d, f) {
        var g = false;
        var h = f ? '<img align="middle" src="' + f + '" border="0"/>' : '<img align="middle" src="' + preloader_default + '" border="0"/>';
        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) || (g.responseText.indexOf(a) >= 0 && a.indexOf('/whois') >= 0 && g.responseText.indexOf('viawhoer') < 0)) {
                        $x(c).innerHTML = '<span class="ipa_alarm">' + iloc("Anonymizer detected") + '</span>'
                    } 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 запрос
    
    <script language="javascript">
    flash_ajax_request( "dns_unique_domain", "/dns?domain=spvbz1395603.br" );
    </script>
    
    и правда выполнив whoer.net/dns?domain=spvbz1395603.br я увидел свой DNS.



    [​IMG]



    Стало понятно что JS тут не причем в определении DNS, ничего он не детектит. А DNS нам сообщает какой то непонятный запрос с параметром domain, я конечно понимал что у меня такого домена быть не может spvbz1395603.br, но все же я подставил туда google.com. В ответ я конечно получил пустую страничку.



    посмотрев на код страницы я увидел ещё такой код

    <link rel="stylesheet" type="text/css" media="all" href="HTTP://spvbz1395603.br.whoer.net/css/null.css">
    Резолв какой то херни 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
     
    nynenado, GAiN and fl47590 like this.