Как взломать линукс сервер

Этичный хакинг с Михаилом Тарасовым (Timcore)

Блог об Этичном Хакинге

#40 Kali Linux для начинающих. Взламываем SSH.

Надеюсь, Вам понравилось взламывать. Мы смогли получить рут-права на атакуемой машине, основываясь только на использование сканера nmap. В этом уроке мы будем разбирать информацию, которая была получена сканером Nessus, чтобы также получить рут-права. Рассмотрим самую первую уязвимость, которая была обнаружена сканером Nessus:

Нас будет интересовать текущая уязвимость, которая называется: «Уязвимость генератора случайных чисел OpenSSH/OpenSSL». Также Nessus обозначает нам, какой протокол и порт подвержен данной уязвимости, а также ip-адрес, и дополнительную справочную информацию:

Дополнительная информация представляет из себя набор ссылок. К примеру, CVE-2008-0166. Перейдя по ссылке, можно более подробным образом познакомиться с данной уязвимостью. В нашем случае нас будет интересовать уязвимость с цифровым обозначением 2008-0166, и если ввести обозначение в поиске, то мы получим подробную информацию о данной уязвимости.

Давайте погуглим информацию об этой уязвимости:

И первая ссылка в поиске ведет нас на ресурс GitHub:

Как видим, существует несколько эксплойтов на разных языках программирования. Выберем эксплойт, который написан на Python, но можно выбрать любой из них. Я выбрал данный эксплойт, не потому что он написан на питоне, а потому, что автор добавил подробную инструкцию по его установке, что сильно упрощает работу:

Видим, что для запуска эксплойта нужны три шага. Сначала нужно скачать архив, с помощью команды «wget». Для этого нужно проскроллить страницу в самый верх и найти вкладку Download. Далее нажать правой кнопкой мыши и выбрать «Copy Link Location»:

Переходим в терминал и вводим команду «wget адрес ссылки на эксплойт»:

Загрузка прошла успешно. Далее нужно запустить наш скрипт:

Скрипт сработал корректно и отлично работает, и у нас в терминале появился вывод того, как нужно использовать данный эксплойт. Далее мне нужно скачать один из двух файлов, которые нас просит загрузить автор эксплойта:

Выбираю второй файл. Перед тем, как скачивать что-либо, я хочу немного рассказать об этой уязвимости, и как она работает. Вы уже видели, как настроить ssh-сервер. Также мы знакомились с подменой дефолтных ключей шифрования на новые, чтобы Вы могли на нем авторизироваться.

Если не углубляться в шифрование, и особенности его работы, можно рассматривать этот ключ как пароль, который позволяет пройти авторизацию. Это не совсем так, но Вы можете рассматривать его именно в этом ключе для упрощения. В более старых версиях Debian был проблемы с генерированием подобных ключей. Помните, когда мы настраивали ssh, то устанавливали новые ключи. Дело в том, что при установке нового образа системы, у нас по-дефолту стоят стандартные ключи, которые легко подробрать. В данной версии Debian, при создании ключей есть баг, который ограничивает максимально возможное количество сгенерированных ключей, т.е. вместо огромного количества ключей этот баг ограничивал количество созданных ключей, а это значит, что кто-то мог написать скрипт и подобрать комбинацию Ваших ключей.

Сейчас мы используем именно этот эксплойт. Файл, который я собираюсь скачать, содержит диапазон всех возможных ключей, и один из них точно подойдет, и мы сможем пройти ssh авторизацию.

Чтобы скачать этот файл, достаточно перейти по ссылке на второй файл, и затем перейти на кнопку Download, правой кнопкой мыши скопировав адрес ссылки:

Переходим в терминал и также скачиваем файл с помощью команды «wget»:

Обратите внимание, что это tar.bz2, который ранее мы уже рассматривали.

Читайте также:  Windows script host ошибка при запуске windows

Представим ситуацию, что мы не знаем, что такое tar и bz2. Для начала выполним команду «file»:

Выводится сообщение, что это данные bz2. Теперь мы знаем, что файлы с расширением bz2 – это файлы bzip2. Прошу не запутаться в этих параметрах.

Далее можно просмотреть опции bzip2, с помощью команды «—help»:

Как видим опция –d распаковывает этот файл. Запишем команду: «bzip2 –d ebian_ssh_rsa_2048_x86.tar.bz2»:

Выводим содержимое директории Metasploitable2, и теперь у меня есть файл с расширением .tar:

Мы уже рассматривали то, как извлечь информацию из tar файла, но, допустим, мы не знаем, как это делать.

Мы можем указать команду «file» перед файлом:

И мы видим, что это архив tar.

Далее нам нужно выполнить команду: «tar xvf debian_ssh_rsa_2048_x86.tar»:

Все это возможные ключи, которые мы будем использовать на нашей цели, и один из них должен подойти.

У нас появилась новая директория «rsa/». Можно проверить ее содержимое:

Нам нужно запустить наш эксплойт. Сначала нужно прописать исполнение самого эксплойта, затем путь до ключей, после этого указать ip-адрес нашей цели, и указать номер порта. Команда будет выглядеть как: «python 5720 rsa/2048 192.168.119.130 root 22 10»:

