Asumsikan ada pintu belakang (mungkin tidak disengaja).
/etc/passwd
default di stasiun kerja Sun pada awal 1990-an menyertakan entri seperti ini:
games::0:0:games:/nopath:/bin/false
Dengan kata lain, akun bernama 'permainan' tanpa kata sandi. Rupanya si jenius yang datang dengan ide ini tidak memiliki imajinasi, dan menetapkannya sebagai uid dan gid nol (yaitu akar dan roda). Secara umum, tidak apa-apa, karena direktori home tidak ada artinya dan shell disetel ke program yang selalu keluar dengan kegagalan. Selain itu, pengaturan default untuk setiap akses melalui jaringan -- telnet, rlogin, rcp, ftp -- telah diatur untuk mencegah akses oleh setiap uid dari nol. Ada entri passwd terpisah untuk root, dengan kata sandi, direktori home, dan shell yang disetel dengan benar.
Artinya, jika Anda mencoba masuk sebagai game, hal berikut akan terjadi:
- Masuk sebagai game di konsol pada awalnya akan berhasil, tetapi kemudian menelurkan
/bin/false
shell, yang akan segera keluar. - Menggunakan telnet atau rlogin akan langsung menolak login. Bahkan jika berhasil,
/bin/false
shell akan segera berhenti. - FTP dan scp tidak menggunakan shell, tetapi keduanya dikonfigurasi untuk menolak akses ke uid zero, sehingga Anda tidak dapat masuk dengan cara ini.
- Login GUI akan memulai layanan GUI default, termasuk pengelola jendela, klien jam, dan terminal. Yang terakhir akan segera keluar karena cangkang anaknya akan segera keluar. Jadi Anda akan mendapatkan layar kosong kecuali jam. (Lebih lanjut tentang ini di bawah...)
- Jika Anda benar-benar memilikinya untuk masuk sebagai root, Anda harus melakukannya dari konsol, atau terlebih dahulu rlogin/telnet sebagai pengguna lain di mesin itu lalu
su root
. Either way menggunakan rootpasswd
entri daripada gamepasswd
entri, dan dengan demikian berfungsi sebagaimana seharusnya root bekerja.
Jadi akun game sepertinya selalu gagal, kecuali jika Anda melakukan login GUI. Dalam hal ini, satu-satunya yang muncul adalah jam. Namun, Anda dapat mengeklik kanan latar belakang untuk mendapatkan menu root, dengan daftar program yang disediakan pabrik yang biasanya disesuaikan sendiri oleh pengguna. (Menyesuaikan menu tidak berfungsi untuk akun game; saya tidak ingat persis mengapa.) Anda dapat mencoba membuka lebih banyak jendela terminal, yang semuanya akan gagal. Ada permainan puzzle (yang mungkin menjadi pendorong untuk akun tersebut sejak awal). Pilihan lain adalah keluar. Lalu ada alat debug grafis, dbxtool
.
dbxtool
adalah antarmuka grafis untuk dbx
debugger simbolis, mirip dengan gdb
hari ini . Menjadi nol uid, Anda dapat melampirkan dan mengontrol proses apa pun pada sistem, meskipun ini tidak berguna karena program yang disediakan oleh Sun dikompilasi tanpa simbol. Anda dapat meluncurkan sebuah shell, tetapi ini akan menggunakan SHELL
Anda variabel lingkungan, yaitu /bin/false
. Namun, Anda juga dapat mengubah variabel lingkungan! Ini berarti Anda bisa mendapatkan shell root dengan cara berikut:
- Masuk melalui GUI sebagai game, tanpa kata sandi.
- Klik kanan untuk membuka menu akar.
- Mulai
dbxtool
. setenv SHELL /bin/sh
- (Opsional)
setenv HOME /
- Mulai shell dengan
!
- Karena terminal tidak disetel, lakukan
stty sane
Voila, root shell tanpa kata sandi!
Jadi, jangan berasumsi bahwa pengguna tidak dapat keluar dari shell yang tidak valid.
Anda tidak dapat melewati eksekusi skrip. Ini adalah login shell Anda , dan akan dimulai setiap kali Anda login. Dan sebagai login shell , akan mengeluarkan Anda setiap kali itu berakhir. Namun Anda dapat menggunakan keanehan, bug, dan ketidakkonsistenan pada shell login untuk keluar.
Satu hal yang dapat Anda lakukan adalah melarikan diri ke shell menggunakan opsi apa pun di menu. Jika menu memungkinkan Anda memulai vim
, less
, more
atau beberapa perintah lain, secara teoritis Anda dapat membebaskan diri. Jika sysadmin berpengalaman, perintah tersebut akan menggunakan versi terbatasnya dan tidak akan berfungsi.
Saya ingat tantangan permainan di mana ada kasus serupa - shell menunjuk ke sesuatu yang hanya mencetak beberapa keluaran menggunakan lebih perintah, lalu mengakhiri sesi. Namun, sejak lebih fitur editor teks bawaan (dalam hal ini adalah vi), itu cukup untuk mengubah ukuran jendela terminal dari mana Anda terhubung sehingga lebih banyak yang diaktifkan, lalu menggunakannya untuk keluar dari shell.
Jadi, jawabannya tergantung pada apa yang dilakukan skrip Anda. Periksa pria halaman untuk setiap perintah yang Anda jalankan untuk menghindari kerentanan.