Что, черт возьми, такое взлом социальных рефералов?

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

Я получил бесплатное пятилетнее членство в Jet, получил очень раннее приглашение в Robinhood, прыгнув с позиции 300k в топ-100, и поднялся на восьмую позицию в Final. Неужели у меня действительно так много друзей?

Я точно не потерял ни одного друга из-за какого-то беззастенчивого реферального попрошайничества, к которому, вероятно, прибегает большинство людей. Я бы даже сказал, что получил один. После того, как я занял восьмое место в финале, я получил электронное письмо от Аарона, генерального директора. Но это было не электронное письмо, в котором меня ругали за взлом их системы, а письмо с благодарностью за мой энтузиазм. Однако «взлом», вероятно, неправильный термин для использования. Аарон называет их (меня) спамерами, и приличное меньшинство их сообщений состоит из поддельных рефералов. Я узнал об этом в штаб-квартире Final в Маунтин-Вью, когда Аарон пригласил мою команду на репетицию перед важным собеседованием. Раньше они пытались блокировать этих спамеров, требуя токены или подтверждение электронной почты, но в конечном итоге решили, что поддельные рефералы в любом случае не причинят им вреда. Ваши цифры выглядят немного выше, и у вас есть адреса электронной почты людей, которые действительно хотят использовать ваш продукт. Это клиенты-маяки, которые достаточно упорны, чтобы тратить время на тестирование дерьмовых бета-версий только потому, что им нравится быть «на переднем крае». Да, я один из таких людей и иногда буду переворачивать дерьмо по поводу новых выпусков продуктов, если варианты использования достаточно привлекательны.

Давайте перейдем к взлому… эээ… спаму?

Система регистрации Final — самая либеральная, с которой я когда-либо сталкивался. Вы можете подписаться на случайно сгенерированные электронные письма с вашим исходным реферальным кодом, и подтверждение по электронной почте не требуется. Это здорово и все такое, но у меня есть дела поважнее, чем придумывать поддельные адреса электронной почты. Robinhood требовал подтверждения электронной почты (переход по ссылкам после регистрации), а также требовал от меня отправки токена сеанса.

Согласно RFC 2822, локальная часть адреса электронной почты (часть перед знаком @) интерпретируется хостом произвольно. Многие сайты чрезмерно дезинфицируют адреса электронной почты, запрещая многие символы ASCII, которые на самом деле абсолютно допустимы.

Что важно, так это концепция подадресации:

Подадресация — это практика дополнения локальной части адреса [RFC2822] некоторой «подробной» информацией, чтобы придать этому адресу дополнительный смысл. Одним из распространенных способов кодирования «подробной» информации в локальную часть является добавление «последовательности символов-разделителей», например «+», для формирования границы между «пользовательской» (исходной локальной частью) и «подробной» частью. -части адреса, подобно символу «@», образуют границу между локальной частью и доменом.

Эта гибкость была создана, чтобы помочь пользователям хранить электронные письма с определенных сайтов и списков рассылки. Таким образом, если вы создадите учетную запись на somesellout.com с помощью [email protected], когда вы начнете получать кучу нежелательных сообщений на этот адрес, вы будете знать, кто продал вашу информацию спамерам.

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

Большинство сайтов, с которыми я сталкивался до сих пор, допускают подадресацию, поскольку они являются действительными адресами электронной почты и все такое. Что еще более важно, они рассматривают электронные письма с подадресами как уникальные адреса. Например, если целевой адрес электронной почты, который вы хотите поднять на первое место в очереди, — [email protected], вы можете зарегистрироваться [email protected]. через реферальный код [email protected], и оба адреса будут считаться уникальными и действительными. Это означает, что при обращении к себе мне не нужно создавать сотни поддельных учетных записей электронной почты, если требуется подтверждение электронной почты.

Имея это в виду, все, что осталось сделать, это найти конечную точку для страницы регистрации и написать скрипт, который делает кучу POST-запросов с электронными письмами с уникальными подадресами, обязательно передавая правильные заголовки, чтобы ваше «целевое» электронное письмо действительно получить реферальные кредиты.

Откройте инструменты разработчика Chrome, выберите вкладку «Сеть» и установите флажок «Сохранить журнал». Затем заполните целевой адрес электронной почты и зарегистрируйтесь.

Вам нужно будет найти POST-запрос, который достигает конечной точки регистрации. Chrome Dev Tools имеет удобную функцию, которая позволяет вам щелкнуть запрос правой кнопкой мыши и «Копировать как cURL». Это пригодится для генерации всех рефералов.

Я удалил много заголовков из приведенного ниже запроса curl для удобочитаемости.

curl -X POST -H "Origin: https://www.michaelpfister.com" -H "Referer: https://www.michaelpfister.com/[email protected]" -d 'signup%5Bemail%5D=foo%40baz.com' https://signup.michaelpfister.com/signups"

В этом случае для регистрации сайту требовались закодированные x-www-form-urlencoded данные нового адреса электронной почты, которые указываются после флага -d.

С этого момента вы можете просто сгенерировать скрипт, чтобы попасть в конечную точку регистрации с кучей электронных писем с подадресами. Вам придется проверять в каждом конкретном случае каждый сайт, потому что все они имеют свой уникальный способ применения рефералов. В этом примере важной частью являются данные, которые мы отправляем с флагом -d, и URL перехода, переданный в заголовке Referer. Обратите внимание на переменную $i после флага -d.

#!/bin/bash
for i in `seq 1 100`;
  do
    CMD="curl -X POST -H \"Origin: https://www.michaelpfister.com\" -H \"Referer: https://www.michaelpfister.com/[email protected]\" -d 'signup%5Bemail%5D=foo%2B$i%40baz.com' https://signup.michaelpfister.com/signups"
    eval $CMD
  done

Я знаю, что это не самый лучший способ автоматизации curl-запросов, и он не отвечает на многие вопросы. Как бы вы автоматизировали сайты, требующие подтверждения по электронной почте? Что делать, если требуются уникальные токены сеанса? Большинство этих проблем решаемы, но усилия, необходимые для их преодоления, только съедают время, которое вы сэкономили, не рассылая спам своим друзьям.

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

Первоначально опубликовано на сайте michaelpfister.com 10 мая 2015 г.