18 Февраля, 2015

Как узнать оператора по номеру телефона (и не вводить капчу)

Алексей Комаров

После отмены «мобильного рабства» пользователи массово начали переходить от одного оператора к другому с сохранением своего телефонного номера. Уже на начало февраля таких абонентов стало более миллиона (более подробная статистика по числу переходов представлена на сайте ЦНИИС — официального оператора базы данных перенесенных абонентских номеров на основании распоряжения Правительства РФ от 9 октября 2013г. 1832-р).

Таким образом, со временем всё сложнее будет по коду абонента определить его сотового оператора: 903 — теперь не обязательно будет Билайн, а 926 — может и не означать Мегафон. Честно говоря, не очень представляю себе практической ценности от такого рода знаний (разве что это может быть важно при наличии в тарифном плане льготной опции при звонке на телефонные номера конкретного оператора), но, тем не менее, на сайте ЦНИИС соответствующий раздел присутствует:  Узнать оператора по номеру телефона .

Узнать оператора по номеру телефона

Для защиты от «роботов» данная форма запроса традиционно защищена капчей (CAPTCHA), но, как оказалось, её можно совсем просто обойти. Сейчас расскажу как именно.

Моё традиционное внимание к адресной строке браузера было вознаграждено и в этот раз. Вот как выглядит результат на странице сайта после ввода корректной капчи:

Успешно. Узнать оператора по номеру телефона

Ничего необычного: указан номер, выведен оператор, а поле капчи изменено на новое… А вот адресная строка выглядит гораздо интереснее:

Адресная строка. Узнать оператора по номеру телефона

Как видно, в качестве параметров используются три переменные:num, number и r. Собственно, вполне очевидно, что num— это введённый пользователем номер телефона, оператора которого он хочет проверить.

Простые эксперименты и некоторые логические умозаключению показали, что number — это то, что пользователь указал в поле капчи, а r — специальный проверочный параметр, вычисленный заранее. Получается, что алгоритм проверки просто делает расчёт некоторого значения на основании того, что ввёлPпользователь (назовём это значение r2), и сравнивает r2 с эталонным r, передавая при этом само зачем-то в запросе. Вот такая странная реализация.

Тут можно было бы подумать, что для обхода алгоритма капчи нужно будет проводить анализ и выяснять принцип вычисления r, но всё оказалось гораздо проще: r никак не зависит от номера телефона, а вычисляется только из символов правильной капчи. На практике это означает, что если у нас есть одна пара соответствующих друг другу параметров number и r, то меня num, можно получать желаемый результат для любого другого телефонного номера.

Пара примеров. Вот например, ссылка, которая получается после правильно введённых пользователем символов капчи:

http://www.zniis.ru/bdpn/check?num=9031234567&number=3f52ce28&r=366172

Здесь параметры number (то, что пользователь ввёл в поле капчи) и r (проверочное значение, которое должно получаться из number, если оно правильное) соответствуют друг другу, поэтому в качестве параметра num (проверяемый номер телефона) можно передавать всё, что угодно:

http://www.zniis.ru/bdpn/check?num=9099999999&number=3f52ce28&r=366172
http://www.zniis.ru/bdpn/check?num=9033333333&number=3f52ce28&r=366172
http://www.zniis.ru/bdpn/check?num=9266666666&number=3f52ce28&r=366172

Не могу сказать, что это какая-то очень опасная уязвимость. Максимум, что она позволяет сделать — это написать скрипт, который выкачает целиком всю базу соответствий номеров телефонов и текущих операторов, к которым эти номера приписаны. Тем не менее, уведомление администрации сайта на указанный в разделе Контакты адрес info@zniis.ru ещё на прошлой неделе я всё же направил.

Никакой реакции, ожидаемо, не последовало. Правда, те примеры (с парой number и r), которые были указаны в моём письме, больше не работают. Возможно, что это и есть реакция (смайл) — просто исключили пару проверенных мной number и r, а может r вычисляется каждый день заново и уже завтра примеры из этого поста тоже работать не будут, но пока не поменяется сам принцип проверки, не поменяется и принцип обхода капчи при проверке оператора по номеру телефона на сайте официального оператора базы данных перенесенных абонентских номеров на основании распоряжения Правительства РФ от 9 октября 2013г. 1832-р.