Статья PoC: Узнать ник, по номеру телефона (Python/Telegram)

Недавно по интернетам пролетела очередная сенсация о уязвимостях в Телеграм. Хотя некоторые считают последнюю новость скорее фичей, а не багом. Я же воздержусь от оценок и просто попробую описать концепцию сбора ников по номерам телефонов.

Эту задачу можно решить топорным и медленным способом, вручную добавляя к себе в контакты интересующие номера и затем открывая профили тех юзеров, которые окажутся зарегистрированными в ТГ. В профиле очевидным образом будет отображаться ник юзера, который начинается с символа собачки, разумеется, если юзер установил таковой.

Но мы же хакеры, нам не интересны топорные методы, гораздо круче написать свой собственный переборщик номеров, который сделает работу за считанные секунды. Мне больше всего нравится язык Python, поскольку он подходит для подобных задач и позволяет написать функциональный код очень быстро. А так же он достаточно нагляден, что бы использовать его для подобных демонстраций концепций.

И, кончено, мы бы не были профессионалами, если не пользовались бы библиотеками и APIшечками. Поэтому идём в гугл и находим первую попавшуюся библиотеку для взаимодействия с клиентским API телеграма.

Мне попалась библиотка telethon. А простой запрос в гугл "telethon add user by phone" по первой же ссылке предлагает годный пример кода.

По понятным причинам(защита от скрипткиддисов) приведу здесь лишь самую важную часть кода, оставив вам для самостоятельного ресёрча всё остальное.

Итак, после импорта всех необходимых объектов из библиотеки, а так же ID и токена приложения для ТГ добавляем переменную для хранения искомого номера, на который зарегистрирован аккаунт ТГ.
Код:
guest_phone_number='+3809ХХХХХХХХ'
Проводим инициализацию и подключаемся к ТГ
Код:
client = TelegramClient('session_name', api_id, api_hash)
client.connect()
Пропускаем формальности про ввод пин-кода, приходящего на мобильник при подклчении из нового места. И добавляем искомый номер в наш список контактов
Код:
contact = InputPhoneContact(client_id=0, phone=guest_phone_number, first_name="custom_first_name", last_name="custom_last_name")
result = client.invoke(ImportContactsRequest([contact]))
Ну и последним шагом получаем ник по тому же номеру
Код:
contact_info = client.get_entity(guest_phone_number)
print(contact_info.username)

Вуаля, на экране отпечатался ник, соответствующий указанному номеру. Всё более чем просто.
Чтобы завершить приложение, собирающее все ники по списку номеров из файла, нужно добавить буквально три строки. Смысл их в том, чтобы сначала прочитать из файла список номеров, затем добавить цикл, выполняющий два последних шага с каждым номером из списка.

Каждый, кто хоть немного разобрался в программировании на Python, сможет закончить данный проект. Остальные же, могут написать в телеграм чатике https://t.me/thecodeby запрос на данный скрипт с указанием предлагаемой стоимости ;)
 
Последнее редактирование:

rink0

Green Team
28.11.2017
62
65
BIT
0
Полезная статья! Давно думал что можно так парсить ники по номерам и находить нужных людей.
 

Rollly

Green Team
31.12.2017
109
133
BIT
0
Хех, несколько минут покопался, измени пару переменных, и теперь можно вытаскивать Fist - Last name, Username. Код занял 16 строк.
 
Последнее редактирование:

dark2strike

Green Team
16.04.2017
43
42
BIT
0
Ролли, подскажи, как имена вытаскивал? Они же должны быть назначены тобой при добавлении юзера по номеру телефона. Правда я не пробовал, может быть если не добавлять их, то приходят оргинальные.
 
Последнее редактирование:

Rollly

Green Team
31.12.2017
109
133
BIT
0
Ролли, подскажи, как имена вытаскивал? Они же должны быть назначены тобой при добавлении юзера по номеру телефона. Правда я не пробовал, может быть если не добавлять их, то приходят оргинальные.
contact_info.first_name
contact_info.last_name
contact_info.username

Ролли, подскажи, как имена вытаскивал? Они же должны быть назначены тобой при добавлении юзера по номеру телефона. Правда я не пробовал, может быть если не добавлять их, то приходят оргинальные.
У тебя еще ошибка в коде, connect.start, или это защита от скрипткидисов?
 

dark2strike

Green Team
16.04.2017
43
42
BIT
0
Я понимаю как обратиться к элементам объекта типа .first_name, но если ты посмотришь на мой код, то увидишь там строку, где явно задаются эти имена.
Код:
contact = InputPhoneContact(client_id=0, phone=guest_phone_number, first_name="custom_first_name", last_name="custom_last_name")
Соответсвенно, после добавления контакта, именно указанные мной имена будут отображаться. Так что мой вопрос состоял не в том, как обратиться к этим элементам объекта, а в том, как получить реальные значения, а не установленные мной ранее.