Обратите внимание на номер порта, который я указал, а именно 22. Имейте ввиду, что разные сервера ftp могут быть запущены на разных портах. В большинстве случаев это будет именно так, и если, на атакуемой машине есть другой ssh-сервер, который использует другой порт, то нужно указывать его.

Итак, подбор ключей завершился успешно, и автор эксплойта добавил фичу в свой скрипт, а именно, можно выполнять готовую команду для взлома сервера по ssh:

Нужно скопировать команду: «ssh -lroot -p22 -i rsa/2048/57c3115d77c56390332dc5c49978627a-5429 192.168.119.130», и вставить ее в терминале:

Отлично, я авторизирован как рут-пользователь. Мы нашли еще один способ, как попасть в систему. Для того, чтобы завершить соединение, нужно просто выполнить команду «exit»:

Я хочу скопировать эти ключи, и сохранить в отдельную директорию, потому что помимо подходящих ключей, есть тысячи других, которые мне не нужны. Как мне найти ключи среди тысячи остальных? Все просто, нам нужно воспользоваться техниками, которые мы уже изучили. Нужно скопировать первые несколько символов ключа «57c3115», и создать директорию «keys», в которой и будут располагаться данные ключи:

Для поиска нужных ключей в исходном файле нужно выполнить команду: «ls rsa/2048/ | grep 57c3115»:

Вывод ключей прошел успешно, и мы получили то, что хотели. Теперь мне нужно скопировать выведенные ключи в директорию «keys». Команда будет выглядеть как: «cp rsa/2048/ 57c3115d77c56390332dc5c49978627a-5429* keys/»:

Проверим вывод ключей, с помощью команды: «ls keys/»:

Вывод прошел успешно, и у нас теперь есть актуальные ключи, которыми мы сможем воспользоваться.

Источник

Как взломать Linux и получить ROOT.

Не новость что Linux является очень гибкой и настраиваемой системой. Благодаря этому он получает все большее распространение в сети. Но как и все остальные операционные системы, качество настройки и уровень безопасности системы зависит от квалификации администратора который занимается ее настройкой. Поэтому не редкость наличие различных дыр в системах безопасности. Как правило это простые дыры которые не дают полного доступа к системе. Но приложив усилия мы можем повысить привилегии и взломать Linux и получить ROOT!

В общем случае эскалация привилегий — это получение прав в системе выше, чем у тебя уже есть. Но чаще всего имеется в виду получение доступа к учетной записи root в Linux или system/administrator в Windows.

Читайте также:  Microsoft windows bits dll

Почему становится возможным повысить права в системе, казалось бы призванной предотвращать подобное? Причин много. Вот, как мне кажется, основные:

  • уязвимости в приложениях/скриптах;
  • неверная конфигурация ОС и приложений;
  • забытые критически важные данные (пароли, логины, бэкапы и прочее);
  • уязвимости в ядре ОС.

Ну а основная причина всегда одна и та же — людские ошибки. В идеальной вселенной, скорее всего, повысить привилегии не удалось бы. Но человеческий фактор делает это возможным, поэтому наслаждаемся.

С чего начать?

Прежде чем что-то делать, нужно понять, с чем мы будем иметь дело. Конечно, кое-что мы узнаем о системе, изучив ее на этапе проникновения, но теперь нужно подробнее выяснить, что именно нам может помочь подняться до root.

Какие-то вещи мы можем узнать вручную. Например, получить сведения о ядре:

Или о процессоре:

Можно, конечно, и дальше собирать информацию с помощью терминала, но это долго. Гораздо проще и эффективнее использовать специальные тулзы. Самые распространенные из них:

Все они работают примерно по одному принципу: последовательно запускают команды bash или короткие скрипты, а вывод отправляют в stdout или лог-файл в зависимости от параметров.

Так примерно выглядит вывод подобной тулзы.

LinEnum

Куда смотреть?

Давай теперь разберем несколько примеров уязвимостей и посмотрим, как можно их эксплуатировать.

Всякое забытое

Первое, что стоит проверить, — это забытые критические данные. Ничего не стоит заглянуть в домашние папки юзеров и посмотреть, не хранит ли кто-то на рабочем столе файл с паролем или ключами от чего-нибудь нужного. Это случается редко, но все же случается. Иногда учетные данные хардкодят в скриптах и конфигах. Стоит также проверить историю шелла, там тоже могут найтись длинные команды, содержащие учетные данные. А иногда бывает, что пользователь набрал пароль, когда консоль его не запрашивала, и он тоже сохранится в истории.

SUID/GUID

Флаги setuid и setgid позволяют пользователю запускать программы от имени владельца. Например, когда надо запускать программу от рута, а пользователь рутом не является. Чаще всего встречается SUID. Устанавливается этот бит легко:

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

В первую очередь нас интересуют файлы, владелец которых — root. Найти их можно руками, такой командой:

