GNU/Linux >> Belajar Linux >  >> Linux

gdb tampaknya mengabaikan kemampuan yang dapat dieksekusi

Saya mengalami masalah yang sama dan pada awalnya saya berpikir sama seperti di atas bahwa mungkin gdb mengabaikan kemampuan yang dapat dieksekusi karena alasan keamanan. Namun, membaca kode sumber dan bahkan menggunakan gerhana debugging gdb itu sendiri ketika sedang men-debug ext2fs-prog saya yang membuka /dev/sda1 , saya menyadari bahwa:

  1. gdb tidak istimewa seperti program lainnya. (Sama seperti dalam matriks, bahkan agen itu sendiri mereka mematuhi hukum fisika yang sama, gravitasi, dll., kecuali bahwa mereka semua adalah penjaga pintu.)
  2. gdb bukan proses induk dari debug yang dapat dieksekusi, melainkan grand father.
  3. Proses induk sebenarnya dari debug executable adalah "shell", yaitu /bin/bash dalam kasus saya.

Jadi, solusinya sangat sederhana, selain menambahkan cap_net_admin,cap_net_raw+eip ke gdb, Anda juga menerapkan ini ke shell Anda. yaitu setcap cap_net_admin,cap_net_raw+eip /bin/bash

Alasan Anda juga harus melakukan ini ke gdb adalah karena gdb adalah proses induk dari /bin/bash sebelum membuat proses debug.

Baris perintah yang dapat dieksekusi sebenarnya di dalam gdb adalah seperti berikut:

/bin/bash exec /my/executable/program/path

Dan ini adalah parameter untuk vfork di dalam gdb.


Bagi mereka yang memiliki masalah yang sama, Anda dapat melewati yang ini dengan menjalankan gdb dengan sudo.


Beberapa waktu yang lalu saya mengalami masalah yang sama. Dugaan saya adalah menjalankan program debug dengan kemampuan tambahan merupakan masalah keamanan.

Program Anda memiliki lebih banyak hak istimewa daripada pengguna yang menjalankannya. Dengan debugger, pengguna dapat memanipulasi eksekusi program. Jadi jika program berjalan di bawah debugger dengan hak istimewa tambahan maka pengguna dapat menggunakan hak istimewa ini untuk tujuan lain selain yang dimaksudkan oleh program untuk menggunakannya. Ini akan menjadi lubang keamanan yang serius, karena pengguna tidak memiliki hak istimewa.


Linux
  1. Bagaimana Mengelola Kemampuan File Linux

  2. Melacak Program?

  3. Mengapa Cd Bukan Program?

  1. Bagaimana Cara Mengarahkan Info Kesalahan Program C yang Dapat Dieksekusi ke Stdout? (mac Os X)?

  2. Cara Debug Program C menggunakan gdb dalam 6 Langkah Sederhana

  3. Mengapa header program dapat dieksekusi?

  1. Daftar File yang Diakses Oleh Program?

  2. Abaikan huruf besar-kecil di glob() di Linux

  3. Bagaimana cara menganalisis file dump inti program dengan GDB ketika memiliki parameter baris perintah?