переопределение getuid с помощью LD_PRELOAD не работает напрямую, но работает в gdb

#c #gdb #dynamic-linking #exploit

#c #gdb #динамическое связывание #использовать

Вопрос:

Я решал задачу из упражнения nebula exploit (https://exploit-exercises .lains.space/nebula/level13/). Поскольку скомпилированный двоичный файл динамически связан, я подумал о том, чтобы написать свой пользовательский getuid() для возврата 1000 и установить LD_PRELOAD=custom_getuid. Похоже, это не работает, когда я напрямую выполняю двоичный файл, но я могу обойти проверку, выполнив в gdb, ltrace, strace. gdb может загружать мой пользовательский getuid. Кто-нибудь может объяснить это поведение, пожалуйста? Спасибо!

найдите результат двух подходов здесь

Ответ №1:

Я обнаружил проблему, LD_PRELOAD не влияет на двоичные файлы suid. Итак, мой двоичный файл имеет suid, установленный для пользователя flag13.