将shell命令传递给“ACK”数据包中的RSH守护程序

时间:2010-03-31 22:23:24

标签: c libpcap libnet rshd

在C上编写程序,使用libnet和libpcap来模拟RSH客户端并在服务器上注入我自己的命令,运行RSHD。

据我所知,命令应该在ACK数据包的“有效载荷”中,但在格式上,RSHD会将它传递给shell。

我应该如何组装数据包来实现这个目标?

2 个答案:

答案 0 :(得分:1)

尝试从普通的rsh客户端获取网络数据包转储(使用tcpdump,tshark等)。

答案 1 :(得分:0)

可能涉及的对象。

通过rsh建立连接(syn-syn,ack-ack)后,连接进入ESTABLISH状态,所有请求都将被移动到另一个端口(因此rshd可以进一步处理更多连接)。 / p>

我的问题是如何在最后一个“ack”数据包中传递命令。 “ack”数据包本身就是一个数据包,因此命令可以在“有效载荷”字段中传输。

来自“男人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”。