SQL-Injection в Telegram

Qx-bit

Новичок
Статус
offline
Регистрация
29.11.2019
Сообщения
10
Репутация
2
Всем привет, сделал на днях шоп из того что нашёл(Скрипт готового шопа + немного своих плюшек в коде), запустил всё.
Чуть позже нашёл людей, чтобы протестировать и оценить работу шопа, но среди них нашёлся чел который смог без лишней шелухи смог изменить свой баланс(Изменить значение в mysql), сказал что посредством SQL-Inject`a.

Вопрос, как это возможно и как от этого защитится?

P.s
Логи до этого случая не вёл, и в Гугле ничего не нашёл.
 

Qx-bit

Новичок
Статус
offline
Регистрация
29.11.2019
Сообщения
10
Репутация
2
Разобрался сам, не актуально.
 

Wyles

Резидент
Статус
offline
Регистрация
31.10.2019
Сообщения
106
Репутация
125
Рассказывай тогда уж, в чём трабла была?
 

zumez

Новичок
Статус
offline
Регистрация
30.11.2020
Сообщения
6
Репутация
6
Да, расскажи. Как фиксанул?
 

blackdoubleway

Участник
Статус
offline
Регистрация
10.07.2019
Сообщения
2
Репутация
32
Да наверное вывод отрицательного баланса был
 

LeProfesso

Новичок
Статус
offline
Регистрация
13.11.2020
Сообщения
0
Репутация
6
Всем привет, сделал на днях шоп из того что нашёл(Скрипт готового шопа + немного своих плюшек в коде), запустил всё.
Чуть позже нашёл людей, чтобы протестировать и оценить работу шопа, но среди них нашёлся чел который смог без лишней шелухи смог изменить свой баланс(Изменить значение в mysql), сказал что посредством SQL-Inject`a.

Вопрос, как это возможно и как от этого защитится?

P.s
Логи до этого случая не вёл, и в Гугле ничего не нашёл.
Рассказывай, а то некрасиво получается!
 

Qx-bit

Новичок
Статус
offline
Регистрация
29.11.2019
Сообщения
10
Репутация
2
Заранее извините за ожидание, делаю свой форум(тут вроде запрещенна реклама сторонних проектов, поэтому промолчу) :)
Ближе к делу.
Ошибка была в обработке команды start через url, это место в коде было единственным откуда можно было сделать запрос в БД, так как БД была расчерчена, то запрос выглядел так, в браузере открываем ссылку
Для эксплуатации необходимо 2 аккаунта tg, на первом узнаём свой id, а со второго отправляем запрос
https://t.me/hacknet_shop_bot?start=update users set balance = "Какой-хочешь баланс" where user_id = "Ебаный id"
Вместо hacknet_shop_bot вставляем имя другого шопа
И чекаем баланс, должен вырасти.
Вот *улучшенная* версия кода(Прошу не пинать, было сделано за 15 минут)
Python:
@bot.message_handler(commands=['start'])
    def handler_start(message):
        chat_id = message.chat.id
        msg = message.text
        try:
            if message.text == '/start':
                log_msg(f"[{message.from_user.username}] >>> {message.text}")
                func.first_join(user_id=chat_id, name=message.from_user.username, code=message.text[6:])

                bot.send_message(chat_id,
                                 'Добро пожаловать {}, user id - {}'.format(message.from_user.first_name,
                                                                    chat_id,),
                                 reply_markup=menu.main_menu)
            else:
                int(msg[7:15])
                if len(msg) > 18:
                    int("Error")
                log_msg(f"[{message.from_user.username}] >>> {message.text}")
                func.first_join(user_id=chat_id, name=message.from_user.username, code=message.text[6:])

                bot.send_message(chat_id,
                                 'Добро пожаловать {}, user id - {}'.format(message.from_user.first_name,
                                                                        chat_id,),
                                 reply_markup=menu.main_menu)
        except(ValueError):
            log_msg(f"[{message.from_user.username}] Anti-SQL INJECTION Message >>> {message.text}")
            bot.send_message(chat_id,
                             'Привет, спасибо за наводку на дыру @nom0st\nДля запуска напиши /start')
 

Kapa

Новичок
Статус
offline
Регистрация
02.09.2020
Сообщения
0
Репутация
2
Заранее извините за ожидание, делаю свой форум(тут вроде запрещенна реклама сторонних проектов, поэтому промолчу) :)
Ближе к делу.
Ошибка была в обработке команды start через url, это место в коде было единственным откуда можно было сделать запрос в БД, так как БД была расчерчена, то запрос выглядел так, в браузере открываем ссылку
Для эксплуатации необходимо 2 аккаунта tg, на первом узнаём свой id, а со второго отправляем запрос
https://t.me/hacknet_shop_bot?start=update users set balance = "Какой-хочешь баланс" where user_id = "Ебаный id"
Вместо hacknet_shop_bot вставляем имя другого шопа
И чекаем баланс, должен вырасти.
Вот *улучшенная* версия кода(Прошу не пинать, было сделано за 15 минут)
Python:
@bot.message_handler(commands=['start'])
    def handler_start(message):
        chat_id = message.chat.id
        msg = message.text
        try:
            if message.text == '/start':
                log_msg(f"[{message.from_user.username}] >>> {message.text}")
                func.first_join(user_id=chat_id, name=message.from_user.username, code=message.text[6:])

                bot.send_message(chat_id,
                                 'Добро пожаловать {}, user id - {}'.format(message.from_user.first_name,
                                                                    chat_id,),
                                 reply_markup=menu.main_menu)
            else:
                int(msg[7:15])
                if len(msg) > 18:
                    int("Error")
                log_msg(f"[{message.from_user.username}] >>> {message.text}")
                func.first_join(user_id=chat_id, name=message.from_user.username, code=message.text[6:])

                bot.send_message(chat_id,
                                 'Добро пожаловать {}, user id - {}'.format(message.from_user.first_name,
                                                                        chat_id,),
                                 reply_markup=menu.main_menu)
        except(ValueError):
            log_msg(f"[{message.from_user.username}] Anti-SQL INJECTION Message >>> {message.text}")
            bot.send_message(chat_id,
                             'Привет, спасибо за наводку на дыру @nom0st\nДля запуска напиши /start')
А айди то как узнать ?