Как легко получить реверсивную оболочку?

Как отмечено в ответ у вас уже есть, удаленный shне выполняет exit 5. Простоexit:

$ ssh test sh -x -c 'exit 5'; echo $?
+ exit
0

То, что здесь происходит, объясняется, например, в этом ответе:

sshзапускает удаленную оболочку и передает ей строку , а не список аргументов.

Когда мы выполняемssh host sh -c 'exit 5':

  1. Локальная оболочка удаляет одинарные кавычки(удаление кавычек);
  2. Клиент sshполучает аргументы host, sh, -cи exit 5. Он объединяет их в строку и отправляет ее на удаленный хост;
  3. На удаленном хосте sshвызывает оболочку и передает ей строку sh -c exit 5;
  4. Удаленная оболочка вызывает shи передает ей параметр -c, exitв качестве командной строки и 5в качестве имени команды .

Обратите внимание, что если мы добавим слова после exit 5,они просто передаются в shв качестве дополнительных аргументов -нет ошибок, связанных с тем, что они не распознаются оболочкой:

$ ssh test sh -x -c 'exit 5' a b c; echo $?
+ exit
0

straceподтверждает, что 5не является частью командной строки, заданной для sh, здесь; это аргумент:

$ ssh test strace -e execve sh -c 'exit 5'; echo $?
execve("/usr/bin/sh", ["sh", "-c", "exit", "5"], 0x7ffc0d744c38 /* 14 vars */) = 0
+++ exited with 0 +++
0

Чтобы выполнить sh -c 'command'на удаленном хосте, как предполагалось, мы должны быть уверены, что также правильно отправили ему кавычки:

$ ssh test "sh -x -c 'exit 5'"; echo $?
+ exit 5
5

Чтобы было ясно, что цитирование всей удаленной команды не имеет отношения к нашей текущей проблеме, мы могли бы просто написать:

$ ssh test sh -x -c "'exit 5'"; echo $?
+ exit 5
5

Экранирование внутренних кавычек с помощью обратной косой черты вместо двухкратного цитирования также сработает.


Замечание по поводу командыssh host sh -c ':; exit 5'(из комментариев к вашему вопросу ). Что он делает:

$ ssh test sh -x -c ':; exit 5'; echo $?
+ :
5

То есть exit 5выполняется внешней оболочкой, а не sh. Опять же, чтобы shвыйти с нужным кодом:

$ ssh test sh -x -c "':; exit 5'"; echo $?
+ :
+ exit 5
5

0
26.10.2020, 21:09
3 ответа

Вы можете настроить переадресацию портов на маршрутизаторе в вашем музее, чтобы общедоступный порт, скажем, «2222» перенаправлял вас на «22» порт вашего медиаплеера. Затем вы можете scpзагрузить новый файл в свой медиаплеер (и подключиться к маршрутизатору музея через порт 2222 ).

Единственная проблема заключается в том, чтобы узнать IP-адрес маршрутизатора.

1
18.03.2021, 22:54

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

Это известно как «обратное туннелирование ssh», и в основном то, что вы делаете, это запускать на музейном компьютере команду ssh -R, которая вызывает настройку туннеля изнутри их брандмауэра к вашему компьютеру. Затем вы используете ssh/scp со своего компьютера на порт, установленный командой туннелирования. Да, это может сбивать с толку первые 100 или около того раз, когда вы это делаете.

Немного литературы :https://www.howtogeek.com/428413/what-is-reverse-ssh-tunneling-and-how-to-use-it/https://www.howtoforge.com/reverse-ssh-tunneling

Проблема в том, что вы либо должны:

  1. Оставлять туннель включенным все время (Это означает наличие какого-то сценария, который перезапускает его)
  2. Есть какой-то механизм запуска создания туннеля.
  3. Включите туннель на «таймере», (скажем, подключается каждый день в 20:00.

Примером номера 2 может быть создание туннеля всякий раз, когда кто-то втыкает USB-устройство в машину. Тогда вместо того, чтобы отправлять вам видео по электронной почте, сотрудники музея просто сами записывали его на USB-накопитель и вставляли его в компьютер. Затем у вас будет какой-то способ запуска сценария, который создаст туннель (бонусные баллы для случайных портов в туннеле, сообщенные вам видеомашиной, отправившей электронное письмо (дополнительные бонусные баллы за шифрование этого электронного письма )вам, что готово ).

Еще одно решение, направляющее дух Рубена Гаррета Люциуса Голдберга.

Настройте сервер входящей почты на видеомашине. Попросите сотрудников музея отправить электронное письмо по адресу «newvideo@machine.whatever.org». Пусть скрипт удалит видео из письма и -закодирует его обратно в исходный формат. Переместите предыдущее видео в файл резервной копии. Поместите новое видео на место. Отправьте электронное письмо, чтобы сотрудники музея убедились, что воспроизводится «хорошее» видео.

2
18.03.2021, 22:54

Я не вижу в вашем -случае использования ничего, что требовало бы обратного.

Если вы не можете подключиться, вы можете подключиться. Имейте машину в музее, подключитесь к своей машине. Он может запрашивать изменения и загружать, если есть изменения.

напр.

Раз в день он может sshна пульте проверить даты, и если новый файл найден, то использовать scpдля его загрузки. Вероятно, есть инструменты, которые уже могут это сделать.

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

Альтернативы включают. Подключитесь к защищенному веб-сайту -и загрузите оттуда. Есть даже способы, которые позволят вам подключиться к веб-сайту -и дождаться сообщения об изменении файла. (это устранит опрос и сократит трафик ).

0
18.03.2021, 22:54

Теги

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