Как вариант — можно поискать в выводе тулз, которые я перечислил выше. Так или иначе, если найдешь файлы с подобными разрешениями, значит, у тебя есть шанс подняться до максимальных привилегий.

Вот вывод таких файлов из LinEnum.sh .

Из интересных файлов — find . LinEnum даже услужливо его подсветил отдельно.

Это позволит довольно легко получить привилегии.

Linux capabilities

Так как предыдущий способ дает избыточные права файлам, в 1997 году была придумана идея дополнительных разрешений — linux capabilities. Если коротко, то идея состоит в том, чтобы давать не полные привилегии, а только часть, необходимую для выполнения задачи.

Как это используется? Для начала найдем подобные файлы в системе.

А вот результат.

Классический пример иллюстрации — это исполняемый файл tar с разрешением cap_dac_read_search+ep , которое позволяет ему читать любой файл в системе. Это означает, например, возможность получить архив с файлом /etc/shadow , который от лица обычного пользователя недоступен на чтение. Доступ к этому файлу даст нам хеши паролей, в том числе от root, который мы можем попробовать сбрутить.

Еще встречается пустое разрешение =ep . Когда выставлено такое разрешение (есть знак «равно» в начале, и не перечислен список разрешений), это значит, что файлу предоставлены все возможные разрешения. В примере такие разрешения есть у файла openssl .

Читайте также:  Замена word для linux

Этот пример позволит нам прочитать файл /etc/shadow .

И прочитаем файл.

Далее мы можем просто сгенерить новый shadow и перезаписать им системный. Создадим новый хеш, заменим им хеш (в примере — восклицательный знак) и подготовим файл для заливки.

Копируем его в /etc/shadow и логинимся.

Cron — это служба Unix, которая используется для периодического выполнения скриптов. Действия описываются в файле /etc/crontab и в специальных каталогах (например, /etc/cron.daily ).

Скрипты используются для самого широкого спектра задач — от создания бэкапа по расписанию до очистки директории /tmp .

Если у таких скриптов неаккуратно выставлены привилегии, то это может стать находкой для атакующего. Когда администратор ставит привилегии как попало, «просто чтобы работало», он вполне может написать chmod 777 , что позволит нам отредактировать вызываемый по расписанию скрипт. Поскольку cron запускает файлы от имени root, ничто не мешает вызывать рутовый шелл заодно со скриптом.

Программа sudo позволяет выполнять команды от имени суперпользователя (либо других пользователей системы). Ее конфиг находится в /etc/sudoers , и, как правило, ошибки в этом конфиге открывают возможности эскалации привилегий. Сценариев использования — множество, можно выбирать по ситуации. Один из таких вариантов ниже.

Проверяем, какие есть разрешения у sudo .

Здесь редактор vi можно открыть без пароля, и он запустится от имени root. В этом случае проще всего выполнить шелл через редактор, который тоже запустится от рута.

Иногда админы дают разрешение на запуск обычных скриптов sh, и те остаются доступными для записи. Их, конечно же, можно использовать для получения шелла и любых других действий.

Еще один способ абьюзить sudo — возможность внедряться в процесс с действующим токеном.

Эксплоиты для ядра

Как и в любой другой программе, в ядре Linux тоже есть уязвимости. Иногда эти уязвимости позволяют подняться до рута. Как и в остальных способах, здесь не существует универсального рецепта и успешная эксплуатация зависит от многих факторов: версии ядра, наличия необходимых разрешений или файлов и даже наличия нужного железа (например, уязвимого перед Meltdown процессора).

На скриншоте ниже — поиск эксплоитов для ядра Linux в Kali.

При многообразии вариантов эксплуатации не все они окажутся рабочими. Может не быть эксплоита под конкретное ядро, либо версия ядра правильная, но оно уже пропатчено. Некоторые эксплоиты работают нестабильно. И так далее.

Наверняка многие помнят уязвимость в ядре, известную как Dirty COW. Баг позволяет спровоцировать состояние гонки, а это приводит к тому, что пользователь без привилегий получает доступ на запись к memory mappings (хотя доступ должен быть только на чтение) и может повысить свои привилегии.

Существует несколько эксплоитов для этой уязвимости.

На конкретной системе будут работать не все из них, так что всегда есть смысл перебирать разные варианты.

Другие примеры уязвимостей для повышения привилегий:

Конечно, это не все уязвимости. Их намного больше, и ты всегда можешь поискать их описанным выше способом или покопаться на exploit-db.com и других ресурсах.

Заключение

Способов стать рутом в Linux — множество, и я здесь прошелся только по самым очевидным и распространенным. Тем, что встречаются и в реальной жизни, и на CTF, и на экзаменах.

Вообще, зачастую это творческая задача: может не сработать ни один из способов, но поможет какая-то, порой неочевидная комбинация из разных. Универсального рецепта здесь нет, и систему всегда нужно анализировать всесторонне.

На сайте GTFOBins есть отличная подборка способов использовать разные популярные утилиты для повышения привилегий. Но помни: этот список на самом деле значительно больше, просто нам еще пока не все известно!

Источник

Оцените статью