从零开始开发CS beacon(三)

阅读量322811

|

发布时间 : 2021-12-20 16:30:00

 

0x01 netbios加解密

​ 因为我也才学golang,基本面向github编程,在网上只找到python版加解密的方式,所以需要翻译成go语言。通过正则匹配加密传输的内容,解密执行获取cmdtype对应的操作,然后加密发送。

编写加密代码:

func NetbiosEncode(data []byte) string{
   q := ""
   for _,value := range data{
        q += string((int(value)>>4) + int('a'))+string((int(value)&0xf + int('a')))
   }
    return q
}

最终成功上线如下,能够看见心跳包与执行命令都是正常的,说明加解密是没问题的:

 

0x02 项目优化

因为上线后,显示如下,开始我以为是CS显示问题,后来发现是代码实现问题:

computer 与 prcoess 都不能正确获取,我们定位到sysinfo文件夹下meta.go文件,其中实现了收集beacon所在机器基本信息。

BUG-1:获取进程名

func GetProcessName() string {
    processName := os.Args[0]
    //fmt.Printf("processName: %v\n", processName)
    // C:\Users\admin\Desktop\cmd.exe
    // ./cmd
    slashPos := strings.LastIndex(processName, "\\")
    if slashPos > 0 {
        return processName[slashPos+1:]
    }
    backslashPos := strings.LastIndex(processName, "/")
    if backslashPos > 0 {
        return processName[backslashPos+1:]
    }
    return "unknown"
}

这里原作者想到的是,带路径的执行参数,但是经过我测试,os.Args[0]获取到的就是当前exe名称,并不是一个绝对路径,如果是绝对路径可以通过下面判断截取EXE名。这里修改也简单,直接return processName就正常了。

BUG-2:获取机器名

func GetComputerName() string {
    sHostName, _ := os.Hostname()
    fmt.Printf("sHostName: %v\n", sHostName)
    // message too long for RSA public key size
    if len(sHostName) > 10 {
        sHostName = sHostName[1 : 10-1]
    }
    if runtime.GOOS == "linux" {
        sHostName = sHostName + " (Linux)"
    } else if runtime.GOOS == "darwin" {
        sHostName = sHostName + " (Darwin)"
    }
    return sHostName
}

这里机器名不能全部显示,确实跟他注释的原因一样,但是经过我测试发现,最长可以使用sHostName[0 : 14]切片。

BUG-3: 不能下载大的文件

当使用download 下载命令时,小文件可以下载,但是略微大的文件会出现如下报错:

经过多次调试实验发现,以下语句有问题(我这里通过BP抓包发现的):

fileBuf := make([]byte, 512*1024)

他默认一次传输512kb数据,可是在header中如果数据过长会提示:BAD REQUEST: header length is too large

所以这里很简单,我们就一次传小点,比如2kb。重新编译就上线:

 

0x03 总结

​ 到这里,整个CS beacon适用自定义profile的开发流程就介绍完毕了,优化了原程序BUG,当然还有其他很多可以优化的地方。这个项目Geacon只实现了最基本功能,不像原生beacon那么多样,你就可以使用golang实现某些CS功能,比如execute-assembly,判断cmdtype就行。因为我的需求是CS跨平台的beacon,容易免杀(golang也有一些免杀的trick),后面还可以添加反调试的功能。项目地址:https://github.com/Nan3r/geacon_apt

本文由anw2原创发布

转载,请参考转载声明,注明出处: https://www.anquanke.com/post/id/263172

安全客 - 有思想的安全新媒体

分享到:微信
+10赞
收藏
anw2
分享到:微信

发表评论

内容需知
合作单位
  • 安全客
  • 安全客
Copyright © 北京奇虎科技有限公司 三六零数字安全科技集团有限公司 安全客 All Rights Reserved 京ICP备08010314号-66