2010-03-31 7 views
0

Написание программы на C с использованием libnet и libpcap для олицетворения клиента RSH и ввода собственной команды на серверной машине с запуском RSHD.Передача команды оболочки на RSH-демона внутри пакета «ACK»

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

Как мне собрать пакет для достижения этого?

ответ

1

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

+0

Я сделал это, но моя проблема в том, что я не хочу имитировать нормальный сеанс rsh-клиента. Я хотел бы включить эту команду в пакет ack во время рукопожатия tcp с сервером. – Hippopotamus

+0

Формат полезной нагрузки пакета, которую вы можете получить от tcpdump. ACK - это всего лишь флаг в заголовке пакета – osgx

0

Кому это может быть интересно.

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

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

немного цитат из "человека РСХД":

 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. 

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

 Смежные вопросы

  • Нет связанных вопросов^_^