ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ. Это только для образовательных целей. Это служит хорошим примером того, почему так важно, чтобы на вас работали высококлассные разработчики, и ПОЧЕМУ вы так много платите высококлассным разработчикам за эффективное выполнение своей работы. Это также показывает, что происходит, когда высококвалифицированные разработчики действительно хотят прочитать статью, которую они нашли в Интернете, но слишком дешевы, чтобы что-то купить, потому что все их деньги уходят на Mt. Dew, Red Bull и тако.

Введение

Я копался на Reddit.com, собирая несколько RSS-каналов для источников новостей, которые мне нравятся для моего любимого проекта Eklect Haus, облачного центра домашней автоматизации и управления, чтобы соединить все мои IoT (Интернет вещей) вместе и заставить их работать. крутая вещь.

Я наткнулся на статью (которая, конечно, была авторским мнением, но она была написана как дерьмо) о помощнике Белого дома, который ушел в отставку. Так случилось, что он СПД, и некоторые «правды» о церкви, которые они написали в статье, были искажены до такой степени, что это раздражало меня, и я не думаю, что люди должны платить за такого рода дерьмовые вещи или репортажи; особенно когда они не могут увидеть тип качества, которое они получают, прежде чем купить подписку (вспомните New York Times, LA Times или Washington Post, которые позволяют вам попробовать, прежде чем совершить подписку). Поэтому я решил опубликовать свое исследование по этому вопросу, пока они либо не исправят свою уязвимость, либо не улучшат качество отчетности.

На этот эксплойт у меня ушло меньше времени, чем на то, чтобы написать о том, КАК его на самом деле сделать. Ирония…

Уязвимость

Внутри JavaScript RocketMiner у них есть неминифицированный код, который гласит следующее:

Теперь проблема заключается в том, как они устанавливают файл cookie. Они дают мне имя файла cookie и значение, которое ему нужно, если мой IP-адрес будет найден в их белом списке.

$.cookie('tncms-service-validated', 1, { path:'/' });

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

Вторая проблема с этим кодом заключается в том, как он расшифровывает статью.

$('.subscriber-only.encrypted-content').each(function(){
    $(this).html(tncms.unscramble($(this).text()));
    $(this).show();
});

Судя по всему, они зашифровали статью, чтобы вы не могли просто зайти в DevTools в Chrome и отобразить элементы div. Так что слава им хотя бы за то, что они подумали об этом. Однако, если я перейду к своему окну консоли в своих DevTools, я могу просто запустить эту часть кода, и он расшифрует код и покажет мне статью.

Подвиги

Способ № 1: отредактируйте cookie-файл Rocketminer.com

  1. Установите EditThisCookie как расширение Chrome в Google Chrome
  2. Перейдите к статье RocketMiner.com, которую хотите прочитать.
  3. Если он заблокирован подпиской, он будет выглядеть так

4. Откройте всплывающее окно браузера EditThisCookie. Это будет выглядеть примерно так

5. Нажмите на знак +, чтобы создать новый файл cookie.

6. Вы попадете на такой экран

7. Введите информацию следующим образом:

Name = tncms-service-validated
Value = 1

8. Щелкните зеленую галочку

9. Перезагрузите страницу

10. Теперь вы должны увидеть статью, которая теперь расшифрована.

Теперь вы будете видеть все статьи бесплатно, пока срок действия этого файла cookie не истек. Если это не так, просто повторите шаги, описанные выше.

Способ №2. Используйте код RocketMiner, чтобы просто расшифровать статью

  1. Перейдите в свой DevTools в Google Chrome
  2. Перейдите в свою консоль
  3. Скопируйте и вставьте код:
$('.subscriber-only.encrypted-content').each(function(){
    $(this).html(tncms.unscramble($(this).text()));
    $(this).show();
});

4. Запустите код и вы увидите статью. Этот метод не так хорош, как метод № 1, потому что вам придется запускать его каждый раз при загрузке страницы, что делает метод № 1 более жизнеспособным решением.

Исправление

Сейчас не буду полным мудаком и не скажу как это починить для RocketMiner

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

Во-вторых, они должны требовать, чтобы код расшифровки загружался только ПОСЛЕ того, как пользователь входит в систему. Таким образом, нет возможности расшифровать этот код с помощью JavaScript во внешнем интерфейсе. После того, как пользователь входит в систему, он может затем загрузить код расшифровки, который в этот момент кого волнует, расшифровывает ли человек, вошедший в систему, материал, за который он уже заплатил, верно?

Худшая часть техники — это люди. Всегда будет.