- Root Linux — инструкции учетной записи суперпользователя
- Получение root-доступа в терминале
- Разблокировка учетной записи root
- Вход в систему как Root
- Сброс пароля root или администратора
- Я есть root. Разбираемся в повышении привилегий ОS Linux
- Повышение привилегий через небезопасную конфигурацию
- Получаем стабильный shell
- Просмотр истории команд
- Поиск паролей в файловой системе и атаки на смежные системы
- Suid/Sgid
- Доступные на запись скрипты, запускаемые Cron или Init, в контексте Root
- Получение доступа в оболочку других пользователей
- Самописный код
- Повышение привилегий через эксплуатацию уязвимостей
- Эксплуатация сервисов, запущенных в контексте пользователя root
- Эксплуатация уязвимостей ядра Linux
- Metasploit
- Tools
- Linpeas
- LinEnum
- Linux-exploit-suggester (1,2)
- Linuxprivchecker
Root Linux — инструкции учетной записи суперпользователя
Учетная запись «root» на компьютере Linux — это учетная запись с полными привилегиями. Корневой доступ часто необходим для выполнения команд в Linux, особенно команд, которые влияют на системные файлы. Рекомендуется запрашивать root-доступ только при необходимости, а не входить в систему как пользователь root. Это может помочь предотвратить случайное повреждение важных системных файлов.
Получение root-доступа в терминале
Откройте терминал.
Введите «Su-».
Вы можете фактически использовать эту команду для входа в систему под любым пользователем на компьютере. Однако, если оставить его пустым, он попытается войти в систему как пользователь root.
Введите пароль root при появлении запроса
После ввода «Su-» будет предложено ввести пароль root.
Если вы получили сообщение об ошибке аутентификации, то ваша корневая учетная запись, заблокирована. В следующем разделе приведены инструкции по его разблокировке.
Проверьте командную строку.
Когда вы вошли в систему как пользователь root, командная строка должна заканчиваться # вместо $
Введите команды, которые требуют root-доступа.
Как только вы su -вошли в систему как root, вы можете запускать любые команды, требующие root-доступа. Команда сохраняется до конца сеанса, поэтому вам не нужно повторно вводить пароль root.
Разблокировка учетной записи root
Ubuntu (и несколько других дистрибутивов) блокирует учетную запись root, чтобы обычный пользователь не мог получить к ней доступ. Разблокировка учетной записи root позволит вам войти в систему как root.
Откройте терминал
Вводим « sudo passwd root» .
При запросе пароля введите ваш пароль пользователя
Установите новый пароль.
Вам будет предложено создать новый пароль и ввести его дважды. После того, как пароль был установлен, учетная запись root будет активной.
Снова заблокируйте учетную запись root.
Если вы хотите заблокировать учетную запись root, введите следующую команду, чтобы удалить пароль и заблокировать root:
«sudo passwd -dl root»
Вход в систему как Root
Рассмотрите возможность использования других методов для получения временного корневого доступа. Вход в систему как root не рекомендуется для регулярного использования.
На это есть несколько причин. Во-первых, так очень легко выполнять команды, которые приведут вашу систему в неработоспособное состояние. Во-вторых, представляет угрозу безопасности, особенно если вы используете SSH-сервер на своей машине.
Войдите в систему как пользователь root при выполнении аварийного ремонта, например, при сбое диска или восстановлении заблокированных учетных записей.
Использование sudo или su вместо входа в систему как root поможет предотвратить непреднамеренный ущерб при входе в систему как root.
Использование этих команд дает пользователю возможность подумать о команде до нанесения серьезного ущерба.
Некоторые дистрибутивы, такие как Ubuntu, оставляют корневую учетную запись заблокированной, пока вы не разблокируете ее вручную.
Во-первых, это не позволяет пользователям неосознанно наносить слишком большой ущерб, используя корневую учетную запись. Во-вторых, защищает систему от потенциальных хакеров. С заблокированной учетной записью root хакеры не могут получить к ней доступ.
Введите . root как пользователь при входе в Linux.
Если корневая учетная запись разблокирована и вы знаете пароль, вы можете войти в систему как пользователь root, когда вам будет предложено войти в систему с учетной записью пользователя
Введите пароль пользователя root в качестве пароля пользователя.
Избегайте запуска сложных программ при входе в систему как root.
Существует вероятность того, что программа, которую вы намереваетесь запустить, окажет негативное влияние на вашу систему, когда у нее есть root-доступ. Настоятельно рекомендуется использовать sudo или su запускать программы, а не входить в систему как пользователь root.
Сброс пароля root или администратора
Сбросьте пароль root, если он был забыт.
Если вы забыли пароль , корневой и пароль пользователя, вам необходимо загрузиться в режиме восстановления, чтобы изменить их. Если вы знаете свой пароль пользователя и вам необходима смена пароля пользователя root, просто введите sudo passwd root , введите пароль пользователя, а затем создайте новый пароль пользователя root.
Перезагрузите компьютер и удерживайте левую кнопку . после экрана BIOS.
Это откроет меню GRUB. Возможно, придется попробовать данную процедуру несколько раз.
Выберите режим восстановления .
Это загрузит режим восстановления для вашего текущего дистрибутива.
Выберите вариант из меню.
Это запустит терминал, когда вы вошли в систему как пользователь root.
Диск с разрешениями на запись.
Когда вы загружаетесь в режиме восстановления, вы, как правило, имеете только права на чтение. Введите следующую команду, чтобы включить доступ для записи:
Создайте новый пароль для любых учетных записей, из которых вы заблокированы.
После того как вы вошли в систему как пользователь root и изменили права доступа, вы можете создать новый пароль для любой учетной записи:
- Введите и нажмите . Если вам нужно изменить пароль root, введите .passwdaccountName passwd root
- Введите новый пароль дважды при появлении запроса.
Перезагрузите компьютер после сброса паролей.
После завершения сброса паролей вы можете перезагрузить компьютер и использовать его в обычном режиме. Ваши новые пароли вступят в силу немедленно.
Источник
Я есть root. Разбираемся в повышении привилегий ОS Linux
Первый квартал 2020 года я провел за подготовкой к экзамену OSCP. Поиск информации в Google и множество «слепых» попыток отнимали у меня все свободное время. Особенно непросто оказалось разобраться в механизмах повышения привилегий. Курс PWK уделяет этой теме большое внимание, однако методических материалов всегда недостаточно. В Интернете есть куча мануалов с полезными командами, но я не сторонник слепого следования рекомендациям без понимания, к чему это приведет.
Мне хочется поделиться с вами тем, что удалось узнать за время подготовки и успешной сдачи экзамена (включая периодические набеги на Hack The Box). Я испытывал сильнейшее ощущение благодарности к каждой крупице информации, которая помогала мне пройти путь Try Harder более осознанно, сейчас мое время отдать должное комьюнити.
Я хочу дать вам мануал по повышению привилегий в OS Linux, включающий в себя разбор наиболее частых векторов и смежных фишек, которые вам обязательно пригодятся. Зачастую сами механизмы повышения привилегий достаточно несложные, трудности возникают при структурировании и анализе информации. Поэтому я решил начать с «обзорной экскурсии» и далее рассматривать каждый вектор в отдельной статье. Надеюсь, я сэкономлю вам время на изучение темы.
Итак, почему повышение привилегий вообще возможно в 2020-м, если методы хорошо известны уже очень давно? На самом деле при грамотном обращении пользователя с системой повысить привилегии в ней действительно не удастся. Основная глобальная проблема, которая порождает такие возможности, заключается в небезопасной конфигурации. Наличие в системе устаревших версий ПО, содержащих уязвимости, также является частным случаем небезопасной конфигурации.
Повышение привилегий через небезопасную конфигурацию
Прежде всего давайте разберемся с небезопасной конфигурацией. Начнем с того, что ИТ-специалисты часто пользуются мануалами и ресурсами вроде stackoverflow, многие из которых содержат небезопасные команды и конфиги. Яркий пример — новость о том, что самый копируемый со stackoverflow код содержал ошибку. Опытный админ увидит косяк, но это — в идеальном мире. Даже грамотные специалисты при повышенной рабочей нагрузке способны допускать ошибки. Представьте, что админ занимается подготовкой и согласованием документации на очередной тендер, параллельно вникает в новую технологию, которую предстоит внедрить в следующем квартале, при этом периодически решает задачи по поддержке пользователей. И тут ему нарезают задачу по-быстрому поднять пару виртуалок и раскатать на них сервисы. Как вы думаете, какова вероятность того, что админ просто не заметит косяк? Потом специалисты меняются, а костыли остаются, при этом компании всегда стремятся минимизировать затраты, в том числе на ИТ-шников.
Получаем стабильный shell
Системная оболочка, полученная на стадии эксплуатации, часто бывает ограниченной, особенно если вы заполучили ее через взлом пользователя веб-сервера. Например, ограничения оболочки могут помешать применить команду sudo с выводом ошибки:
После получения оболочки я рекомендую создать полноценный терминал, например, с помощью Python.
Вы спросите: «Зачем мне тысяча команд, если я могу воспользоваться одной, например, для передачи файлов?» Дело в том, что системы бывают сконфигурированы по-разному, на очередном хосте может быть не установлен Python, однако иметься Perl. Мастерство в том, чтобы иметь возможность делать в системе привычные вещи без привычных инструментов. Полный перечень возможностей можно найти тут.
Низкопривилегированный шелл можно получить, используя команды 1 и команды 2 (удивительно, что даже GIMP).
Просмотр истории команд
Linux собирает историю всех выполненных команд в файле
/.bash_history. Если сервер активно используется, и его история не очищается, существует большая вероятность найти в этом файле учетные данные. Чистить историю банально неудобно. Если администратор вынужден выбирать десятиэтажные команды через \, конечно, ему будет удобнее вызвать эту команду из истории, чем вводить заново. Плюс многие не знают об этом «хаке». Если в системе присутствуют альтернативные оболочки вроде Zsh или Fish, они ведут свою историю. Чтобы вывести историю команд в любой оболочке, достаточно набрать команду history.
Существует shared hosting, при котором сервер используется для хостинга нескольких сайтов. Обычно при такой конфигурации для каждого ресурса создается свой пользователь с отдельной домашней директорией и виртуальный хост. Так вот, при неправильной настройке в корневой директории веб-ресурса можно обнаружить файл .bash_history.
Поиск паролей в файловой системе и атаки на смежные системы
Конфигурационные файлы различных сервисов могут быть доступны для чтения вашему текущему пользователю. В них можно встретить учетные данные в открытом виде — пароли для доступа в базу данных или смежные сервисы. Один и тот же пароль может быть использован как для доступа в базу данных, так и для авторизации пользователя root (credential staffing).
Бывает так, что найденные учетные данные принадлежат сервисам на других хостах. Развитие атаки на инфраструктуру через скомпрометированный хост ничем не хуже эксплуатации других хостов. Смежные системы также можно найти с помощью поиска IP-адресов в файловой системе.
В случае, если на скомпрометированном хосте имеется веб-приложение, доступное из Интернета, лучше исключить его логи из поиска IP-адресов. Адреса пользователей ресурса из Интернета нам вряд ли будут полезны, а вот адреса внутренней сети (172.16.0.0/12, 192.168.0.0/16, 10.0.0.0/8) и то, куда они заходят, судя по логам, могут представлять интерес.
Команда sudo дает пользователю возможность выполнить команду в контексте root с помощью собственного пароля или вовсе без его использования. Многие операции в Linux требуют привилегий root, однако работа из-под root считается очень плохой практикой. Вместо этого лучше применять выборочное разрешение на выполнение команд в контексте root. Однако многие инструменты Linux, включая стандартные типа vi, можно использовать для повышения привилегий вполне легитимными способами. Для поиска подходящего способа рекомендую посмотреть здесь.
Первое, что нужно сделать, получив доступ в систему, — выполнить команду sudo -l. Она выведет разрешение на использование команды sudo. Если получен пользователь без пароля (например, apache или www-data), вектор повышения привилегий через sudo маловероятен. При использовании sudo система запросит пароль. Через команду passwd задать пароль также не выйдет, она запросит текущий пароль пользователя. Но если sudo все же доступен, то, по сути, необходимо искать:
- любые интерпретаторы, каждый может заспавнить shell (PHP, Python, Perl);
- любые текстовые редакторы (vim, vi, nano);
- любые просмотровики (less, more);
- любые возможности работы с файловой системой (cp, mv);
- тулы, которые имеют выход в bash, интерактивный или в виде исполняемой команды (awk, find, nmap, tcpdump, man, vi, vim, ansible).
Suid/Sgid
В Интернете есть множество мануалов, которые советуют собрать все suid/sgid команды, однако редкая статья даёт конкретику, что делать с этими программами. Варианты повышения привилегий, не учитывающие применение эксплоитов, можно найти тут. Также ряд исполняемых файлов имеет специфические уязвимости под версию ОС, например.
В идеальном мире нужно пропустить все установленные пакеты хотя бы через searchsploit. На практике подобное стоит проделывать с наиболее популярными программами типа sudo. Также всегда есть вариант использовать и поддерживать разработку автоматизированных инструментов, которые подсветят интересные, с точки зрения повышения привилегий, исполняемые файлы с выставленными битами suid/sgid. Перечень таких инструментов я приведу в соответствующем разделе статьи.
Доступные на запись скрипты, запускаемые Cron или Init, в контексте Root
Задачи cron могут выполняться в контексте различных пользователей, в том числе root. Если в cron выставлена задача со ссылкой на исполняемый файл, и он доступен вам для записи, его легко можно подменить вредоносным и выполнить повышение привилегий. При этом по умолчанию файлы с задачами cron доступны на чтение любому пользователю.
Похожим образом обстоят дела с init. Отличие в том, что задачи в cron выполняются периодически, а в init — при старте системы. Для эксплуатации потребуется перезагрузка системы, при этом часть сервисов может и не подняться (если они не были прописаны в автозагрузку).
Также можно поискать файлы, доступные для записи любому пользователю.
Метод довольно известный, опытные системные администраторы аккуратно пользуются командой chmod. Однако на просторах Сети в подавляющем большинстве мануалов описано выставление максимальных прав. Подход неопытных системных администраторов «лишь бы заработало» создает возможности для повышения привилегий в принципе. Если есть возможность, лучше поискать в истории команд небезопасное использование chmod.
Получение доступа в оболочку других пользователей
Смотрим список пользователей в /etc/passwd. Обращаем внимание на тех, у кого есть оболочка. Можно побрутить этих пользователей — не исключено, что через полученного пользователя в итоге удастся повысить привилегии.
Для повышения безопасности рекомендую всегда придерживаться принципа минимальных привилегий. Также имеет смысл уделить время проверке небезопасных конфигураций, которые могли остаться после траблшутинга, — это «технический долг» системного администратора.
Самописный код
Стоит внимательно посмотреть на исполняемые файлы в домашней директории пользователя и веб-сервера (/var/www/, если не задана другая). Эти файлы могут оказаться совершенно небезопасным решением и содержать в себе невероятные костыли. Конечно, если вы имеете какой-нибудь фреймворк в директории веб-сервера, не имеет смысла искать в нем zero-day в рамках пентеста, однако найти и изучить кастомные доработки, плагины и компоненты рекомендуется.
Для повышения безопасности лучше по возможности отказаться от использования учетных данных в самописных скриптах, а также от потенциально опасного функционала, например чтения /etc/shadow или манипуляций с id_rsa.
Повышение привилегий через эксплуатацию уязвимостей
Прежде чем пытаться повысить привилегии через эксплуатацию, важно разобраться с передачей файлов на целевой хост. Помимо привычных средств вроде ssh, ftp, http (wget, curl) есть целый «зоопарк» возможностей.
Для повышения безопасности системы регулярно обновляйте ее до актуальных стабильных версий, а также старайтесь использовать дистрибутивы, рассчитанные на Enterprise. В противном случае, редко, но бывают ситуации, когда apt upgrade делает систему неработоспособной.
Эксплуатация сервисов, запущенных в контексте пользователя root
Некоторые сервисы Linux работают от привилегированного пользователя root. Их можно найти с помощью команды ps aux | grep root. При этом сервис может не анонсироваться в Cеть и быть доступным локально. Если он имеет публичные эксплоиты, их можно смело применять: падение сервиса в случае неудачи гораздо менее критично, чем падение ОС.
Самым удачным случаем можно считать работу взломанного сервиса в контексте пользователя root. Эксплуатация сервиса SMB дает привилегированный доступ SYSTEM в системах Windows (например, через ms17-010). Однако в системах Linux такое встречается нечасто, поэтому можно провести немало времени над повышением привилегий.
Эксплуатация уязвимостей ядра Linux
Это путь, которым следует идти в последнюю очередь. Неудачная эксплуатация может привести к падению системы, а в случае ребута некоторые сервисы (в том числе те, через которые удалось получить изначальный shell) могут не подняться. Бывает, что администратор банально забыл применить команду systemctl enable . Плюс это вызовет много недовольства вашими работами, если эксплуатация не была согласована.
Если решили использовать исходные коды из exploitdb, обязательно прочитайте комментарии в начале скрипта. Помимо прочего, там обычно написано, как следует правильно компилировать данный эксплоит. Если самому лень или по срокам нужно было «вчера», можно поискать репозитории с уже скомпилированными эксплоитами, например. Однако следует понимать, что в таком случае вы получите кота в мешке. С другой стороны, если бы программист разбирался до байта, как устроен компьютер и используемый им софт, он бы за всю жизнь не написал бы и строчки кода.
Metasploit
Для того, чтобы поймать и обработать соединение, всегда лучше использовать модуль exploit/multi/handler. Главное — выставить правильный payload, например, generic/shell/reverce_tcp или generic/shell/bind_tcp. Оболочку, полученную в Metasploit, можно улучшить до Meterpreter с использованием модуля post/multi/manage/shell_to_meterpreter. Имея Meterpreter, вы можете автоматизировать процесс постэксплуатации. Например, модуль post/multi/recon/local_exploit_suggester проверяет платформу, архитектуру и необходимые для эксплуатации сущности и предлагает модули Metasploit для повышения привилегий на целевой системе. Благодаря Meterpreter, повышение привилегий иногда сводится к запуску нужного модуля, однако взлом без понимания происходящего под капотом не является «тру» (вам еще отчет писать).
Tools
Инструменты автоматизации локального сбора информации сохранят вам большое количество сил и времени, однако сами по себе не способны полностью выявлять путь повышения привилегий, особенно в случае эксплуатации уязвимостей ядра. Инструменты автоматизации выполнят за вас все необходимые команды для сбора информации о системе, но важно также суметь проанализировать полученные данные. Надеюсь, моя статья будет вам в этом полезна. Конечно, инструментов существует гораздо больше, чем я приведу ниже, однако они все делают примерно одно и то же — тут, скорее, дело вкуса.
Linpeas
Достаточно свежая тула, первый коммит датируется январем 2019 года. На данный момент мой любимый инструмент. Суть в том, что он подсвечивает наиболее интересные векторы повышения привилегий. Согласитесь, удобнее получить экспертную оценку на таком уровне, чем разбирать монолитные сырые данные.
LinEnum
Второй мой любимый инструмент, он также собирает и систематизирует данные, полученные в результате локального перечисления.
Linux-exploit-suggester (1,2)
Этот эксплоит проанализирует систему на наличие подходящих условий для эксплоитов. По сути, сделает работу, идентичную модулю Metasploit local_exploit_suggester, но предложит не модули Metasploit, а ссылки на исходные коды exploit-db.
Linuxprivchecker
Данный скрипт соберет и систематизирует по разделам большое количество информации, которая может быть полезна для формирования вектора повышения привилегий.
Источник