Skip to main content

Фарм мерча от Positive Technologies на PHD11

·458 words·3 mins
Misc PHD11 Telebot Telegram

Фарм мерча от Positive Technologies на PHD11
#

img

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_OuizBot с именем phd_quiz_bot.

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

img

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

img

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

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

img

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

img

  1. После того, как мы всё прорешали, у нас получился список из 60 вопросов и 6 ответов от бота по каждой категории. Переходим к кодингу.
  2. Реализовывать ложного бота будем через 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())
...

Не стоит забывать про ответ бота при нажатии на другие кнопки:

img

elif call.data == "error_1": 
        bot.send_message(CHAT_ID, "Ты что, хакер?")

Как итог мы имеем аналогичного бота с “правильно решенными” вопросами:

img

P.S. автор честно прорешал 3 категории на 10 баллов (правда с разных аккаунтов) и получил только 3 приза.