Касаемо connect.start, опять же, если внимательно смотреть в мой код, то там нет ничего подобного.

Ну и по отзывам нескольких читателей оказалось, что мой pip выкачал старую версию библиотеки, а именно 0.19.1.6, поэтому там есть метод invoke(), который отсутсвует в более новых версиях. А это значит, что скрипткиддисам будет немножко сложнее ;) потому что надо нагуглить(это же так сложно) как выполнить этот шаг в новой версии. Либо как пип ставит более старую версию либы, это, кстати, попроще будет ;)
 

Rollly

Green Team
31.12.2017
109
133
BIT
0
Я понимаю как обратиться к элементам объекта типа .first_name, но если ты посмотришь на мой код, то увидишь там строку, где явно задаются эти имена.
Код:
contact = InputPhoneContact(client_id=0, phone=guest_phone_number, first_name="custom_first_name", last_name="custom_last_name")
Соответсвенно, после добавления контакта, именно указанные мной имена будут отображаться. Так что мой вопрос состоял не в том, как обратиться к этим элементам объекта, а в том, как получить реальные значения, а не установленные мной ранее.

Касаемо connect.start, опять же, если внимательно смотреть в мой код, то там нет ничего подобного.

Ну и по отзывам нескольких читателей оказалось, что мой pip выкачал старую версию библиотеки, а именно 0.19.1.6, поэтому там есть метод invoke(), который отсутсвует в более новых версиях. А это значит, что скрипткиддисам будет немножко сложнее ;) потому что надо нагуглить(это же так сложно) как выполнить этот шаг в новой версии. Либо как пип ставит более старую версию либы, это, кстати, попроще будет ;)
Тут эта строчка не нужна, я её полностью убрал.
Код:
contact = InputPhoneContact(client_id=0, phone=guest_phone_number, first_name="custom_first_name", last_name="custom_last_name")
Я имею ввиду что нужно start(), а не connect()
 
  • Нравится
Реакции: de-architect

dark2strike

Green Team
16.04.2017
43
42
BIT
0
Как не нужна? Ты же формируешь объект contact, где указываешь номер телефона, для того что бы дальше передать этот объект аргументом к функции ImportContactsRequest([contact])
 

dark2strike

Green Team
16.04.2017
43
42
BIT
0
Не стыдно ли Вам зарабатывать на чужой информации и называть других кидисами. Я сам потом полный код выложу с объяснением для новичков

На какой чужой информации? Эта псевдо бага известна каждому, кто юзает телеграм. Просто был хайп в СМИ, и я решил создать иллюстрацию, но поскольку в сети очень много заказов на подобную программу, я решил скрыть часть инфы для того что бы нубы не копировали код и не продавали его, не вложив и грамма мозга.
 

dark2strike

Green Team
16.04.2017
43
42
BIT
0
Да, конечно, всем интересно открывать новые горизонты. Но пока у меня 11 лайкой. Буду копить новые. Возможно даже придумаю идейки для новых статей.
 

☠xrahitel☠

Grey Team
09.12.2016
240
305
BIT
85
Telegram-CLI-Tools ищет по номеру телефона, потом уже можете искать @shortname

-Удобный импорт в телефон (самый быстрый способ)
-Средней скорости перебор в заданном диапазоне
biggrin.png
 

dark2strike

Green Team
16.04.2017
43
42
BIT
0
Telegram-CLI-Tools ищет по номеру телефона, потом уже можете искать @shortname

-Удобный импорт в телефон (самый быстрый способ)
-Средней скорости перебор в заданном диапазоне
biggrin.png


Забавная штука. Сам пробовал? Она немного иначе работает, являясь обёрткой над установленным telegram-cli. Просто шлёт в stdin команды по добавлению контакта и получению инфы. Мне же захотелось на более низком уровне реализовать этот механизм, что я и сделал, да ещё и в меньшее количество кода уложился.
 

dark2strike

Green Team
16.04.2017
43
42
BIT
0
Уахахах, тут ещё один метод подъехал, правада тоже не новый и не супер актуальный:

через апишку гугла загоняешь все телефонные номера своей страны себе в записную книжку. синхронизируешь это на одном девайсе с телегой и получаешь телефонный номер каждого пользователя в чатике
 

Bunder99

Green Team
19.04.2017
20
12
BIT
2
через апишку гугла загоняешь все телефонные номера своей страны себе в записную книжку

А можно подробнее про это? у них разве нет ограничений на добавление количества контактов? Даже если залить их в Гугл, подтянет ли телефон такое количество контактов при синхронизации?
 

dark2strike

Green Team
16.04.2017
43
42
BIT
0
А можно подробнее про это? у них разве нет ограничений на добавление количества контактов? Даже если залить их в Гугл, подтянет ли телефон такое количество контактов при синхронизации?
Мопед не мой, сам не пробовал.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!