Ubah izin file dengan bantuan kucing saya


55
root@system:~# less myfile
-bash: /bin/less: Input/output error

Sistem file root sudah mati. Tapi kucingku masih hidup (dalam ingatanku):

root@system:~# cat > /tmp/somefile
C^d
root@system:~#

Tapi dia agak kesepian, semua temannya pergi:

root@system:~# mount
-bash: /bin/mount: Input/output error
root@system:~# dmesg
-bash: /bin/dmesg: Input/output error
root@system:~# less
-bash: /bin/less: Input/output error
root@system:~# chmod
-bash: /bin/chmod: Input/output error

Sistem masih berjalan, dan memenuhi tujuannya. Saya tahu, saya tahu, satu-satunya respons yang waras untuk hal ini adalah mematikan sistem dan mengganti drive root. Sayangnya itu bukan pilihan karena akan menghabiskan banyak waktu dan uang. Juga, itu akan membunuh kucing saya, dan itu akan membuat saya sedih.

Saya sudah berpikir untuk membawanya teman biasa dari donor. Saya tidak berani mencoba scp mereka, kalau-kalau ssh mencoba memuatnya dan memotong garis (biner hilang pula). Ini terdengar seperti pekerjaan untuk sepupu kucing saya:

root@system:~# netcat -l 1234 > /tmp/less
-bash: netcat: command not found

Sayangnya dia sudah lama pergi.

Sekarang, saya dapat mencoba menipu kucing saya untuk melakukan ritual untuk membangkitkannya:

cat > netcat < /dev/tcp/localhost/9999

Dan semacam itu berhasil. Dia hampir hidup:

root@system:/tmp# /tmp/netcat
-bash: /tmp/netcat: Permission denied

Dia hanya membutuhkan percikan kecil kehidupan. +xMantra sihir kecil yang tidak bisa saya baca saat ini.

Bisakah Anda membantu saya membawa teman kucing saya kembali?


3
Bisakah Anda menjalankan /lib/ld-linux.so.2 ./netcat(atau setara dengan sistem Anda) dan menjalankan sesuatu?
Michael Homer

4
Juga: sistem operasi apa ini? Apakah Anda memiliki sistem file vfat atau NTFS yang terpasang? Sistem file jaringan? Partisi tempat Anda dapat menghapus konten? Apakah ada setiap file diakses dengan mengeksekusi izin?
Michael Homer

3
"Juga, itu akan membunuh kucingku, dan itu akan membuatku sedih." - Saya selalu berpikir pepatah "Tidak ada anak ayam yang dirugikan selama produksi ini" hanyalah pepatah, tapi ...
rugk

7
Saya benar-benar harus memperbaiki ini untuk semua analogi kucing ini ... 😂
rugk

2
kucing malang, saya harap dia baik-baik saja :(
kucing

Jawaban:


37

Ada beberapa kemungkinan, semua tergantung pada parameter yang tepat dari situasi Anda saat ini. Saya akan menganggap Linux dalam contoh-contoh berikut di mana berlaku, tetapi fungsi serupa ada pada platform lain dalam banyak kasus.

  • Anda mungkin bisa mendapatkan loader dinamis untuk menjalankan executable untuk Anda. Dengan asumsi catterkait secara dinamis, platform Anda yang setara dengan /lib/ld-linux.so.2kemungkinan juga ada di memori dan dengan demikian dapat digunakan untuk menjalankan biner:

    $ /lib64/ld-linux-x86-64.so.2 ./chmod
    chmod: missing operand

    Anda mungkin memiliki lebih dari satu (32 dan 64-bit kemungkinan) dan mungkin ada beberapa salinan yang tersedia, atau symlink yang perlu diselesaikan. Salah satunya mungkin bekerja.

  • Jika Anda memiliki sistem file vfat atau NTFS yang di-mount, atau yang lain yang memperlakukan semua file sebagai 777, Anda dapat membuat executable Anda di sana.

    $ cat > /mnt/windows/chmod < /dev/tcp/localhost/9999
  • Jika Anda memiliki sistem file jaringan yang terpasang, bahkan jika itu tidak dapat ditulis secara lokal, Anda dapat membuat file pada sistem jarak jauh dan menggunakannya secara normal.
  • Jika ada partisi yang dipasang yang tidak Anda pedulikan kontennya, pada drive yang sebagian besar masih berfungsi, Anda dapat mengganti konten dengan gambar baru dari tipe sistem file yang sama yang berisi file yang dapat dieksekusi yang Anda inginkan - catseharusnya tidak masalah untuk ini di peran yang biasa digunakan orang dd, dan Anda dapat memberikan gambar melalui jaringan.

    $ cat > /dev/sdb1 < ...

    Yang ini masuk akal, tetapi memiliki banyak tempat untuk tidak bekerja tergantung pada apa yang sebenarnya masih ada dalam memori dari partisi itu.

  • Jika ada setiap file yang diakses yang memiliki izin eksekusi pada setiap filesystem dapat ditulis, Anda dapat cat >ke dalamnya untuk mengganti isi dengan biner yang Anda pilih.

    $ cat > ~/test.py < ...
  • Karena Bash masih berjalan, Anda bisa secara dinamis memuat plugin Bash ke dalam proses yang mengekspos chmod. Secara khusus, Anda bisa menginstal dan memuatctypes.sh , yang menyediakan antarmuka fungsi asing ke Bash, lalu dlcall chmod ./netcat 511.
  • Anda dapat membawa file perpustakaan dinamis foo.sodari konstruksi Anda dan kemudian catmemuatnya atas nama Anda dengan cara LD_PRELOAD, memungkinkan Anda untuk mengeksekusi kode sewenang-wenang.

    $ LD_PRELOAD=./hack.so cat /dev/null

    Jika Anda mencegat, misalnya open:

    int open(const char *path, int flags, ...) {
        chmod(path, 0755);
        return -1;
    }

    maka Anda dapat melakukan apa pun yang perlu Anda lakukan di sana.

Saran saya adalah membawa busyboxexecutable yang terhubung secara statis sebagai item pertama (atau benar-benar, satu-satunya item) sehingga Anda memiliki berbagai perintah yang tersedia tanpa menggunakan kembali hack apa pun yang membuat Anda sampai pada titik kelelahan.


3
Re "yang terhubung secara statis busybox": Catatan yang sashsecara khusus dirancang untuk jenis penggunaan ini dan mungkin lebih mudah tersedia dalam keadaan darurat (mis. Anda dapat menginstalnya terlebih dahulu, dan membiarkan salinannya berjalan di suatu tempat sehingga tersimpan di memori ketika sistem istirahat ... atau Anda bisa membuang hewan peliharaan Anda dan membeli sekelompok sapi sebagai gantinya, saya kira).
Kevin
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.