Фарм мерча от Positive Technologies на PHD11 #
C 18 по 19 мая 2022 года проходил всем известный международный форум по практической безопасности Positive Hack Days. На мероприятии как всегда были представлены различные вендоры из сферы IT, каждый из которых раздавал свои именные товары. Самыми интересными на мой взгляд были Positive Technologies.
И так, для получения мерча, вендором было предложено успешно пройти квиз (набрать 10 очков из 10 или 100% правильных ответов) по различным темам, а именно:
- Анализ защищенности web приложений
- Безопасность мобильных приложений
- Вопросы от SOC
- Пентест
- АСУТП
- Linux
Реализация самого квиза - это телеграмм бот @PHD_QuizBot, который имеет имя phd_quiz_bot
.
Немного потыкав самого бота и поняв логику его работы, а также, внимательно посмотрев на имя бота понимаем что буква Q очень сильно похожа на букву O.
Сразу же появилась идея создать копию данного бота используя атаку тайпсквоттинг. Тайпсквоттинг - это вид атак социальной инженерии,
нацеленный на пользователей интернета, допустивших опечатку при вводе веб-адреса в браузере и не использующих поисковую систему.
(в данном случае мы подменим букву Q на букву O).
Итак, приступим:
- Через @BotFather создадим своего бота @PHD_OuizBot с именем
phd_quiz_bot
.
Оригинальный бот:
Созданный нами ложный бот:
- Начинаем проходить квиз у оригинального бота, для того, чтобы вытащить по 10 вопросов в каждой категории (одну из категорий придется решить на 10/10, чтобы получить валидный ответ от бота на получение мерча).
Пример вопроса:
Пример валидного ответа от бота:
- После того, как мы всё прорешали, у нас получился список из 60 вопросов и 6 ответов от бота по каждой категории. Переходим к кодингу.
- Реализовывать ложного бота будем через python и библиотеку
telebot
:
import telebot
from telebot.types import InlineKeyboardMarkup, InlineKeyboardButton
bot = telebot.TeleBot(<'bot_API_key'>)
CHAT_ID = <'Your chat id'>
Для того, чтобы узнать chat_id
нужно написать этому боту @getmyid_bot.
Ответ будет выглядеть так:
Your user ID: 666******
Current chat ID: 666******
Теперь пропишем каждый вопрос и ответ на него:
message_SOC_1 = '''Какой прикладной протокол затрагивает уязвимость BlueKeep?
1 SMB
2 SMTP
3 RDP
4 FTP'''
def gen_markup_SOC_1():
markup = InlineKeyboardMarkup()
markup.row_width = 4
markup.add(InlineKeyboardButton("1✔️", callback_data="cb_yes"),
InlineKeyboardButton("2", callback_data="cb_no"),
InlineKeyboardButton("3", callback_data="cb_no"),
InlineKeyboardButton("4", callback_data="cb_no"))
markup.row_width = 8
markup.add(InlineKeyboardButton("Следующий вопрос", callback_data="cb_yes"))
return markup
...
Также пропишем валидный ответ от бота по каждой категории (незабываем про markdown разметку):
message_result_1 = '''Раздел:ЭСК
*Вопросы от SOC*
Правильных ответов 10 из 10
Ты такой молодец! Набрал прекрасное количество баллов.
Покажи этот экран одному из организаторов на стойке и выбирай подарок.'''
...
Пропишем функцию ответа бота при нажатии на кнопки:
def callback_query(call):
if call.data == "rez_1":
bot.send_message(CHAT_ID, message_result_1, parse_mode='markdown')
bot.send_message(CHAT_ID, message_main_menu, reply_markup=gen_markup_menu())
...
Не стоит забывать про ответ бота при нажатии на другие кнопки:
elif call.data == "error_1":
bot.send_message(CHAT_ID, "Ты что, хакер?")
Как итог мы имеем аналогичного бота с “правильно решенными” вопросами:
P.S. автор честно прорешал 3 категории на 10 баллов (правда с разных аккаунтов) и получил только 3 приза.