Gdb có thể gỡ lỗi chương trình root suid?


16

Tôi đã viết một chương trình mà gọi setuid(0)execve("/bin/bash",NULL,NULL).

Sau đó tôi đã làm chown root:root a.out && chmod +s a.out

Khi tôi thực thi ./a.outtôi nhận được một vỏ gốc. Tuy nhiên, khi tôi thực hiện, gdb a.outnó bắt đầu quá trình như người dùng bình thường và khởi chạy trình bao người dùng.

Vậy ... tôi có thể gỡ lỗi chương trình root setuid không?

Câu trả lời:


22

Bạn chỉ có thể gỡ lỗi chương trình setuid hoặc setgid nếu trình gỡ lỗi đang chạy bằng root. Kernel sẽ không cho phép bạn gọi ptracemột chương trình đang chạy với các đặc quyền bổ sung. Nếu có, bạn sẽ có thể làm cho chương trình thực thi bất cứ điều gì, điều đó có nghĩa là bạn có thể chạy shell root bằng cách gọi trình gỡ lỗi trên /bin/su.

Nếu bạn chạy Gdb với quyền root, bạn sẽ có thể chạy chương trình của mình, nhưng bạn sẽ chỉ quan sát hành vi của nó khi chạy bằng root.

Nếu bạn cần gỡ lỗi chương trình khi nó không được khởi động bằng root, hãy khởi động chương trình bên ngoài Gdb, làm cho nó tạm dừng một cách thời trang trước khi đến phần rắc rối và attachquy trình bên trong Gdb ( at 1234trong đó 1234 là ID tiến trình).


Có tôi đã thử điều đó, nhưng quá trình được bắt đầu với quyền root và gdb cũng nên được bắt đầu với quyền root để có thể đính kèm tiến trình của root.
jyz

@jyzuz Vâng, khi tôi viết bạn phải bắt đầu gdb với quyền root. Hoặc nếu bạn muốn, bạn có thể sử dụng gỡ lỗi từ xa và chạy gdbservernhư root và kết nối với nó như một người dùng bình thường. Từ nhận xét của bạn, có vẻ như bạn đã không quản lý để thực hiện theo cách đơn giản (chạy gdb với quyền root) nhưng tôi không hiểu điều gì đã sai, vì vậy tôi không thể giúp được.
Gilles 'SO- ngừng trở nên xấu xa'

7

Đây là một cách để bắt đầu quá trình trong trạng thái dừng nếu bạn muốn. Sử dụng tập lệnh bash đang làm:

echo $BASHPID; kill -STOP $BASHPID; exec sudo -u unpriviledged_user -g the_group_if_not_primary command

Làm cho nó chạy trong nền.

Sau đó bắt đầu gdb, và gắn vào pid đã được in.

Bạn sẽ phải thực hiện các execlệnh với gdb, nhưng bạn sẽ có thể gỡ lỗi ngay từ đầu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.