Я только что закончил Wargame OverTheWire Bandit, уровень 18 .
Это был сюрприз. Вот инструкции для этого уровня.
Пароль для следующего уровня хранится в файле readme в домашнем каталоге. К сожалению, кто-то изменил .bashrc для выхода из системы, когда вы входите по SSH.
Я думал о способе пропустить поиск оболочки .bashrc
. Но прежде чем я нашел решение, у меня возник соблазн просто запустить SFTP-соединение с сервером. Я не ожидал, что это сработает. Но это так. И я хотел бы знать почему. Я думал, что SFTP работает через SSH.
Для ясности, когда я SSH в сервер, меня выгнали, как и ожидалось.
Ответы:
На баш вообще
Дизайн Bash по отношению к файлам запуска довольно своеобразен. Bash загружается
.bashrc
в двух несвязанных обстоятельствах:sh
). Вот почему.bash_profile
обычно загружается.bashrc
.Когда bash не является интерактивным, ни оболочка входа в систему, ни вызывается как,
sh
но с заданной командой для выполнения-c
иSHLVL
не установлена или меньше или равна 1, и выполняется одно из следующих действий:rshd
, т.е. когда выполняетсяrsh remotehost.example.com somecommand
.Если активирован во время компиляции (что имеет место в некоторых дистрибутивах, таких как Debian и производные), если одна из переменных среды
SSH_CLIENT
илиSSH2_CLIENT
определена. На практике это означает , что Баш вызываетсяsshd
, т.е.ssh remotehost.example.com somecommand
.Если вы не знаете, как был скомпилирован bash, вы можете узнать, была ли установлена эта опция, проверив, содержит ли двоичный файл строку
SSH_CLIENT
:По SSH вообще
Когда вы выполняете команду через протокол SSH, команда передается по проводам в виде строки. Строка выполняется удаленной оболочкой. Когда вы запускаете
ssh example.com somecommand
, если оболочка входа удаленного пользователя работает/bin/bash
, сервер SSH работает/bin/bash -c somecommand
. Нет способа обойти оболочку входа в систему. Это разрешает ограниченные оболочки входа в систему, например, разрешает только копирование файлов, а не общее выполнение команд.Есть одно исключение: протокол SSH позволяет клиенту запрашивать определенную подсистему. Если клиент запрашивает
sftp
подсистему, то по умолчанию сервер OpenSSH вызывает программу/usr/lib/openssh/sftp-server
(местоположение может отличаться) через оболочку входа пользователя. Но он также может быть настроен для запуска внутреннего сервера SFTP через линиюв
sshd_config
файле. В случае внутреннего SFTP-сервера и только в этом случае оболочка входа пользователя в систему обходится.Для этого вызова
В случае OverTheWire Bandit 18,
.bashrc
содержитТаким образом, вы можете решить этот уровень, делая все, чтобы bash не был интерактивным.
источник
sshd
запускается оболочка входа пользователяsftp-server
. Следовательно, если оболочка входа не интерпретирует строку/usr/lib/openssh/sftp-server
как «запустить команду/usr/lib/openssh/sftp-server
», вы не можете использовать SFTP.Выполняется
.bashrc
только при запуске оболочки.Сервер SSH можно настроить так, чтобы он не запускал оболочку для протокола SFTP, указав команду
Subsystem internal-sftp
вsshd_config
файле сервера .Предположение: вполне вероятно, что именно так настроена варгейм OverTheWire Bandit, а не настройка,
.bashrc
потому что в противном случае то же ограничение дляssh
также заблокирует командуsftp
сервера.источник
/path/to/shell -c /path/to/sftp-server
там, где/path/to/shell
находится оболочка входа пользователя. Если оболочкой входа пользователя является bash, то она.bashrc
может быть выполнена в зависимости от того, как был скомпилирован bash. Это всегда выполняется, когда bash выполняетсяrshd
(да, даже для неинтерактивной оболочки, запуск bash странный), и опция времени компиляции расширяет это доsshd
.exit
В.bashrc
выполняется только если Баш является интерактивным.Subsystem sftp internal-sftp
иecho No.; exit 1
по моему.bashrc
я не получаюssh
доступ к серверу, ноsftp
все еще работает. (И тогда, конечно, потенциально возможно перезаписать или удалить.bashrc
. Разрешения, несмотря на это.)ssh
Попытка подключения терпит неудачу, интерактивная или нет. С другой стороны, если у меня есть,Subsystem sftp /usr/lib/openssh/sftp-server
то служба SFTP также не работает, когда.bashrc
искажается.sftp использует те же учетные данные, но не запускает интерактивную оболочку на удаленном компьютере.
Администратор может запретить пользователю sftp запуск ssh, например, как описано в разделе Как ограничить пользователей только SFTP вместо SSH
источник