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.cna
和PushPlus.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