• Codeby web-security - Курс "Тестирование Веб-Приложений на проникновение с нуля" от команды codeby. Общая теория, подготовка рабочего окружения, пассивный фазинг и фингерпринт, Активный фаззинг, Уязвимости, Пост-эксплуатация, Инструментальные средства, Social Engeneering и многое другое. Подробнее ...

  • Мобильный клиент нашего форума для Android гаджетов доступен в Google Play Market по этой ссылке. Клиент можно скачать с нашего форума по этой ссылке. Последняя версия МК в нашем телеграм канале вот здесь

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

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

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

Но мы же хакеры, нам не интересны топорные методы, гораздо круче написать свой собственный переборщик номеров, который сделает работу за считанные секунды. Мне больше всего нравится язык 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 запрос на данный скрипт с указанием предлагаемой стоимости ;)
 
Последнее редактирование:
31.12.2017
88
95
#3
Хех, несколько минут покопался, измени пару переменных, и теперь можно вытаскивать Fist - Last name, Username. Код занял 16 строк.
 
Последнее редактирование:
16.04.2017
29
20
#4
Ролли, подскажи, как имена вытаскивал? Они же должны быть назначены тобой при добавлении юзера по номеру телефона. Правда я не пробовал, может быть если не добавлять их, то приходят оргинальные.
 
Последнее редактирование:
31.12.2017
88
95
#5
Ролли, подскажи, как имена вытаскивал? Они же должны быть назначены тобой при добавлении юзера по номеру телефона. Правда я не пробовал, может быть если не добавлять их, то приходят оргинальные.
contact_info.first_name
contact_info.last_name
contact_info.username

Ролли, подскажи, как имена вытаскивал? Они же должны быть назначены тобой при добавлении юзера по номеру телефона. Правда я не пробовал, может быть если не добавлять их, то приходят оргинальные.
У тебя еще ошибка в коде, connect.start, или это защита от скрипткидисов?
 
16.04.2017
29
20
#6
Я понимаю как обратиться к элементам объекта типа .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(), который отсутсвует в более новых версиях. А это значит, что скрипткиддисам будет немножко сложнее ;) потому что надо нагуглить(это же так сложно) как выполнить этот шаг в новой версии. Либо как пип ставит более старую версию либы, это, кстати, попроще будет ;)
 
31.12.2017
88
95
#7
Я понимаю как обратиться к элементам объекта типа .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()
 
16.04.2017
29
20
#8
Как не нужна? Ты же формируешь объект contact, где указываешь номер телефона, для того что бы дальше передать этот объект аргументом к функции ImportContactsRequest([contact])
 
#10
более актуальна сейчас тема с получением номера телефона имея лишь ник нейм
суть в том что якобы если послать тикет на пользователя через апи телеграма то в ответе должен быть номер телефона

кто успел опробовать отпишитесь пожалуйста, тру или бред?)
 
16.04.2017
29
20
#11
Не стыдно ли Вам зарабатывать на чужой информации и называть других кидисами. Я сам потом полный код выложу с объяснением для новичков
На какой чужой информации? Эта псевдо бага известна каждому, кто юзает телеграм. Просто был хайп в СМИ, и я решил создать иллюстрацию, но поскольку в сети очень много заказов на подобную программу, я решил скрыть часть инфы для того что бы нубы не копировали код и не продавали его, не вложив и грамма мозга.
 
16.04.2017
29
20
#12
более актуальна сейчас тема с получением номера телефона имея лишь ник нейм
суть в том что якобы если послать тикет на пользователя через апи телеграма то в ответе должен быть номер телефона

кто успел опробовать отпишитесь пожалуйста, тру или бред?)
В конце я написал солюшн как можно провернуть обратный процесс. Но для этого нужно много ресурсов, то есть покупать тысячи аккаунтов и собирать номера сотовых операторов, для последовательного перебора.

Вариант про отправку тикета не пробовал. Мало подробностей. Куда, какой тикет? Это можно сделать либо со своего телеграм аккаунта, либо по емэйл. Не ясно где тут можно подсунуть чужой ник и получить по нему номер.
 

WebWare Team

Администратор
30.12.2015
2 090
2 760
#13
Последнее редактирование:
Симпатии: Понравилось m0nstr
#15
Telegram-CLI-Tools ищет по номеру телефона, потом уже можете искать @shortname

-Удобный импорт в телефон (самый быстрый способ)
-Средней скорости перебор в заданном диапазоне
 
16.04.2017
29
20
#16
Telegram-CLI-Tools ищет по номеру телефона, потом уже можете искать @shortname

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

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

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