Stagr0 or Stager1

序言

  • 何为 Stager0 ?
    • 我们都知道Stager 是分阶段意思,在渗透测试中我们在不同对阶段需要不同功能,而在C2中也是这样的,可以分为建立立足点、内网渗透、持久化控制等阶段,而Stager0 则代表建立立足点和持久化控制阶段。
  • Stager0 和Stager1 区别?
    • Stager0 功能简单,Stager1功能复杂。
    • Stager0 加载Stager1。
    • Stager0 注重隐蔽,作用是持久化控制。
    • Stager1 注重功能,主要是实现各种功能。

Stager0 可以理解为小马,加载器,但是本身具有一些简单功能。

Stager0 介绍

功能介绍

  • 执行命令(并返回结果)
  • 文件操作
    • 上传文件
    • 下载文件
  • 加载ShellCode (此功能不是优先考虑)

通信协议

由于Stager0 首重隐蔽,所以优先考虑DNS协议,而且DNS协议局限小,实际效果好。具体通信协议参考CobaltStrike DNS Beacon。原则做到以下几点。

  • 简洁,不必要数据不要
  • 隐蔽性好,避免出现特征
  • 通信加密,防止内容被解密

通信流程

通信流程按照木马上线时间来列举。

心跳包

存活检测,可自由更改间隔时间,默认时间为60秒。

大写字母为自定义值,小写字母为固定内容。

DNS 查询类型:A
查询域名:www.UUID.domain.com
UUID 为主机随机ID,用于机器唯一ID,长度未定

返回结果:8.8.8.8

任务查询

查询是否有任务,没有任务则循环

DNS 查询类型:A
查询域名:www.UUID.domain.com
UUID 为主机随机ID,用于机器唯一ID,长度未定

返回结果:8.8.8.1
进行任务1
- 上传系统信息

返回结果:8.8.8.2
进行任务2
- 上传文件

返回结果:8.8.8.3
进行任务3
- 下载文件

返回结果:8.8.8.4
进行任务4
- 执行命令

返回结果:8.8.8.5
进行任务5
- 加载ShellCode

元数据

上报系统信息。包括(Hostname、IP、PID、OS)

// 查询任务
DNS 查询类型:A
查询域名:www.UUID.domain.com
UUID 为主机随机ID,用于机器唯一ID,长度未定

返回结果:8.8.8.1
进行任务1
- 上传系统信息

程序收集系统信息并进行加密(加密方法未定)和编码(编码需要考虑不能包含特殊字符不能进行DNS查询)

// 传输内容
DNS 查询类型:TXT
查询域名:update.UUID.TARICK.INT.STRING.domain.com
UUID 为主机随机ID,用于机器唯一ID,长度未定
TARICK 为任务ID
INT 为传输顺序ID,乱序传输也可以后期排序
STRING 为传输内容

返回结果:8.8.8.8 (服务响应正常)

// 传输内容结束
DNS 查询类型:TXT
查询域名:upgrade.UUID.TARICK.domain.com
UUID 为主机随机ID,用于机器唯一ID,长度未定
TARICK 为任务ID

返回结果:8.8.8.8 (服务响应正常)

文件传输

文件传输分为上传文件与下载文件,数据由4部分组成(本地文件名、远程文件名、文件长度、文件内容)

数据由后段程序进行解析

文件上传
// 查询任务
DNS 查询类型:A
查询域名:www.UUID.domain.com
UUID 为主机随机ID,用于机器唯一ID,长度未定

返回结果:8.8.8.1
进行任务2
- 上传文件

程序将本地文件进行加密(加密方法未定)和编码(编码需要考虑不能包含特殊字符不能进行DNS查询)

// 传输内容
DNS 查询类型:TXT
查询域名:upload.UUID.TARICK.INT.STRING.domain.com
UUID 为主机随机ID,用于机器唯一ID,长度未定
TARICK 为任务ID
INT 为传输顺序ID,乱序传输也可以后期排序
STRING 为传输内容

返回结果:8.8.8.8 (服务响应正常)

// 传输内容结束
DNS 查询类型:TXT
查询域名:upgradefile.UUID.TARICK.domain.com
UUID 为主机随机ID,用于机器唯一ID,长度未定
TARICK 为任务ID

返回结果:8.8.8.8 (服务响应正常)
文件下载
// 查询任务
DNS 查询类型:A
查询域名:www.UUID.domain.com
UUID 为主机随机ID,用于机器唯一ID,长度未定

返回结果:8.8.8.3
进行任务3
- 下载文件

程序将本地文件进行加密(加密方法未定)和编码(编码需要考虑不能包含特殊字符不能进行DNS查询)

// 传输内容
DNS 查询类型:TXT
查询域名:download.UUID.TARICK.INT.STRING.domain.com
UUID 为主机随机ID,用于机器唯一ID,长度未定
TARICK 为任务ID
INT 为传输顺序ID,乱序传输也可以后期排序
STRING 为传输内容

返回结果:8.8.8.8 (服务响应正常)

// 传输内容结束
DNS 查询类型:TXT
查询域名:downloadfile.UUID.TARICK.domain.com
UUID 为主机随机ID,用于机器唯一ID,长度未定
TARICK 为任务ID

返回结果:8.8.8.8 (服务响应正常)

命令执行

调用cmd执行命令,并将结果返回

ShellCode 加载