@theurus

Можно ли разрешить юзеру выполнять любой код в боте через команду в боте?

Вопрос даже не можно ли а насколько безопасен такой способ авторизации, можно ли как то обойти такую простую авторизацию и выполнить любой код на стороне бота не будучи в списке админов

def authorized_admin(message: telebot.types.Message) -> bool:
    return message.from_user.id in cfg.admins

@bot.message_handler(commands=['cmd'], func=authorized_admin)
def command_code(message: telebot.types.Message):
    chat_id_full = get_topic_id(message)
    lang = get_lang(chat_id_full, message)
    cmd = message.text[4:]
    if cmd:
        try:
            cmp = compile(cmd.strip(), 'test', 'exec')
            exec(cmp)
        except Exception:
            error_traceback = traceback.format_exc()
            my_log.log2(f'tb:command_code: {cmd.strip()}\n\n{error_traceback}')
    else:
        msg = f"{tr('Usage: /cmd <string to eval()>', lang)}"
        my_log.log_echo(message, msg)
        bot.reply_to(message, msg, reply_markup=get_keyboard('hide', message))


6594f05d586cb555859367.png
  • Вопрос задан
  • 31 просмотр
Пригласить эксперта
Ответы на вопрос 2
@Everything_is_bad
Например, кто-то из текущих "админов", выполнит код, который сделает так чтобы authorized_admin возвращала True для "не админов"
Ответ написан
Комментировать
alexhadock
@alexhadock
Just a tech
Настоятельно прошу Вас отказаться от этой идеи. Риски неcоизмеримо большие. https://docs.python.org/3.8/library/functions.html#exec

Таким образом можно спокойно повысить себе привелегии и вообще прокинуть reverse-shell с машины, на которой запущен Ваш бот.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы