Атаки на JavaScript на примере обхода Social Locker for WordPress (КЕЙС)
September 11, 2020В статье «Атаки на JavaScript» показаны примеры обхода ограничений, установленных с помощью JavaScript. Понятно, что там учебный пример, поэтому он довольно бессмысленный. Возьмём более реальную ситуацию. В статье «Обход запрета показа исходного HTML кода, обход социальных блокировщиков и других мер противодействия сбору информации о сайте» я показывал, как легко можно обойти социальные блокировщики, поскольку скрытые ссылки и текст загружают на страницу, но используют стили, чтобы сделать этот блок невидимым. Я даже сделал небольшой сервис, который покажет вам всё, что скрывают социальные блокировщики. Это так просто, что даже не нужно бороться с JavaScript.
Но мне прислали пример сайта (_https://www.yasir252.com/software/download-adobe-photoshop-cc-2020-full-version-windows/) который использует более хитрый социальный блокировщик.
Забегая вперёд скажу, что это платный плагин, который называется «Social Locker for WordPress» и стоит $27:

Причём это не заброшенный плагин, на момент написания, последнее обновление было сделано 8 May 2020.
Начнём с анализа HTML и JavaScript кода.
Как можно увидеть, в исходном коде название BizPanda Lockers, путь до этого файла /sociallocker-next-premium/bizpanda, я погуглил и нашёл страницу этого самого Social Locker for WordPress.

Анализ исходного кода страницы показал, что содержимое скрытого блока отсутствует в ней, хотя и есть некоторые интересные данные:

Анализ файла скриптов JavaScript (_https://www.yasir252.com/wp-content/plugins/sociallocker-next-premium/bizpanda/assets/js/lockers.020405.min.js) дал вот такой интересный фрагмент:

Обратите внимание на комментарий - «загрузка заблокированного контента через ajax».
Значения ajaxUrl, lockerId и contentHash можно найти в предыдущем фрагменте кода.
На самом деле, второй фрагмент я нашёл после того, как понял, как обходить этот социальный блокировщик. Можно было вообще пропустить анализ исходного кода и сразу начать с анализа POST запроса (смотрите «Как анализировать POST запросы в веб-браузере»).
Я «лайкнул» статью для просмотра скрытого текста:

Как можно увидеть, на страницу https://www.yasir252.com/wp-admin/admin-ajax.php передаётся POST запрос содержащий строку «lockerId=3169&action=opanda_loader&hash=e408051e78dd01cade57a25100ad70c7»:

А в ответ приходит скрытый социальным блокировщиком код:

Рендеринг полученных данных:

Пробуем получить скрытый текст минуя шаринг в социальных сетях:
curl https://www.yasir252.com/wp-admin/admin-ajax.php -d 'lockerId=3169&action=opanda_loader&hash=e408051e78dd01cade57a25100ad70c7'Всё сработало!

Если вам непонятен HTML текст, то сохраните его в файл и откройте в веб браузере:
curl https://www.yasir252.com/wp-admin/admin-ajax.php -d 'lockerId=3169&action=opanda_loader&hash=e408051e78dd01cade57a25100ad70c7'> locker.htm && firefox locker.htm

Дальнейший анализ показал, что хеш статичный и всегда содержится в исходном коде. Значение lockerId не меняется и туда можно подставить любое число (возможно, это результат «кряка»).
Чтобы каждый раз не лазить в исходный код, создадим скрипт для автоматизации. В файл sociallocker-next-premium.sh:
gedit sociallocker-next-premium.sh
Скопируйте следующее:

Запускать так:
bashsociallocker-next-premium.sh 'URL'
Например:
bashsociallocker-next-premium.sh 'https://www.hourlybook.com/entrance-exams/national-eligibility-cum-entrance-test/neet-biodiversity-and-conversation-practice-questions-2017/'
Чтобы сразу видеть содержимое после рендеринга HTML кода, используйте конструкцию:
bashsociallocker-next-premium.sh 'URL'> locker.htm && firefox locker.htm
Например:
bashsociallocker-next-premium.sh 'https://www.hourlybook.com/entrance-exams/national-eligibility-cum-entrance-test/neet-practice-questions-environmental-issues-2017/'> locker.htm && firefox locker.htm

На свой сервис обхода социальных блокировщиков я добавил поддержку и этого плагина: https://suip.biz/ru/?act=social-locker-cracker