Продолжаем проходить различные "квесты" и "пазлы" на просторах интернета. На этот раз в руки мне попался https://hiddenkeywords.com/ Это испытание было создано студией Propellernet - студия маркетингового консалтинга из Англии.
Немного о себе
Я уже писал, что никак не связан с SEO или поисковой оптимизацией, а сейчас занимаюсь Машинным обучением. Тем не менее, в детстве мне были интересны вопросы работы сайтов в разных аспектах, так сказать. С того времени осталось немного в голове, помноженное умением беглого гугления. Так что извиняюсь, если кого обидел своим абсолютно ламерским подходом к SEO, к которому я скорее имею отношение только постольку поскольку.
Откуда и зачем я вообще занялся разгадыванием задач? Это все благодаря Левашову Игорю (Ссылка на его страницу), с которым мы познакомились в чате, посвященному Цифровому прорыву. Там меня взяли на слабо, а дальше завертелось. По его же наводке я проходил и technicalseo.expert из предыдущих статей на Хабре. Надеюсь, продолжу и дальше решать задачки, если мне не изменяет память, то у него есть еще подобные.
Предупреждение!
Если кто-то хочет лично пройти этот челендж - дальше читать противопоказано. Будут скрины и тексты.
Если вы не боитесь спойлеров - поехали!
Инструменты
Все уровни были пройдены с открытым Developers tools на Chrome. Там можно и html страницы поглядеть, и на responce полюбоваться. Так же были использовано немного стороннего софта, но о нем чуть позже, пусть это останется интригой.
Встречают по одежке
Нас встречает приятный сайт в темной теме. Достаточно стандартно. Почти сразу нас вводят в курс дела: на сайте спрятано 20 спрятанных фраз. Именно их мы и будем искать!
Теперь заглянем во внутренности! Полную страницу не буду приводить сразу, а медленно будем исследовать содержимое. Тем не менее, покажу пока самое интересное для нас: тут есть подсказки к этим спрятанным словам.
<div class="results">
<div class="number clue" data-tippy-content="?">1</div>
<div class="number clue" data-tippy-content="The keyword is here">2</div>
<div class="number clue" data-tippy-content="?">3</div>
<div class="number clue" data-tippy-content="????">4</div>
<div class="number clue" data-tippy-content="Inspect this">5</div>
<div class="number clue" data-tippy-content="????">6</div>
<div class="number clue" data-tippy-content="x-????">7</div>
<div class="number clue" data-tippy-content="13th August, 2019">8</div>
<div class="number clue" data-tippy-content="????">9</div>
<div class="number clue" data-tippy-content="?">10</div>
<div class="number clue" data-tippy-content="?">11</div>
<div class="number clue" data-tippy-content="bingo">12</div>
<div class="number clue" data-tippy-content="?">13</div>
<div class="number clue" data-tippy-content="ld+json">14</div>
<div class="number clue" data-tippy-content="????">15</div>
<div class="number clue" data-tippy-content="Try searching">16</div>
<div class="number clue" data-tippy-content="?">17</div>
<div class="number clue" data-tippy-content="????">18</div>
<div class="number clue" data-tippy-content="????????">19</div>
<div class="number clue" data-tippy-content="????">20</div>
</div>
Намеки. Какие-то очевидные, какие-то не совсем. Тем не менее, я буду описывать решения не в хронологическом порядке, иногда оставляя ремарки о том как быстро получилось разгадать ту или иную задачу. На все прохождение я потратил астрономически 3 дня, приступив к игре утром 3 мая.
Первые разгадки
Думаю, многие уже догадались минимум о четвертом слове: печенка уж слишком явно намекает. Но дойдем и до cookies, а пока первый шаг для всего SEO - проверка robots.txt
Вводим слово museum и...
Немного картинок
И внезапно решено первое слово. Действительно, любой SEO-забег начинается с robots.txt
Вторая задача кажется сложнее: "The keyword is here", но это только на первый взгляд. Давайте присмотримся получше к надписи по Hello
<div class="description fadeout" id="desc">
<h1>Hello</h1>
<p>This is a puzzle for technical SEOs.</p>
<p>There are twenty hidden keywords.<span class="likethis">One of them is here.</span> Can you find them?</p>
</div>
Так, думаю, стало виднее, а именно странный кусок <span class="likethis">One of them is here.</span>
Перебираем все слова здесь и находим заветное here. Второе ключевое слово с нами.
Третье слово мы найдем гораздо позже, ближе к середине расследования, когда нас кинет на несуществующую страницу с кодом ошибки 404. Для это, например, достаточно добавить index.html к ссылке. За одно покончим с еще одной гипотезой, которая не сыграет...
Пока ничего сложного. Пришло время проверять cookie. Переходим в Developers Tool в Google Chrome, открываем вкладку Application, выбираем Storage-Cookies и наш сайт. В итоге видим что-то подобное:
Пробуем и радуемся! Это слово, кстати, было найдено первым, даже не смотря на то, что все остальные рядом тоже были найдены достаточно быстро.
Пятое ключевое слово ждет нас в консоле.
Четверть пути уже пройдено.
Узнаем что-то новое...
Шестой вопрос с подсказкой ???? для меня оказался самым сложным. Именно после того, как поддалось это слово на меня посмотрела с той стороны монитора страница с поздравлениями. Чего только я не пытался сделать ради этого: и смотрел и среди графиков загрузки, думая, что там какой-то особый рисунок будет складываться, например, азбукой морзе, и пробовал даже получить что-то через гуглтренды. Замерял работу сайта и скриптов.
Скажу честно - ушел где-то день, пока я не написал Игорю Левашову. Некоторое время мы обсуждали в чате, что же может означать график. Внезапно Игорь сказал, что возможно это какая-то аналитика. Google Analytics!!!!
Начинаем смотреть вызовы скрипта analytics.js - так как он скачивается с сайта Google, то вероятность его модификации минимальная. Тем не менее, пробуем большинство строк, которые кажутся подозрительными - пусто.
Просматриваем параметры запросов - тоже глухо.
Снова целый час ходим вокруг да около. Просматриваем работу скрипта, который скачивает скрипт Google Analytics. Просматриваем под лупой, каждый чих - брекпоинт. НИЧЕГО!
<script>
(function(d,r,a,s,t,i,c){d['GoogleAnalyticsObject']=t;d[t]=d[t]||function(){
(d[t].q=d[t].q||[]).push(arguments)},d[t].l=1*new Date();i=r.createElement(a),
c=r.getElementsByTagName(a)[0];i.async=1;i.src=s;c.parentNode.insertBefore(i,c)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-145490457-1', 'auto');
ga('send', 'pageview');
</script>
Около получаса я мидитировал над этим кодом и...
function(d,r,a,s,t,i,c){d['GoogleAnalyticsObject']=t
d,r,a,s,t,i,c...
Пробуем! Бинго!
Седьмой подсказкой пользоваться с одной стороны легко. Во вкладке Network смотрим полученные файлы и в hiddenkeywords находим нужный тег:
Проверяем нашу догадку - все верно. Переходим к следующей загадке. Какие манипуляции с датой. Пробую сначала отправить запрос "из прошлого" - никакого эффекта. Гуглим дату - день левшей. Пробуем lefty - снова мимо. Что-то как-то сложновато...
И тут в голову приходит идея - а что если поискать в веб-архиве?
Не так уж и трудно. Теперь лягуха! Я в замешательстве... Пытаюсь загуглить хоть что-то по теме. Первая ссылка в выдаче: Screaming Frog SEO Spider Website Crawler - звучит как план. Скачиваем, предварительно запустив VPN, так как для моего IP почему-то скачивание закрыто, подозреваю, из-за санкций, запускаем.
Пытаемся ввести two - мимо. Как так?! Пытаюсь понять, что же там лягух нашел.
jericho - и это уже срабатывает!
Дальше подсказок никаких нет. Что же делать? Ну раз пошла тема краулеров и пауканов, то что, если попробовать другие? Хронологически примерно так и случилось. Сначала лягух, а потом 10, а чуть позже и 12, но о нем позже.
Меняем User-Agent (этого окажется достаточно, но я был готов накрутить больше настроек) в Chrome, а для этого переходим на вкладку Network conditions. Путем перебора, находим некоторых роботов, начнем с робота Googlebot.
Тадам!
Тадам! Меня заметили!
<div class="description fadeout" id="desc">
<h1>I see you</h1>
<p>Pretending you're Googlebot.</p>
<p>But you're not. <span class="welldonethough">subterfuge.</span> You're not Googlebot.</p>
</div>
Пробуем найденное слово - так и было задумано.
Половина позади. Осталась еще половина!
Давайте теперь посмотрим на ссылку. Чего-то не хватает. А что, если добавить www? Проверяем догадку и ничего не происходит. Или происходит? Лезем в нашу любимую вкладку Network и видим странные вещи.
Пара редиректов. Подозрительно... И я не ошибся. airbrake - одно из искомых слов.
Теперь подошли к двенадцатому слову. Bingo. И тут есть два пути получить ответ. Первый из них - прикинуться поисковым роботом Bing от Microsoft. Делаем то же самое, что и на десятом шаге в настройках Developer Tools, только уже выставляем User-Agent на Bing. Альтернатива - просмотреть сохраненную в кеше Bing копию страницы.
Отлично. Еще одно слово. И снова на пути неизветсность! А что, если заглянуть в кэш Google?
Осталось еще немного и только один вопрос без подсказок. Переходим к подсказке ld+json. Такой кусок скрипта можно заметить в head страницы.
<script type="application/ld+json">
{
"@context": "https://schema.org/",
"@type": "Clue"
}
</script>
Пробуем Clue - нет эффекта. Тогда открываем валидатор на schema.org и...
Пробуем interlinked и у нас получается.
Пятнадцатый вопрос же вполне очевидный. Убирает "s" в адресе и получаем незащищенный протокол. В итоге снова во вкладке Network замечаем пару редиректов, один из которых будет искомым словом.
И последний рывок
Шестнадцатый снова отправляет нас к гуглу, как к поисковику. Ищем по сайту с помощью специального запроса в поисковике.
С семнадцатым вопросом я разобрался достаточно быстро, так как ссылка была на видном месте - прямо в head нашего файла.
<link rel="canonical" href="https://hiddenkeyword.com">
Осталось совсем немного! ???? - что же это может значить? Карта... Sitemap...
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://hiddenkeywords.com/neutral</loc>
</url>
</urlset>
И вот еще одна ссылка.
Переходим к предпоследнему заданию. ???????? - снова шарады! Свет... Дом... Попробуем сделать страницу домашней и... Ничего! Опять. Если за каждую идею мне надо было платить по рублю - кто-то стал бы уже миллионером. Надо думать дальше. Light... Home... House! Lighthouse! Есть такая вкладка в Developer Tools. Запускаем страницу на этой вкладке и получаем то, что искали.
Остался последний шаг. ???? - палитра. Скажу сразу, но мне эта подсказка не помогла, я нашел гораздо раньше. Случайно заглянул в css файлик и все стало ясно.
*! syndicate */
/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
html {
font-family: sans-serif;
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%
}
body {
margin: 0
}
Самое первое слово! Бинго!
Послесловие
Не самое сложное испытание, тем не менее график меня заставил попотеть. Надеюсь, у вас получится пройти без этих подсказок, но если нет - всегда добро пожаловать. Если будет интересно, то буду продолжать.
Кстати, кто знает еще какие-либо задачки?
esher
На wechall.net десятки сайтов, предлагающих челленджи, для решения которых на начальном уровне как раз потребуются ваши знания, уровни посложнее потребуют программирования, изучения ранее неизвестных вам языков или областей; вперед, если вам нравится и есть время! :) Очень помогает саморазвитию
HiveTyrant89 Автор
Спасибо огромное! Теперь если что и на вас буду ссылаться, пройдя игру из этого списка. Вы же не против?
esher
Ныряя в это сообщество, стоит уточнить, что публиковать решения задач для таких сайтов не приветствуется: это личный вызов для каждого, разобраться и решить все эти задачи. Прохождение некоторых челленджей заставило меня более глубоко разобраться с "популярной" (e.g. несложной) стеганографией, криптографией, дизассемблированием и дебагом в gdb/ollydbg, c, java, python, дырами в php (на момент создания челленджей) и многим другим. Ссылаться на меня - да много чести, и хотя в рейтинге на wechall я не на последних местах, уже давно в это не играю, хотя иногда возвращаюсь попробовать закрыть некоторые "гельштатные" задачи.