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).

Итак, приступим:

  1. Создадим бота, через @BotFather с именем phd_quiz_bot (@PHD_OuizBot).

Оригинальный бот:

Оригинальный бот
Оригинальный бот

Созданный нами ложный бот:

Ложный бот
Ложный бот
  1. Начинаем проходить квиз у оригинального бота, для того, чтобы вытащить по 10 вопросов в каждой категории (одну из категорий придется решить на 10/10, чтобы получить валидный ответ от бота на получение мерча).

Пример вопроса:

Пример вопроса
Пример вопроса

Пример валидного ответа от бота:

Пример валидного ответа
Пример валидного ответа
  1. После того, как мы всё прорешали, у нас получился список из 60 вопросов и 6 ответов от бота по каждой категории. Переходим к кодингу.

  1. Реализовывать ложного бота будем через 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 приза.

Комментарии (2)


  1. Loxmatiymamont
    01.06.2022 09:01

    ... или просто сделать скриншот с нужными цифрами


    1. eeenvik1 Автор
      01.06.2022 13:50

      ... или просто попросить телефон с решенными тестами у друга, или попросить друга прорешать за тебя, или прорешать самому. Подходов много. Я просто показываю интересную реализацию.