2014-02-03 4 views
0

Это домашняя работа для обеспечения безопасности системы.Переопределить системный колл с абсолютным путем

У задания есть 2 части. 2 исполняемых файла. exectest и exectestsecure.

После декомпиляции, я нахожу следующее:

exectest

... 
execv("ls",...); 
... 

exectestsecure

... 
execv("/bin/ls",...); 
... 

Цель состоит в том, чтобы напечатать Hello, World! вместо запуска команды ls.

Для первой части я создал программу helloworld и скомпилировал ее как ls, в моем домашнем каталоге. Затем я добавил свой домашний каталог в PATH.

Я не понимаю, что я могу сделать для exectestsecure, который использует абсолютный путь.

Есть бонусные баллы для запуска exectestsecure как root. Бонус использует исполняемый файл с setuid (0) и имеет правильные разрешения. Я думаю, что если я найду способ захватить вызов/bin/ls, я также могу ответить на вопрос о бонусе.

ответ

0

Вы можете попробовать переопределить execv() с LD_PRELOAD, если libc связан динамически. Некоторые инструменты, которые вам понадобятся: objdump, dlsym, strace. Найдите путь к следующему примеру: here.

+0

Я попытался захватить вызов execv(), используя этот метод (он преподавался в классе). По какой-то причине при запуске исполняемого файла выполняется системная версия execv(). Я делаю что-то неправильно? EDIT: Я не являюсь владельцем * exectestsecure *, он имеет setuid как root, может быть, поэтому? – GCon

+1

Я бы начал проверять, что libc фактически связан динамически. Тогда вы исключили этот путь? если да, то почему? Это вопросы, на которые вы должны ответить сами. «Это не работает» недостаточно, чтобы закрыть эту строку ... вам нужно понять «причину», почему это не работает и продолжается - вот ваша домашняя работа для :) – Sigismondo

+0

Благодарим вас за ответ. Я проверил, и да, это связано динамически. Будет ли факт, что * exectestsecure * повышает привилегии «перезагружает» любые библиотеки, которые я динамически загружал? – GCon

Смежные вопросы