Чи може gdb налагоджувати кореневі програми?


16

Я написав програму, яка дзвонить setuid(0)і execve("/bin/bash",NULL,NULL).

Тоді я і зробив chown root:root a.out && chmod +s a.out

Коли я виконую, ./a.outя отримую кореневу оболонку. Однак коли я gdb a.outце роблю, він запускає процес як звичайний користувач і запускає оболонку користувача.

Отже ... чи можу я налагодити встановлену кореневу програму?

Відповіді:


22

Ви можете налагоджувати встановлену програму або setgid програму лише тоді, коли налагоджувач працює як root. Ядро не дозволить вам ptraceзапускати програму, що працює з додатковими привілеями. У цьому випадку ви зможете змусити програму виконувати що завгодно, що фактично означатиме, що ви можете, наприклад, запустити кореневу оболонку, викликавши налагоджувач /bin/su.

Якщо ви запускаєте Gdb як root, ви зможете запустити свою програму, але ви будете спостерігати за її поведінкою лише тоді, коли будете запускати root.

Якщо вам потрібно налагодити програму, коли вона не запускається корінцем, запустіть програму за межами Gdb, зробіть її деякою паузою, перш ніж перейти до проблемної частини та attachпроцесу всередині Gdb ( at 1234де 1234 - ідентифікатор процесу).


Так, я спробував це, але процес запускається як root, і gdb повинен бути запущений як root, щоб мати змогу приєднати процес root.
jyz

@jyzuz Так, як я пишу, ви повинні запустити gdb як root. Або якщо ви хочете, ви можете скористатися віддаленою налагодженням і запустити так gdbserverсамо корінь і підключитися до нього як звичайний користувач. З вашого коментаря, здається, вам не вдалося це зробити простим способом (запускаючи gdb як root), але я не розумію, що пішло не так, тому я не можу допомогти.
Жил "ТАК - перестань бути злим"

7

Ось спосіб запустити процес у зупиненому стані, якщо захочете. Використовуйте сценарій bash:

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

Зробіть цей запуск у фоновому режимі.

Потім почніть gdbі прикріпіть до друку, який був надрукований.

Вам доведеться перейти через execкоманду з gdb, але ви зможете налагоджувати з самого початку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.