Как известно, в ICQ довольно продолжительное время существует механизм так называемой активации. Вероятно, исходным его назначением была борьба с спам-рассылками. Изначально эта система работала таким образом, что если некоторый аккаунт по каким-то причинам нуждался в верификации, то система при отправке с него сообщения какому-либо пользователю посылала ему автоматический ответ, содержащий ссылку следующего вида: As a security precaution, please click the link to verify your ICQ account http://validate.icq.com/icq/validate.html?uid=111111&sid=372330398&lang=en Для завершения процесса проверки достаточно было перейти по ней и ввести предложенную капчу. В марте 2015 механизм активации претерпел кардинальные изменения и стал функционировать более жестко. Теперь при отправке сообщений пользователи начали получать оповещения такого плана: Your account has been compromised. Please proceed to the following link to unblock your account: https://icq.com/100006/antispam?sc=05098141 При переходе по ссылке открывалась страница, на которой требовалось ввести свой номер мобильного телефона и пароль от ICQ. Примерно в этом же виде эта система существует и поныне. К слову, это нововведение стало головной болью не только для тех, кто занимался спам-рассылками, но и для обычных пользователей, поскольку активация возникала и продолжает возникать довольно бессистемно. Что странно, ей порой подвержены даже те ICQ номера, которыми не пользовались больше десятилетия. Однако в контексте данной статьи важно совсем другое: уже на этапе своего появления новая система активации несла в себе простой, но довольно серьезный баг. Пример страницы активации: https://icq.com/1234567890/antispam?sc=29055738 Начать следует с того, что по завершении проверки, когда пользователь уже указал свой мобильный телефон, ввел код из смс и пароль, он попадал на страницу следующего содержания: Как видно из скриншота выше, текст содержал мобильный телефон без четырех последних цифр, которые были скрыты под звездочками. Ключевым моментом было то, что данная страница выводилась простым GET-запросом, а потому ее можно было вывести для абсолютно любого ICQ номера, просто воспользовавшись ссылкой вида https://icq.com/111111/antispam?sc=24555708&forward=attach_success. 111111 следовало заменить на нужный UIN (на практике – он мог был быть в диапазоне от 10000 до 999999999, подходили в том числе и DELETED аккаунты). Однако возникал закономерный вопрос: как узнать последние четыре цифры? Все оказалось куда сложнее, чем казалось на первый взгляд. Был отмечен тот немаловажный факт, что телефон с скрытыми цифрами на конце успешно выводится только в том случае, если IP-адрес проверяющего соответствовал коду страны привязанного к ICQ телефона. Таким образом, с российского IPдля просмотра были доступные только телефоны на +7. В случае же несоответствия между IP-адресом и кодом страны привязанного телефона (к примеру, IP был российским, а к UIN’у был привязан телефон Украины), вместо номера телефона выводилось пустое сообщение: «Теперь вы можете авторизовываться с помощью +7 и пароля». Пример с одним и тем же номеров ICQ, но сначала IP-адрес России: Потом IP-адрес Украины: К слову, на практике отсутствие продолжения телефона после кода страны могло означать как отсутствие привязанного телефона вообще, так и несоответствие нашего IP стране привязанного телефона. Изначально наверняка узнать это можно было лишь перебором, однако позже была найдена универсальная страна, которая позволяла выводить какие угодно телефоны. Ей стала Чехия. Трудно объяснить природу этого явления, но чешские IP-адреса давали выводить часть телефона любой страны, причем вместе с кодом. Что более важно, эта страна также сильно помогала в разгадывании четырех недостающих цифр. Дело в том, что при использовании IPЧехии по ссылке вида https://icq.com/111111/antispam?sc=24555708&forward=attach_success телефон выводился в формате «Код Чехии + Код страны привязанного телефона + номер телефона без двух последних цифр». Наглядный пример: при переходе по ссылке https://icq.com/677777777/antispam?sc=24555708&forward=attach_success выводилось сообщение: «You can now sign in to icq with +420791117772**** and your password». Достаточно было отсечь код Чехии +420, чтобы обнаружить вполне себе российский телефон 791117772**** вместе с семеркой впереди. Примечательно, что две последние звездочки на конце были лишними - это правило было справедливо для телефона любой страны, когда проверка производилась с чешского IP-адреса. В ситуации же с 791117772**** присутствие лишних звездочек было нетрудно понять по длине телефона, которая в России составляет одиннадцать цифр вместе с семеркой впереди. После отбрасывания лишнего оставался телефон 791117772**. Дело было за малым – узнать две последние цифры. Делалось это довольно просто – перебором через поиск в официальном клиенте для IOS или Android. Подбор цифр от 00 до 99 при должной ловкости рук занимал пару минут. Результат для ICQ 67777777 виден на скриншоте. Для ICQ аккаунтов с телефоном, но без привязанной почты и установленных секретных вопросов на тот момент существовал более простой вариант. В то время страница восстановления пароля icq.com/password еще выводила для них в специальном сообщении четыре последние цифры привязанного мобильного. На примере ICQ 666666665 это было так: «Вы не можете восстановить пароль по email, но можете восстановить через телефон *******24О7). Достаточно было узнать начало телефона по ссылке https://icq.com/666666665/antispam?sc=24555708&forward=attach_successи подставить четыре недостающие цифры, чтобы получить телефон +796166724О7. Для уверенности номер можно было проверить через уже упомянутый поиск в ICQ для IOS или Android. Таким образом, ручной подбор не требовался вовсе. Баг просуществовал довольно продолжительное время, после чего был успешно исправлен. За это время простеньким софтом удалось просканировать на наличие привязанных телефонов порядка 3 млн. ICQ номеров. Позднее система активации претерпела некоторые изменения. В частности, на данный момент процесс проверки можно пройти на странице вида http://icq.com/66666666/verifyphone. С ее помощью нельзя узнать, какой именно телефон привязан к ICQ аккаунту, однако можно проверить, имеется ли он вообще. Перебирая ICQ номера в ссылке, это можно определить по выводимому на страницу результату. В случае, если отображается форма активации, – телефон не привязан. При наличии привязки будет отображено сообщение: «Вы успешно привязали номер телефона и теперь можете писать другим пользователям без ограничений». Что же касается общей оценки системы активации, то сейчас она скорее является грубым инструментом навязывания прикрепления телефона, нежели механизмом безопасности. Впрочем, этот момент выходит за рамки данной статьи.