Передача команды оболочки демону RSH внутри пакета "ACK" - PullRequest
0 голосов
/ 01 апреля 2010

Написание программы на C, использование libnet и libpcap для олицетворения клиента RSH и ввода моей собственной команды на сервер, работающий под управлением RSHD.

Как я понял, команда должна быть в «полезной нагрузке» пакета ACK, но в формате, который RSHD передаст ее оболочке.

Как мне собрать пакет, чтобы добиться этого?

Ответы [ 2 ]

1 голос
/ 01 апреля 2010

Попробуйте получить дамп сетевых пакетов (с помощью tcpdump, tshark и т. Д.) От обычного клиента rsh.

0 голосов
/ 02 апреля 2010

Кому это может касаться.

После установления соединения (syn-syn, ack-ack) через rsh, соединение переходит в состояние ESTABLISH, и все запросы будут перемещены на другой порт.(поэтому rshd может обрабатывать больше подключений).

Моя проблема заключалась в том, как передать команду в последнем пакете «ack».Пакет «ack» сам по себе является пакетом данных, поэтому команда может быть передана в поле «полезной нагрузки».

немного цитат из «man rshd»:

      The server reads characters from the socket up to a NUL (`\0') byte.
      The resultant string is interpreted as an ASCII number, base 10.

 3.   If the number received in step 2 is non-zero, it is interpreted as
      the port number of a secondary stream to be used for the stderr.  A
      second connection is then created to the specified port on the
      client's machine.
      ...
 5.   A null terminated user name of at most 16 characters is retrieved on
      the initial socket.  This user name is interpreted as the user iden-
      tity on the client's machine.

 6.   A null terminated user name of at most 16 characters is retrieved on
      the initial socket.  This user name is interpreted as a user iden-
      tity to use on the server's machine.

 7.   A null terminated command to be passed to a shell is retrieved on
      the initial socket.  The length of the command is limited by the
      upper bound on the size of the system's argument list.

Итак.В # 3 говорится, что первые символы до байта NUL интерпретируются как номер порта для вторичного соединения.Но мне не нужно было вторичное соединение, поэтому я поставил «0 \ 0» в начале команды.Далее # 5 и # 6 задают имена пользователей компьютера клиента и компьютера сервера, разделенные NUL.Поэтому я поставил "0 \ 0username1 \ 0username1 \ 0". И в # 7 говорится, что там может быть команда с нулевым символом в конце, поэтому моя команда в итоге была "0 \ 0username1 \ 0username2 \ 0command \ 0".

...