☆ rexec的网络通信细节 rexec服务侦听512/TCP口,而512/UDP口对应biff服务。 rexec -a -l -p rexec建立到rexecd的TCP连接(512/TCP),发送如下请求数据: [port]\0\0\0\0 port ANSI字符串形式的端口号,不是短整型形式的端口号。用途同rsh,stderr会重 定向到回连的TCP连接上。但对port没有范围限制,可任意指定。 此外,主连接(512/TCP)的源端口没有范围限制,这与rsh、rlogin通信不同。 username 试图远程使用的服务端用户名,最长16个字符。 password 与username对应的明文口令,最长16个字符。 command 试图远程使用的服务端命令,也有长度限制,不过比较大。 rexecd向rexec发送如下响应数据: ret等于0x00表示成功,data对应执行结果,一般是\n分隔、结尾的文本。 ret等于0x01表示失败,data对应错误信息,一般也是\n分隔、结尾的文本。 rexec通信过程与rsh通信过程极其相似,甚至连那个变态的port字段都一个用途。显 然应尽量不提供port字段。rexec通信过程中口令以明文形式传递,很不安全。这个 服务好像并没有考虑暴力穷举猜测口令的事,实在是个不该开放的服务。 下面分三种操作系统简单讨论一下rexec/rexecd: 1) Linux rexec -a -l -p -a的作用就是不提供port字段,缺省没有指定-a。 in.rexecd会对客户端IP进行反向域名解析,解析不成功的话向客户端返回错误信息 并终止服务进程。没有命令行开关改变这种行为,解决方案是在/etc/hosts中为客户 端IP增加相应条目。 当username/password无法通过认证时,直接终止服务进程,没有任何提示。相比后 两种操作系统来说,这是一种安全的响应行为。 2) Solaris 在我手头的Solaris 8上没找到rexec命令。 in.rexecd不会对客户端IP进行反向域名解析。没有命令行开关改变这种行为。 username不存在时的响应信息: 1 [Login incorrect.] username存在但password不正确时的响应信息: 1 [Password incorrect.] 这是一种不安全的响应行为。 3) Aix rexec -a -n -a的作用同上。指定-n,rexec将交互式获取username/password。 rexecd会对客户端IP进行反向域名解析,解析不成功的话向客户端返回错误信息并终 止服务进程。解决方案有两种,一是在/etc/hosts中为客户端IP增加相应条目,二是 修改/etc/inetd.conf中rexecd的命令行,增加命令行开关"-c",取消反向域名解析。 username不存在时的响应信息: 1 [rexecd: 0826-604 The login is not correct.] username存在但password不正确时的响应信息: 1 [3004-300 You entered an invalid login name or password.] 这是一种不安全的响应行为。