Атаки на JavaScript на примере обхода Social Locker for WordPress (КЕЙС)

В статье «Атаки на 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.

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

if(!window.bizpanda) window.bizpanda={};
if(!window.bizpanda.lockerOptions) window.bizpanda.lockerOptions={};
window.bizpanda.lockerOptions['onpLock951887']={"lockerId":"3169","tracking":"0","postId":17162,"ajaxUrl":"https:\/\/www.yasir252.com\/wp-admin\/admin-ajax.php","options":{"demo":1,"actualUrls":0,"text":{"header":"Link Download Tanpa Iklan","message":"
Klik salah satu tombol dibawah ini untuk download tanpa iklan.<\/p>"},"theme":"great-attractor","lang":"en_US","agreement":{"note":0,"termsUrl":false,"privacyPolicyUrl":false,"showInPopup":{"width":570,"height":400}},"overlap":{"mode":"full","position":"middle","altMode":"full"},"highlight":0,"googleAnalytics":0,"locker":{"counter":1,"loadingTimeout":"20000","tumbler":0,"naMode":"show-error","inAppBrowsers":"visible_with_warning","inAppBrowsersWarning":"You are viewing this page in the {browser}. The locker may work incorrectly in this browser. Please open this page in a standard browser.","close":0,"mobile":1,"expires":0},"proxy":"https:\/\/www.yasir252.com\/wp-admin\/admin-ajax.php?action=opanda_connect","groups":["social-buttons"],"socialButtons":{"counters":1,"order":["facebook-share","twitter-tweet"],"behaviorOnError":"show_error","behaviorError":"Matikan Adblock Untuk Download Tanpa Iklan","facebook":{"appId":"331196770812733","lang":"en_US","version":"v6.0","like":{"url":"https:\/\/www.facebook.com\/yasir252","title":"Like","theConfirmIssue":0},"share":{"url":"https:\/\/www.yasir252.com\/software\/download-adobe-photoshop-cc-2020-full-version-windows\/","title":"Share","shareDialog":true}},"twitter":{"lang":"en","tweet":{"url":"https:\/\/www.yasir252.com\/software\/download-adobe-photoshop-cc-2020-full-version-windows\/","doubleCheck":1,"title":"Tweet"},"follow":{"url":"https:\/\/twitter.com\/yasir252com","title":"Follow us","doubleCheck":1,"hideScreenName":1}},"google":{"lang":"en","plus":{"url":"https:\/\/www.yasir252.com\/software\/download-adobe-photoshop-cc-2020-full-version-windows\/","title":"+1 us"},"share":{"url":"https:\/\/www.yasir252.com\/software\/download-adobe-photoshop-cc-2020-full-version-windows\/","title":"Share"}},"youtube":{"subscribe":{"channelId":"UCvPfXFZzw3x4I1FBYVlXbsg","title":"Youtube"}},"linkedin":{"share":{"url":"https:\/\/www.yasir252.com\/software\/download-adobe-photoshop-cc-2020-full-version-windows\/","title":"share"}}},"lazy":true},"_theme":"great-attractor","_style":null,"ajax":true,"contentHash":"e408051e78dd01cade57a25100ad70c7","stats":false};

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

		// loading the locked content via ajax

		if( data.ajax ) {

			options.content = {
				url: data.ajaxUrl,
				type: 'POST',
				data: {
					lockerId: data.lockerId,
					action: 'opanda_loader',
					hash: data.contentHash
				}
			};
		}

Обратите внимание на комментарий - «загрузка заблокированного контента через 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

Скопируйте следующее:

#!/bin/bash

if [[ -z $1 ]]; then
	echo 'Не указана ссылка для обхода социального блокировщика!';
	exit 1;
fi

t0=`curl -s -A 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36' "$1"`

hash="`echo "$t0" | grep -E 'window.bizpanda.lockerOptions' | grep -E -o '"contentHash":"[A-Za-z0-9]{8,}"' | sed 's/"contentHash":"//' | sed 's/"//'`";
t5=$hash

url="`echo $1 | grep -E -o 'http(|s)://[^/]+'`/wp-admin/admin-ajax.php"

if [[ "$t5" ]]; then
	curl $url -d 'lockerId=3169&action=opanda_loader&hash='$hash
fi

Запускать так:

bash sociallocker-next-premium.sh 'URL'

Например:

bash sociallocker-next-premium.sh 'https://www.hourlybook.com/entrance-exams/national-eligibility-cum-entrance-test/neet-biodiversity-and-conversation-practice-questions-2017/'

Чтобы сразу видеть содержимое после рендеринга HTML кода, используйте конструкцию:

bash sociallocker-next-premium.sh 'URL' > locker.htm && firefox locker.htm

Например:

bash sociallocker-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

Рекомендуется Вам:

One Comment to Атаки на JavaScript на примере обхода Social Locker for WordPress (КЕЙС)

  1. Виктор:

    Спасибо. Интересно и полезно.

Добавить комментарий

Ваш адрес email не будет опубликован.