上一集我们讲到怎么在linux上面部署lagrange
现在让我们用 python 和 agressor script 写出Cobaltstrike的消息推送:
实际效果图
准备工作
Cobaltstrike Headless client (agscript,用于产生一个客户端,持续性地运行我们的脚本)
Python3
Lagrange消息平台
配置Lagrange
如果你不知道如何部署Lagrange,请移至 在x64 Linux上部署Lagrange.Onebot (QQ消息平台) - 残酷世界的传说 (yamero.cc)
欲发送消息到QQ,我们首先需要与消息平台通信,再由消息平台直接联系腾讯服务器
那么怎么与消息平台通信呢?我们可以使用lagrange的API,这符合Onebot V11的标准
首先,需要在lagrange开启http监听器
在 Implementations 下面添加:
{
"Type": "Http",
"Host": "127.0.0.1",
"Port": 8083,
"AccessToken": "changeme"
}
其中AccessToken是客户端发送get请求时的密钥
了解API
开启监听器后,我们将在之后的python脚本中使用下面的api:
send_group_msg
发送群消息
参数
调用例子:
127.0.0.1/send_group_msg?group_id=123456&message=[CQ:text,text="hello"]?auto_escape=false
Python部分
先规划python的代码,需要使用requests库去连接lagrange的api
代码也是比较简单:
保存为 onebot.py
import requests
from requests.compat import urljoin, urlencode, quote_plus
import sys
if len(sys.argv) < 4:
print("Usage: computer_name user_name ip_ex ip_in")
exit()
api_host = "127.0.0.1"
api_port = 8083
api_group = 你的qq群
access_token = "你的token"
computer_name = sys.argv[1]
user_name = sys.argv[2]
user_ip = sys.argv[3]
user_ip_internal = sys.argv[4]
msg = f"有主机上线了喵! 注意查收哦\n主机名:{computer_name}\n用户名:{user_name}\nIP: {user_ip} (外网) / {user_ip_internal} (内网)"
try:
response = requests.get(
urljoin("http://" + api_host + f":{api_port}".format(api_port=api_port), quote_plus("send_group_msg")),
{
"group_id": str(api_group),
"message": f"[CQ:text,text={msg}]".format(msg=msg),
"auto_escape": "false",
"access_token": access_token
},
)
if response.status_code == 401:
print("wrong token.")
except Exception as e:
print(e)
可以自己先试一下代码,看看消息能不能发出去
python3 onebot.py what no yes ok
正常的情况是这样的:
Agressor Script部分
现在我们实现了与qq通信,该进一步将python脚本整合进cobaltstrike了!
Agressor Script是运行在客户端上的脚本,当然也可以运行在服务端上面,不过这需要一个客户端持续地连接
我记得cs以前的版本客户端里面是自带有agscript,但是我这边的4.9没有
如果client里面没有agscript,你需要自己创建一个先:
echo "java -XX:ParallelGCThreads=4 -XX:+AggressiveHeap -XX:+UseParallelGC -javaagent:uHook.jar -classpath ./cobaltstrike-client.jar aggressor.headless.Start $*" > agscript
chmod +x agscript
然后下面开始编写cobaltstrike-msg.cna
on beacon_initial {
println("Initial Beacon Checkin: " . $1 . " PID: " . beacon_info($1,"pid"));
local('$internalIP $computerName $userName');
$externalIP = replace(beacon_info($1, "external"), " ", "_");
$internalIP = replace(beacon_info($1, "internal"), " ", "_");
$userName = replace(beacon_info($1, "user"), " ", "_");
$computerName = replace(beacon_info($1, "computer"), " ", "_");
$cmd = 'python3 /root/CobaltSrike_4.9.1/Client/onebot.py' . ' ' . $computerName . ' ' . $userName . ' ' . $externalIP . ' ' . $internalIP;
exec($cmd);
}
(话说字符串的连接方式真的反人类
注意要把cmd里面的onebot.py改为你的python脚本路径
保存后,输入
./agscript 127.0.0.1 端口 agent cs服务端的密码 cobaltstrike-msg.cna
即可产生一个持续的脚本客户端,连接到我们的cs服务端
&