Cobalt Strike的多種上線提醒方法

語言: CN / TW / HK

背景介紹

在實際攻防場景中,尤其是釣魚中,我們不太可能一直保證CS線上,尤其是當網路存在波動,或者頻繁的切換時。這時候就需要使用CS上線提醒。

現在正常使用的話,其實提醒無非分為三類。

微信提醒

以前大部分都是使用server醬進行微信推送,但是現在server醬免費版每日只能提醒5次,其餘的都需要收費,而且單次資訊中間要間隔1分鐘。

所以在這使用的是pushplus,目前Pushplus的日傳送頻率最大額為200次,基本滿足日常攻防使用。

微信單人提醒

開啟http://www.pushplus.plus/push1.html,微信掃碼關注登陸,會隨機生成一個Token。

開啟https://github.com/lintstar/CS-PushPlus裡下載兩個檔案:PushPlus.cna和PushPlus.py。

在PushPlus.py中將你剛剛的token進行替換:

配置PushPlus.cna檔案

需要注意的是,其中cmd中要使用絕對路徑

其中title以及content內容可自由定製。

修改完成後,本地python3進行測試,

收到提示後,上傳至伺服器後臺執行

sudo ./agscript xx.xx.xx.xx 埠 xx 密碼 ./PushPlus.cna > PushPlus.log 2>&

微信多人提醒

訪問http://www.pushplus.plus/push2.html儲存自己的token,然後建立新的群組

在這裡需要記住群組編號,按照Pushplus的官方文件,單人提醒與多人提醒增加了一個"topic"引數。這裡需要配置的資訊如下:"topic":"HW"

配置完成後,需要點選檢視二維碼進行訂閱進入群組,包括建立人也是要掃碼才能夠進入群組的。

掃碼完成後就會看到自己設定的提示訊息。

同樣在配置完成後,在本地進行測試,可正常收到資訊後,移動到伺服器上進行執行

問題

在實際部署過程中,可能存在部分問題。

如果提示hostname問題
則修改/etc/hosts
在127.0.0.1 localhost 後面加上主機名稱(hostname) 即可:
127.0.0.1 localhost XXX
提示java問題,然後cs中只能看到使用者退出,但是無法看到使用者進入,所以訊息不會被推送。


解決辦法:
註釋/etc/java-8-openjdk/accessibility.properties第一行內容

另外在後臺執行時,可能會提示CSAgent.jar問題

拿cs4.4舉例,預設agscript中認證.jar是CSAgent.jar,而4.4中實際為hook,需要將agscript中的CSAgent.jar替換為hook.jar,其他版本只要換成相同的認證jar即可。

釘釘上線提醒

釘釘群和上述的方法基本相同,首先需要在釘釘中拉群一個群聊,並新增一個機器人:

設定自定義

選擇新增即可獲得一個Webhook地址

在公眾號中個人設定-渠道配置

將釘釘機器人的webhook進行填寫

確認之後,在腳本里面進行修改:"channel":"webhook", "webhook":"xxxx"

本地測試後即可伺服器進行掛載。

郵件提醒

在Pushplus中,還提供了郵件提醒,配置的步驟上來講,比較簡單,在Pushplus中選擇個人資料,繫結自己的郵箱:

確認後會傳送確認郵件

然後在原來的程式碼上進行修改:只需修改"channel":"mail"即可。

注意事項

在使用Pushplus推送的流程中,還有一個比較重要的問題:如果短時間內有多個相同主機上線,Pushplus會預設不傳送重複資料內容,而且對傳送頻率也有要求

在實際過程中,幾乎很少會出現同一時間多個相同目標同時上線,如果存在這種情況,可在程式碼中加入時間戳進行判斷。

隱蔽郵件提醒

使用第三方推送可能出現的問題就是資訊洩露,這裡也可以使用crow師傅寫的指令碼進行郵件提醒。

# -*- encoding: utf-8 -*-
# Time : 2021/12/21 21:07:19
# Author: crow


import argparse
import requests
import random
import string
import json
import time
import smtplib
from email.mime.text import MIMEText
from email.header import Header




parser = argparse.ArgumentParser(description='Beacon Info')
parser.add_argument('--computername')
parser.add_argument('--internalip')
parser.add_argument('--username')
args = parser.parse_args()


internalip = args.internalip
computername = args.computername
username = args.username
ran_str = ''.join(random.sample(string.ascii_letters + string.digits, 8))
t_time = time.ctime()


content = """


您有黴國-2新主機上線啦


主機名: {}
IP: {}
使用者名稱: {}
Token: {}
上線時間:{}
請注意查收哦~
""".format(internalip, computername, username, ran_str, t_time)






#1. 傳送文字檔案


sender = '[email protected]' #發件人郵箱
receiver = '[email protected]' #收件人郵箱
mail_pass = 'cwxdebc' #qq郵箱授權碼


#text為郵件正文內容,plain為文字格式,'utf-8'為編碼格式
# text = '您有新主機上線。。。'
# content
message = MIMEText(content, 'plain', 'utf-8')


#新增Header資訊,From,To,Subject分別為傳送者資訊,接收者訊息和郵件主題
message['From'] = Header(sender, 'utf-8')
message['To'] = Header(receiver, 'utf-8')


subject = 'Cobalt Strike上線提醒'
message['Subject'] = Header(subject, 'utf-8')




try:
#smtp.xxx.com為郵箱服務型別,25為STMP的埠
smtpObj = smtplib.SMTP('smtp.qq.com', 25)#smtp.xxx.com為郵箱服務型別,25為STMP
#smtpObj = smtplib.SMTP_SSL('smtp.xxx.com', 'xxx郵件服務的埠號')


smtpObj.login(sender, mail_pass)#登入
smtpObj.sendmail(sender, receiver, message.as_string())#傳送
print ("郵件傳送成功")
except smtplib.SMTPException as e:
print(e)
print ("Error: 郵件傳送失敗")

然後修改一個CNA檔案,同樣伺服器後臺執行即可。

參考資料
https://xz.aliyun.com/t/10698

Tide安全團隊正式成立於2019年1月,是新潮資訊旗下以網際網路攻防技術研究為目標的安全團隊,團隊致力於分享高質量原創文章、開源安全工具、交流安全技術,研究方向覆蓋網路攻防、系統安全、Web安全、移動終端、安全開發、物聯網/工控安全/AI安全等多個領域。

團隊作為“省級等保關鍵技術實驗室”先後與哈工大、齊魯銀行、聊城大學、交通學院等多個高校名企建立聯合技術實驗室。 團隊公眾號自建立以來,共釋出原創文章400餘篇,自研平臺達到31個,目有18個平臺已開源。此外積極參加各類線上、線下CTF比賽並取得了優異的成績。如有對安全行業感興趣的小夥伴可以踴躍加入或關注我們