GNU/Linux >> Belajar Linux >  >> Linux

Manipulasi fungsi Bash dijelaskan

Apa yang dilakukan setresuid() dan setresgid() lakukan?

Untuk lebih memahami contoh ini, kita perlu melihat kedua fungsi ini dan tiga parameter yang digunakannya.

Dari jawaban ini (dan halaman manual kredensial(7)):

Di Linux, setiap proses memiliki pengenal pengguna dan grup berikut:

  • ID pengguna nyata dan ID grup nyata. ID ini menentukan siapa yang memiliki proses. Ringkasnya, inilah siapa Anda .

  • ID pengguna yang efektif dan ID grup yang efektif. ID ini digunakan oleh kernel untuk menentukan izin yang akan dimiliki proses saat mengakses sumber daya bersama seperti antrean pesan, memori bersama, dan semafor. Pada sebagian besar sistem UNIX, ID ini juga menentukan izin saat mengakses file. Namun, Linux menggunakan ID sistem file untuk tugas ini. Ringkasnya, inilah yang dapat Anda lakukan .

  • Set-user-ID tersimpan dan set-group-ID tersimpan. ID ini digunakan dalam program set-user-ID dan set-group-ID untuk menyimpan salinan dari ID efektif terkait yang ditetapkan saat program dijalankan. Program set-user-ID dapat mengasumsikan dan melepaskan hak istimewa dengan mengalihkan ID pengguna efektifnya bolak-balik antara nilai dalam ID pengguna aslinya dan set-user-ID yang disimpan. Ringkasnya, inilah siapa Anda sebelumnya .

Selanjutnya, penting untuk memahami SetUID-Bit. Apa yang dilakukan adalah menjalankan program yang dapat dieksekusi dengan hak pemilik, bukan orang yang memanggilnya.

Sebuah nightmare keamanan

Pertanyaan Anda secara khusus menyebutkan bahwa nightmare dimiliki oleh root dan memiliki set SetUID-Bit. Artinya, setiap pengguna yang diizinkan untuk mengeksekusi nightmare dasarnya mengeksekusinya sebagai root . Ini berarti bahwa semua proses turunan dari nightmare - seperti yang muncul saat memanggil system() - juga dieksekusi sebagai root .

Tapi sebenarnya sekarang, apa artinya setresuid() lakukan?

Pada konteks ini? Tidak ada apa-apa. Karena pengguna sudah menjalankan hal-hal sebagai root , itu tidak memengaruhi eksploitasi lebih lanjut dengan cara apa pun.

Bisakah Anda menggunakan /dev/tty ?

Pertanyaan ini tidak masuk akal dalam konteks ini. Anda harus melihat cuplikan kode yang relevan untuk melihat di mana string /dev/tty berasal dari.

if (open("/dev/tty", O_RDWR) != -1) {
        fire();
        rax = sub_4008d0();
}

Ini berarti program sedang mencoba membuka /dev/tty untuk membaca dan menulis dan jika berhasil, panggil fire() .

Dengan menamai fungsi bash /dev/tty() , Anda tidak mendapatkan hasil yang diinginkan, seperti open() membutuhkan path ke file sebagai parameter pertama. Ini sepenuhnya independen dari bash dan tidak memiliki konsep fungsi bash.

Bagaimana dengan puts() ?

Demikian pula, ini tidak masuk akal. strings bukan sihir dan tidak mengerti konteks. Yang dilakukan hanyalah mencari rangkaian byte yang merupakan karakter ASCII yang dapat dicetak.

puts() hanyalah fungsi-C yang menghasilkan string.

Bagaimana dengan /usr/bin/aafire ?

Meskipun saya tidak mencoba secara pribadi, sepertinya praktis /usr/bin/aafire bisa digunakan sebagai pengganti /usr/bin/sl -al . Jika ini tidak benar, beri komentar dan saya akan mengedit bagian ini.

Apakah masih berfungsi jika jalur relatif akan digunakan?

Ya, sebenarnya lebih baik! system() secara internal memanggil sh -c , yang harus menyelesaikan $PATH variabel untuk menemukan sl . Jika variabel jalur dimodifikasi untuk memasukkan . atau direktori lain yang dapat ditulis pengguna dengan prioritas lebih tinggi dari /usr/bin , maka saya hanya bisa melakukan symlink ./sl ke /bin/bash .

Apakah penting apa jenis biner/ELF file SUID root?

Ya, karena SetUID-Bit diabaikan pada skrip shell. Itu harus dapat dieksekusi asli.


Linux
  1. Fungsi Root Grup Pengguna??

  2. Bash Seri Pemula #9:Menggunakan Fungsi di Bash

  3. Apa gunanya $# di Bash

  1. Apa yang Dilakukan 'exec {fd}/watchdog' Di Bash?

  2. Apa Env X=() { :;}; Command' Bash Do Dan Mengapa Tidak Aman?

  3. Fungsi Dalam Variabel Shell?

  1. Apa itu pengguna Linux?

  2. Apa yang dilakukan 'bash -c'?

  3. Apa itu pengguna debian-+?